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".
  • Wisp628, Wisp648 of Galva-Wisp aan Proton PIC Basic koppelen
    agree en daarna op Next 4 Niets wijzigen alleen op Next klikken 5 Klik op Next om het installeren te starten 6 BumbleBee wordt nu geïnstalleerd op je PC even wachten dus 7 Klaar Alleen nog even op Close klikken Het wordt aangeraden om de Wisp628 Wisp648 of Galva Wisp PIC te voorzien van firmware V1 30 Deze is hier te downloaden BumbleBee is nu geïnstalleerd Nu moet BumbleBee nog aan PIC Basic worden gekoppeld Programmer met BumbleBee koppelen aan PIC Basic Selecteer View in de menubalk van de Proton PIC Basic 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 BumbleBee in en klik op Next 4 Voer bestandsnaam BumbleBee exe in en klik op Next 5 Klik op Find Manually 6 Zoek de BumbleBee map op Normaal te vinden in de map Program Files Open de Program Files map door erop te dubbelklikken 7 Zoek de mapnaam BumbleBee klik erop zodat deze blauw oplicht en klik daarna op OK 8 Controleer of hier nu staat c program files bumblebee Is dit niet

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


  • BumbleBee foutanalyse: oorzaak van de fout opsporen
    van de draden deze elkaar kunnen raken en dan een sluiting veroorzaken Met het blote oog niet te zien maar wel te meten de besturings PIC die op de Galva Wisp zit krijgt geen voeding De print zelf natekenen is natuurlijk ook mogelijk maar de kans op onnodige fouten wordt groter Zorg er voor dat je geen banen vergeet zoals dat hier onder andere is gebeurd 8 8 Deze nagetekende print is een stuk groter dan het origineel dat erboven is afgebeeld Deze Galva Wisp deed het niet om verschillende redenen 1 Voor C3 en C4 zijn normale condensatoren geplaatst in plaats van tantaal elco s 2 Tantaal elco C5 zat verkeerd om in de print gesoldeerd let op de streep bij een tantaal is de zie hier 3 Baan vergeten ga met muis op de foto staan 4 Baanbreuk in printbaan zie foto hieronder Eén van de oorzaken dat deze Galva Wisp het niet deed was een baanbreuk met het blote oog nauwelijks te zien Zijn de componenten goed geplaatst Ik heb hier Wisp programmers gehad waarvan een LED diode of de PIC verkeerd om was geplaatst Nog een keer goed checken dus In het geval van een Galva Wisp Zijn de dubbele opto couplers goed geplaatst Deze moeten met de neus nok pin 1 naar elkaar toe wijzen zie foto Zijn de beide connectoren wel gesoldeerd aan de printzijde In het geval van een Galva Wisp Is het draadje van pin 7 van de 9 polige connector geplaatst Zitten elco s of tantaalcondensatoren er goed om in Bij tantaalcondensatoren zijn de en niet altijd even duidelijk aangegeven Een donkere streep geeft niet zoals bij elco s de aan maar de Als de pootjes niet even lang zijn dan is het lange pootje de Je mag er van uit gaan dat als je de tekst naar je toe hebt met de draden naar beneden gericht de tekst staat dan ondersteboven dat de aansluiting dan rechts zit zie foto Zorg er voor dat de dus aan de zijde zit zoals aangegeven op de componentenopstelling van de Wisp programmer Op de foto hiernaast verschillende onnodige fouten Waarom het kristal hier niet tot op de print is geplaatst is een raadsel het kan er ruim zitten Zoals het nu zit kan het kristal de pinnen van de naastgelegen PIC raken en sluiting veroorzaken De twee 22pF ontkoppelcondensatoren zijn van het smalle type maar zijn in de gaatjes van het brede type gestoken waardoor deze niet tot op de print kunnen worden geplaatst en bovendien bij de aansluitingen uitscheuren Waarom niet in de gaatjes van het smalle type gestoken die zitten er niet voor niets De optocouplers zijn hier in een low cost IC voetje geplaatst Vooral bij de 4 pins PC817 optocouplers is dit geen fijne keuze de kleine optocouplers rammelen in het low cost IC voetje Optocouplers mogen rechtstreeks in de print worden gesoldeerd en als je deze toch liever in een IC voetje wilt plaatsen kies dan voor het wat

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

  • PIC dimmer met aanraakbediening
    bediening Door op de print een jumper te plaatsen kan de gebruiker zelf de gewenste instelling kiezen A B of C zie schema Pas wel op dat ook op de jumper 230V staat dus de instelling alleen wijzigen als de netspanning er af is Aansluiten op het lichtnet Om de dimmer in een huisinstallatie te installeren hoeft er niets aan de bestaande bedrading van het huis veranderd te worden de schakeling komt in de plaats van de normale lichtschakelaar tussen de bruine fasedraad en de zwarte lampdraad Wees er wel van bewust dat je hier met een levensgevaarlijke spanning werkt Aansluiten van de print op de huisinstallatie In plaats van de externe puls schakelaar kan ook een optocoupler geplaatst worden zie schema onderaan PAS OP HOGE SPANNING Kijk uit met bouwen aangezien de hele schakeling onder netspanning staat De PIC daarom niet programmeren in de schakeling zelf Aangezien deze schakeling geen transformator gebruikt staat alles onder 230V netspanning De PIC dus ook De PIC niet ICSP programmeren In circuit programmeren met een ICSP programmer is niet mogelijk omdat je de kans loopt dat je PC laptop wordt opgeblazen De Galva Wisp PIC programmer daarentegen zou wel kunnen maar helaas is de voeding van de dimmer te klein om ook de Galva Wisp te kunnen voeden er gebeurt dan niets ergs maar het programmeren mislukt wegens te weinig spanning De PIC zal dus apart moeten worden geprogrammeerd soldeer de PIC daarom niet in de schakeling maar plaats het in een 8 pins IC voetje Als de schakeling in elkaar is gesoldeerd kun je het best eerst de schakeling aansluiten op 230V zonder de PIC Meet nu voorzichtig de spanning over pin 1 en pin 8 van het 8 pins IC voetje Deze moet zo rond de 5 5 5 volt zijn Kijk wel uit wat je doet want de spanning over pin 1 en 8 kan dan wel 5V zijn ten opzichte van aarde is de spanning nog steeds 230V Wees niet bang voor kortsluiting als je je print gaat testen want mocht je door een fout een kortsluiting in je schakeling hebben dan zal er niet veel aan de hand zijn want de lamp zit altijd nog tussen de schakeling en de nuldraad Maar weet wel dat je met een spanning van 230V werkt als je deze dimschakeling bouwt voorzichtigheid is dus geboden Schakelaar als pulsschakelaar De PIC is beveiligd tegen het vastzetten van de toets of de sensor Wanneer er vijf complete dimsessies na en aan elkaar zijn gedaan bij extreem hoge luchtvochtigheid in het geval van de aanraaksensor of door continu signaal op de externe ingang zal de dimmer de lampen continu op het laagste dimniveau laten branden Pas als de sensor en of het externe signaal weer in de normale ruststand komen worden de lampen uitgezet en kan de dimmer weer zoals normaal worden gebruikt Een externe schakelaar moet dus geen continu 230V signaal geven anders dimt de PIC continu Door een veer onder de knop te

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

  • INCLUDE, programma's opsplitsen en/of programmadelen invoegen
    44 Nefit thermostaat 22 0 graden RaamKamerOpenen 60 Kamerraam openen als deze dicht is RaamKamerSluiten 61 Kamerraam sluiten als deze open is RaamKamerToggle 62 Openen als raam dicht is sluiten als raam open is RaamKeukenOpenen 63 Keukenraam openen als deze dicht is RaamKeukenSluiten 64 Keukenraam sluiten als deze open is RaamKeukenToggle 65 Openen als raam dicht is sluiten als raam open is CancelRamen 66 Sluit ramen en cancel automatisch ramen openen voor deze dag BadVullen 67 Waterkleppen aansturen om bad te vullen CancelBadVullen 68 Stop bad vullen en cancel automatische bad vullen voor die dag LuxaflexOpenen 69 Luxaflex openen als deze dicht is LuxaflexSluiten 70 Luxaflex sluiten als deze open is LuxaflexTippen 71 Luxaflex sluiten of openen tot gewenste halfstand PosterNaarLinks 72 Poster naar links verschuiven PosterNaarRechts 73 Poster naar rechts verschuiven SpiegelOpenen 74 Open beamer spiegel SpiegelSluiten 75 Sluit beamer spiegel ResetCancels 76 Reset alle cancelopdrachten DCF77updating 77 Maak de RTC weer gelijk aan DCF77 tijd Stel je voor dat je in je PIC Basic programma deze lijst en dit is nog maar een klein deel ervan moet plaatsen Als je verschillende PIC programma s hebt in mijn geval dus 7 die allemaal dezelfde lijst gebruiken dan is het lastig als er iets in die lijst wordt verschoven omdat je dan al die programma s moet nalopen Door de lijst apart op te slaan en in elk programma INCLUDE te plaatsen wordt het allemaal veel eenvoudiger en overzichtelijker en het voorkomt vergissingen Als nu bijvoorbeeld de DCF77 klok om 19 00 uur het ligbad moet vullen dan staat er in de PIC met het DCF77 programma CASE 1900 SEROUT PORTA 0 Baud BadVullen Als de PIC met de IR ontvanger een RC5 code ontvangt die de opdracht bad vullen moet uitvoeren dan staat er in dat PIC programma CASE BadVullen SEROUT PORTA 0 Baud BadVullen Als de PIC van de telefoonprint bijvoorbeeld de DTMF toon van toets 1 van een bellend mobiel telefoontoestel ontvangt om het bad te vullen dan staat er in het programma van de telefoonprint CASE 1 SEROUT PORTA 0 Baud BadVullen BadVullen is een constantenaam uit de lijst en staat voor waarde 67 Alle 7 PIC s bij me thuis ontvangen deze opdracht waarde 67 dus maar alleen de PIC die de waterkleppen voor het bad vullen bestuurt doet er wat mee namelijk het aansturen van de waterkleppen zodat het bad vult met water Maar nu het voordeel als je INCLUDE gebruikt De voorgaande lijst constantenamen met bijbehorend getallen wordt in geen één PIC programma geplaatst maar wordt apart opgeslagen in een bestand met de naam Woning opdrachtnamen inc Door nu in alle PIC programma s voor de woningbesturing bovenin deze programma s te zetten INCLUDE C PIC programmas Woning opdrachtnamen inc is de gehele actuele lijst beschikbaar voor elke PIC die bij de woning betrokken is Het voordeel is ondermeer dat er nu geen verschillen in de lijsten van de PIC s onderling kunnen zijn En een wijziging of toevoeging in de lijst met

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

  • PIC programmeren met PIC Basic (7)
    als het vorige Als je de toets op PORTB 0 ingedrukt houdt zal de motor stoppen met rem en anders zonder rem DEVICE 16F628A Gebruik 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 Hoog signaal SYMBOL LAAG 0 Laag signaal Algemene constanten SYMBOL WachtTijd 2000 mSec Wachttijd tussen linksom rechtsom en stoppen Poortnamen SYMBOL MotorEnable PORTA 0 Motor aansturing ingeschakeld als poort hoog is SYMBOL MotorLinksOm PORTA 6 Motor draait linksom SYMBOL MotorRechtsOm PORTA 7 Motor draait rechtsom SYMBOL RemToets PORTB 0 Bij ingedrukt houden van deze toets stopt de motor met rem YMBOL HPWM PORTB 3 We zitten vast aan deze PORT voor HPWM bij de 16F628A HPWM 1 255 2000 CCP1 Dutycycle 255 100 2000Hz 76543210 PORTA 00000000 Maak alle poorten van PORTA laag TRISA 00111110 PORTA 7 A 6 en A 0 uitgangen voor L293D TRISB 11110111 PORTB 3 uitgang voor PWM snelheid van de motor L293D IC PORTB PULLUPS ON On chip pull up weerstanden actief voor de remschakelaar Hoofdprogramma WHILE 1 1 Oneindige lus MotorLinksOm HOOG Motor linksom inschakelen MotorEnable HOOG Motor inschakelen DELAYMS WachtTijd Effen wachten MotorEnable RemToets Motor ontkoppelt alleen als remtoets NIET is ingedrukt MotorLinksOm LAAG Motor linksom uitschakelen DELAYMS WachtTijd Effen wachten MotorRechtsOm HOOG Motor rechtsom inschakelen MotorEnable HOOG Motor inschakelen DELAYMS WachtTijd Effen wachten MotorEnable RemToets Motor ontkoppelt alleen als remtoets NIET is ingedrukt MotorRechtsOm LAAG Motor rechtsom uitschakelen DELAYMS WachtTijd Effen wachten WEND Terug naar WHILE END Einde programma Om het verschil met of zonder rem goed te kunnen laten zien is de motor hier op maximale snelheid gezet HPWM is 255 We hadden hier dus net zo goed gewoon de poort hoog kunnen maken PORTB 3 HOOG De motor stopt hier als LinksOm en RechtsOm beide laag zijn Als LinksOm en RechtsOm van gelijk niveau zijn allebei hoog of allebei laag dan stopt de motor ook al gaan de PWM pulsjes gewoon door De poort MotorEnable bepaalt of de motor wordt ontkoppelt of niet Als de motor is ontkoppelt kan die vrij lopen MotorEnable LAAG en anders zal de motor remmen Door de ingangspoort RemToets rechtstreeks te koppelen aan MotorEnable wordt steeds als het programma bij MotorEnable komt bekeken of de remtoets is ingedrukt Echter als je schrijft MotorEnable RemToets dus RemToets zonder dan werkt het net verkeerd om De motor remt dan als de toets niet is ingedrukt terwijl hij juist moet remmen als de toets wel is ingedrukt Daarom moet ervoor worden gezet De bitsgewijs NOT bitwise complement functie wordt aangeduid met een tilde Het tilde teken keert het signaal om inverteren Inverteren betekent dat als het signaal hoog is deze laag wordt gemaakt en als het signaal laag is dan wordt deze juist hoog gemaakt Als een bit 0 is wordt deze dus 1 gemaakt en andersom Dit werkt ook met meerdere bits tegelijk Dus 00011110 is hetzelfde als 11100001 En natuurlijk werkt dit ook in decimale en hexadecimale notatie Dus 31 is hetzelfde als 224 als BYTE en F1 is hetzelfde als 0E als BYTE Het inverteren met de NOT functie is afhankelijk van hoe je de variabele gedeclareerd hebt Als bijvoorbeeld de waarde 50 zich in een BYTE variabele bevindt en geïnverteerd wordt dan is de uitkomst 255 50 205 Is die variabele met de waarde 50 echter als WORD gedeclareerd dan is de uitkomst 65535 50 65485 En dit geldt ook voor de andere type variabelen BIT en DWORD het werkt alleen niet met FLOAT 31 is hetzelfde als 224 als het een BYTE betreft maar 31 is hetzelfde als 65504 als het een WORD betreft en 31 is hetzelfde als 2147483616 als het een DWORD betreft Let ook op sowieso bij DWORD dat als je werkt met negatieve getallen en alle bits inverteert dat ook het signed bit MSB wordt geïnverteerd een positief getal wordt negatief en een negatief getal wordt positief Nog een voordeel van de bitwise NOT functie In de voorgaande cursusdelen wordt van de bitwise XOR functie gebruik gemaakt om een LED te togglen te laten knipperen LED LED 1 Als LED is aan dan LED uitzetten anders aanzetten Dit kan dus ook met de NOT functie Ga maar na er staat LED moet zijn wat LED niet is Dus stel dat de LED uit is 0 dan staat er LED moet niet NOT uit zijn dus de LED zal aan 1 gaan LED LED Als LED is aan dan LED uitzetten anders aanzetten Het voordeel van de bitwise NOT functie is dat het minder geheugen van de PIC in neemt dan voorgaande bitwise XOR functie Echter ten tijde van schrijven van cursus deel 1 was de bitwise NOT functie nog niet beschikbaar in PIC Basic Vanaf nu gaan we dus togglen met de NOT functie Het volgende programma is het motorbestuur gedeelte uit het beweegbare poster project vereenvoudigd weergegeven DEVICE 16F628A Gebruik 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 Hoog signaal SYMBOL LAAG 0 Laag signaal Algemene constanten SYMBOL Daling 20 mSec Daalsnelheid van de motor SYMBOL ExtraTijd 2500 mSec Extra tijd zodat poster verder naar rechts gaat SYMBOL Frequentie 2000 Hz Frequentie van PWM pulsjes voor de motor SYMBOL Langzaam 60 BYTE Langzame snelheid waarmee poster tegen schakelaar loopt SYMBOL MaxSnelheid 220 BYTE Loopsnelheid van de motor SYMBOL PosterTijd 5000 mSec Tijd dat motor op maximum loopt voordat hij afremt SYMBOL Stijging 20 mSec Stijgsnelheid van de motor Poortnamen SYMBOL MotorEnable PORTA 0 Motor aansturing ingeschakeld bij hoog niveau SYMBOL LED PORTA 2 LED brandt als motorsturing L293D actief enabled is SYMBOL MotorLinksOm PORTA 6 Motor draait linksom SYMBOL MotorRechtsOm PORTA 7 Motor draait rechtsom SYMBOL Toets PORTB 0 Verplaats poster bij druk op deze toets YMBOL HPWM PORTB 3 We zitten vast aan deze PORT voor HPWM bij de 16F628A Variabele declareren DIM Duty AS BYTE Duty is de variabele die de snelheid v d motor bepaalt HPWM 1 0 2000 Reset de CCP PWM module Op 0 constant laag 76543210 PORTA 00000000 Alle uitgangen PORTA laag maken TRISA 00111010 PORTA 7 A 6 A 2 en A 0 uitgangen voor L293D en LED TRISB 11110111 PORTB 3 is uitgang voor PWM signaal naar L293D PORTB PULLUPS ON On chip pull up weerstanden actief voor de schakelaar CLEAR Wis alle RAM geheugen HoofdProgramma WHILE 1 1 Oneindige lus HPWM 1 0 Frequentie PWM van CCP module op 0 zetten WHILE Toets HOOG WEND Wacht op commando van gebruiker om poster te verplaatsen MotorLinksOm MotorLinksOm Als motor linksom draaide dan nu rechtsom en andersom MotorRechtsOm MotorLinksOm LinksOm ingeschakeld dan RechtsOm uitschakelen en andersom MotorEnable HOOG Motorsturing activeren LED MotorEnable LED brandt als motorsturing L293D actief is Motor optrekken FOR Duty 1 TO MaxSnelheid Motor gaat steeds sneller draaien tot waarde MaxSnelheid HPWM 1 Duty Frequentie Motor draait met snelheid Duty op ingestelde frequentie DELAYMS Stijging Stijgsnelheid van motorsnelheid NEXT Tijd dat motor op MaxSnelheid blijft lopen voordat hij weer afremt DELAYMS PosterTijd MotorRechtsOm ExtraTijd Bij motor rechtsom ExtraTijd langer Motor afremmen bij LinksOm tot Langzaam bij rechtsom tot stilstand FOR Duty Duty TO MotorLinksOm Langzaam STEP 1 Motor gaat steeds langzamer draaien HPWM 1 Duty Frequentie Motor draait met snelheid Duty op ingestelde frequentie DELAYMS Daling Daalsnelheid van motorsnelheid NEXT Tijd dat motor met snelheid Langzaam tegen schakelaar kan lopen DELAYMS 4000 MotorLinksOm Alleen hier wachten als MotorLinksOm hoog 1 is Motor uitschakelen MotorEnable LAAG Motorsturing deactiveren motor kan vrijlopen LED MotorEnable LED brandt als motorsturing L293D actief is nu uitzetten dus WEND Terug naar WHILE Voor onderstaand verhaal kun je het beste eerst even het poster project bekijken om beter te weten waar het om gaat en wat het voor moet stellen De motor wordt hier gestart met Toets in de praktijk is het een afstandsbediening signaal Als op de Poster toets Toets wordt gedrukt dan begint de motor te lopen De eerste opdracht is MotorLinksOm MotorLinksOm Dit is een variant op MotorLinksOm MotorLinksOm 1 waarmee in de vorige cursusdelen een signaal wordt omgekeerd als hij laag is moet hij hoog worden en andersom Wordt de poster nu verplaatst dan is dat steeds de tegenovergestelde richting van de vorige keer En de opdracht MotorRechtsOm MotorLinksOm zorgt ervoor dat de poort MotorRechtsOm altijd het tegenovergestelde van de poort MotorLinksOm is dus altijd maar één van beide poorten hoog is MotorRechtsOm zal zo altijd de geïnverteerde waarde van MotorLinksOm zijn Dan wordt de L293D geactiveerd en de LED aangezet Vóór het hoofdprogramma staat PORTA 00000000 dit maakt alle PORTA uitgangen laag Dit is nodig omdat bij het opstarten van de PIC de uitgangen in een willekeurige toestand kunnen staan Om er zeker van te zijn dat de motor bij PIC opstart na stroomuitval eerst linksom gaat draaien moet PORTA altijd in dezelfde toestand zijn bij opstart De eerste keer na PIC opstart gaat de poster dus naar links De motor zal langzaam optrekken dan 5 seconden PosterTijd constant op duty snelheid 220 MaxSnelheid lopen en dan afremmen tot duty snelheid 60 Langzaam Deze langzame snelheid blijft de motor maximaal 4 seconden lopen DELAYMS 4000 MotorLinksOm Alleen als de motor linksom draait wordt deze 4 seconden tijd uitgevoerd Hoe dat kan zonder IF THEN Eenvoudig met een berekening Als de motor linksom loopt is poort MotorLinksOm hoog 1 en anders laag 0 Door achter DELAYMS de berekening 4000 MotorLinksOm te zetten kun je de volgende situaties krijgen Linksom Rechtsom DELAYMS 4000 1 4000 DELAYMS 4000 0 0 dus 4 seconden wachten dus 0 seconden wachten In die 4 seconden zal de poster tegen de eindschakelaar lopen en de motor stoppen De schakelaar zit in de voedingsdraad van de motor Zodoende hoef ik geen draad te trekken van de schakelaar naar de PIC en het spaart me een ingangspoort uit Over de schakelaar is een diode geplaatst want anders zou de motor ook geen stroom krijgen als de poster weer de andere kant op moet Als de motor linksom draait en afremt zal hij afremmen tot snelheid 60 Langzaam Draait de motor rechtsom dan remt hij verder af tot stilstand Dit regelt de tweede FOR NEXT STEP 1 lus Hier staat namelijk ook weer een berekening in MotorLinksOm Langzaam Linksom Rechtsom FOR Duty Duty TO 1 60 60 FOR Duty Duty TO 0 60 0 dus terugtellen tot langzaam dus terugtellen tot stilstand Dus bij linksom staat er eigenlijk En bij rechtsom staat er eigenlijk FOR Duty Duty TO 60 STEP 1 FOR Duty Duty TO 0 STEP 1 Om er zeker van te zijn dat als de poster naar links loopt de poster op langzame snelheid tegen de schakelaar loopt loopt de poster 2 5 seconden langer op MaxSnelheid naar rechts zodat de poster iets verder naar rechts staat Ook hier is weer gebruik gemaakt van een berekening achter een DELAYMS DELAYMS PosterTijd MotorRechtsOm ExtraTijd PosterTijd heeft de waarde 5000 5 sec ExtraTijd is 2500 2 5 sec en de poort MotorRechtsOm is 0 of 1 laag of hoog Nu krijg je de volgende situatie Linksom Rechtsom DELAYMS 5000 0 2500 5000 DELAYMS 5000 1 2500 5000 0 5000 2500 7500 dus 5 seconden wachten dus 7 5 seconden wachten In dit voorbeeld is de PWM frequentie niet rechtstreeks achter HPWM gezet maar via de constante Frequentie Als je nu de frequentie van alle HPWM instructies wilt wijzigen dan hoef je alleen maar deze constante aan te passen Dit neemt zoals bekend geen extra geheugen van de PIC in Geen enkele constante neemt extra geheugen in omdat de PIC Basic compiler bij het compileren eerst alle namen van de constanten verandert in de bijbehorende waarden vóórdat het in de PIC wordt geprogrammeerd In de volledige versie van Proton PIC Basic moet je het liefst zoveel mogelijk gebruik maken van constanten het is makkelijker bij wijzigen en overzicht en kost dus geen extra geheugenruimte van de PIC Bij de PIC Basic LITE demo versie ontkom je er soms niet aan om waarden rechtstreeks achter bijvoorbeeld DELAYMS te zetten omdat we vastzitten aan die 50 regels limiet In het volgende HPWM voorbeeld is een toepassing te zien van array s Array s zijn behandeld in mini cursus deel 6 Met het volgende voorbeeld is de motor in 5 verschillende versnellingen te schakelen Inclusief stilstand wordt hiervoor gebruik gemaakt van een array variabele bestaande uit 6 elementen DEVICE 16F628A Gebruik 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 Hoog signaal SYMBOL LAAG 0 Laag signaal Algemene constanten SYMBOL AntiDender 5 mSec Tijd tegen contactdender van de schakelaars Poortnamen SYMBOL MotorEnable PORTA 0 Motor aansturing ingeschakeld bij hoog niveau SYMBOL MotorLinksOm PORTA 6 Motor draait linksom SYMBOL MotorRechtsOm PORTA 7 Motor draait rechtsom SYMBOL ToetsHoger PORTB 0 Deze toets schakelt de motor in een hogere versnelling SYMBOL ToetsLager PORTB 1 Deze toets schakelt de motor in een lagere versnelling YMBOL HPWM PORTB 3 We zitten vast aan deze PORT voor HPWM bij de 16F628A Variabelen declareren BYTE ARRAY DIM Snelheid 6 AS BYTE Deze 6 variabelen bevatten de diverse snelheden incl stop BYTE DIM Versnelling AS BYTE Hierin zit de waarde in welke versnelling de motor staat HPWM 1 0 2000 CCP PWM module dutycycle op 0 zetten 76543210 TRISA 00111110 PORTA 7 A 6 en A 0 uitgangen voor signalen naar L293D TRISB 11110111 PORTB 3 uitgang voor PWM signaal naar L293D PORTB PULLUPS ON On chip pull up weerstanden actief voor de schakelaars CLEAR Wis alle RAM geheugen Hoofdprogramma Geef aan de 6 array variabelen de snelheidswaarden Snelheid 0 0 Stilstand De 0e versnelling Snelheid 1 60 De 1e versnelling Snelheid 2 100 De 2e versnelling Snelheid 3 140 De 3e versnelling Snelheid 4 180 De 4e versnelling Snelheid 5 255 De 5e versnelling maximum snelheid MotorLinksom HOOG In dit voorbeeld draait de motor alleen linksom MotorRechtsOm LAAG In dit voorbeeld draait de motor nooit rechtsom MotorEnable HOOG L293D activeren enable 1 2 WHILE 1 1 Oneindige lus HPWM 1 Snelheid Versnelling 2000 WHILE PORTB 3 3 WEND Wacht zolang een of meer toetsen zijn ingedrukt DELAYMS AntiDender Tijd voor contactontdendering van pulstoetsen WHILE PORTB 3 3 WEND Wacht zolang er geen toets is ingedrukt DELAYMS AntiDender Tijd voor contactontdendering van pulstoetsen IF ToetsHoger LAAG AND Versnelling 5 THEN INC Versnelling IF ToetsLager LAAG AND Versnelling 0 THEN DEC Versnelling WEND Terug naar WHILE END Bovenaan de lijst met declaraties wordt eerst een BYTE array van 6 elementen gedeclareerd met DIM Snelheid 6 AS BYTE Dan wordt eerst met HPWM 1 0 2000 de dutycycle op 0 gezet omdat bij het opstarten van de PIC de CCP module op een willekeurige instelling kan staan en dan zou de motor als je het met MotorEnable inschakelt meteen op een willekeurige snelheid gaan draaien Door de CCP eerst op 0 te zetten en pas daarna de L293D te enablen inschakelen activeren blijft de motor stil staan In het hoofdprogramma geven we eerst de snelheidswaarden aan de 6 array s Snelheid 0 0 voor stilstand Voordat we de oneindige WHILE WEND lus in gaan worden er eerst 6 verschillende versnellingswaarden in de array opgegeven En daarna wordt eerst nog de L293D op linksom gezet en geactiveerd De oneindige lus begint met HPWM 1 Snelheid Versnelling 2000 Er zijn 6 versnellingswaarden opgegeven 0 60 100 140 180 en 255 die staan in de arrayvariabele Snelheid 0 t m Snelheid 5 Welke van deze uitgevoerd wordt is hier afhankelijk van de variabele Versnelling die in dit programma een waarde kan hebben van 0 5 Aangezien we de variabele Versnelling tussen de blokhaken van de array variabele Snelheid hebben gezet bepaalt de variabele Versnelling welke snelheid de motor nu gaat lopen De variabele Versnelling noemen we in zo n geval de index variabele van de array Stel dat Versnelling de waarde 4 heeft dan is Snelheid Versnelling dus hetzelfde als Snelheid 4 En Snelheid 4 heeft de waarde 180 Kortom als je Versnelling de waarde 4 geeft dan loopt de motor op snelheid 180 Met PORTB 3 lezen we alleen PORTB 0 en PORTB 1 in PORTB 2 t m PORTB 7 zijn er hierdoor uitgefilterd PORTB 3 is hetzelfde als PORTB 00000011 want 00000011 binair is immers hetzelfde als 3 decimaal Als je bijvoorbeeld PORTB 7 en PORTB 2 wilt filteren dan schrijf je PORTB 10000100 of PORTB 132 Meer info zie cursus deel 6 Als er op ToetsHoger PORTB 0 wordt gedrukt dan wordt de poort laag en als de variabele Versnelling nog niet in de hoogste versnelling staat dan wordt de variabele Versnelling met 1 verhoogt Stel dat Versnelling de waarde 2 heeft dan loopt de motor de snelheid die aan Snelheid 2 is gegeven Wordt er nu op ToetsHoger gedrukt dan verhoogt de motor de snelheid van Snelheid 2 100 naar Snelheid 3 140 Je zult gemerkt hebben dat bij het vorige voorbeeld het op en neer schakelen van de motor abrupt van de ene naar de andere schakelt Het volgende voorbeeld doet het vloeiend De motor zal bij het verhogen of verlagen van de versnelling langzaam naar de nieuw ingestelde versnelling met de daarbij behorende snelheid gaan Leuk voor een modelspoorbaan bovendien houden de treinen door PWM bij een lagere snelheid veel meer kracht over dan bij een gewone treintrafo Tijdens het vertragen of versnellen van de motor brandt de groene LED ten teken dat de motorsnelheid aan het veranderen is DEVICE 16F628A Gebruik 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 Hoog signaal SYMBOL LAAG 0 Laag signaal Algemene constanten SYMBOL AntiDender 5 mSec Tijd tegen contactdender van de schakelaars SYMBOL StijgSnelheid 40 mSec Stijgsnelheid van motor naar ingestelde versnelling Poortnamen SYMBOL MotorEnable PORTA 0 Motor aansturing ingeschakeld bij hoog niveau SYMBOL LED PORTA 2 LED brandt als snelheid van motor wijzigt SYMBOL MotorLinksOm PORTA 6 Motor draait linksom SYMBOL MotorRechtsOm PORTA 7 Motor draait rechtsom SYMBOL ToetsHoger PORTB 0 Deze toets schakelt de motor in een hogere versnelling SYMBOL ToetsLager PORTB 1 Deze toets schakelt de motor in een lagere versnelling YMBOL HPWM PORTB 3 We zitten vast aan deze PORT voor HPWM bij de 16F628A Variabelen declareren BYTE ARRAY DIM Snelheid 6 AS BYTE Deze 6 variabelen bevatten de diverse snelheden BYTE DIM MotorSnelheid AS BYTE Hierin zit de waarde van de actuele snelheid van de motor DIM Versnelling AS BYTE Hierin zit de waarde in welke versnelling de motor staat HPWM 1 0 2000 CCP PWM module dutycycle op 0 zetten 76543210 TRISA 00111010 PORTA 7 A 6 A 2 en A 0 uitgangen voor L293D en LED TRISB 11110111 PORTB 3 is uitgang voor PWM signaal naar L293D PORTB PULLUPS ON On chip pull up weerstanden actief voor de schakelaars CLEAR Wis alle RAM geheugen Hoofdprogramma Geef aan de 6 array variabelen de snelheidswaarden Snelheid 0 0 Stilstand De 0e versnelling Snelheid 1 60 De 1e versnelling Snelheid 2 100 De 2e versnelling Snelheid 3 140 De 3e versnelling Snelheid 4 180 De 4e versnelling Snelheid 5 255 De 5e versnelling maximum snelheid MotorRechtsOm LAAG In dit voorbeeld draait de motor nooit rechtsom MotorLinksom MotorRechtsOm In dit voorbeeld draait de motor alleen linksom MotorEnable HOOG L293D activeren enable 1 2 WHILE 1 1 Oneindige lus WHILE PORTB 3 3 WEND Wacht zolang een of meer toetsen zijn ingedrukt DELAYMS AntiDender WHILE PORTB 3 3 WEND Wacht zolang er geen toets is ingedrukt DELAYMS AntiDender IF ToetsHoger LAAG AND Versnelling 5 THEN INC Versnelling IF ToetsLager LAAG AND Versnelling 0 THEN DEC Versnelling LED HOOG Een hoog signaal laat de LED branden snelheid wijzigt REPEAT IF Snelheid Versnelling MotorSnelheid THEN INC MotorSnelheid IF Snelheid Versnelling MotorSnelheid THEN DEC MotorSnelheid HPWM 1 MotorSnelheid 2000 DELAYMS StijgSnelheid Stijgsnelheid van motor tevens antidender van toetsen UNTIL Snelheid Versnelling MotorSnelheid LED LAAG LED weer uitzetten snelheid is klaar met wijziging WEND Terug naar WHILE END Dit programma is bijna hetzelfde als het voorgaande voorbeeld Om het voor elkaar te krijgen dat de motor vloeiend van de ene naar de andere snelheid gaat moet er een nieuwe variabele hier met de naam MotorSnelheid worden aangemaakt Als nu Versnelling wordt verhoogt dan is de waarde van de array Snelheid groter dan de variabele MotorSnelheid geworden Hierdoor wordt de regel IF Snelheid Versnelling MotorSnelheid THEN INC MotorSnelheid uitgevoerd waardoor de motor langzaam maar zeker steeds sneller gaat lopen totdat Snelheid weer gelijk is aan MotorSnelheid Stel dat Versnelling de waarde 2 heeft dan loopt de motor op 100 Zowel Snelheid Versnelling als MotorSnelheid hebben beide de waarde 100 Wordt Versnelling nu verlaagt naar 1 dan heeft Snelheid Versnelling ineens de waarde 60 terwijl MotorSnelheid nog steeds 100 is In de REPEAT UNTIL lus wordt de regel IF Snelheid Versnelling MotorSnelheid THEN DEC MotorSnelheid uitgevoerd oftewel als Snelheid van de ingestelde versnelling kleiner is dan MotorSnelheid dan verlaag MotorSnelheid met 1 Door DEC wordt MotorSnelheid verlaagt met 1 dus 100 1 99 De variabele MotorSnelheid staat in de instructie HPWM waardoor de motor nu van 100 naar 99 gaat lopen Nu volgt eerst een vertraging afhankelijk van de constante StijgSnelheid anders zou er bloedsnel van 100 naar 60 worden geteld waardoor de motor nog steeds abrupt van de ene naar de andere snelheid zou gaan daarom deze vertraging Bij UNTIL wordt bekeken of MotorSnelheid al gelijk is geworden aan Snelheid Versnelling maar 99 is nog geen 60 dus wordt de REPEAT UNTIL lus opnieuw uitgevoerd net zolang tot UNTIL MotorSnelheid weer gelijk is aan de array Snelheid Versnelling Pfff moeilijk als je het zo ziet Kan ik me voorstellen Daarom als je iets voor je zelf maakt bouw het langzaam op test steeds ieder stukje en breidt het dan verder uit Iets in één keer programmeren is vragen om problemen Het volgende voorbeeld is een deel uit mijn Basic programma dat ik in de badkamer gebruik Van oorsprong heeft het bubbelbad maar twee instellingen Bubbelen op maximaal of niet bubbelen gewoon aan uit dus Nú stuur ik de motor van het bubbelbad met het volgende programma waardoor ik met 1 pulstoets de bubbelkracht kan variëren alsook de motor geheel kan uitschakelen Met de toets Hydro kan ik de snelheid van de motor van het bubbelbad regelen Als de motor loopt brandt de LED in de toets Tijdens wijzigen van de snelheid knippert deze LED De bediening is eenvoudig Door de toets kort in te drukken of ingedrukt te houden wordt de enable van de L293D hoog en begint ook de motor steeds sneller te lopen tot aan een maximum Is er kort gedrukt dan gebeurt dit automatisch Wordt de toets echter vast gehouden dan gaat de motor ook sneller lopen maar als de toets nú wordt losgelaten zal de motor blijven draaien met de snelheid die het op dat moment heeft Als er nu opnieuw op de toets gedrukt wordt kort of continu dan geldt hetzelfde verhaal als net alleen zal de motor nu steeds langzamer gaan lopen Is de motor bezig met het automatisch wijzigen van de snelheid omdat er kort op de toets is gedrukt dan is de wijziging te stoppen door opnieuw op de toets te drukken De motor blijft dan lopen met de snelheid die het heeft op het moment van drukken op de toets Bij het verlagen van de snelheid op handbediening door de toets vast te houden zal de motor tot aan een minimum snelheid gaan lopen en op die snelheid blijven lopen Gebeurt het verlagen automatisch door een korte druk dan zal de motor eerst naar de minimum snelheid lopen en dan ineens stoppen en wordt tevens de enable van de L293D weer laag gemaakt motor gaat hierdoor van de rem Een minimum snelheid instelling is nodig omdat de motor van het bubbelbad niet lager dan 15 dutycycle mag draaien omdat er anders de kans is dat de motor brommend blijft staan en mogelijk oververhit kan raken Door de minimum snelheid zal de motor altijd starten vanaf en stoppen met de opgegeven minimum snelheid Probeer het voorbeeldprogramma maar eens uit het werkt zeer praktisch DEVICE 16F628A Gebruik 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 Hoog signaal of aanduiding snelheid verhogen SYMBOL LAAG 0 Laag signaal of aanduiding snelheid verlagen Algemene constanten SYMBOL Maximum 240 BYTE Maximumsnelheid van de motor SYMBOL Minimum 40 BYTE Minimumsnelheid van de motor Poortnamen SYMBOL MotorEnable PORTA 0 Motor aansturing ingeschakeld bij hoog niveau SYMBOL LED PORTA 2 Geeft aan of motor loopt en knippert bij wijzigen SYMBOL S1 PORTB 0 Hiermee is de motorsnelheid te wijzigen YMBOL HPWM poort PORTB 3 Op deze poort zit de CCP module van de PIC16F628A Variabelen declareren BYTE DIM Snelheid AS BYTE Bevat de actuele snelheid van de motor BIT DIM HogerLager AS BIT Bepaalt hoger of lager gaan van de motorsnelheid HPWM 1 0 2000 CCP PWM module Motor stop 76543210 PORTA 10000000 Alle PORTA uitgangen laag op PORTA 7 na motor rechtsom TRISA 00111010 PORTA 7 A 6 A 2 en A 0 uitgangen voor L293D en LED TRISB 11110111 PORTB 3 is uitgang voor PWM signaal naar L293D PORTB PULLUPS ON On chip pull up weerstanden actief voor de schakelaar CLEAR Wis alle RAM geheugen GOTO HoofdProgramma Spring over de subroutine Subroutine WijzigSnelheid IF HogerLager LAAG OR Snelheid Maximum THEN Snelheid Snelheid 2 HogerLager 1 Uitleg zie tekst PIC cursus deel 7 HPWM 1 Snelheid 2000 Motor op PORTB 3 aansluiten CCP1 snelheid 2000Hz LED Snelheid 10 LED knippert bij wijzigen van de motorsnelheid DELAYMS 20 Stijg daal snelheid van motorsnelheid bij wijzigen ENDIF RETURN HoofdProgramma WHILE 1 1 Oneindige lus Begin LED MotorEnable LED geeft aan of motor loopt WHILE S1 LAAG WEND Wacht hier zolang toets is ingedrukt DELAYMS 5 Tijd tegen contactdender van pulstoets S1 bij loslaten WHILE S1 HOOG WEND Wacht hier totdat een toets wordt ingedrukt DELAYMS 5 Tijd tegen contactdender van pulstoets S1 bij indrukken MotorEnable HOOG L293D activeren HogerLager HogerLager Richting verhogen verlagen van snelheid omkeren DELAYMS 250 Tijd die het verschil maakt tussen kort en lang indrukken IF S1 HOOG THEN Als toets S1 nu alweer is losgelaten dan AUTOMATISCH WHILE HogerLager HOOG OR Snelheid Minimum Zolang snelheid stijgt of snelheid GOSUB WijzigSnelheid Wijzig PWM waarde motorsnelheid in CCP module IF S1 LAAG OR Snelheid Maximum THEN GOTO Begin Auto is te onderbreken door S1 WEND MotorEnable LAAG L293D deactiveren motor compleet uit na automatisch dalen ELSE anders toets S1 nog steeds ingedrukt HANDBEDIEND WHILE S1 LAAG Zolang toets S1 is ingedrukt snelheid veranderen GOSUB WijzigSnelheid Wijzig PWM waarde motorsnelheid in CCP module IF HogerLager LAAG AND Snelheid Minimum THEN BREAK Minimumsnelheid bereikt WEND ENDIF WEND In dit voorbeeld zijn achter diverse DELAYMS instructies de tijdswaarden rechtstreeks ingevuld in plaats van met SYMBOL een naam te geven en is met PORTA 10000000 de motor op rechtsom draaiend gezet en de overige PORTA poorten laag gemaakt Dit is overmacht omdat de PIC Basic LITE versie een limiet van 50 programmaregels heeft Bij het originele programma volledige PIC Basic versie thuis heeft alles keurig een naam Om te kunnen meten of de toets lang of kort is ingedrukt is hier het volgende gedaan Zolang er geen toets is ingedrukt wacht het programma bij WHILE S1 HOOG WEND Wordt er nu op toets S1 gedrukt dan loopt het programma verder Het maakt eerst de enable van de L293D hoog en keert de richting van de snelheidwijziging om dus ging de motor eerst sneller lopen dan nu langzamer of andersom En dan komt er de wachttijd die het verschil bepaalt tussen lang of kort indrukken van de toets Als namelijk de tijd verstreken is wordt opnieuw toets S1 gemeten Is het signaal alweer weg dan is er kort op de toets gedrukt en anders dus lang Als er kort op de toets is gedrukt dan wordt het programmagedeelte van automatisch verhogen of verlagen van de snelheid uitgevoerd Nog even over de berekening in de subroutine De bitvariabele HogerLager is 1 als de motor versneld en 0 als de motor vertraagd Normaal doen we dat met een IF THEN ELSE regel IF HogerLager 1 THEN INC Snelheid ELSE DEC Snelheid Hier is het voor de verandering met een berekening gedaan Snelheid Snelheid 2 HogerLager 1 Simpel narekenen wat er hier gebeurt laat zien hoe het werkt HogerLager is dus 1 bij versnellen en 0 bij vertragen Versnellen Snelheid Snelheid 2 1 1 oftewel Snelheid Snelheid 2 1 Vertragen Snelheid Snelheid 2 0 1 oftewel Snelheid Snelheid 0 1 Bij versnellen staat er Snelheid Snelheid Bij vertragen staat er Snelheid Snelheid 1 1 1 1 komt van 2 1 komt van 0 1 Hier zie je dat om iets te bereiken vaak meerdere mogelijkheden zijn In het voorbeeld moet Snelheid met 1 verhoogt of verlaagt worden afhankelijk van bitvariabele HogerLager en is dus opgelost met de berekening Snelheid Snelheid 2 HogerLager 1 Bovenstaande oplossing met de getoonde berekening is echter verre van ideaal want deze neemt maarliefst 23 program words geheugen van de PIC in terwijl onderstaande oplossing precies hetzelfde doet en toch maar 5 program words van de PIC inneemt IF HogerLager HOOG THEN INC Snelheid ELSE DEC Snelheid ENDIF Kies uit de verschillende mogelijkheden de oplossing die het minste geheugen van de PIC inneemt Het neemt niet alleen minder geheugen maar is ook sneller in afhandeling Links onderaan in Proton PIC Basic IDE staat hoeveel program words een programma na compileren inneemt in de PIC Hoe nu het HD44780 display en PORTB 3 De instructie PRINT waarmee tekst op het display wordt geplaatst stuurt de signalen voor het HD44780 display standaard naar PORTB 2 t m PORTB 7 Omdat de CCP module nu eenmaal vast op PORTB 3 zit moet de RS pin van het display verhuizen naar een andere poortpin PORTA 4 is nog vrij dus pakken we die maar Aangezien PORTA 4 een open drain uitgang is moet er mogelijk een pull up weerstand bijv 10k bij geplaatst worden maar dat is niet altijd nodig het display heeft meestal een pull up van zichzelf Sluit nu een HD44780 display aan op de in rood aangegeven punten 8 8 Sluit een HD44780 display aan op de aangegeven punten meer info zie cursus deel 4 Om de PIC Basic compiler te kennen te geven dat de RS aansluiting van het display niet op de standaard poort is aangesloten moet opgegeven worden naar welke pin deze is verhuist Door ergens bovenin het programma LCD RSPIN PORTA 4 te schrijven weet de compiler dat de RS pin nu op PORTA 4 zit zie volgende voorbeelden Meer hierover Klik op de knop Met het volgende programma is de motorsnelheid te regelen met de beide toetsen die aangesloten zijn op PORTB 0 en PORTB 1 Het percentage van de dutycycle is op het display af te lezen DEVICE 16F628A Gebruik 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 Hoog signaal SYMBOL LAAG 0 Laag signaal Algemene constanten SYMBOL StartSnelheid 128 BYTE Motorsnelheid waarmee het programma start Dutycycle 50 SYMBOL StijgSnelheid 10 mSec Bepaalt hoe snel de motor optrekt afremt Poortnamen SYMBOL MotorEnable PORTA 0 Motor aansturing ingeschakeld bij hoog niveau LCD RSPIN PORTA 4 De RS pin van het display zit nu aan deze poort SYMBOL MotorRechtsOm PORTA 7 Motor rechtsom SYMBOL ToetsHoger PORTB 0 Deze pulstoets laat de motor sneller draaien SYMBOL ToetsLager PORTB 1 Deze pulstoets laat de motor langzamer draaien YMBOL HPWM PORTB 3 We zitten vast aan deze PORT voor HPWM bij de 16F628A Variabelen declareren DIM Snelheid AS BYTE Deze variabele bevat de snelheid van de motor 76543210 PORTA 00000000 Maak alle poorten van PORTA laag TRISA 00111110 PORTA 7 A 6 en A 0 uitgangen voor L293D TRISB 11110111 PORTB 3 is uitgang voor PWM signaal naar L293D PORTB PULLUPS ON On chip pull up weerstanden actief voor de schakelaars CLEAR Wis alle RAM geheugen DELAYMS 500 LCD stabilisering Hoofdprogramma CLS Wis display PRINT Dutycycle Zet tekst op het display Snelheid StartSnelheid Geef de variabele Snelheid een startwaarde MotorRechtsOm HOOG Motor op rechtsom zetten MotorEnable HOOG L293D activeren enable 1 2 WHILE 1 1 Oneindige lus HPWM 1 Snelheid 2000 Motor op PORTB 3 aansluiten CCP1 snelheid 2000Hz Als ToetsHoger wordt ingedrukt EN Snelheid is nog niet maximaal dan snelheid verhogen IF ToetsHoger LAAG AND Snelheid 255 THEN INC Snelheid Als ToetsLager wordt ingedrukt EN Snelheid is nog niet minimaal dan snelheid verlagen IF ToetsLager LAAG AND Snelheid 0 THEN DEC Snelheid DELAYMS StijgSnelheid Bepaalt hoe snel de motor optrekt afremt PRINT AT 1 13 DEC Snelheid 100 255 Geef motorsnelheid weer in procenten WEND Terug naar WHILE END LCD RSPIN PORTA 4 is geplaatst bij Poortnamen Normaal zet ik het toewijzen van namen aan constanten en het declareren van variabelen altijd op alfabetische volgorde alleen bij Poortnamen niet die zet ik altijd op numerieke volgorde eerst PORTA op nummer dan PORTB op nummer dat geeft een beter overzicht van de gebruikte poorten De poort voor linksom PORTA 6 staat er dit keer niet bij omdat we de motor alleen rechtsom laten draaien Met PORTA 00000000 wordt ervoor gezorgd dat alle 8 poorten van PORTA laag zijn dus ook PORTA 6 PORTA 6 moet natuurlijk wel een uitgang zijn ook al blijft hij in dit programma altijd laag dus wel opgeven bij TRISA Tot slot wordt nog de waarde van Snelheid op het display gezet Het display geeft de waarde van Snelheid als percentage aan dus niet als 0 255 maar als 0 100 Dit wordt bereikt door Snelheid eerst met 100 te vermenigvuldigen en daarna te delen door 255 Met het volgende voorbeeld kun je de motorsnelheid met de aangesloten potmeter regelen en aflezen op het display Van de functie POT is Schaal hier op 140 gezet eventueel aanpassen DEVICE 16F628A Gebruik 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 Hoog signaal SYMBOL LAAG 0 Laag signaal Poortnamen SYMBOL MotorEnable PORTA 0 Motor aansturing ingeschakeld bij hoog niveau SYMBOL Potmeter PORTA 1 Hierop zit de potmeter voor de snelheidsregeling LCD RSPIN PORTA 4 De RS pin van het display zit nu aan deze poort SYMBOL MotorRechtsOm PORTA 7 Motor rechtsom YMBOL HPWM poort PORTB 3 Op deze poort zit de CCP module van de PIC16F628A Variabele declareren DIM Duty AS BYTE Deze variabele bevat de actuele snelheid van de motor HPWM 1 0 2000 CCP1 module op 0 zetten 76543210 PORTA 00000000 Maak alle poorten van PORTA laag TRISA 00111110 PORTA 7 A 6 en A 0 uitgangen voor L293D TRISB 11110111 PORTB 3 is uitgang voor PWM signaal naar L293D CLEAR Wis alle RAM geheugen DELAYMS 500 LCD stabilisering Hoofdprogramma CLS Wis display en plaats cursor op regel 1 eerste positie PRINT Instel Zet tekst op het display PRINT AT 2 1 Perc Zet tekst vooraan op regel 2 van het display MotorRechtsOm HOOG In dit voorbeeld draait de motor alleen rechtsom MotorEnable HOOG L293D activeren enable 1 2 WHILE 1 1 Oneindige lus Duty POT Potmeter 140 Geef potmeterwaarde aan variabele Duty HPWM 1 Duty 2000 Geef de potmeterwaarde via Duty aan de CCP PWM module PRINT AT 1 10 DEC Duty Plaats de decimale waarde achter de tekst Instel PRINT AT 2 10 DEC Duty 100 255 Het percentage op regel 2 WEND Terug naar WHILE END In de lus wordt steeds eerst de potmeter met de functie POT ingelezen en de stand hiervan aan de variabele Duty gegeven Meteen daarna komt de instructie HPWM waarbij voor de Duty de variabele Duty is neergezet waardoor de snelheid van de motor dus rechtstreeks afhankelijk is van de

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

  • Wisp648 / Galva-Wisp aan Proton PIC Basic koppelen
    Galva Wisp is van deze website een galvanisch gescheiden Wisp628 Beide Wisp programmers werken met dezelfde PC software en heb je de keus uit 3 programma s Klik hiervoor op de programma van je keuze Aanbevolen voor beginners BumbleBee is een programma dat direct onder Windows werkt en wordt aanbevolen voor beginners Het is een gebruiksvriendelijk Windows programma In de PIC Basic beginners cursus wordt van BumbleBee uitgegaan in combinatie

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

  • Een kleine PIC programmeren met de Galva-Wisp PIC programmer
    Wisp PIC programmer Aanbevolen wordt om altijd een 10Ω weerstand in de Vcc lijn van een kleine PIC te plaatsen Kleine PIC s zoals de 12Fxxx en 16F630 16F676 hebben geen LVP PGM pin voor de witte draad De witte draad wordt hier simpelweg niet aangesloten n c not connected Wisp628 Schema voor de Wisp628 PIC programmer van Voti De Wisp628 heeft in tegenstelling tot de Galva Wisp geen 1000 F en Schottky diode aan boord Bij gebruik van een Wisp628 moeten deze dus ook nog worden toegevoegd aan het extra circuitje Het type Schottky diode is niet kritisch de SB140 mag bijvoorbeeld ook een SB130 of 1N5819 zijn Wisp648 Programmeurs met een Wisp648 van Voti hoeven niets extra s te bouwen omdat bovenstaande schakeling reeds in deze programmer zit Het enige waar op gelet moet worden is dat er een jumper geplaatst is op de twee pinnen van jumper J1 doorverbonden of door jumper P short in stand Ena enable ingeschakeld te plaatsen als het een nieuwere Wisp648 versie betreft met drie pinnen voor de jumper Als een voeding wordt gebruikt die overweg kan met de power short voor de Vpp before Vcc o a een 7805 voeding kan dat dan mag jumper J1 altijd in gesloten stand staan De Wisp648 zal dan eerst proberen om de PIC te herkennen zónder gebruik te maken van de power short en als het herkennen niet lukt een poging wagen mét power short De 10Ω weerstand zit alleen aan de 100n ontkoppel condensator en de PIC zelf Andere componenten moeten gewoon met de 5V worden verbonden die komen dus niet achter de 10 Ω weerstand Alleen als de PIC geprogrammeerd moet worden dan komt ook nog de Galva Wisp programmer tijdelijk achter de 10Ω weerstand door de DIL clip over de PIC te plaatsen Zoals je ziet in de bovenste Galva Wisp tekening zitten alle drie draden van de TIP120 darlington transistor aan de 15 polige connector pin 1 2 en 7 Hierdoor kun je deze transistor en de 1k weerstand mooi in de behuizing van de connector zelf bouwen zie foto hieronder In het geval van een Wisp628 wordt het wat lastiger omdat dan ook nog de 1000 F elco en de Schottky diode in de connector moeten worden geplaatst waarvoor helaas geen ruimte is Een dongle die je tussen de Wisp628 en programmeerkabel plaatst is dan de beste oplossing zie foto rechts Meer info over de dongle voor de Wisp628 bij Voti Engelstalig Voor de Wisp6 4 8 hoef je helemaal niets te doen bij de Wisp648 is bovengenoemde schakeling al geheel ingebouwd Voor de wat grotere PIC s heb ik een andere kabel met een 18 pins DIL clip zonder de TIP120 dan niet nodig Met wat 10 seconden lijm kun je de TIP120 vast zetten De TIP120 kan worden gemonteerd in de behuizing van de 15 polige sub D connector Door het bovenste metalen gedeelte van de TIP120 er af te knippen past het makkelijk in de connector

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

  • Automatische theezetter met servomotor en aanraakbediening
    is uitgeschakeld in de CONFIG van een 16F628A is dat BODEN OFF De QT110 blijft stand by om in de gaten te houden of iemand het apparaat aanraakt Dit IC neemt maar 20 A op Meer info over de QT110 zie het automatische handdoekrek project Het apparaat wordt door mij iedere avond één of tweemaal gebruikt de volle 10 minuten o a voor een kop groene thee voor het slapen gaan De batterijen gaan daarbij zo n tweeënhalf maand mee voor ze weer moeten worden opgeladen Als de batterijen bijna leeg zijn is de servomotor de eerste die ermee stopt hij krijgt het theezakje niet meer goed omhoog De PIC en de QT110 zelf werken nog steeds goed als de spanning naar 2 volt is gezakt Alleen als het apparaat plat ligt kan de arm worden ingeklapt Het elastiekje kan niet echt zijn want dan kan de arm er niet langs Daarom is het in tweeën geknipt en zijn de uiteinden aan de behuizing vastgelijmd Door de vorm van de arm kan het theezakje goed boven een beker hangen De arm is gezaagd uit een ongeëtste printplaat met een zaagsnede voor het theezak touwtje Ingeklapt zit het in zijn geheel in de behuizing De arm wordt aangedreven door een goedkope kleine servomotor van Conrad 8 8 Ga met de muis op de foto staan voor een extra foto Omdat dit maar een tijdelijk project is als gein is er geen print voor ontworpen maar is hier gebruik gemaakt van een breadboard zodat als de lol er af is deze weer eenvoudig gesloopt kan worden De batterijen zijn onderin de behuizing geplaatst zodat het zwaartepunt onderin ligt Normale batterijen zijn niet toegepast omdat je dan aan 3 1 5V 4 5V of 4 1 5V 6V spanning komt Met vier oplaadbare batterijen komt de spanning rond de 5V uit 4 1 25V 5V en kun je de voeding rechtstreeks op de PIC en de servomotor aansluiten zonder een 7805 5V stabilisator De werking van het programma wordt voor een deel beschreven in PIC Basic cursus deel 8 het deel dat servomotoren behandeld De gong en het alarmsignaal door de luidspreker is beschreven in PIC Basic cursus deel 7 De instructie SLEEP met daarbij de interrupt op PORTB 0 om de PIC weer uit zijn slaap te halen is nog niet behandeld in de cursus maar kan worden bekeken in het PIC Basic Theezetter programma dat hieronder te downloaden is Met de LITE versie kan het programma alleen worden bekeken Om het te wijzigen of aan te passen is de FULL versie nodig omdat het te groot is voor de LITE versie Programma Normaal is de PIC altijd in slaap of de arm daarbij is in of uitgeklapt maakt niet uit Telkens als op PORTB 0 een lage puls van aanraaksensor QT110 krijgt komt het uit zijn slaap Het eerste wat de PIC dan gaat doen is kijken welke actie hij nu moet doen Dat kan hij zien aan twee dingen de

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



  •