Tom den Hollander
ScouBrou's Brouwmeester
Ik wil graag beginnen met het programmeren van PIC's.
Wat ik zou willen maken is:
- Een microcontroller gestuurd temperatuur regeling (voor vergisting)
- Die moet kunnen verwarmen en koelen (vooralsnog aan/uit sturing, omdat verwarming waarschijnlijk met een gloeilamp gaat gebeuren en koeling met een koelkast)
- Het setpoint verloopt in de loop van de tijd. Dus wil vooraf een aantal instellingen kunnen doen:
bijv. T(0s)= setpoint is 19C, T(12uur)=22C, T(24uur)= 25C
en hij moet daartussen 't setpoint interpoleren.
- Ik zou gebruik willen maken van 1 of meer LM35 sensoren.
- Ik zou graag data willen loggen zodat ik deze later met de PC kan uitlezen en een trendje kan plotten. Bij voorkeur logging bijv ieder kwartier en bij 't schakelen van de contacten.
- Ik zou graag een InCircuitProgrammer willen bouwen en de schakeling voor 't doelhierboven beschreven.
Kortom:
- Welke PIC zouden jullie aanraden? (en waarom)
- Welke PIC programmer is daarvoor geschikt. (wil ik best zelf in elkaar solderen)
- Hoe ga ik data loggen en uitlezen via de PC (de PC hangt er dus niet de hele tijd aan)
alvast bedankt voor de info, ik heb al wel over 't forum gespeurd, maar ik kom er niet uit. Dit vooral omdat ik niet weet hoe ik die data zou moeten wegschreven en dat wellicht van belang is voor de keuze van de PIC.
gr. Tom
Anonieme Gebruiker
Hier kan ook uw advertentie staan!
Hoe ik het zou aanpakken:
Gebruik de wisp648 om je pic te programmeren.
Als je de lm35 wilt gebruiken moet je een pic uitzoeken die een AD-converter heeft.
Ik zou gaan voor een temp-sensor met i2c. Scheelt een hoop gedoe.
Dan word het dus ook een pic met i2c.
Neem bijvoorbeeld een 16f877a of 16f917.
Voor de communicatie met de PC kun je rs232 gebruiken.
Bovengenoemde pics hebben ook usart dus dat moet goed komen.
De data zou ik wegschrijven in een eeprom.
Uitlezen kan met een progje dat je schrijft in bijvoorbeeld visual basic of C#.
Verwarmen/koelen doe je gewoon door relais (meervoud van relais?) aan te sturen.
Ben je helemaal nieuw met microcontrollers/elektronica?
Tom den Hollander
ScouBrou's Brouwmeester
Bedankt voor je info.
Ik ben wel nieuw met het programmeren van microcontrollers echter heb ik wel veel ervaring met 't programmeren van PLC's (Siemens S7 en S5) en zal dus hopelijk de logica snel onder de knie hebben.
Tevens ben ik vervent gebruiker van google en zou dus voldoende info moeten kunnen vinden/vragen indien ik vastloop.
Dus ik begrijp uit jouw voorstel dat de PC dan serieel/RS232 de data uit zal lezen?
Ik heb even in de datasheet gekeken de 16f877a heeft ook A/D convertors aan boord. Dus zou dan zelfs nog kunnen kiezen tussen i2c en analoge input.
- Nog een idee... een aantal 7-segment digits en/of een LCD display.
Indien ik een vergisting wil starten zal ik natuurlijk wat instellingen moeten doen. Ik zou dan bijvoorbeeld via het ingedrukt houden van een toets (S1) kunnen aangeven dat ik een parameternummer wil kiezen. Vervolgens terwijl (S1) is ingedrukt via (S2) door de parameter nummers kunnen heenlopen. Tijdens dat (S1) is ingedrukt kan men op de 7 segmentsdisplays zien in welke parameter nummer men is.. Indien men de juiste parameter bereikt heeft kan men (S1) loslaten en vervolgens met (S2) de waarde instellen. Indien (S1) dus niet is ingedrukt ziet men de parameter waarde.
hmm.. ideen groeien snel uit...
- Zo'n 16f877a kost ong €8,50
- Wisp648 kit ong € 30,-
- om te beginnen heb ik nog een 4-tal lm35's liggen
- ik heb zo'n prik/oefenbordje liggen
- heb ook een 5V voeding liggen.
Zal nog wel flink moeten zoeken naar hoe ik zo'n ding precies aan moet sluiten. CQ. hoe ik dat ding klaar krijg om hem met die WISP te kunnen laten praten.
Anonieme Gebruiker
Hier kan ook uw advertentie staan!
Als je de 877a gaat gebruiken is er heel veel info te vinden. Begin eens op VOTI, de site van Meneer van Ooijen. Daar kun je de wisp, de pic en de randapparatuur kopen. En staat veel informatie over hoe te beginnen met de pic en het aansluiten van de programmer. Verder staat op circuitsonline een handige pic tutorial om het programmeren onder de knie te krijgen.
Die 5 volt voeding, levert die een nette stabiele 5 volt? Ander kun je wellicht beter een 7805-voedinkje op je breadbord bouwen naast de pic.
Tom den Hollander
ScouBrou's Brouwmeester
Zal de VOTI site eens bewonderen.
Ja heb ook nog een paar 7805's liggen en een 9V blokje.. dus kan em ook via batterij voeden...
gewoon direct vanaf de 7805 voeden? of moet er nog een condensator tussen overheen?
gr. Tom
Een goede programmer waarmee je in-circuit kunt programmeren en ook mee kunt debuggen is bv. de PICkit2 van microchip zelf. Deze sluit je onmiddellijk aan via een USB-poort van je PC. Als je gebruik maakt van de geintegreerde programmeeromgeving MPLAB van microchip dan is het verder ook handig dat je rechtstreeks vanuit MPLAB kunt programmeren met de PICkit2, wat ik persoonlijk zeer handig vind. Verder is deze programmer ook zeker niet duur en wordt goed ondersteund door microchip.
Als je snel aan de slag wilt met microcontrollers en de gebruikelijke rompslomp van breadbord/soldeerbord voorzien van voedingsstabilisator, kristal, ledjes, LCD, enz... wilt vermijden, dan vind je op internet verschillende bordjes voor PIC's.
Op de site van olimex ( www.olimex.com ) vind je bv. enkele van die bordjes. Of het easypic5-bord, maar dat vind ik nogal duur en je moet displays en dergelijke nog apart aanschaffen. Recent ben ik ook op deze site terecht gekomen: www.dwengo.org Ze verkopen een kant-en-klaar bordje waarop reeds ledjes, knopjes, lcd-display en nog enkele zaken opstaan. Je kunt er ook een programmer kopen die PICkit2 compatibel is en slechts 20 euro kost.
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Een DS1820 temperatuursensor is ook een optie.
Voor voorbeelden met PIC's:
www.picbasic.nl/electro_ds1820.htm
(Tevens PIC programmeercursus voor beginners)
Tom den Hollander
ScouBrou's Brouwmeester
Frits, jouw linkje met die DS1820 ziet er goed uit.
Meteen met een lapje code erbij die hopelijk ook zo in de eerder aangeraden 16f877a wordt geslikt?
dus.. wie weet verkopers van praktische LCD's voor dit doeleinde??
waarschijnlijk heb ik aan 1 regel genoeg.
En zo ik 't zie heb je voor de LCD ook een driver IC nodig..
gr. Tom
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
De 16F877A is al aangeraden. Dat is een populaire maar al iets oudere chip. De 16F917 of nog beter de 16F887 zijn de wat nieuwere (goedkopere!) vervangers.
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Op 28 augustus 2009 19:01:48 schreef Tom den Hollander:
Meteen met een lapje code erbij die hopelijk ook zo in de eerder aangeraden 16f877a wordt geslikt?
Ja.
Maar als je met DS1820 sensoren werkt, heb je geen PIC met ADC nodig en kun je ook gebruik maken van de kleinere, goedkopere 16F628A PIC.
Tom den Hollander
ScouBrou's Brouwmeester
Nog wat vraagjes:
- LCD's hebben die meestal een display driver aan boord?
bijvoorbeeld de 20x4 (LCD-17 ) bij www.voti.nl. Daar staat :
" controller is KS0066 (of compatible, compatible met HD44780), "
Dus weet daaruit niet of 't erbij zit.
- De PIC16F887 heeft:
Program Memory Type Flash
Program Memory (KB) 14
RAM Bytes 368
Data EEPROM (bytes) 256
Stel nu dat ik data wil opslaan om later uit te lezen. Dan zou ik dat dus of in RAM kunnen doen of in EEPROM
Ik vermoed dat 't verschil zit in of 't bewaard blijft na spanningsuitval.
Klopt dat?
En zijn van RAM en EEPROM alle bovengenoemde bytes voor de gebruiker beschikbaar?
alvast bedankt
gr. TOm
Zowat alle alphanumerieke LCD's tegenwoordig hebben een driver aan boord. De meeste hiervan zijn HD44780 compatibel. KS0066 is nagenoeg identiek aan een HD44780 LCD driver. Geen probleem dus voor de displays die je op het oog hebt.
Over RAM en EEPROM: dit klopt inderdaad, data in het RAM-geheugen gaat verloren, data in het EEPROM geheugen blijft bewaard. Sommige PIC's laten ook toe om in hun eigen programma-geheugen te schrijven zodat je dit ook kunt gebruiken als opslag voor data (wel oppassen dat je de programma-code niet overschrijft). Maar dit is niet mogelijk bij de 16F familie vermoed ik, wel bij de 18F familie.
Tom den Hollander
ScouBrou's Brouwmeester
hmm.. als er in de eeprom maar 256 bytes kunnen dan is ie snel vol.
volgens een klein opzetje voor 't dataformat heb ik 11 bytes per logging. ofwel 32 registraties.. en dan is het vol...
Per log interval zullen de volgende gegevens worden genoteerd
byte 1 DD dag nummer
byte 2 HH uren
byte 3 mm minuten
byte 4 ss seconden
byte 5 meting 1 (*)
byte 6 meting 2 (*)
byte 7 setpoint (*) (setpoint verloopt in de tijd)
byte 8 bubblecount (wordt op interval gelogd en als de waarde 255 bereikt is)
* aantal graden Celcius x6 (dus 25,5C = 153 en max temp=42,5C (resolutie 1/16 graad)
Klopt bovenstaande?
Ik heb even gezocht naar meer opslag ik kwam de 24LC1025 tegen voor ong. 5 eu.
Die heeft 1024k (128k x 8) aan boord.. Dit kan ik lezen als 128kBytes toch? waarbij waarschijnlijk alleen per byte adresseerbaar?
met 128Kbytes kan ik 16000 records opslaan.
ff rekenen.. als ik in een periode van 20 dagen wil loggen dan kan ik iedere 2 minuten kunnen loggen. Kijk dat klinkt goed..
Heb ik 't bij t rechte eind?
Oeh.. m'n handen beginnen te jeuken..
toch nog maar ergens even een paar tientjes vandaan peuteren om e.e.a. te bestellen...
Roland van Leusden
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Als je vast insteld dat er bv iedere minuut een sample genomen wordt hoef je datum en tijd alleen bij het eerste sample op te slaan.
Zo werkte de inmiddels obsolete DS1615 van Maxim ook.
[Bericht gewijzigd door Roland van Leusden op (18%)]
Tom den Hollander
ScouBrou's Brouwmeester
hmm..
ik heb zowel interval data als willekeurige data..
dus 't gaat niet helemaal op..
wel zou ik de vaste interval metingen op bijv. minuut interval
inderdaad incrementeel laten verlopen..
even gekeken.. er wordt in 3 dagen zo'n 200000 bubbels verwacht...
Dat is gemiddeld 46 / minuut. ik zou dan afkunnen met 1x per 5 minuten loggen omdat je dat gemiddeld op 46x5=230 zit. maar dan heb ik te weinig ruimte indien er harder gebubbeld wordt.
Dus...
iedere minuut : MM BC (MM is in dit geval minuut)
iedere 5 minuten : MM BC M1 M2 SP
Is per 5 minuten dus (4x2 + 1x5)=13 bytes aan data
Dus 12x13bytes=156 bytes per uur
kom ik met 128Kbytes op 34 dagen uit.
Indien ik iedere 5 minuten ook nog DD HH mee zou geven kom ik op
per 5 minuten (4x2 + 1x7)=15 bytes
dus 12x15bytes=180bytes per uur 29 dagen...
dus 128kB geheugen zou ik mee uit de voeten moeten kunnen...
lijkt jullie dat een goede keus?
weten jullie typenrs met meer geheugen?
Eventueel kan je je data ook op een SD-kaartje zetten. Een 64MB kaartje is meer dan groot genoeg en heb je waarschijnlijk toch nog liggen, een connector vindt je op eBay voor de prijs van de 24LC1025. Iets ingewikkelder qua interfacing (via SPI normaal gezien), deze appnote zou je alvast een eind opweg moeten kunnen helpen:
http://ww1.microchip.com/downloads/en/AppNotes/01045a.pdf
Tom den Hollander
ScouBrou's Brouwmeester
Bedankt voor de tip..
maar waarschijnlijk zal ik toch eerst voor de makkelijkere i2C eeproms gaan.
En gezien 't I2C is zou ik als ik 2x zovaak wil loggen gewoon meer van die IC's erbij kunnen proppen.
Maar.. ik moeten natuurlijk ook iets in de PIC proggen dat als je via bijv. hyperterminal commando's geeft hij ook zal reageren..
commando's die ik zo kan verzinnen zijn..
GET DATA (alle data teruggeven)
ERASE DATA (alle data wissen)
STREAM DATA (alle data 'live' naar de PC sturen)
STREAM END (stop met stream)
jullie nog ideen?
hadv
Just find out what you like and let it kill you
Als je een PicKit 2 of zo gebruikt hoeft dat niet, die heeft zelf de mogelijkheid om een losse EEPROM te lezen (of wissen of schrijven).
Met EEPROMS kun je tot 1 Mbit/128 KByte gaan ivm de adressering van de chips.
Tom den Hollander
ScouBrou's Brouwmeester
hadv, bedankt voor de tip.
maar je kan er een losse eeprom mee lezen/schrijven?
Zoals ik 't zie zit de eeprom via i2c aan de PIC vast.
Hoe gaat de PICKIT2 dan de data uit de eeprom lezen?
En mogelijk weeg 't kosten aspect nog iets mee.
een pickit2 is toch 20 tientjes duurder dan de wisp648-kit
wat zijn zoals de voordelen van de pickit2 tov de wisp648?
- usb vs. serieel
- eeproms kunnen uitlezen
En mogelijk weeg 't kosten aspect nog iets mee.
een pickit2 is toch 20 tientjes duurder dan de wisp648-kit
wat zijn zoals de voordelen van de pickit2 tov de wisp648?
- usb vs. serieel
- eeproms kunnen uitlezen
Een Pickit2 compatibele programmer vind je al vanaf 20 euro. Voordeel is dat hij werkt via USB, je kan ook gemakkelijk vanuit MPLAB IDE programmeren en debuggen, hij is sneller en je hebt een optie om je PIC via USB te laten communiceren met je computer.
Dat klopt. En er zijn nog enkele voordelen:
- De wisp648 voorziet niet in zijn eigen voedingsspanning, deze betrekt hij ofwel van de te programmeren schakeling of van een externe voedingsspanning. De PICkit2 daarentegen betrekt zijn stroom rechtstreeks uit de USB-voeding. Hierdoor kan hij zonder externe voedingsspanning zowel in-circuit als stand-alone programmeren.
- De PICkit2 kan gemakkelijk van een firmware-update worden voorzien door de ingebouwde bootloader. Je hebt dus niet nog een aparte programmer nodig om de programmer zelf te kunnen bijwerken.
- Je kunt de PICkit2 ook inzetten als USB-naar-serieel omzetter. Standaard gebeurt dit wel via de meegeleverde software van microchip, en kan dus niet voor gelijk welke seriële connectie worden ingezet.
Zoals Pikachuf ook aanhaalde, hoeft de PICkit2 niet duur te zijn. Op de site van microchip zelf bijvoorbeeld kun je de PICkit2 aanschaffen voor 26.11 euro excl. BTW en verzending. De verzendingskosten zijn wel redelijk hoog, dus als je hier koopt, probeer je best meerdere aankopen te combineren (bv. met enkele PIC's, eeproms...). Als je eens rondkijkt, vind je ook PICkit2 compatibele programmers. Op www.dwengo.org ben ik bv. een compatibele programmer tegengekomen voor 20 euro incl. BTW. De site ziet er wel nog in volle opbouw uit.
Tom den Hollander
ScouBrou's Brouwmeester
Beste allemaal,
nog een vraagje..
Welke taal zal ik gaan gebruiken..?
Ik heb MPLAB gedownload en daar even kort in gekeken. En ook een stukje code (Assembler) van iemand gecopy-pasted en even in de simulater laten draaien.
Nu wil ik graag :
- Temperaturen uitlezen van i2C temperatuur sensoren (Dallas DS1820)
- LCD aansturen
- Data spugen richting een seriele PC poort en eventueel wat commando's vanaf die poort verwerken.
- Data opslaan op een EEPROM chipje 24LC1025 (misschien zelfs SD-kaartje)
Wat raden jullie aan?
Welke taal/tool:
- Picbasic?
- MPLab met ? C?
- MPLab assembler?
laat 't even weten...
MGP
LDmicro user.
' Single-chip four-channel data logger using 16F876A
‘ Code and circuit by Dan Gravatt
DEFINE ADC_BITS 10 ' Set number of bits in result
loope VAR WORD ' Loop counter variable
result VAR WORD ' ADC result variable
pointer VAR WORD ' Program memory address variable
channel VAR BYTE ' ADC channel variable
TRISA = %11111111 ' Sets PORTA to all input
ADCON1 = %10000010 ' Sets PORTA analog and right justifies result
pointer = 450 ' Sets start address for flash writes / reads beyond program code
IF porta.4 = 1 THEN datadump 'jumper select BEFORE power-on to start download
FOR loope = 0 TO 1930 ' 193 seconds acquisition at 10 samples/sec
FOR channel = 0 TO 3 ' Inner loop to read multiple ADC channels
ADCIN channel, result ' Read analog input channel
WRITECODE pointer, result ' write data to flash program memory
pointer = pointer + 1
NEXT
PULSOUT portb.1, 100 ' 1 ms "tick" output to calibrate loop time
PAUSE 94 ' Calibrate this value for 0.1 sec loop or other desired interval
NEXT
END
datadump:
FOR loope = 0 TO 1930
FOR channel = 0 TO 3 ' inner loop to group data from each time slice
READCODE pointer, result ' read data from flash memory
SEROUT portb.0, 4, [#result, ","] ' Mode 4 = 2400 N81 inverted
pointer = pointer + 1
NEXT
SEROUT portb.0, 4, [13,10] ' CR / LF between time slices
NEXT
END
[b]UIT NUTS&VOLTS JAN/2008[/b]
Ziehier de code van een datalogger die het programmageheugen van de controller gebruikt.
Met dit kleine programma kunnen er nog 7000 bytes opgeslagen worden.
De µC is een 16F876A , zie bovenaan...
Tom den Hollander
ScouBrou's Brouwmeester
Bedankt voor 't stuk code..
maar jouw antwoord schiet even mijn doel voorbij..
ik vroeg me af waarin in het beste kan gaan programmeren...
ik weet dat 't uiteindelijk een HEX wordt die de PIC in gaat..
kortom:
- welke taal en welk pakke is het handigst voor hetgeen ik wil bouwen...???
wie oh wie kan daar iets zinnigs over zeggen...
ik heb wel gezien dat men op de picbasic.nl site gebruikt maakt van het picbasic, maar dat is een betaald pakket (boven de 50 regels).
dus...
MGP
LDmicro user.
Met die code wilde ik maar aantonen dat je geen extra geheugenchip moet bijplaatsen.
Wat je best zou doen, daar kan ik niet op antwoorden omdat dit volledig afhankelijk is van uw wensen en uw kunnen.
Maar ik denk niet dat je zoveel geduld zult opbrengen om dat allemaal aan te leren, gezien de toepassing 
En aangezien je al vertrouwd bent met plc's kun je misschien eens proberen met ldmicro.
Velen zullen wel eens hun wenkbrauwen fronsen maar ik ben er nu al een paar maanden daarmee bezig en dat bevalt mij uitstekend.
Heb al enkele proefbordjes gemaakt en ben nu bezig met een vaste (test)opstelling te maken om de printjes erop te leggen en te programmeren.
Programma's voor besturingen e.d. zijn in 'no time' gemaakt.
Anderen zweren bij Basic, C++ enz.. aan u de keus...