archive-nl.com » NL » P » PICBASIC.NL

Total: 182

Choose link from "Titles, links and description words view":

Or switch to "Titles and links view".
  • PIC programmeren met PIC Basic (4)
    temperatuur wilt weergeven dan de variabele Temperatuur als WORD declareren max 6553 5 C De 11011111 223 geeft het ASCII teken weer op een HD44780 A00 display zodadelijk meer over de ASCII tabel Om een groot getal duidelijker leesbaar te maken wordt er normaal om de drie cijfers een punt geplaatst Zo is het getal honderdduizend cijfermatig 100000 maar is het beter leesbaar met een punt er tussen dus 100 000 en tienmiljoen is 10 000 000 Om dit op het display te krijgen kun je gebruikmaken van DEC3 DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF DIM Teller AS DWORD DWORD teller CLEAR Wis alle RAM geheugen DELAYMS 500 LCD stabilisering Hoofdprogramma CLS Scherm allereerste keer wissen Teller 9800 Startwaarde van Teller WHILE 1 1 Oneindige lus PRINT AT 1 1 DEC Teller Plaats actuele waarde van variabele Teller zonder punten PRINT AT 2 1 DEC3 Teller 1000000 DEC3 Teller 1000 DEC3 Teller Hz INC Teller Teller met 1 verhogen WEND Terug naar WHILE END Bovenstaand programma plaatst op displayregel 1 de tellerwaarde zónder puntjes en op displayregel 2 mét puntjes De telsnelheid is hier overigens niet hoog waaraan je kunt zien dat een DWORD variabele veel van de PIC vraagt Verander de DWORD maar eens in een WORD variabele dan zul je zien dat de teller veel sneller loopt Probeer DWORD variabelen dus zoweinig mogelijk te gebruiken en dat geldt ook voor FLOAT Moeten die leidende nullen weg dan moet je het volgende doen DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF DIM Teller AS WORD WORD teller CLEAR Wis alle RAM geheugen DELAYMS 500 LCD stabilisering Hoofdprogramma CLS Scherm allereerste keer wissen WHILE 1 1 Oneindige lus PRINT AT 1 1 DEC Teller Plaats actuele waarde van variabele Teller zonder punten IF Teller 999 THEN Als de waarde van Teller groter is dan 999 dan PRINT AT 2 1 DEC Teller 1000 DEC3 Teller waarde met punt weergeven ELSE PRINT AT 2 1 DEC Teller En anders het getal gewoon op het display weergeven ENDIF INC Teller Teller met 1 verhogen WEND Terug naar WHILE END De werking van bovenstaand voorbeeld moet voor zichzelf spreken ASCII tabel De ASCII code zorgt ervoor dat alle apparaten zoals computers printers maar ook displays volgens een enigzins gestandaardiseerde code werken waardoor als het ene apparaat een A verzendt dat er aan de andere kant ook een A tevoorschijn komt Wanneer een PC de waarde 65 naar de printer stuurt wordt er een hoofdletter A uitgeprint Zo ook bij de PIC als deze de waarde 65 naar het display stuurt komt er een hoofdletter A op het display Bij de waarde 66 een hoofdletter B bij 67 een C enz Voor de kleine letters onderkast geeft ASCII 97 een a bij 98 een b bij 99 een c enz Al deze karakters staan in de ASCII tabel In Proton is deze te vinden door te klikken op View Plugin ASCII Table PRINT 72 65 76 76 79 geeft dus hetzelfde resultaat als PRINT HALLO en PRINT 65 66 67 68 69 geeft ABCDE op het display Er zijn dus 256 mogelijkheden maar er bestaan veel meer karakters dan 256 Hoewel de ASCII codes onder de 128 behoorlijk standaard zijn is er niet echt een standaard voor de karakters met ASCII code 128 t m 255 Zo is het Euro teken vrij nieuw en bestaat dus vrijwel op nog geen enkel display Als een fabrikant besluit om het Euro teken in te voeren moet een ander karakter er voor wijken Stel dat het Euro teken ASCII code 223 krijgt dan geeft PRINT 223 op dat nieuwe display het Euro teken maar op een ander ouder display een teken als je een HD44780 A00 hebt tenminste bij een A02 krijg je het ß karakter Soms zie je dit ook in kranten Op de nieuwsredactie wordt op de PC het Euro teken in de tekst gezet maar de machine van de drukkerij zet voor die code een heel ander vreemd teken in de plaats Op het HD44780 A00 display is ASCII 255 FF een blokje alle matrixpuntjes dots zijn dan geactiveerd maar op het Europese HD44780 02 is het een ij Tabel 44780 A00 display Een gedeelte wissen van het display Met de instructie CLS CL ear S creen wis scherm wordt alle tekst op het display gewist Maar wat nu als alleen maar 1 regel of een gedeelte van een regel van het display gewist moet worden Je zou natuurlijk allemaal spaties op dat gedeelte kunnen zetten Dus stel dat alleen van regel 2 de posities 5 t m 10 gewist moet worden dan zou je kunnen schrijven PRINT AT 2 5 met 6 spaties Een nettere mogelijkheid is PRINT met de optie REP c n REP staat voor rep eat herhalen c staat voor c haracter karakter dan een backslash en n staat voor n umber aantal kortom REP c n herhaal opgegeven karakter een aantal maal Na REP geef je tussen aanhalingstekens een spatie dan de backslash en dan het getal voor het aantal spaties dat je wilt hebben Om het bovenste voorbeeld te nemen van de 6 spaties zou je moeten schrijven PRINT AT 2 5 REP 6 hierdoor worden er 6 spaties afgebeeld Maar je kunt elk karakter tussen aanhalingstekens zetten Stel je wilt op regel 2 van begin tot eind een streepjeslijn op het display dan schrijf je PRINT AT 2 1 REP 16 hierdoor wordt er 16 maal een streepje afgebeeld zie onderstaand voorbeeld DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF DELAYMS 500 LCD stabilisering Hoofdprogramma CLS Scherm wissen PRINT AT 2 1 REP 16 Teken een lijn van 16 streepjes END Als je in dit voorbeeld in plaats van het streepje bijvoorbeeld letter A tussen de aanhalingstekens zet dan krijg je 16 maal een A op het display Een tijdsbalk Hiermee kunnen we ook makkelijk een tijdsbalk maken op het display door een blokje als karakter te kiezen Dit werkt alleen met het HD44780 A00 type bij de A02 krijg je in plaats van een blokje een ij Maar dat blokje staat niet op het toetsenbord van de PC of laptop dus die kun je niet tussen de aanhalingstekens typen Het blokje heeft volgens de ASCII tabel de waarde 255 Je kunt namelijk ook rechtstreeks het ASCII nummer in de PRINT REP instructie invullen de aanhalingstekens moet je dan weglaten Voor zeven blokjes op regel 2 van het display schrijf je dan PRINT AT 2 1 REP 255 7 Dus voor de duidelijkheid REP A 7 is hetzelfde als REP 65 7 want 65 is het ASCII nummer van de hoofdletter A en geeft 7 maal een A op het display DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF DELAYMS 500 LCD stabilisering Hoofdprogramma CLS Scherm wissen PRINT AT 2 1 REP 255 8 Teken een lijn van 8 blokjes END De 2 getallen in de REP instructie mogen ook constanten variabelen of berekeningen zijn Dus om een tijdsbalk te maken kun je in plaats van een vast getal voor het aantal blokjes in te vullen het aantal blokjes laten afhangen van een variabele DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF SYMBOL Lengte 16 Dit getal bepaalt de lengte van de lijn display breedte DIM Teller AS BYTE Deze Teller kan tot max 255 tellen BYTE 255 CLEAR Wis alle RAM geheugen DELAYMS 500 LCD stabilisering Hoofdprogramma CLS Scherm wissen PRINT AT 2 1 REP Lengte Teken een lijn van underscore lage streepjes REPEAT DELAYMS 500 INC Teller PRINT AT 2 1 REP 255 Teller Aantal blokjes afhankelijk van Teller UNTIL Teller Lengte Blokjes tekenen totdat het aantal gelijk is aan Lengte PRINT AT 1 1 Klaar Zet op de eerste regel Klaar als alle blokjes er staan END De eerste PRINT REP tekent een lijn met underscore streepjes zodat de gebruiker kan zien hoeveel blokjes er komen te staan dat maakt het wachten voor de gebruiker aangenamer De lijnlengte wordt bepaalt door de constante die we de naam Lengte hebben gegeven Een constante is een naam dat een getal voorstelt en houdt het hele programma dezelfde waarde constant hetzelfde dus bovendien neemt het geen extra geheugenruimte in van de PIC In bovenstaande voorbeeld heeft de naam Lengte constant de waarde 16 dit hebben we gedaan met SYMBOL 16 zie cursus deel 1 Iemand die een display heeft met 24 karakters per regel in plaats van 16 hoeft dan alleen maar dat getal aan te passen anders zou hij het hele programma door moeten spitten om te kijken waar overal nog meer aangepast moet worden met alle kans op vergissingen De tweede PRINT REP in bovenstaand programma tekent blokjes ASCII 255 het aantal blokjes is afhankelijk van de waarde van Teller Teller op zijn beurt is weer afhankelijk van Lengte dus de lengte van het streepje die we eerder getekend hebben Als je de waarde van Lengte achter SYMBOL aanpast in bijvoorbeeld 8 dan telt Teller ook maar tot 8 Dan wordt er eerst een lijn van maar 8 streepjes getekend en daarna komen er ook maar 8 blokjes test dat maar eens uit De blokjes komen voor de streepjes in de plaats Ook het getal vóór de backslash mag een constante of variabele zijn waardoor er steeds een ander karakter kan komen te staan afhankelijk van de variabele Het lijkt ingewikkeld maar als je van bovenaf het programmaverloop volgt valt het wel mee Als het moeilijk te volgen is dan selecteer je het voorbeeldprogramma en print je de selectie uit op papier Een kwestie van een paar keer doorlezen en vooral experimenteren door getallen te wijzigen en dan kijken wat er gebeurt en wat het display gaat doen Je bent op de goede weg als je dingen in het programma wijzigt en dan al vooraf kunt voorspellen wat of er zou moeten gaan gebeuren en gebeurt dat niet dan onderzoeken waaróm niet Berekeningen mogen ook in REP als de berekening maar niet te ingewikkeld is Moet het wél een ingewikkelde berekening zijn dan eerst de uitkomst van die berekening in een variabele stoppen en dan die variabele op zijn beurt in de REP instructie zetten Maar simpele berekeningen mogen dus rechtstreeks zoals in onderstaand voorbeeld DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF SYMBOL Lengte 8 Dit getal bepaalt de lengte van de lijn display breedte DIM Teller AS BYTE Deze Teller kan tot max 255 tellen BYTE 255 CLEAR Wis alle RAM geheugen DELAYMS 500 LCD stabilisering Hoofdprogramma CLS Scherm wissen PRINT Met 2 tegelijk Plaats tekst PRINT AT 2 1 REP Lengte 2 Teken een lijn van underscore lage streepjes REPEAT DELAYMS 700 INC Teller PRINT AT 2 1 REP 255 Teller 2 Aantal blokjes afhankelijk van Teller UNTIL Teller Lengte Blokjes tekenen totdat het aantal gelijk is aan Lengte PRINT AT 1 1 REP 14 Wis oude tekst van regel 1 uit PRINT AT 1 1 Klaar Zet op de eerste regel Klaar als alle blokjes er staan END In dit voorbeeld heeft de constante Lengte de waarde 8 maar er worden toch 16 streepjes op het display getekend omdat bij de PRINT opdracht Lengte x 2 staat Ook loopt de balk niet met 1 maar met 2 blokjes tegelijk op door de berekening Teller 2 vermenigvuldigen met 2 dus Regel 1 met de tekst Met 2 tegelijk wordt eerst uitgewist door er 14 spaties neer te zetten met REP 14 voordat Klaar er wordt neergezet Als dat niet wordt gedaan dan komt er Klaar tegelijk op het display te staan Met 2 tegelijk wordt door het korte woordje Klaar namelijk niet helemaal overschreven waardoor tegelijk blijft staan daarom eerst wissen Een andere mogelijkheid zou Klaar met 8 spaties erachter zijn waardoor het woordje tegelijk wordt uitgewist door de spaties In dat geval kan de wisregel vervallen Zo zijn er nog eindeloos veel mogelijkheden met de REP optie van PRINT Nog één voorbeeld met REP dan DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF SYMBOL Lengte 16 Dit getal bepaalt de lengte van de lijn display breedte SYMBOL Minuut 60 Een minuut heeft 60 seconden DIM Teller AS BYTE Deze Teller kan tot max 255 tellen BYTE 255 CLEAR Wis alle RAM geheugen DELAYMS 500 LCD stabilisering Hoofdprogramma CLS Scherm wissen PRINT AT 2 1 REP Lengte Teken een lijn van underscore lage streepjes REPEAT INC Teller PRINT AT 1 1 DEC Teller Zet actuele stand van Teller op de eerste regel PRINT AT 2 1 REP 255 Teller Lengte Minuut Aantal blokjes afhankelijk van Teller DELAYMS 1000 1 seconde UNTIL Teller Minuut Blokjes tekenen totdat de minuut voorbij is END Bovenstaand voorbeeld laat op regel 1 een teller zien die in 1 minuut van 1 t m 60 telt Op regel 2 wordt eerst een dunne lijn getekend zodat een gebruiker kan schatten hoe lang die tijd gaat duren Wannéér er een blokje bij moet komen wordt berekent door het aantal verlopen seconden in de variabele Teller te vermenigvuldigen met de constante Lengte en de uitkomst daarvan weer te delen door de constante Minuut Dit zorgt ervoor dat als de teller bij 60 is aangekomen de tijdsbalk ook precies vol met blokjes staat Hierdoor komen er sneller nieuwe blokjes bij een display met meer karakters dan één met maar 16 karakters er moeten bij een groter display in die minuut immers meer blokjes geplaatst worden De waarde van de constante Lengte moet dan wel gelijk zijn met het maximaal mogelijke aantal karakters dat op één regel past van het gebruikte display anders klopt de berekening natuurlijk niet tenzij je expres een korter balkje wilt hebben Met de blokjes kun je niet alleen een tijdsbalk maar bijvoorbeeld ook een VU meter van het display maken Hier wordt overigens weer duidelijk dat het toch echt wel belangrijk is om voor de duidelijkheid SYMBOL zo veel mogelijk te gebruiken in plaats van getallen rechtstreeks achter de instructies te zetten Het teken op het display zetten Hoe krijg je nu een aanhalingsteken op het display Een aanhalingsteken kun je namelijk niet tussen aanhalingstekens zetten omdat de compiler denkt dat jouw aanhalingsteken de aanhalingsteken sluiten is Er is maar één manier voor en dat is rechtstreeks het ASCII nummer in te toetsen Voor de aanhalingsteken is dat ASCII 34 DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF DELAYMS 500 LCD stabilisering CLS Wis scherm en zet cursor links bovenaan PRINT Het 34 LC 34 display Plaats LC tussen aanhalingstekens op het display END Einde programma Bovenstaand programma zet Het LC display op het display het ASCII 34 plaatst een aanhalingsteken op het display Zelf ontworpen karakters op het display zetten De eerste 64 geheugenadressen geheugenplaatsen op de adressen 64 t m 127 van het HD44780 display zijn vrij om 8 eigen ontworpen karakters in op te slaan van 8 bytes per karakter dus 8x8 64 adressen Je kunt bijvoorbeeld een Smiley ontwerpen en dat op het display laten zien Dit gedeelte is wat moeilijker wil je dat nog niet dan kun je het overslaan Klik op de knop als je er wel mee bezig wilt Het display op andere poorten aansluiten Als je niets definieert dus helemaal niets aan de PIC Basic compiler vertelt over wat voor soort display hoeveel regels en karakters welke poorten enz dan gaat de PIC Basic compiler van de volgende instellingen uit default setting standaard instelling wordt dat genoemd HD44780 of compatible alfanumeriek display Data aansturing met 4 datalijnen De en able EN pin aan PORTB 2 De r egister s elect RS pin aan PORTB 3 De datalijnen D4 t m D7 aan PORTB 4 t m PORTB 7 Twee display regels 2 x16 Als je display voldoet en het aansluit volgens bovenstaande opsomming dan hoef je verder niets te doen de PIC Basic compiler regelt dan alles voor je Maar soms komt het bijvoorbeeld bij het ontwerpen van de printplaat beter uit als bijvoorbeeld de EN en RS lijnen van het display aan dezelfde kant van de PIC komen te zitten als waar ook de 4 datalijnen zitten Het is dus mogelijk om één of meer standaard instellingen te wijzigen Er is nog veel meer mogelijk met het display zoals scrollen van de tekst de cursor zichtbaar maken en eventueel laten knipperen en negatieve getallen Later als we verder zijn komt er misschien een tweede cursusdeel specifiek over het display Maar ook in de komende cursusdelen wordt het display veel gebruikt omdat zo makkelijk is te zien wat de waarden van variabelen en dergelijke zijn Tot slot nog 3 voorbeeld programma s met het display Teksten en variabelen afbeelden afhankelijk van gebeurtenissen Sluit eerst 2 druktoetsen puls en een rode LED en een groene LED met serieweerstanden aan op de PIC volgens het schema De 2 schakelaars moeten pulsschakelaars zijn Voorbeeld 1 We gaan een programma maken dat de reactiesnelheid van een persoon meet en de uitkomst op het display zet TIP Door het programmavoorbeeld te selecteren linker muisknop ingedrukt houden en dan van onderaf slepen naar boven en met CTRL C te kopiëren naar het klembord kun je het in de PIC Basic editor met CTRL A en dan CTRL V weer plakken dat scheelt een hoop typewerk en voorkomt vergissingen DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF ALL DIGITAL TRUE Alle ingangen digitaal voor de toetsen Logische constanten SYMBOL AAN 0 Geinverteerd AAN SYMBOL OFF 0 UIT SYMBOL ON 1 AAN SYMBOL UIT 1 Geinverteerd UIT Algemene constanten SYMBOL MaxTijd 2000 Maximaal 2 seconden

    Original URL path: http://www.picbasic.nl/beginners4.htm (2016-02-17)
    Open archived version from archive


  • Universele RC5/RC6 zender/ontvanger (transceiver)
    gedrukt Als deze toets langer word ingedrukt verandert de teller van richting Wordt deze INSTEL toets nog langer vastgehouden dan loopt de teller automatisch en steeds sneller Door PORTA 5 laag te maken S1 ingedrukt houden wordt op bovenstaande manier niet de command code maar het RC5 of RC6 systeem adres ingesteld dit systeem adres wordt opgeslagen in EEPROM De aldus ingestelde RC5 of RC6 code wordt verzonden als op ZEND S3 wordt gedrukt Als de INSTEL en ZEND toets allebei ingedrukt worden start het programma opnieuw en is opnieuw de keus tussen RC5 en RC6 te maken Onderdelenlijst print 110820 De componenten PCB Print 110820 of zelf etsen natuurlijk LCD HD44780 of compatibel 2x16 karakters IC1 PIC16F628 A VR1 78L05 spanningsregelaar IR ontvanger TSOP1736 LED1 LED2 LED3 Groene rode en gele LED Ø3mm LED4 LED5 Infrarood IR LED Ø5mm bv LD274 T1 BC547 NPN transistor D1 1N4007 diode X1 Kristal 10MHz zo mogelijk het lage type R1 R3 1k R4 33k R5 4k7 R6 27Ω R7 470Ω R8 0 0Ω of gewoon een draad of een weerstand voor LCD achtergrondverlichting P1 Instelpotmeter 10k 47k 6mm liggend C1 100 F C2 1 F tantaal C3 C4 22pF C5 100n SMD of axiaal komt onder IC1 aan de soldeerzijde S1 S2 S3 Maakcontact pulsschakelaar Conn1 Voedingsconnector 3 5mm IC voet Eigen keus Bouwtips Als een LC Display voorhanden is hoeft dit project niet veel te kosten Lees als je dit project gaat bouwen ook de andere twee projecten even door voor de duidelijkheid Display RC5 RC6 codes op een LCD Wat is RC5 Gebruik voor aansluiting van het LCD soepel draad omdat het LCD weggeklapt moet worden als de PIC voor updates herprogrammeerd moet worden ICSP Draden met een harde kern breken na een paar keer buigen af Dit prototype heeft

    Original URL path: http://www.picbasic.nl/rc5-rc6_transceiver.htm (2016-02-17)
    Open archived version from archive

  • Gemoderniseerde Ericsson telefoontoestel met DTMF tonen
    rommelmarkten PTT Ericsson model 51 wandmodel 8 8 Verbindt de punten 1 en 2 met elkaar het rode draadje en verbindt hieraan ook de korte rode draad van het 141101 printje Als de punten 9 en 10 nog niet met elkaar zijn verbonden door een metalen stripje zoals op de foto dan met het gele draadje deze verbinding alsnog maken en verbindt hieraan ook de blauwe draad van het 141101 printje Verbindt de groene draad van het printje met punt 13 van het Ericsson toestel De twee a en b telefoonlijndraden op de foto s niet aanwezig die naar het modem lopen komen aan punt 10 blauw en punt 11 rood Ga met de muis op de foto staan voor een extra foto De kiesschijf draaischijf geheel loskoppelen van de telefoon dus alle draden losschroeven Plaats de blauwe en groene draden van de kiesschijf nu onder punt 3 van de telefoon Sommige kiesschijven hebben maar drie draden groen ontbreekt dan dan alleen de blauwe draad onder punt 3 van de telefoon aansluiten Verbindt de lange rode en gele draden van het 141101 printje aan de rode en gele draden van de kiesschijf Op de foto zijn de draden los aan elkaar gedraaid beter is het om een kroonsteentje o i d te gebruiken De Ericsson toestellen kunnen een ouderwets nostalgisch krakende microfoon hebben wat wordt veroorzaakt door de koolstof korrels in deze oude hoornmicrofoons Ook kan er bij het maken en verbreken van de verbinding een luid tok geluid uit de hoorn komen In de latere T65 toestellen heeft de P T T dit opgelost door het plaatsen van één of twee diodes De herhaaltoets Herhaaltoets Met de herhaaltoets is het laatst gedraaide nummer opnieuw te bellen zonder dat er aan de kiesschijf gedraaid hoeft te worden Dit is makkelijk

    Original URL path: http://www.picbasic.nl/ericsson-telefoon.htm (2016-02-17)
    Open archived version from archive

  • PIC Basic met DS1820 temperatuursensor
    1 1 DEC Temp 100 DEC1 Temp 10 Graad C WEND Variabelenaam Temperatuur is vanaf hier gewijzigd in kortweg Temp omdat sommige programmaregels anders erg lang zouden worden Denk er aan dat Temp vanaf hier geen BYTE variabele maar een WORD variabele is De namen Remain Slope Convert RdScratchpad en SkipROM zijn in het engels weergegeven omdat deze namen ook in de datasheet van de DS1820 worden gebruikt Meer info hierover staat in de datasheet en verderop in dit artikel Variabele BD1 is een dummy waarden die hierin staan of worden gezet worden verder niet gebruikt Als de temperatuur ook onder 0 C kan komen vriezen dan moet het PIC Basic programma wat worden uitgebreid Het volgende PIC Basic programma geeft de temperatuur weer met een precisie van 0 1 C en geeft de temperatuur ook juist weer als de temperatuur lager dan 0 C is Voorbeeld 4 DEVICE 16F628A We gebruiken een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF ALL DIGITAL TRUE Alle ingangen digitaal Normale constanten SYMBOL Convert 44 DS1820 commando de DS1820 moet de temperatuur gaan meten SYMBOL Graad 223 223 is de ASCII code voor het graad karakter SYMBOL RdScratchPad BE DS1820 commando temperatuur van de DS1820 uitlezen SYMBOL SkipROM CC DS1820 commando geen gebruik maken van het unieke adres Logische constanten SYMBOL FALSE 0 SYMBOL TRUE 1 Poortnamen SYMBOL DS1820 PORTA 0 Sluit de DS1820 temperatuur sensor aan op deze poort Variabelen declareren WORD DIM Temp AS WORD Bevat de temperatuur Celsius BYTE DIM Remain AS BYTE De remain waarde voor berekening temperatuur achter de komma DIM Slope AS BYTE Bevat de counts per graad Celsius waarde DIM TempDeci AS BYTE Bevat de temperatuur waarde achter de komma DIM BD1 AS BYTE Byte Dummy 1 BIT DIM NegTemp AS BIT TRUE als temperatuur Celsius onder 0 oC komt CLEAR Wis RAM geheugen DELAYMS 500 LCD stabilisatie Hoofdprogramma CLS Wis LCD scherm WHILE 1 1 OWRITE DS1820 1 SkipROM Convert Zend Calculate Temperature opdracht OWRITE DS1820 1 SkipROM RdScratchPad Zend Read ScratchPad opdracht OREAD DS1820 2 Temp LOWBYTE Temp HIGHBYTE BD1 BD1 BD1 BD1 Remain Slope CRC NegTemp Temp 8 Als bit 8 het 9e bit geset is dan is temperatuur negatief TempDeci Slope Remain 100 Slope Temp Temp 5 IF NegTemp TRUE THEN Als de temperatuur negatief is dan Temp 65530 Temp De gemeten waarde Inverteren TempDeci 100 TempDeci Ook de waarde achter de komma inverteren IF TempDeci 51 THEN TempDeci TempDeci 100 ENDIF Temp Temp 550 10 100 TempDeci 5500 PRINT AT 1 1 REP NegTemp DEC Temp 100 DEC1 Temp 10 Graad C WEND Als de temperatuur onder 0 C komt moet de waarde geïnverteerd worden immers hoe lager de temperatuur onder 0 C des te groter de waarde achter het minus streepje moet zijn 10 C is kouder dan 5 C Met behulp van de REP optie van de PRINT instructie wordt er een voor de waarde geplaatst als de temperatuur onder 0 C komt Het volgende voorbeeld is nog wat nauwkeuriger De temperatuur wordt weergegeven met maarliefst twee cijfers na de komma Ook geschikt voor temperaturen onder het vriespunt Voorbeeld 5 DEVICE 16F628A We gebruiken een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF ALL DIGITAL TRUE Alle ingangen digitaal Normale constanten SYMBOL Convert 44 DS1820 commando de DS1820 moet de temperatuur gaan meten SYMBOL Graad 223 223 is de ASCII code voor het graad karakter SYMBOL RdScratchPad BE DS1820 commando temperatuur van de DS1820 uitlezen SYMBOL SkipROM CC DS1820 commando geen gebruik maken van het unieke adres Logische constanten SYMBOL FALSE 0 SYMBOL TRUE 1 Poortnamen SYMBOL DS1820 PORTA 0 Sluit de DS1820 temperatuur sensor aan op deze poort Variabelen declareren WORD DIM Temp AS WORD Bevat de temperatuur Celsius BYTE DIM Remain AS BYTE De remain waarde voor berekening temperatuur achter de komma DIM Slope AS BYTE Bevat de counts per graad Celsius waarde DIM TempDeci AS BYTE Bevat de temperatuur waarde achter de komma DIM BD1 AS BYTE Byte Dummy 1 BIT DIM NegTemp AS BIT TRUE als temperatuur Celsius onder 0 oC komt CLEAR Wis RAM geheugen DELAYMS 500 LCD stabilisatie Hoofdprogramma CLS Wis LCD scherm PRINT Temp Plaats eerst deze tekst op het display WHILE 1 1 OWRITE DS1820 1 SkipROM Convert Zend Calculate Temperature opdracht OWRITE DS1820 1 SkipROM RdScratchPad Zend Read ScratchPad opdracht OREAD DS1820 2 Temp LOWBYTE Temp HIGHBYTE BD1 BD1 BD1 BD1 Remain Slope CRC NegTemp Temp 8 Als bit 8 het 9e bit geset is dan is temperatuur negatief TempDeci Slope Remain 100 Slope Temp Temp 5 IF NegTemp TRUE THEN Als de temperatuur negatief is dan Temp 65530 Temp De gemeten waarde Inverteren TempDeci 100 TempDeci Ook de waarde achter de komma inverteren IF TempDeci 51 THEN TempDeci TempDeci 100 ENDIF Temp Temp 550 10 100 TempDeci 5500 PRINT AT 1 7 REP NegTemp DEC Temp 100 DEC2 Temp Graad C WEND De resolutie is hier 0 0625 C weergegeven in de volgende stappen 0 00 0 06 0 12 0 18 0 25 0 31 0 37 0 43 0 50 0 56 0 62 0 68 0 75 0 81 0 87 en 0 93 Een kleine temperatuurstijging van bijvoorbeeld 20 00 C verspringt dus niet naar 20 01 C maar naar 20 06 C Hoewel het in Nederland praktisch niet wordt gebruikt hier nog een voorbeeld in Fahrenheit in plaats van Celsius Voorbeeld 6 DEVICE 16F628A We gebruiken een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF ALL DIGITAL TRUE Alle ingangen digitaal Normale constanten SYMBOL Convert 44 DS1820 commando de DS1820 moet de temperatuur gaan meten SYMBOL Graad 223 223 is de ASCII code voor het graad karakter SYMBOL RdScratchPad BE DS1820 commando temperatuur van de DS1820 uitlezen SYMBOL SkipROM CC DS1820 commando geen gebruik maken van het unieke adres Poortnamen SYMBOL DS1820 PORTA 0 Sluit de DS1820 temperatuur sensor aan op deze poort Variabelen declareren WORD DIM Temp AS WORD Bevat de temperatuur Celsius DIM TempF AS WORD Bevat de temperatuur Fahrenheit BYTE DIM Remain AS BYTE De remain waarde voor berekening temperatuur achter de komma DIM Slope AS BYTE Bevat de counts per graad Celsius waarde DIM BD1 AS BYTE Byte Dummy 1 CLEAR Wis RAM geheugen DELAYMS 500 LCD stabilisatie Hoofdprogramma CLS Wis LCD scherm WHILE 1 1 OWRITE DS1820 1 SkipROM Convert Zend Convert opdracht temperatuur meten OWRITE DS1820 1 SkipROM RdScratchPad Zend Read ScratchPad opdracht OREAD DS1820 2 Temp LOWBYTE Temp HIGHBYTE BD1 BD1 BD1 BD1 Remain Slope CRC Temp Temp 1 100 25 Slope Remain 100 Slope PRINT AT 1 1 DEC Temp 100 DEC2 Temp Graad C Celsius TempF 18 Temp 10 3200 Bereken Celsius naar Fahrenheit PRINT AT 2 1 DEC TempF 100 DEC2 TempF Graad F Fahrenheit WEND Celsius wordt geplaatst op displayregel 1 en de temperatuur Fahrenheit op displayregel 2 De hier getoonde Fahrenheit berekening is niet geschikt voor negatieve temperaturen En vooruit ook nog een voorbeeld in de thermodynamische temperatuur kelvin Voorbeeld 7 DEVICE 16F628A We gebruiken een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF ALL DIGITAL TRUE Alle ingangen digitaal Normale constanten SYMBOL Convert 44 DS1820 commando de DS1820 moet de temperatuur gaan meten SYMBOL Graad 223 223 is de ASCII code voor het graad karakter SYMBOL RdScratchPad BE DS1820 commando temperatuur van de DS1820 uitlezen SYMBOL SkipROM CC DS1820 commando geen gebruik maken van het unieke adres Poortnamen SYMBOL DS1820 PORTA 0 Sluit de DS1820 temperatuur sensor aan op deze poort Variabelen declareren WORD DIM Temp AS WORD Bevat de temperatuur Celsius DIM TempK AS WORD Bevat de temperatuur kelvin BYTE DIM Remain AS BYTE De remain waarde voor berekening temperatuur achter de komma DIM Slope AS BYTE Bevat de counts per graad Celsius waarde DIM BD1 AS BYTE Byte Dummy 1 CLEAR Wis RAM geheugen DELAYMS 500 LCD stabilisatie Hoofdprogramma CLS Wis LCD scherm WHILE 1 1 OWRITE DS1820 1 SkipROM Convert Zend Convert opdracht temperatuur meten OWRITE DS1820 1 SkipROM RdScratchPad Zend Read ScratchPad opdracht OREAD DS1820 2 Temp LOWBYTE Temp HIGHBYTE BD1 BD1 BD1 BD1 Remain Slope CRC Temp Temp 1 100 25 Slope Remain 100 Slope PRINT AT 1 1 DEC Temp 100 DEC2 Temp Graad C Celsius TempK Temp 27315 Bereken Celsius naar kelvin PRINT AT 2 1 DEC TempK 100 DEC2 TempK K kelvin WEND De berekening voor kelvin is Celsius 273 15 Thermostaat Nu we dit kunnen is het ook simpel om een thermostaat te maken die bijvoorbeeld een relais inschakelt bij een bepaalde temperatuur Het volgende voorbeeld kan alleen gebruikt worden als de temperatuur niet onder 0 C komt De resolutie is 0 5 C Sluit een 25k potmeter met in serie een 100n condensator op PORTA 0 zie schemaatje Hiermee kun je straks de thermostaat instellen Op PORTA 2 kun je een LED met 1k serieweerstand aansluiten waaraan je kunt zien of de thermostaat in of uitschakelt Voorbeeld 8 DEVICE 16F628A We gebruiken een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF ALL DIGITAL TRUE Alle ingangen digitaal Logische constanten SYMBOL HOOG 1 SYMBOL LAAG 0 Normale constanten SYMBOL Convert 44 DS1820 commando de DS1820 moet de temperatuur gaan meten SYMBOL Graad 223 223 is de ASCII code voor het graad karakter SYMBOL RdScratchPad BE DS1820 commando temperatuur van de DS1820 uitlezen SYMBOL SkipROM CC DS1820 commando geen gebruik maken van het unieke adres Poortnamen SYMBOL DS1820 PORTA 0 Sluit de DS1820 temperatuur sensor aan op deze poort SYMBOL Potmeter PORTA 1 Sluit een 25k potmeter met in serie een 100n condensator SYMBOL Uitgang PORTA 2 Sluit een LED met 1k serie weerstand aan op deze poort Variabele declareren BYTE DIM Temperatuur AS BYTE Bevat de factor 2 van de temperatuur Celsius DIM Thermostaat AS BYTE Bevat de ingestelde thermostaat temperatuur potmeter 76543210 PORTA 00000000 Alle PORTA uitgangen laag bij opstart TRISA 11111011 Alles ingang behalve PORTA 2 voor de LED CLEAR Wis RAM geheugen DELAYMS 500 LCD stabilisatie Hoofdprogramma CLS Wis LCD scherm PRINT AT 1 1 Temp Plaats tekst op regel 1 PRINT AT 2 1 Inst Plaats tekst op regel 2 WHILE 1 1 Thermostaat POT Potmeter 40 Lees voor de functie POT cursus deel 5 door IF Thermostaat 60 THEN Thermostaat 60 Maximaal tot 30 graden instelbaar 60 2 OWRITE DS1820 1 SkipROM Convert Zend Convert opdracht temperatuur meten OWRITE DS1820 1 SkipROM RdScratchPad Zend Read ScratchPad opdracht OREAD DS1820 2 Temperatuur Lees temperatuur en plaats dit in variabele PRINT AT 1 7 Temperatuur 2 DEC1 Temperatuur 2 5 Graad C PRINT AT 2 7 Thermostaat 2 DEC1 Thermostaat 2 5 Graad C IF Temperatuur Thermostaat THEN Uitgang HOOG Uitgang HOOG als temp te laag is IF Temperatuur Thermostaat THEN Uitgang LAAG Uitgang LAAG als temp te hoog is DELAYMS 300 Rustig anders is het display zo nerveus WEND De uitgang wordt HOOG als de temperatuur gemeten door de DS1820 lager is dan de potmeter instelling De hysteresis is hier 1 C dat betekent dat de thermostaat aan gaat uitgang PORTA 2 wordt hoog als de DS1820 temperatuur 0 5 C onder de instelling is en pas uitgaat als de temperatuur 0 5 C boven de instelling is Ook de thermostaat is in te stellen met een resolutie van 0 5 C De thermostaat is hier tot maximaal 30 0 C instelbaar dit wordt gedaan door de regel direct na de meting met POT Parameter Schaal van de functie POT is hier ingesteld op 40 omdat de potmeter nu niet in moet stellen tussen 0 en 255 maar tussen 0 en 60 Wellicht moet de waarde voor Schaal nog iets hoger of lager gezet worden om het hele bereik van de 25k potmeter in het gebied van 0 C 30 C te verkrijgen Belangrijk is dat de 5V voeding goed afgevlakt en gestabiliseerd is anders kan de thermostaat steeds verspringen Dit is overigens maar een simpel voorbeeld de functie POT is niet echt geschikt voor een professionele thermostaat daarvoor moet een PIC type met ingebouwde ADC worden genomen Voor de instelling en gebruik van PIC Basic instructie POT even cursus deel 5 doornemen Diverse OneWire componenten op één PIC poort Het is mogelijk om meerdere DS1820 sensoren op één PIC poort aan te sluiten Hiervoor heeft elke DS1820 een uniek adres vanuit de fabriek meegekregen die door het PIC Basic programma is uit te lezen Als er maar één OneWire component op een PIC poort is aangesloten is het gebruik van dit adres niet nodig De voorbeelden die tot nu toe zijn getoond maken dan ook geen gebruik van dit adres ze slaan het over door het ROM gedeelte van de DS1820 over te slaan door SkipROM CC Wil je nu meerdere DS1820 sensoren op dezelfde draad aansluiten dan moet eerst bepaald worden wat de adressen zijn van de toekomstig aan te sluiten DS1820 sensoren Hiervoor moet eerst elke DS1820 afzonderlijk op de PIC aangesloten worden waarmee met onderstaand programma het adres van de aangesloten DS1820 is uit te lezen Voorbeeld 9 Uitlezen van het unieke OneWire adres DEVICE 16F628A We gebruiken een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF ALL DIGITAL TRUE Alle ingangen digitaal Normale constanten SYMBOL ReadROM 33 Vaste constante waarde zie datasheet DS1820 Poortnamen SYMBOL DS1820 PORTA 0 Sluit de DS1820 temperatuur sensor aan op deze poort Variabelen declareren BYTE DIM CRC AS BYTE Bevat de CRC code deze kan steeds anders zijn zie tekst DIM ID1 AS BYTE Bevat zodadelijk een deel van het unieke IDentificatie adres DIM ID2 AS BYTE Bevat zodadelijk een deel van het unieke IDentificatie adres DIM ID3 AS BYTE Bevat zodadelijk een deel van het unieke IDentificatie adres DIM ID4 AS BYTE Bevat zodadelijk een deel van het unieke IDentificatie adres DIM ID5 AS BYTE Bevat zodadelijk een deel van het unieke IDentificatie adres DIM ID6 AS BYTE Bevat zodadelijk een deel van het unieke IDentificatie adres DIM Familie AS BYTE Bevat de OneWire familiecode dit zal 10 hexadecimaal zijn CLEAR Wis RAM geheugen DELAYMS 500 LCD stabilisatie Hoofdprogramma CLS Wis display OWRITE DS1820 1 ReadROM Geef aan de DS1820 door dat we het adres vanuit ROM willen lezen OREAD DS1820 0 Familie ID1 ID2 ID3 ID4 ID5 ID6 CRC Lees het unieke adres PRINT AT 1 1 HEX2 ID1 HEX2 ID2 HEX2 ID3 HEX2 ID4 HEX2 ID5 HEX2 ID6 PRINT AT 2 1 Fam HEX2 Familie CRC HEX2 CRC END Einde programma Schrijf de familiecode adres en CRC waarde dat op het display verschijnt op en bewaar deze bij de desbetreffende DS1820 In je PIC Basic programma moet je dan dit unieke adres opgeven van de DS1820 waarvan je de gemeten temperatuur wilt weten Herhaal bovenstaande voor elke DS1820 die je op de OneWire draad die hier aangesloten is op PORTA 0 wilt aansluiten Let op de waarden worden hexadecimaal weergegeven op het display bovendien moet het minimaal een 2x20 display zijn voor een 2x16 moeten de spaties in bovenstaande programma worden verwijderd Als het goed is dan moet de familiecode 10 zijn hexadecimaal vanaf nu geschreven als 10h 10h betekent dat het adres afkomstig is van een DS1820 of DS18S20 er bestaan namelijk ook andere OneWire componenten zoals EEPROM s en klok kalender IC s ieder soort heeft zo zijn eigen familiecode Geeft het display familiecode 28h aan dan heb je een DS18B20 aangesloten Deze is niet bruikbaar met de voorbeelden hier omdat de DS18B20 een ander protocol gebruikt CRC Cyclic Redudancy Check is een waarde die wordt gebruikt om te kunnen bekijken of de ontvangen data goed is ontvangen De DS1820 berekent wat die waarde moet zijn afhankelijk van de data waaronder de temperatuur die verzonden gaat worden en stuurt de uitkomst van die berekening mee Ook de PIC kan de ontvangen data berekenen met de CRC methode en zo aan de hand van de uitkomst concluderen of de ontvangen data goed is ontvangen Het OneWire protocol heeft een mogelijkheid om alle OneWire componenten die op een draad zijn aangesloten automatisch uit te lezen wat vooral handig is als er een product wordt gemaakt waarin bijvoorbeeld meerdere DS1820 sensoren zitten Om nu voor elk product de adressen van de aangesloten DS1820 sensoren apart in te voeren zou ondoenlijk zijn Echter de manier om de adressen van de aangesloten OneWire componenten automatisch uit te lezen is nogal uitgebreid en vraagt nogal programma geheugen van de PIC vandaar dat we het hier voorlopig handmatig doen Als van alle OneWire componenten de adressen bekend zijn kunnen ze allen parallel op de draad worden aangesloten In onderstaande voorbeelden wordt uitgegaan van twee DS1820 temperatuursensoren Eén 4k7 pull up weerstand is voldoende voor meerdere OneWire componenten Bij veel meer OneWire componenten kan het nodig zijn de waarde van de weerstand nog wat te verlagen Onderstaand voorbeeld leest van twee DS1820 sensoren de gemeten temperatuurswaarde In dit voorbeeld meet één DS1820 de binnentemperatuur deze heeft bij mij thuis adres 10 0B 08 7F 00 08 00 79 en een tweede DS1820 meet de buitentemperatuur en heeft bij mij adres 10 1B 62 7F 00 08 00 8E Let op deze adreswaarden moet je wijzigen voor de DS1820 sensoren die jij gebruikt bekend gemaakt met programmavoorbeeld 9 Omdat het hier hexadecimale waarden betreft moet dit in het PIC Basic programma opgegeven worden door er een teken voor te zetten zie het PIC Basic programma hieronder Het eerste getal moet ook bij jou altijd 10 zijn dit is immers de familiecode van de DS1820 en DS18 S 20 waarvoor de voorbeelden hier zijn gemaakt Er wordt door dit PIC Basic programma geen gebruik gemaakt van de CRC code om te checken of de ingelezen waarden goed zijn ontvangen De DS1820 zelf verlangt echter wel de CRC code daarom moet deze er wel naar toe worden gezonden bij instructie OWRITE Deze CRC codes zijn bekend gemaakt met behulp van het vorige PIC Basic programma voorbeeld 9 Voorbeeld

    Original URL path: http://www.picbasic.nl/electro_ds1820.htm (2016-02-17)
    Open archived version from archive

  • Up-to-date brengen van de PIC Basic compiler
    site van Crownhill Heb je een lager versienummer dan heb je een oudere versie en kun je gaan updaten Mensen met een gekochte Proton PIC Basic versie kunnen vanaf de website van Crownhill de laatste beta versie downloaden Het is echter niet verplicht zolang je geen problemen met programma s schrijven ondervindt is het niet nodig Updaten is bijvoorbeeld nodig als je een nieuw op de markt verschenen PIC type wilt programmeren die je compiler nog niet kent Ook zijn ontdekte fouten in de compiler in de nieuwste versie herstelt en worden er vaak nieuwe functies aan de Proton IDE toegevoegd Wat nu als mijn PC of laptop niet op internet is aangesloten Ikzelf schrijf mijn PIC Basic programma s op een laptop dat niet is aangesloten op internet Om deze toch up to date te houden heb ik PIC Basic IDE ook geïnstalleerd op mijn internet PC Slechts eenmaal per jaar controleer ik hiermee of er updates zijn en deze download en installeer ik dan op mijn internet PC De PIC Basic op de PC met internet is dan dus weer helemaal up to date Nu moet de geüpdate PIC Basic van de PC worden overgezet naar de laptop Hiervoor moeten de mappen Crownhill en ProtonIDE van de PC worden gekopieerd Het makkelijkst gaat dit met een USB stick dan heb je ook meteen een backup De laptop mappen met rode pijlen bevatten de oude versie de groene de nieuwe Doe nu het volgende op de laptop dat niet op internet is aangesloten Wijzig eerst de namen van de mappen van de huidige verouderde PIC Basic Dat zijn de mappen Crownhill en ProtonIDE die te vinden zijn in de map Program Files Wijzig de namen in bijvoorbeeld Crownhill oud en ProtonIDE oud Door dit te doen heb je de

    Original URL path: http://www.picbasic.nl/up-to-date.htm (2016-02-17)
    Open archived version from archive

  • Stroomsensor
    komt SYMBOL Potmeter PORTA 1 Instelpotmeter 5k 25k op print SYMBOL Spoel PORTA 2 Hierop zit de stroomsensor aangesloten spoel SYMBOL Piezo PORTA 4 Piezo zoemer piep in kamer SYMBOL Buzzer PORTA 5 Buzzer bzzzz in slaapkamer LCD DTPIN PORTC 0 Optionele HD44780 display LCD RSPIN PORTC 4 LCD ENPIN PORTC 5 Variabelen declareren WORD ARRAY DIM Meting 15 AS WORD Sla laatste 15 metingen op in een array WORD DIM MeetGemiddelde AS WORD Bevat het totaal van de laatste 15 stroommetingen DIM PotmeterInst AS WORD Bevat de potmeter instelling DIM Timer AS WORD Lopende timer voor piezo zoemer DIM WD1 AS WORD Word Dummy 1 BYTE DIM Index AS BYTE Indexvariabele voor array Meting DIM BD1 AS BYTE Byte Dummy 1 BIT DIM ID1 AS BIT bIt Dummy 1 Register 76543210 PORTA 00000000 PORTC 00000000 TRISA 11001110 Uitgangen voor Buzzer Piezo zoemer en LED TRISC 11111111 PORTC kan gebruikt worden voor een HD44780 display ADCON0 10000000 Analoog right justified Vdd als referentie spanning ADCON1 00010000 Fosc 8 ANSEL 00000110 Analoog input alleen PORTA 2 en A 1 de rest DIGITAL INPUT CMCON 00000111 Comparator uit Bits 2 1 en 0 op 1 zetten CLEAR Wis alle RAM geheugen DELAYMS 500 Signaal en display stabilisering Hoofdprogramma CLS Wis LCD scherm PRINT AT 1 2 Analoog Plaats vaste tekst op LCD PRINT AT 2 1 Potmeter FOR BD1 1 TO 4 Laat LED een paar keer knipperen indicatie dat PIC opstart LED LED Toggle de LED DELAYMS 300 Knippersnelheid van de LED NEXT WHILE 1 1 Meting Index ADIN 2 Lees huidige stroomopname in op PORTA 2 AN2 IF Index 14 THEN Index telt in een lus van 0 14 15 metingen INC Index Verhoog de indexvariabele voor arrayvariabele Meting ELSE CLEAR Index Reset indexvariabele van de array CLEAR MeetGemiddelde Wis eerst de metingswaarde van de vorige keer FOR BD1 0 TO 14 Bereken het gemiddelde van de 15 metingen meting 0 t m 14 MeetGemiddelde MeetGemiddelde Meting BD1 Tel waarden van laatste 15 metingen op NEXT MeetGemiddelde MeetGemiddelde 15 Deel het totaal van de 15 metingen door 15 WHILE 1 1 PotmeterInst ADIN 1 Lees instelling van 5k 25k instelpotmeter op PORTA 1 PRINT AT 2 11 DEC4 PotmeterInst IF PotmeterInst 450 THEN BREAK Potmeter bijna maximaal dan is alarm ingeschakeld Buzzer OFF Bij potmeter bijna maximaal Buzzer en Piezo uit Piezo OFF CLEAR Timer Timer resetten omdat de buzzer anders niet meer aan zou gaan DELAYMS 250 Rustig kijken naar potmeterstand WEND PRINT AT 1 11 DEC4 MeetGemiddelde IF MeetGemiddelde PotmeterInst THEN Stroomopname groter dan potmeterinstelling dan INC Timer Verhoog Timer IF Timer Tijd THEN Tijd voorbij Dan Piezo ON Piezo zoemer aan kamer Timer Tijd TijdPiezo Timer iets terugzetten waardoor piezo opnieuw zal afgaan ELSE anders is Tijd voorbij Piezo OFF Piezo zoemer uit kamer ENDIF LED ON LED reageert zonder vertraging direct aanzetten IF Timer 20 THEN Hysteresis zodat buzzer niet piept bij een korte stroompuls Buzzer ON Buzzer slaapkamer aan Piezo ON Eerste piep piezo kamer

    Original URL path: http://www.picbasic.nl/stroomsensor.htm (2016-02-17)
    Open archived version from archive

  • Het HD44780 display aansluiten
    GND massa aansluiting 2 5V Vcc 5 volt voedingsspanning 3 V 0 Contrast regeling met behulp van 10k instel potmeter De ene zijde van de potmeter komt aan de 5V de andere zijde aan massa Bij oude displays moet deze zijde van de potmeter aan 5V negatieve spanning i p v 0V massa Met de potmeter kan het contrast optimaal afgesteld worden mede afhankelijk van de inkijkhoek De loper het middelste pinnetje van de potmeter komt aan deze V 0 aansluiting Bij een PLED display wordt hiermee de helderheid van de LED s ingesteld 4 RS Register select Het HD44780 heeft intern 2 registers het instructie register IR en het data register DR Met deze pin wordt geschakeld tussen die twee maar hier heb je geen omkijken naar PIC Basic regelt dat allemaal 5 R W Read Write Normaal schrijf write je naar het display om er tekst op te zetten Als deze pin hoog 5V wordt gemaakt is het geheugen van het display ook uit te lezen read Daar wordt op deze site echter nog geen gebruik van gemaakt daarom deze pin met massa verbinden constant laag NIET vergeten deze pin van het display aan GND massa te leggen anders loop je de kans dat de poorten in de PIC worden opgeblazen of dat het display defect raakt 6 EN Enable Als deze pin laag is dan kan er data naar en van het display worden geschreven gelezen Is deze pin hoog dan trekt het zich niets aan van wat er op de datalijnen gebeurt Hierdoor is het onder andere mogelijk om meerdere componenten op dezelfde poorten van de PIC databus aan te sluiten Bijvoorbeeld 2 displays op 1 PIC alle lijnen RS en de datalijnen databus staan dan parallel aan de beide displays met de EN van elk display op een eigen poort wordt dan de keus gemaakt welk display de data op de lijnen moet verwerken terwijl de ander dus niet reageert 7 14 Dx D0 t m D7 zijn de 8 datalijnen Het display kan eventueel met 4 datalijnen werken dit gebeurt meestal en is ook zo met alle projecten van deze website In dat geval worden de bovenste 4 datalijnen D4 t m D7 gebruikt D0 t m D3 mag je open laten de HD44780 chip heeft hiervoor interne pull up van zichzelf Op sommige displays is er nog een 15 en 16 dit is voor de achtergrondverlichting backlight De achtergrondverlichting heeft geen echte standaardaansluiting Meestal zit de op 15 en de op 16 maar dat kan soms andersom zijn Bij de ene is geen voorschakelweerstand nodig bij de ander juist wel en de waarde van die weerstand verschilt dan weer En sommige displays hebben geen 16 polige aansluiting maar een 14 polige met daarnaast een losse aansluiting voor de achtergrondverlichting Soms is er helemaal geen backlight aanwezig De aangegeven kleuren zijn kleuren van de draden die ik gebruik deze zijn dus niet wereld standaard DDRAM Display Data RAM Bij het scrollen van tekst verschuiven

    Original URL path: http://www.picbasic.nl/info_display44780.htm (2016-02-17)
    Open archived version from archive

  • Wisp628, Wisp648 of Galva-Wisp aan Proton PIC Basic koppelen
    IDE en selecteer vervolgens Compile and Program Options 1 Klik op de tab Programmer en daarna op Install New Programmer 2 Selecteer Create a custom programmer entry en klik op Next 3 Voer de naam XWisp2 in en klik op Next 4 Voer bestandsnaam XWisp2w exe in en klik op Next De w achter xwisp2 geeft aan dat je de Windows versie hebt Er zijn namelijk ook XWisp2 voor Linux en eComStation 5 Klik op Find Manually 6 Zoek de XWisp2 map op Normaal te vinden in de map Program Files Open de Program Files map door erop te dubbelklikken 7 Zoek de mapnaam XWisp2 niet XWisp klik erop zodat deze blauw oplicht en klik daarna op OK 8 Controleer of hier nu staat c program files xwisp2 Is dit niet het geval dan is voorgaande niet goed uitgevoerd Back Is het wel juist dan op Next klikken 9 Voer de volgende regel helemaal in op de foto hierboven staat het niet helemaal compleet Voor de Galva Wisp Voor de Wisp628 648 baud 19200 rts on go hex filename pause go hex filename pause Soms is het ook nodig om de gebruikte COM poort op te geven bij deze parameters Stel dat de programmer is aangesloten op COM poort 3 dan port 3 vooraan bij de parameters plaatsen De parameter pause mag eventueel worden weggelaten XWisp2 sluit dan zichzelf als de PIC is geprogrammeerd Tussen de aanhalingstekens mag je overigens zelf tekst plaatsen bijv pause Klaar Deze tekst wordt op het scherm afgebeeld nadat de PIC is geprogrammeerd Als bovenstaande allemaal is ingesteld klik Finished 10 Klik tot slot op OK Vanaf nu kun je XWisp2 opstarten in de PIC Basic IDE door te drukken op F10 met compileren of op F11 zonder compileren F9 Compileer de huidig geactiveerde editor

    Original URL path: http://www.picbasic.nl/instelling_xwisp2.htm (2016-02-17)
    Open archived version from archive



  •