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".
  • Vrij programmeerbare karakters (PIC Basic cursus 4)
    18 1C 0F 07 1F 1F 00 00 00 00 1F 1F 1F 1F 00 00 00 00 1F 1F 1F 1F 00 00 00 00 1F 1F 1C 1E 07 03 00 00 00 00 DELAYMS Snelheid WEND END Misschien kijk je vreemd op omdat er maar één keer PRINT 0 1 2 3 4 staat en dat ook nog buiten de lus Het programma werkt ook anders dan de anderen Met PRINT 0 1 2 3 4 worden de eerste 5 van de 8 vrij programmeerbare geheugenadressen van de HD44780 chip op het display afgebeeld Daar komen we verder niet meer aan Met PRINT FE 40 07 enz sturen we nu steeds opnieuw zelf ontworpen karakters naar de 5 geheugenadressen van de HD44780 chip De afbeelding op het display verandert nu omdat we het zichtbare displaygeheugen steeds wijzigen Er zijn 5 verschillende plaatjes die steeds na elkaar worden getoond Elk plaatje bestaat weer uit 5 zelf ontworpen karakters Underscore Soms wordt een programmaregel extreem lang zoals in bovenstaand programma In het programma hierboven is elke PRINT instructie daarom uitgesmeerd over 3 regels Met een underscore oftewel een onderstrepings karakter kun je de programmaregel afbreken en verdergaan op de volgende regel Een underscore mag je alleen direct na een komma plaatsen en werkt niet alleen bij de PRINT instructie maar bij alle instructies met komma s Meer info underscore Logo s en dergelijke op een numeriek niet grafisch display tekenen kan beperkt met meerdere karakters die samen één logo vormen Om bijvoorbeeld grote dobbelsteenogen op een display met twee regels te krijgen teken je eerst onderstaande karakters 0 1 2 3 4 5 6 Met deze 7 karakters zijn alle 6 mogelijke dobbelsteen waarden te tekenen Om nu bijvoorbeeld het cijfer 5 op het display te krijgen schrijf je in je programma PRINT AT 1 1 0 6 3 PRINT AT 2 1 4 5 Als je goed kijkt kun je zien hoe het dobbelsteen 5 is opgebouwd PRINT AT 1 1 betekent zoals gewoonlijk regel 1 positie 1 Daarna 0 6 3 oftewel plaats na elkaar de zelfgemaakte karakters CHR 0 daarnaast CHR 6 en dan nog CHR 3 De onderste twee stippen van het dobbelsteen komen op displayregel 2 PRINT AT 2 1 Op de eerste positie CHR 4 dan voor het lege vakje een spatie en tot slot CHR 5 Het resultaat is dan Het HD44780 display is zo gemaakt dat de ruimte tussen de karakters zowel links rechts als boven onder even groot is als de dots van het karakter zelf waardoor je als je het goed uitkient kleine tekeningen en logo s kunt tekenen waar de lege ruimtes precies in vallen In cursus deel 10 staan een paar voorbeelden van dobbelsteen gooi programma s Het volgende voorbeeld laat het woord G O A L in het groot op het display zien waarbij elke letter is opgebouwd uit vier karakters 2 karakters breed en 2 karakters hoog Aangezien elke grote letter hier uit vier karakters bestaat en het woord GOAL zelf ook uit vier letters bestaat zijn er 4 4 16 eigengemaakte karakters nodig terwijl het HD44780 maar ruimte heeft voor 8 eigengemaakte karakters je kunt het woord GOAL dus nooit continu op het display laten zien Ná elkaar kan wel Het eerste voorbeeld hiervan laat de letters na elkaar zien als ware het een looplicht DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF SYMBOL Snelheid 100 Snelheid loop effect DELAYMS 500 LCD stabilisering CLS Wis scherm en zet cursor links bovenaan WHILE 1 1 Letter G PRINT FE 40 03 07 0C 18 18 18 18 18 18 1C 06 03 03 00 00 00 18 18 18 18 18 18 0F 07 0F 0F 03 03 03 03 1E 1C PRINT AT 1 1 0 1 Regel 1 positie 1 karakter 0 en 1 spaties wist vorige PRINT AT 2 1 2 3 Regel 2 positie 1 karakter 2 en 3 spaties wist vorige DELAYMS Snelheid Letter O PRINT FE 40 03 07 0C 18 18 18 18 18 18 1C 06 03 03 03 03 03 18 18 18 18 18 0C 07 03 03 03 03 03 03 06 1C 18 PRINT AT 1 1 0 1 Regel 1 positie 1 spaties wist oude letter karakter 0 en 1 PRINT AT 2 1 2 3 Regel 2 positie 1 spaties wist oude letter karakter 2 en 3 DELAYMS Snelheid Letter A PRINT FE 40 03 07 0C 18 18 18 18 18 18 1C 06 03 03 03 03 03 1F 1F 18 18 18 18 18 18 1F 1F 03 03 03 03 03 03 PRINT AT 1 4 0 1 Regel 1 positie 4 spaties wist oude letter karakter 0 en 1 PRINT AT 2 4 2 3 Regel 2 positie 4 spaties wist oude letter karakter 2 en 3 DELAYMS Snelheid Letter L PRINT FE 40 18 18 18 18 18 18 18 18 00 00 00 00 00 00 00 00 18 18 18 18 18 18 1F 1F 00 00 00 00 00 00 1F 1F PRINT AT 1 7 0 1 Regel 1 positie 7 spaties wist oude letter karakter 0 en 1 PRINT AT 2 7 2 3 Regel 2 positie 7 spaties wist oude letter karakter 2 en 3 DELAYMS Snelheid WEND Experimenteer met de waarde van Snelheid om het effect naar wens in te stellen Als je de snelheid heel hoog zet bijvoorbeeld Snelheid 30 dan worden de letters heel snel na elkaar weergegeven Echt duidelijk worden de letters dan niet omdat elke letter natuurlijk maar 25 van de tijd zichtbaar is Het volgende voorbeeld doet het iets beter omdat deze de letters 50 van de tijd weergeven De letters G A en O L worden hier om en om weergegeven DEVICE 16F628A Gebruik een 16F628A type CONFIG INTRC OSC NOCLKOUT WDT OFF PWRTE ON LVP OFF MCLRE OFF SYMBOL Snelheid 40

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


  • Pelgrim CBU vervangingsprint met PIC
    Geprogrammeerd in PIC Basic Bij het inschakelen van de spanning laat de PIC een paar seconden het versie nummer zien de meest actuele versie van deze print is op dit moment Versie F 02 Als bij aankoop of na langere spanningsonderbreking de accu supercap nog leeg is dan gaat het programma in tijdinstel modus De CBU zal niet eerder willen werken voordat de tijd is ingesteld Wijzigingen ten opzichte van de originele CBU print Tijd instellen Om de tijd in te kunnen stellen moeten de urentoets en minutentoets tegelijk worden ingedrukt dit om het per ongeluk verstellen van de tijd te voorkomen Bij de originele print gebeurde dit nog al makkelijk omdat dezelfde toetsen ook gebruikt worden voor instelling van de timers Het display zal gaan knipperen en dan kan de tijd met de urentoets en de minutentoets worden ingesteld of gewijzigd Wanneer de juiste tijd is ingesteld dan moet op de linker toets worden gedrukt Dan stopt het knipperen van het display en ook dán pas begint de tijd te lopen De tijd kan dus precies goed gezet worden en de klok pas aan het lopen worden gemaakt door op de toets links bovenaan te drukken Seconden weergave Door op de toets links bovenaan te drukken wordt de tijd niet in uren en minuten maar in minuten en seconden weergegeven De minutenweergave van de actuele tijd komt hierbij op de plaats waar normaal de uren staan Timers instellen Het verstellen van de tijd in timermodus het instellen van de kacheltijden gebeurt zoals gebruikelijk Door steeds kort te drukken op de urentoets of minutentoets zal de uren of minuten steeds met 1 verhoogd worden Wordt de urentoets of de minutentoets echter vastgehouden dan zullen de uren resp minuten automatisch per 5 in een rustig tempo verhoogd worden afgerond op 5

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

  • PICkit2 aan Proton PIC Basic koppelen
    files microchip pk2cmd 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 PPIC target device F hex filename JN M R HK Klik daarna op Finished Bovenstaande parameters zorgen ervoor dat bij het indrukken in Proton PIC Basic van F10 of F11 JN M R HK Geef op het scherm weer wat er tijdens het programmeren gebeurt De HEX van het PIC Basic programma in de PIC wordt geprogrammeerd MCLR vrijgegeven wordt Sluit het programma na een druk op een toets HK van Hit Key Er zijn nog veel meer parameter instellingen Info is te vinden in het Readme for PK2CMD txt bestand en staat in de zojuist aangemaakte map PK2CMD 10 Klik tot slot op OK Vanaf nu kun je PICkit2 opstarten in de PIC Basic IDE door te drukken op F10 met compileren of op F11 zonder compileren F9 Compileer de huidig geactiveerde editor pagina Deze compileer toets genereert een HEX bestand F10 Compileer de huidig geactiveerde editor pagina genereer een HEX bestand en start pk2cmd exe op waarvandaan je de PICmicro kunt programmeren F10 is een combinatie van F9 en F11 F11 Met de F11 toets kun je PICkit2 starten zonder te compileren PICkit2 met Wisp connector Vele PIC programmeurs hebben ook al een Wisp628 Wisp648 of Galva Wisp PIC programmer in hun bezit Daarvoor zijn zelf vaak al diverse accessoires gemaakt denk aan DIL clip kabels of een vaste connector op een schakeling behuizing Er is een adapterkabeltje nodig om de eigen gemaakte accessoires zelf niet te hoeven aanpassen en origineel te laten De PICkit2 PIC programmer is hier voorzien van een adapterkabeltje met 15 polige sub D male

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

  • Overzicht PIC Basic operatoren
    een waarde een opgegeven aantal keer naar links Schuift de bits van een waarde een opgegeven aantal keer naar rechts Keert de volgorde van de laagste bits om Levert de opgegeven decimaal van een positief getal ABS Levert het absolute getal van een waarde fABS Levert het absolute getal van een waarde als FLOAT ACOS Levert de ARC COSINUS van een waarde in radialen ASIN Levert de ARC SINUS van een waarde in radialen ATAN Levert de ARC TANGENS van een waarde in radialen COS Levert de COSINUS van een waarde in radialen DCD 2 n machtsverheffen van een 4 bits waarde DIG Verouderd commando zie EXP Levert de exponentionele functie van een waarde ICOS Levert de cosinus van een integer waarde in radialen ISIN Levert de sinus van een integer waarde in radialen ISQR Levert de vierkantswortel van een integer waarde LOG Levert het natuurlijke logaritme van een waarde LOG10 Levert het logaritme van een waarde NCD Prioriteits encoder van een 16 bit waarde POW Berekent variabele naar power variabele REV Verouderd commando zie fROUND Rondt een FLOAT waarde af naar de dichtsbijzijnde integer waarde SIN Levert de SINUS van een waarde in radialen SQR Levert de vierkantswortel van

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

  • Overzicht PIC Basic commando's
    een PWM signaal met gebruikmaking van de CCP module HRSIN Ontvangt data van de seriële poort op PIC s die een USART bevatten HRSOUT Verzendt data naar de seriële poort op PIC s die een USART bevatten HRSIN2 Hetzelfde als HRSIN maar gebruikt een tweede USART als die aanwezig is HRSOUT2 Hetzelfde als HRSOUT maar gebruikt een tweede USART als die aanwezig is HSERIN Ontvangt data van de seriële poort op PIC s die een USART bevatten HSEROUT Verzendt data naar de seriële poort op PIC s die een USART bevatten HSERIN2 Hetzelfde als HSERIN maar gebruikt een tweede USART als die aanwezig is HSEROUT2 Hetzelfde als HSEROUT maar gebruikt een tweede USART als die aanwezig is I2CIN Leest bytes van een I C component Met definieerbare PIC poorten voor SDA SCL I2COUT Schrijft bytes naar een I C component Met definieerbare PIC poorten voor SDA SCL IF THEN ELSEIF ELSE ENDIF Voortzetting van het programma afhankelijk van bepaalde conditie s INC Verhoogt de waarde van een variabele met 1 Variabele Variabele 1 Inc rement INCLUDE Laadt een BASIC deel bestand in de broncode INKEY Scant een matrix toetsenbord INPUT Stelt een pin of poort in als een ingang LCDREAD Leest 1 byte van een grafisch display LCDWRITE Schrijft 1 byte naar een grafisch display LDATA Plaatst tekstinformatie in het code geheugen LEFT Kopieert een opgegeven aantal karakters van het linkerdeel van een string naar een andere string LEN Geeft het aantal karakters dat een string bevat weer NULL eindkarakter niet meegerekend LINE Tekent een rechte lijn in een richting op een grafisch display LINETO Tekent een rechte lijn in een richting op een grafisch display vanaf het eindpunt van de vorige LINE commando LOADBIT Maakt een bit bitnummer afhankelijk van index van een poort of variabele hoog of laag afhankelijk van waarde LOOKDOWN Zoekt een constante in een tabel LOOKDOWNL Zoekt een constante of variabele in een tabel LOOKUP Maakt variabele gelijk aan een constante uit een tabel LOOKUPL Maakt variabele gelijk aan een constante of variabele uit een tabel LOW Stelt een pin of poort in als een uitgang met een laag 0V niveau LREAD Leest een waarde van een LDATA tabel en geeft dat aan een variabele LREAD8 Leest een 8 bits waarde van een LDATA tabel en geeft dat aan een variabele LREAD16 Leest een 16 bits waarde van een LDATA tabel en geeft dat aan een variabele LREAD32 Leest een 32 bits waarde van een LDATA tabel en geeft dat aan een variabele dit kunnen ook drijvende komma waarden zijn MID Kopieert een opgegeven aantal karakters vanaf een opgegeven plaats van een string naar een andere string ON GOSUB Roept een subroutine op afhankelijk van een index waarde ON GOTO Het programma springt naar een locatie afhankelijk van een index waarde Zie BRANCH ON GOTOL Het programma springt naar een locatie afhankelijk van een index waarde Zie BRANCHL ON HARDWARE INTERRUPT Voert een subroutine uit bij een hardware interrupt hoge prioriteit ON INTERRUPT Voert een

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

  • Gemoderniseerde T65 telefoontoestel met DTMF tonen
    kortsluiting ontstaat S2 heeft een dubbelfunctie niet alleen zorgt deze voor de lijnkortsluiting als aan de kiesschijf wordt gedraaid maar tevens overbrugt hij de luidspreker en microfoon waardoor de telpulsen van S1 tijdens het terugdraaien van de kiesschijf niet hoorbaar zijn door de luidspreker S1 en S2 zitten in de kiesschijfbehuizing waarbij S1 in rust is gesloten en S2 geopend zoals het schema is getekend Wordt er nu aan de kiesschijf gedraaid dan sluit S2 zich meteen en opent pas weer als de kiesschijf helemaal terug in de ruststand is Wanneer er dus een cijfer wordt gedraaid wordt S2 gesloten maar is S1 ook nog steeds gesloten een kortsluiting over lijn a en b dus Alleen bij het vanzelf terugdraaien van de kiesschijf opent S1 zich een aantal maal afhankelijk van het gedraaide cijfer Is bijvoorbeeld cijfer 9 gedraaid dan wordt S1 negen maal geopend tijdens het vanzelf terugdraaien van de kiesschijf Wordt cijfer 0 gedraaid dan volgen er geen 0 maar 10 pulsjes Nadat de kiesschijf helemaal is teruggedraaid opent S2 zich weer en kan er eventueel een verbinding worden gemaakt Condensator C1 heeft een dubbel functie In rust staat deze in serie met de telefoonbel Als nu de hoorn van de haak wordt genomen dan wordt de telefoonbel afgekoppeld en komt C1 nu als RC combinatie met R1 over S1 de telpulsschakelaar van de kiesschijf als vonkenblusser te staan om de levensduur van de contacten van S1 te verlengen AT Aardings Toets De aardingstoets krijgt in dit project de functie van herhaaltoets Meer info zie verderop EB Extra Bel Over aansluitingen 3 en 4 kan een extra telefoonbel worden geplaatst in serie met de bel van de telefoon zelf dus Wordt hier geen gebruik van gemaakt dan moet aansluiting 3 met 4 worden doorverbonden anders doet de telefoonbel zelf het niet Dus even controleren of deze verbinding in de telefoon is gemaakt De vernieuwde T65 Als de kleine 141101 B print in de T65 telefoon is ingebouwd en aangesloten dan genereert de kiesschijf DTMF tonen en dus geen pulsen meer Het printje is smal en kan in het vak van de telefoon liggen waar de aansluitpunten zich bevinden Om ruimte voor een connector op de print te besparen zijn de soepele draden rechtstreeks aan de print gesoldeerd De 141101 B print is als compleet gemonteerd en werkend geheel verkrijgbaar Hier bestellen De print aansluiten De gele en rode draad van de kiesschijf loshalen en verlengen De vrijgekomen aansluitpunten Gl en Rd doorverbinden De aansluitingen staan ook op de achterzijde van het printje vermeldt De telefoon maakt geen gebruik meer van de EB en aarde aansluitingen deze moeten dan ook in de steker worden afgekoppeld De groene draad punt 2 van de 141101 B print moet worden verbonden met aansluitpunt 2 van de T65 De korte rode draad punt 6 van de 141101 B print moet worden verbonden met aansluitpunt 6 van de T65 De blauwe draad punt 3 van de 141101 B print moet worden verbonden met aansluitpunt

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

  • Informatie over de PIC file stuffer
    file stuffer installeren Download PIC file stuffer onderaan deze pagina en pak het uit Plaats PIC file stuffer in de map van het stuurprogramma dat je PIC programmer gebruikt Voorbeeld voor de PICkit2 programmer Plaats PIC file stuffer exe bij gebruik van PK2CMD in de map C Program Files Microchip PK2CMD Voorbeeld voor de Galva Wisp PIC programmer waarbij je de keus hebt tussen drie programma s Plaats PIC file stuffer exe bij gebruik van BumbleBee in de map C Program Files BumbleBee Plaats PIC file stuffer exe bij gebruik van XWisp in de map C Program Files XWisp Plaats PIC file stuffer exe bij gebruik van XWisp2 in de map C Program Files XWisp2 Meerdere tegelijk kan natuurlijk ook Als je naast BumbleBee bijvoorbeeld XWisp gebruikt dan in beide mappen een PIC file stuffer exe plaatsen Het installeren lijkt op het eerste gezicht omslachtig maar dit komt straks het gebruiksgemak ten goede PIC file stuffer instellen Ga naar de map waarin je picfile stuffer exe hebt geplaatst Als voorbeeld nemen we hier de map C Program Files BumbleBee voor een ander programma bijvoorbeeld XWisp of XWisp2 de map van dát programma nemen De PIC file stuffer in de map van BumbleBee Start picfile stuffer exe door erop te dubbel klikken Klik op de knop Info en stel op de infopagina eerst de gewenste taal English of Nederlands in Tevens kun je de getoonde informatie even doornemen Klik daarna op die infopagina op de knop Terug Selecteer nu de bestanden die je nooit nodig hebt en die na het compileren dan ook meteen weer opgeruimd mogen worden Als je alleen PIC s programmeert kun je alles aanvinken behalve HEX want dat is het bestand dat in de PIC moet worden geprogrammeerd Nu moet nog het vak Programmerbestand worden ingevuld Voor BumbleBee 4 0 BumbleBee exe hex filename target target device Voor XWisp XWisp exe wait end port 19200 target target device go hex filename Voor XWisp2 XWisp2w exe baud 19200 rts on go hex filename Voor PICkit2 pk2cmd exe PPIC target device F hex filename JN M R Voor de PICkit2 hitkey versie kan ook nog parameter HK achteraan bijgeplaatst worden Let hierbij wel op dat de instelling van bijvoorbeeld BumbleBee gebeurt in de PIC file stuffer die in de map van BumbleBee staat Dus dat je niet de instelling van XWisp opgeeft in de verkeerde PIC file stuffer want dan start je PIC programmer niet op Overigens een baudrate van 38400 in plaats van 19200 is vaak ook mogelijk met de Galva Wisp Klik tot slot op OK zodat de instellingen worden opgeslagen en PIC file stuffer wordt afgesloten Met de knop Annuleren kun je PIC file stuffer afsluiten zonder dat de gewijzigde instellingen worden opgeslagen PIC file stuffer is nu geïnstalleerd en ingesteld Nu moet PIC file stuffer nog aan PIC Basic worden gekoppeld PIC file stuffer met BumbleBee koppelen aan PIC Basic De PIC file stuffer moet nog gekoppeld worden aan Proton PIC Basic IDE Selecteer View

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

  • PIC programmeren met PIC Basic (8)
    gezet De tweede berekening 4 3 wordt door de PIC zelf uitgevoerd en wordt pas uitgerekend als de PIC zijn programma afdraait De uitkomst 7 wordt door de PIC in de variabele met de naam Variabele gezet Constante zal hier in de PIC altijd de waarde 3 behouden Je kunt Constante bijvoorbeeld niet verhogen met INC Constante want dat krijg je een foutmelding tijdens het compileren Sluit nu twee pulstoetsen en een rode LED aan op de PIC Vergeet de BAT85 Schottky diode niet Met het volgende programma is met de twee toetsen de servomotor te besturen 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 LAAG 0 Laag signaal Algemene constanten SYMBOL Snelheid 30 Snelheid waarmee de motor verdraaid Poortnamen SYMBOL Motor PORTA 0 Poort waar de pulsjes voor de servo uitkomen SYMBOL LinksOm PORTB 0 Toets voor motor linksom SYMBOL RechtsOm PORTB 1 Toets voor motor rechtsom Variabelen declareren WORD DIM Positie AS WORD WORD variabele bevat de positie van de motor as 76543210 PORTA 00000000 Maak alle poorten van PORTA laag TRISA 11111110 PORTA 0 is uitgang voor de servomotor PORTB PULLUPS ON On chip pull up weerstanden actief voor de toetsen CLEAR Wis alle RAM geheugen Hoofdprogramma Positie 1500 Eerst de servo centreren WHILE 1 1 Oneindige lus IF RechtsOm LAAG AND Positie 2300 THEN Positie Positie Snelheid IF LinksOm LAAG AND Positie 700 THEN Positie Positie Snelheid SERVO Motor Positie Stuur Positie pulsjes naar poort Motor DELAYMS 20 20mSec 50Hz eventueel wijzigen bij ander type motor WEND Terug naar WHILE Het meeste is bekend In het hoofdprogramma krijgt de variabele Positie eerst een waarde van 1500 toegewezen 1500 1 5mSec zodat bij PIC opstart bijvoorbeeld de stuurwielen van een modelauto of het roer van een boot of vliegtuig recht worden gezet Een signaal met 1 5mSec pulsen zal de meeste servomotoren in het midden neutraalstand 90 plaatsen Als de servomotor niet precies in het midden staat moet de waarde 1500 wat verhoogt of verlaagt worden Door op toets RechtsOm te drukken wordt de pulsbreedte vergroot waardoor de as van de servomotor rechtsom naar de nieuwe positie zal draaien en met toets LinksOm verklein je de pulsbreedte waardoor de as linksom naar de nieuw opgegeven positie zal draaien De variabele Positie wordt hier met de grootte van de constante Snelheid verandert De naam Snelheid is gekozen omdat de stapgrootte de snelheid van de servomotor bepaalt Als Snelheid bijvoorbeeld maar 1 is zal de pulsbreedte maar heel langzaam steeds langer of korter worden waardoor de as van de servomotor maar heel langzaam verdraaid Er zit echter een klein foutje in bovenstaand programma en wel in dit gedeelte IF RechtsOm LAAG AND Positie 2300 THEN Positie Positie Snelheid IF LinksOm LAAG AND Positie 700 THEN Positie Positie Snelheid De minimale positie staat op 700 en de maximale positie staat op 2300 ingesteld maar zoals het hierboven staat beschreven is er toch een mogelijkheid dat deze waarden worden overschreden De stapgrootte Snelheid is bij SYMBOL op 30 ingesteld Nadat Positie die bij start op 1500 neutraalstand is gezet 26 maal is verhoogt met de stapgrootte 30 is de waarde van Positie 2280 geworden 1500 26 30 Kijk wat er gebeurt als je opnieuw op de toets RechtsOm drukt Het programma bekijkt of toets RechtsOm laag is en dat is hij want je drukt op de toets én hij bekijkt of Positie kleiner is dan de maximale waarde van 2300 en dat is ook waar want Positie is op dit moment 2280 Dus het programma zegt beide beweringen zijn waar dus tel er bij Positie weer 30 de waarde van Snelheid op En 2280 30 2310 de maximale waarde is hierbij tóch overschreden En nu is dit nog maar een kleine overschrijding Als Positie op een gegeven moment bij andere startwaarden 2295 was en de stapgrootte Snelheid bijvoorbeeld 70 dan zou de verhoging ook uitgevoerd worden waardoor 2295 70 2365 de maximale waarde van 2300 met maarliefst 65 zou zijn overschreden Dus moet je zoiets anders aanpakken IF RechtsOm LAAG THEN Als toets RechtsOm is ingedrukt dan IF Positie Snelheid 2300 THEN Bekijk of nog met Snelheid kan worden verhoogt Positie Positie Snelheid Servo positie verhogen met waarde Snelheid ELSE anders Positie 2300 Positie van servo op maximaal zetten meest rechtsom ENDIF ENDIF IF LinksOm LAAG THEN Als toets LinksOm is ingedrukt dan IF Positie Snelheid 700 THEN Bekijk of nog met Snelheid kan worden verlaagt Positie Positie Snelheid Servo positie verlagen met waarde Snelheid ELSE anders Positie 700 Positie van servo op minimaal zetten meest linksom ENDIF ENDIF Als je bovenstaande deel hiervoor in de plaats zet wordt de waarde niet overschreden Eerst maak je een IF THEN blok die kijkt of toets RechtsOm is ingedrukt of niet Als deze toets niet is ingedrukt wordt er verder ook helemaal niets gewijzigd In dat IF THEN blok plaats je opnieuw een ander IF THEN blok Deze telt alvast Snelheid bij Positie op en bekijkt dan of de uitkomst onder de waarde 2300 blijft Als blijkt dat dat zo is dan kan Positie gerust verhoogt worden En anders ELSE wordt Positie gewoon op het maximum 2300 gezet Voor de toets LinksOm werkt het in principe net zo alleen dan omgekeerd Het onderstaande programma is aangepast en nu wél goed Tevens hebben de maximale en minimale positie een constantenaam gekregen namelijk MaxPos en MinPos 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 LAAG 0 Laag signaal Algemene constanten SYMBOL MaxPos 2300 Maximale uitslag van de servomotor 180o SYMBOL MinPos 700 Minimale uitslag van de servomotor 0o SYMBOL Snelheid 30 Snelheid waarmee de motor verdraaid Poortnamen SYMBOL Motor PORTA 0 Poort waar de pulsjes voor de servo uitkomen SYMBOL LinksOm PORTB 0 Toets voor motor linksom SYMBOL RechtsOm PORTB 1 Toets voor motor rechtsom Variabelen declareren WORD DIM Positie AS WORD WORD variabele bevat de positie van de motor as 76543210 PORTA 00000000 Maak alle poorten van PORTA laag TRISA 11111110 PORTA 0 is uitgang voor de servomotor PORTB PULLUPS ON On chip pull up weerstanden actief voor de toetsen CLEAR Wis alle RAM geheugen Hoofdprogramma Positie 1500 Eerst de servo centreren WHILE 1 1 Oneindige lus IF RechtsOm LAAG THEN Als toets RechtsOm is ingedrukt dan IF Positie Snelheid MaxPos THEN Bekijk of nog met Snelheid kan worden verhoogt Positie Positie Snelheid Servo positie verhogen met waarde Snelheid ELSE anders Positie MaxPos Positie van servo op maximaal zetten meest rechtsom ENDIF ENDIF IF LinksOm LAAG THEN Als toets LinksOm is ingedrukt dan IF Positie Snelheid MinPos THEN Bekijk of nog met Snelheid kan worden verlaagt Positie Positie Snelheid Servo positie verlagen met waarde Snelheid ELSE anders Positie MinPos Positie van servo op minimaal zetten meest linksom ENDIF ENDIF SERVO Motor Positie Stuur Positie pulsjes naar poort Motor DELAYMS 20 20mSec 50Hz eventueel wijzigen bij ander type motor WEND Terug naar WHILE In het voorbeeld hierna is overigens een andere manier te zien die er voor zorgt dat de minimum en maximum waarden niet worden overschreden Omdat de SERVO instructie in een oneindige WHILE WEND lus staat zal het programma constant pulsjes naar de servomotor sturen of er nu een toets is ingedrukt of niet Dit betekent dat de motor constant zijn positie blijft behouden en stroom op zal nemen Het is ook mogelijk dat de motor geen stroom opneemt als de motor eenmaal op z n positie is Het volgende programma zal de servomotor verdraaien naar de opgegeven positie en daarna nog zo n 2 seconden zijn positie vasthouden Daarna vallen de pulsjes weg en zal de servomotor geen stroom meer opnemen De motor is dan met handkracht te verdraaien Ikzelf heb dit gebruikt voor de aandrijving van een grote volumepotmeter Als de volumepotmeter eenmaal in de juiste stand staat zal deze toch niet uit zichzelf gaan verdraaien dus kan de servomotor ook inactief worden gemaakt 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 SYMBOL TRUE 1 Waar 1 Algemene constanten SYMBOL MaxPos 2300 Maximale uitslag van de servomotor 180o SYMBOL MinPos 700 Minimale uitslag van de servomotor 0o SYMBOL Snelheid 20 Snelheid waarmee de servomotor verdraaid Poortnamen SYMBOL Motor PORTA 0 Poort waar de pulsjes voor de servo uitkomen SYMBOL Volume PORTB 0 Toets voor volume Variabelen declareren WORD DIM Positie AS WORD WORD variabele bevat de positie van de motor as BYTE DIM BD1 AS BYTE Byte Dummy 1 BIT DIM VolumeUp AS BIT Is TRUE waar bij volume harder en FALSE bij zachter 76543210 PORTA 00000000 Maak alle poorten van PORTA laag TRISA 11111110 PORTA 0 is uitgang voor de servomotor PORTB PULLUPS ON On chip pull up weerstanden actief voor de toetsen CLEAR Wis alle RAM geheugen Hoofdprogramma Positie MinPos 200 Eerst het volume laag zetten 200 boven het minimum FOR BD1 1 TO 80 80 pulsjes de tijd om dat te doen SERVO Motor Positie Stuur servomotor pulsjes DELAYMS 20 20mSec per puls 50Hz NEXT WHILE 1 1 Oneindige lus WHILE Volume HOOG WEND Als volumetoets niet is ingedrukt dan wachten op volumetoets IF VolumeUp TRUE THEN Als volume harder moet dan Positie verhogen Positie Positie Snelheid Verhogen met Snelheid ELSE anders volume zachter dus Positie verlagen Positie Positie Snelheid Verlagen met Snelheid ENDIF IF Positie MaxPos THEN Positie MaxPos Als Positie boven maximum uitkomt IF Positie MinPos THEN Positie MinPos Als Positie onder minimum uitkomt FOR BD1 1 TO 100 Nog 100 pulsjes geven als volumetoets wordt losgelaten SERVO Motor Positie Stuur Positie pulsjes naar poort Motor DELAYMS 20 20mSec 50Hz eventueel wijzigen bij ander type motor IF Volume LAAG THEN BREAK FOR NEXT lus meteen verlaten als volumetoets is ingedrukt NEXT IF BD1 1 THEN VolumeUp VolumeUp Volume richting omkeren Harder Zachter WEND Terug naar WHILE Hier is een andere manier gebruikt die er voor zorgt dat de MinPos en MaxPos waarden niet worden overschreden Als Positie verstelt wordt wordt meteen daarna gekeken of de minimale of maximale waarde is overschreden en als dat zo is dan wordt Positie teruggebracht naar de minimale of maximale waarde Pas daarna wordt de instructie SERVO uitgevoerd De snelheid van de servomotor wordt beperkt door de constante Snelheid Wanneer je deze echter te hoog instelt kan de servomotor het niet bijhouden Met de goedkope servomotor van Conrad kun je tot Snelheid 70 gaan een grotere waarde zal de servomotor niet sneller laten draaien In het hoofdprogramma wordt eerst de volume naar zacht gedraaid Er worden 80 pulsjes met de waarde van MinPos 200 naar de servo gestuurd dit is de stand van het opstartvolume Binnen die 80 pulsjes moet de servomotor de volumepotmeter naar zacht zien te draaien MinPos is de volume op 0 maar omdat er 200 bij op worden geteld wordt de volume zacht gezet De onderste FOR NEXT lus stuurt de servo nog 100 pulsjes na zodra de toets Volume op PORTB 0 wordt losgelaten Dit wordt bereikt door de lus meteen te verlaten met BREAK zolang de Volume toets wel is ingedrukt Wordt de toets op een gegeven moment losgelaten dan wordt de lus dus niet verlaten en zal de FOR NEXT lus de SERVO instructie nog 100 keer uitvoeren Na de NEXT wordt de draairichting alvast omgekeerd voor de volgende toetsindruk door de bitvariabele VolumeUp van toestand te veranderen 0 wordt 1 of 1 wordt 0 Lus teller BD1 van de laatste FOR NEXT wordt nooit hoger dan 1 zolang de toets Volume is ingedrukt De volumerichting mag dan ook pas worden omgedraaid als BD1 groter is dan 1 want anders zou de richting ook steeds worden omgedraaid als de toets is ingedrukt en dat hoort natuurlijk niet Met het volgende programma worden zowel de potmeter als beide toetsen gebruikt Eerst wordt de servomotor op 0 gezet Bij een druk op S2 zal de servo naar een met de potmeter ingestelde hoek gaan Door een druk op S1 draait de servo weer terug naar 0 De stand van de servomotor is eenvoudig in te stellen door S2 ingedrukt te houden en dan de potmeter in te stellen Als de juiste stand eenmaal is ingesteld dan zal de servo hier steeds naar toe gaan als op S2 wordt gedrukt In dit voorbeeld wordt meteen de absolute positie aan de servo opgegeven er wordt dus niet langzaam naar toe gewerkt Hierdoor zal de servomotor op zijn snelst naar de gevraagde positie gaan De snelheid van de servomotor is hier dus niet in te stellen Het programma wordt hierdoor wel eenvoudiger 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 LAAG 0 Laag signaal Algemene constanten SYMBOL MinPos 700 Minimale uitslag van de servomotor 0o Poortnamen SYMBOL Motor PORTA 0 Poort waar de pulsjes voor de servomotor uitkomen SYMBOL Potmeter PORTA 1 Potmeter bepaalt hoever de servo verdraaid na druk op S2 SYMBOL S1 PORTB 0 S1 zet de servo terug naar beginstand linksom 0o SYMBOL S2 PORTB 1 S2 zet de servo in de met de potmeter ingestelde positie Variabelen declareren WORD DIM Positie AS WORD WORD variabele bevat de positie van de servomotor 76543210 PORTA 00000000 Maak alle poorten van PORTA laag TRISA 11111110 PORTA 0 is uitgang voor de servomotor PORTB PULLUPS ON On chip pull up weerstanden actief voor de toetsen CLEAR Wis alle RAM geheugen Hoofdprogramma Positie MinPos Startwaarde servomotor in beginstand zetten linksom 0o WHILE 1 1 Oneindige lus IF S1 LAAG THEN Als op S1 wordt gedrukt dan Positie MinPos Servo in beginstand zetten ELSEIF S2 LAAG THEN anders als op S2 wordt gedrukt dan Positie MinPos 6 POT Potmeter 140 Meet potmeter reken om geef aan Positie ENDIF SERVO Motor Positie Stuur Positie uSec pulsjes naar poort Motor DELAYMS 20 Om de 20mSec pulsjes 50Hz WEND De Schaal van de functie POT weer aanpassen aan je eigen waarden in het voorbeeld staat deze op 140 Het voorbeeld hierboven is aardig eenvoudig maar onnauwkeurig MaxPos kan hier niet worden opgegeven maar wordt berekent door de waarde van de functie POT met 6 te vermenigvuldigen Als de potmeter helemaal open staat dan geeft POT de waarde 255 Dit wordt dus vermenigvuldigd met 6 waarna MinPos met waarde 700 er nog bij op wordt geteld De uitkomst voor de maximum positie is 700 6 255 2230 terwijl het 2300 mag zijn De onnauwkeurigheid zit hem in de vermenigvuldigingsfactor De waarde 6 blijft de hoogste uitkomst onder de maximumwaarde 2300 houden maar zit er met 2230 wel erg ruim onder Als je met 7 vermenigvuldigd kom je 255 hoger te liggen en zal je dus bóven de maximumwaarde uit komen Bedenk dat alleen hele getallen mogelijk zijn Je kunt dit dus niet oplossen door de POT met 6 275 te vermenigvuldigen want de compiler rond het naar beneden af dus wordt het toch weer een 6 Er is wel een mogelijkheid voor drijvende komma getallen maar die zijn nog niet behandeld in de cursus en dat vreet bovendien programmageheugen van de PIC Onderstaand programma doet hetzelfde als de bovenste maar doet dit veel nauwkeuriger De truc is hier om de waarden eerst veel groter te maken door vermenigvuldiging dan te gaan berekenen en dan weer terug te brengen door deling naar de normale waarden Hier is bovenin het programma zowel MinPos voor de minimale positie 0 en MaxPos voor de maximale positie 180 op te geven 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 LAAG 0 Laag signaal Algemene constanten SYMBOL MaxPos 2300 Maximale uitslag van beide servomotoren 180o SYMBOL MinPos 700 Minimale uitslag van beide servomotoren 0o Poortnamen SYMBOL Motor PORTA 0 Poort waar de pulsjes voor de servomotor uitkomen SYMBOL Potmeter PORTA 1 Potmeter bepaalt hoever de servo verdraaid na druk op S2 SYMBOL S1 PORTB 0 S1 zet de servo terug naar beginstand linksom 0o SYMBOL S2 PORTB 1 S2 zet de servo in de met de potmeter ingestelde positie Variabelen declareren DWORD DIM DWoord AS DWORD Uitkomst berekening van potmeter kan boven 65535 uitkomen WORD DIM Positie AS WORD WORD variabele bevat de positie van de servomotor 76543210 PORTA 00000000 Maak alle poorten van PORTA laag TRISA 11111110 PORTA 0 is uitgang voor de servomotor PORTB PULLUPS ON On chip pull up weerstanden actief voor de toetsen CLEAR Wis alle RAM geheugen Hoofdprogramma Positie MinPos Startwaarde servomotor in beginstand zetten linksom 0o WHILE 1 1 Oneindige lus IF S1 LAAG THEN Als op S1 wordt gedrukt dan Positie MinPos Servo in beginstand zetten ELSEIF S2 LAAG THEN anders als op S2 wordt gedrukt dan DWoord MaxPos MinPos POT Potmeter 140 Schaal waarde 140 eventueel aanpassen Positie MinPos Dwoord 255 Reken de instelling van potmeter om naar uSec ENDIF SERVO Motor Positie Stuur Positie uSec pulsjes naar poort Motor DELAYMS 20 Om de 20mSec pulsjes 50Hz WEND Zoals gebruikelijk eerst weer eventueel de MinPos en MaxPos alsook de Schaal van de functie POT aanpassen aan je eigen waarden In het hoofdprogramma wordt eerst de motor op 0 gezet met Positie MinPos Dan wordt in de WHILE WEND lus constant de SERVO instructie uitgevoerd die de servomotor op de waarde van de WORD variabele Positie houdt Zodra er op S2 wordt gedrukt wordt eerst de potmeter uitgelezen met POT In deze regel wordt ook het eerste deel van de berekening gedaan die de gemeten potmeterstand moet omzetten naar een microseconde waarde die voor de servo geschikt is Eerst wordt hiervoor de MinPos waarde van MaxPos afgehaald zodat bekend is hoeveel microseconden verschil er zit tussen de potmeter op minimum en maximum in het voorbeeld is dat dus 2300 700

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



  •