PICPROGRAMMER:  Deze site biedt de mogelijkheid om hier alle vragen te deponeren en evt. info omtrent de cursus welke geheel door de Veron afd.Meppel verzorgd werd onder leiding van Dennis PA4DEN.

reacties naar  pe1pbq@amsat.org 


CALLGEVER gemaakt door Wim PAØWSO compleet met printlay-out. klik hier


29-04-2002 Die is het laatste nieuwe PIC.TXT filetje die dinsdag aan het einde van de avond is gesaved, ik weet niet of het de moeite waard is om dit op internet te zetten, hij is bijna hetzelfde als de vorige keer. Er staan streepjes voor de regels die geïnverteerd moeten worden. BTFSS wordt BTFSC, de COMF moet vervangen worden door een MOVFW.

Ik heb zelf weinig tijd, ik ben de resterende printjes voor diverse mobilofoons aan het opmaken en dan stop ik ook met het produceren daarvan. Door een aantal functies en tekst uit die software te verwijderen kan deze in een gewone EPROM, men kan dan zelf downloaden. Ik wil nu toch meer m'n vrije tijd in software programmeren en vooral ATV steken. Ik neem aan dat Rien in staat is om de regels te inverteren en te testen op het kabeltje en zonodig andere aanpassingen te doen. Ik heb zelf geen inverterend kabeltje dus ik kan het zelf niet testen, mocht het niet lukken hoor ik het wel.

Als er verder vragen zijn over software, ben ik bereikbaar op dit mailadres of op de verenigingsavonden. Helaas ben ik niet al te vaak QRV, 's avond's ben ik pas na 21 uur thuis.

Groetjes, Dennis   PIC tekst bestand


24-04-2002 n de bijlage de gisteren avond beloofde schakeling die je kunt gebruiken i.p.v een MAX 232.

Het aantal komponenten van de schakeling is zo gering dat de schakeling in een RS232 connector kan worden ondergebracht. De connector nummering is gegeven voor de schakeling die bij de PIC is gemonteerd. Wordt de schakeling in de connector gemonteerd dan de punten 2 en 3 omkeren !!

suc6 ermee  Rien pa0mll    MAX232


21-03-2002 Dit progje leest de COM poort van een PC.   COMPOORTLEZER


13-03-2002 In de bijlage 4 programma's , in de Zip file onder andere de LICHTKRANT 

Zie de file     lichtkrant

Rien


10-03-2002    ZIP bestand !!

Hallo,  

Vandaag heb ik het I2C gedeelte in de PIC gezet, het resultaat heb ik bijgevoegd.  

Het meeste staat in I2C.txt. Tot dinsdag,  Groetjes, Dennis PA4DEN


17-02-2002  ZIP bestand

De display's die door de programma's worden aangestuurd zijn op zich 'intelligente' display's, ze kunnen zelf een cursor weergeven, scrollen en scherm wissen. Deze display's worden vrij veel gebruikt vanwege de vele mogelijkheden en de relatief makkelijke aansturing, makkelijk wil zeggen dat er niet hoeft worden nagedacht over welke ledjes moeten branden voor een bepaald cijfer, zoals bij een 7 segments display. Een nadeel is dat er een vrij lange initialisatie nodig is, de initialisatie is het display instellen na het opkomen van de voeding. Deze display's nieuw kopen is vrij duur, heel vaak zijn ze uit oude printers, faxen, telefoons of kopieer-apparaten te slopen. Helaas zijn er onder de 1 regelige display's twee verschillende types.

Al deze display's hebben een geheugen van 2 keer 40 tekens, als we een teken naar het display toe sturen zet hij dit in zijn geheugen op de plaats die we zelf aan kunnen geven, of als we dat niet doen op de plaats naast het vorige teken. Hetgeen weergegeven wordt op het scherm van het display is een gedeelte van het geheugen, er zijn display's met 4 regels van 20 tekens, daarbij wordt het gehele geheugen als volgt weergegeven:

Regel1:  A00 A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19
Regel2:  B00 B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19
Regel3:  A22 A21 A22 A23 A24 A25 A26 A27 A28 A29 A30 A31 A32 A33 A34 A35 A36 A37 A38 A39
Regel4:  B22 B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31 B32 B33 B34 B35 B36 B37 B38 B39

Hierbij is A00 t/m A39 het eerste geheugen en B00 t/m B39 het tweede geheugen.

Bij twee regelige display's is dit doorgaans:

Regel1:  A00 A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15 A16 A17 A18 ...
Regel2:  B00 B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 B12 B13 B14 B15 B16 B17 B18 ...

Afhankelijk of het 16,20,24 of 40 tekens per regel heeft.

Bij 1 regelige display's zijn er type met 1 IC achterop en met twee IC's achterop. Met 1 IC wordt het geheugen vaak weergegeven als:

         A00 A01 A02 A03 A04 A05 A06 A07 B00 B01 B02 B03 B04 B05 B06 B07

Als we tekens sturen om 'Display test' op het display te krijgen, kunnen we de positie aangeven van de eerste letter. Het display kent daar een commando voor. Voor de daarop volgende tekens zouden we geen nieuwe geheugenplaats hoeven aanwijzen omdat het display
dat zelf kan. Het probleem is nu dat na de eerste 8 tekens het display in A08 door gaat schrijven en dat is normaal gesproken niet zichtbaar. We moeten dan zelf opgeven dat het display op een andere lokatie verder moet schrijven, meestal B00.

Display's met 2 IC's lopen iets logischer door:

         A00 A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15

Deze programma's zijn gemaakt voor het meest simpele type, er komt dinsdag een versie voor het andere type display.

Het eerste programma (1 PIC disp.txt) regelt deze instelling en schrijft verder alleen de tekst 'Display test' naar het display. De routine INIT wordt 1 keer aangeroepen, daarna wordt de routine LETTER gebruikt om een letter of teken naar het display te sturen. Elke keer als er een letter naar het display gestuurd wordt zet het display zelf de letter naast de vorige, daar hoeft de PIC dus geen rekening mee te houden. In de initialisatie is te kiezen of de letter links of rechts naast de voorgaande geplaatst moet worden. Deze commando's staan in de file "LCD display's.pdf", het R/S bitje van het display geeft aan  of de verstuurde gegevens een commando is of data. Alle commando's zijn 8 bits, deze orden in twee porties van 4 bits naar het display gestuurd om aansluitdraden en uitgangen van de PIC te sparen. De commando's zijn te onderscheiden door te kijken naar het hoogste bit dat 1 is,


02-02-2002  In-circuit programmeren.   Hallo PIC programmeerders,

 

Zoals jullie weten ging het in-circuit programmeren met het experimenteer printje niet goed, het gevolg kon zijn een opgeblazen programmer.

Na wat experimenteren heb ik nu toch een oplossing gevonden, voor diegene die dit wil veranderen hierbij de oplossing.  

De veranderingen vinden plaats in het programmeer apparaat.

 

1e Haal het draadje van de clock aansluiting op de hoofdprint los en soldeer hier een weerstandje van 1 Kohm tussen.

 

2e Knip het weerstandje van 4,7 Kohm welke rechts naast de 25 polige sub D connector (tussen 100nF C en transistor bc557) zit aan trafo zijde los. Dus alleen aan deze kant!

 

3e Haal het draadje van de data aansluiting los. Soldeer een weerstandje van 1 Kohm tussen de data aansluiting van de print en het vrijgekomen einde van het weerstandje van 4,7 Kohm.

 

4e Soldeer het vrijgekomen draadje van de data aansluiting op het knooppunt van de zojuist aan elkaar gesoldeerde weerstanden.

 

5e Klaar, rustig koffie gaan drinken.

 

Voor gebruik bij snelle computers kan het mischien nodig zijn de condensator van 150 pF op het printje van de programmeer-voet wat te verkleinen. Ik heb hier echter zelf geen problemen mee gehad. ( pc 400 mHz) Ook kan men bij het programma IC-Prog de I/O vertraging wat veranderen. (staat bij mij gewoon in het midden op 10)

 

Ter verduidelijking het data en clock pennetje zitten aan de rechterzijde op de print onder de sub D connector, trafo naar u toe gericht, waarbij de clock aan trafo en de data aan connector zijde zit.

 

Groetjes,  Jan, PA3FEX.


Hallo programmeurs,  Koffie op?

 

Dan gaan we nu nog een kleine verandering aan het experimenteer printje uitvoeren.

 

Ik neem aan dat iedereen de tekening nog heeft van het printje, als u de tekening voor u houd dan zit rechts bovenaan een weerstandje van 1 Kohm, hier bovenlangs loopt een printspoortje welke komt van VPP1 en gaat naar aansluiting 4 van de pic. Kras het baantje ter hoogte van het 1 Kohm weerstandje door. Boor nu twee gaatjes van ongeveer 0.8 mm aan beide zijden van de onderbreking in de printspoortjes, met een onderlinge afstand van ongeveer 6 mm.

Plaats in de gaatjes een diode, 1n4148, met het streepje richting aansluiting A0.

Niet vergeten deze ook vast te solderen aan de spoortjes.

 

Klaar is de programmeur, nu naar bed. (toch niet te veel koffie gedronken?, slaapt slecht)

 

Nog een opmerking over het programmeren, als men de aansluiting rb6 en rb7 gebruikt van de pic als output poort en de belasting kleiner is als 12 Kohm gaat het programmeren niet goed.( dit zijn dezelfde aansluitingen als de data en clock). Men kan deze wel gebruiken door er een emitorvolger achter te zetten. Bijvoorbeeld twee keer een BC547 welke men met de collector’s aan de  + 5 volt aansluit, de beide basisaansluiting via 47 Kohm weerstanden aan rb6 en 7. Op de emitor’s kan dan via een weerstandje van bijvoorbeeld 470 ohm een ledje aangesloten worden.

 

Groetjes,  Jan, PA3FEX.


MEER info over PIC door Bastiaan PA3FFZ  PIC-PA3FFZ

 

02-02-2002

Hallo,  De display's die door de programma's worden aangestuurd zijn op zich 'intelligente' display's, ze kunnen zelf een cursor weergeven, scrollen en scherm wissen. Deze display's worden vrij veel gebruikt vanwege de vele mogelijkheden en de relatief makkelijke aansturing, makkelijk wil zeggen dat er niet hoeft worden nagedacht over welke ledjes moeten branden voor een bepaald cijfer, zoals bij een 7 segments display. Een nadeel is dat er een vrij lange initialisatie nodig is, de initialisatie is het display instellen na het opkomen van de voeding. Deze
display's nieuw kopen is vrij duur, heel vaak zijn ze uit oude printers, faxen, telefoons of kopieer-apparaten te slopen. Helaas zijn er onder de 1 regelige display's twee verschillende types.

Al deze display's hebben een geheugen van 2 keer 40 tekens, als we een teken naar het display toe sturen zet hij dit in zijn geheugen op de plaats die we zelf aan kunnen geven, of als we dat niet doen op de plaats naast het vorige teken. Hetgeen weergegeven wordt op het scherm van het display is een gedeelte van het geheugen, er zijn display's met 4 regels van 20 tekens, daarbij wordt het gehele geheugen als volgt weergegeven:

Regel1:  A00 A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19
Regel2:  B00 B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19
Regel3:  A22 A21 A22 A23 A24 A25 A26 A27 A28 A29 A30 A31 A32 A33 A34 A35 A36 A37 A38 A39
Regel4:  B22 B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31 B32 B33 B34 B35 B36 B37 B38 B39

Hierbij is A00 t/m A39 het eerste geheugen en B00 t/m B39 het tweede geheugen.

Bij twee regelige display's is dit doorgaans:

Regel1:  A00 A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 ...
Regel2:  B00 B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 ...

Afhankelijk of het 16,20,24 of 40 tekens per regel heeft.

Bij 1 regelige display's zijn er type met 1 IC achterop en met twee IC's achterop. Met 1 IC wordt het geheugen vaak weergegeven als:

A00 A01 A02 A03 A04 A05 A06 A07 B00 B01 B02 B03 B04 B05 B06 B07

Als we tekens sturen om 'Display test' op het display te krijgen, kunnen
we de positie aangeven van de eerste letter. Het display kent daar een commando voor. Voor de daarop volgende tekens zouden we geen nieuwe geheugenplaats hoeven aanwijzen omdat het display dat zelf kan. Het probleem is nu dat na de eerste 8 tekens het display in A08 door gaat schrijven en dat is normaal gesproken niet zichtbaar. We moeten dan zelf opgeven dat het display op een andere lokatie verder moet schrijven, meestal B00.

Display's met 2 IC's lopen iets logischer door:

A00 A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15

Deze programma's zijn gemaakt voor het meest simpele type, er komt dinsdag een versie voor het andere type display.

Het eerste programma (1 PIC disp.txt) regelt deze instelling en schrijft verder alleen de tekst 'Display test' naar het display. De routine INIT wordt 1 keer aangeroepen, daarna wordt de routine LETTER gebruikt om een letter of teken naar het display te sturen. Elke keer als er een letter naar het display gestuurd wordt zet het display zelf de letter naast de vorige, daar hoeft de PIC dus geen rekening mee te houden. In de initialisatie is te kiezen of de letter links of rechts naast de voorgaande geplaatst moet worden. Deze commando's staan in de file "LCD display's.pdf", het R/S bitje van het display geeft aan of de verstuurde gegevens een commando is of data. Alle commando's zijn 8 bits, deze worden in twee porties van 4 bits naar het display gestuurd om aansluitdraden en uitgangen van de PIC te sparen. De commando's zijn te onderscheiden door te kijken naar het hoogste bit dat 1 is,  7654 3210

 1--- ----  Geef lokatie van het volgende teken aan:
1000 0000   Geheugenplaats A00
1010 1000   Geheugenplaats A39
1100 0000   Geheugenplaats B00
1110 1000   Geheugenplaats B39

 01-- ----  Geef lokatie van het patroon van eigen tekens aan, 8 tekens kunnen zelf gemaakt worden:
0100 0000   Teken 0, bovenste 5 pixels
0100 0111   Teken 0, onderste 5 pixels
0100 1000   Teken 1, bovenste 5 pixels
0100 1111   Teken 1, onderste 5 pixels
0101 0000   Teken 2, bovenste 5 pixels
0101 0111   Teken 2, onderste 5 pixels
0101 1000   Teken 3, bovenste 5 pixels
0101 1111   Teken 3, onderste 5 pixels
0110 0000   Teken 4, bovenste 5 pixels
0110 0111   Teken 4, onderste 5 pixels
0110 1000   Teken 5, bovenste 5 pixels
0110 1111   Teken 5, onderste 5 pixels
0111 0000   Teken 6, bovenste 5 pixels
0111 0111   Teken 6, onderste 5 pixels
0111 1000   Teken 7, bovenste 5 pixels
0111 1111   Teken 7, onderste 5 pixels

 001- --**   Instellingen: 4/8 bit communicatie, aantal regels, letter grootte. De * is geen functie
0001 --** Functies: Cursor schuiven, display scrollen
0000 1---   Instellingen: Aan/uit, Cursor aan/uit, Cursor knipperen. Cursor = op volgende teken
0000 01--   Instellingen: Plaats van volgende teken, display wel/niet automatisch scrollen
0000 001*   Laat het gebruikelijke deel van het geheugen zien, ofwel scrollen ongedaan maken
0000 0001   Wis het geheugen en laat het gebruikelijk deel van het geheugen zien

 

Het scrollen van deze display's is in feite een ander deel van het geheugen laten zien. Als in het begin van het geheugen van het display de tekst "Hallo, dit is een test" staat, zal een display die maar 12 tekens kan weergeven alleen de eerste 16 letters laten zien, dus "Hallo, dit is ee". Na een scroll instruktie kan dit worden "allo, dit is een".

Bij het versturen van deze commando's wordt eerst bit 7-4 verstuurd en daarna bit 3-0. Houd dit bij het schrijven van software in de gaten, als er een keer 4 bits mist, lopen alle daarop volgende gegevens niet meer synchroon. Data die verstuurd wordt na het commando voor teken positie is automatisch een tekennummer, data die verstuurd wordt na het commando voor het maken van een eigen teken is automatisch het patroon van een eigen teken.

Het tweede programma "2 PIC disp scroll.txt", maakt gebruik van deze scroll functie, het laatste programma "3 PIC disp eigen char + scroll.txt" zet wat eigen tekens in het display. In de pdf file is een tabel opgenomen waarin is af te lezen welk nummer een letter of teken heeft, de eigen tekens hebben nummers 0 tot 7. De nummers 8 tot 15 zijn dezelfde eigen tekens.

Voor deze programma's zijn de aansluitingen opde PIC als volgt:

Display:   PIC:
VSS                    GND
VDD                    +5V
VEE                    GND (potmeter)
R/S         A1
R/W                    GND
E           A0
D0
D1
D2
D3
D4          B3
D5          B2
D6          B1
D7          B0


Groetjes, Dennis


PICPROGRAMMER

Het eerste ? exemplaar is inmiddels gereed zie het resultaat van Jack pa0mop

02-02-2002 zip files ontvangen van Rien PAØMLL tbv aansluiten van het display en een testprogramma voor de programmer 

LCD-DISP.ZIP   TST-prog.zip 


02-02-2002 Programma gemaakt door Wim PAØWSO tbv. callgever pa0wso.asm  

Beschrijving van deze automatische CQ, K en toon gever.

CALLGEVER


22-01-2002 nieuwe files ontvangen van Dennis PA4DEN wordt nog een stuk tekst uitleg voor geschreven voor de aansturing van display's

PIC disp eigen char + scroll.txt

PIC disp scroll.txt 

PIC disp.txt zijn in totaal 3 stuks bestanden (totaal ca. 30 kb)


16-12-2001 Bijgaand ZIP bestand met de programma's welke onderandere afgelopen week zijn behandeld veel succes !   BESTAND PIC16122001

In de bijlage 12 LED looplicht Heen en Terug 12LEDLICHT

 

Heb de electron's van de laatste paar jaar door gespilt op interessante informatie over de PIC i.v.m. de cursus. Mogelijk interessant voor de andere deelnemers.

Technische Notities over de PIC in Electron van PE1RRT Marc Simons

Experimenteren met de PIC16F84, augustus 2000/314 , december 2000/492 Aansturen van IIC-IC's met PIC, november 1999/465

Experimenteren met LCD-Displays en PIC, juni 1998/236

73's Rien, pa0mll@amsat.org

 

Hallo,

BESTANDEN

09-11-2001

 

Hier zijn weer wat nieuwe programma's van de laatste PIC avond.

De volgende programma's:

Met behulp van het vorige programma wordt in vijf stappen een looplicht gemaakt.

- Eerst de directe methode door bit-voor-bit te veranderen

- Het tweede programma maakt gebruik van subroutines

- Het derde programma maakt gebruik van de bit-schuif instruktie.

- Het vierde programma maakt gebruik van de 2 bit-schuif instrukties voor 12 leds.

- Het laatste programma laat 12 leds heen-en-weer lopen met bit-schuif instrukties

 

Van het eerste programma is een versie meegestuurd waarbij alle besturings

registers bij naam genoemd zijn. De assembler (MPASM.EXE) vertaald naast

alle instukties ook de naam van het register naar het bijbehorende nummer.

 

MOVFW 03 wordt nu dan: MOVFW STATUS

 

Het is wel noodzakelijk om in de gaten te houden dat STATUS eigenlijk een

númmer van een besturings register is. Al deze verwijzingen staan in de

P16F84.INC file, in principe kan ook ik het programma zelf aan een getal een

naam toegekend worden. Het bestand 'Versie1 met naam.txt' is exact hetzelfde

programma als het eerste knipperled programma, maar dan met namen in plaats

van nummers. In het tweede programma, het eerste looplicht, worden namen gebruikt.

Bij deze voorbeeld programmaatjes staat een verhaal over de werking van de nieuwe instrukties.

Voor de geïnteresseerden is het misschien leuk om een programma te maken

waarbij bijvoorbeeld 2 leds lopen in een patroon 10100000. Als er vragen zijn ben ik altijd wel per email bereikbaar, soms telefonsich niet.

De file 'Overzicht.txt' bevat verder de informatie die de laatste avonden naar voren is gekomen. Het meeste zal inmiddels wel weggezakt zijn, zeker straks na drie weken... Voor beginners is het vrij veel informatie, dan is het handig om het een aantal keer rustig door te lezen. Als er vragen zijn kan men mij bereiken op pa4den@hotmail.com, erg QRV ben ik de laatste maanden niet meer omdat ik vaak naar Nijmegen moet.

Voor de meesten tot over drie weken,

 

Groetjes, Dennis   


Hallo, 

PIC.zip alles compleet

04-11-2001

 

Afgelopen dinsdag is dit programma in een PIC gezet, dit programma laat een LED knipperen als er een schakelaar wordt ingedrukt.

Het is handig om eerst de samenvatting.doc door te lezen, dit bevat nogal taaie informatie voor de mensen die nog nooit met digitale schakelingen en tellers hebben gewerkt.

Elke instruktie die de PIC uitvoerd duurt maar 1us, dit is afhankelijk van het kristal. Om het ledje zichtbaar knipperend te maken moet er tussen het aan en uit schakelen dus enige tijd gewacht worden.

De led moet via een weerstand van ca 470 Ohm tot 1k2 naar uitgang A0 van de PIC, de kathode van de LED naar massa.  De drukschakelaar schakelt ingang B5 naar massa.

 

 

Met de instruktie BSF 05,0 wordt de LED aan gezet.

Vervolgens moet de PIC wachten, dit gebeurd door een paar honderd-duizend keer wat nutteloze instrukties uit te voeren.

Eerst wordt er in twee geheugenplaatsen de waarde 0 gezet De DECFSZ 0C instruktie kijkt naar de waarde op geheugenplaats 0C, trekt er 1 van af en zet de waarde terug. Deze instruktie controleert gelijk of de waarde nu nul is, is dat zo dan wordt de eerst volgende instruktie

overgeslagen.

De eerst volgende instruktie is een GOTO WAIT, deze instruktie laat de PIC naar de regel springen die begint met het label 'WAIT:', in dit geval de regel daarboven. WAIT is maar gewoon een naam om een regel aan te duiden, je mag er ook HENK neerzetten.

De daarop volgende instruktie doet weer hetzelfde met geheugen adres 0D.

Door te beginnen met waarde 0, worden beide DECFSZ instructies 256 keer uitgevoerd, als de begin waarde 1 zou zijn, zou de instuktie 1 keer uitgevoerd worden.

De instuktie BTFSC 07,5 slaat de volgende instruktie over als ingang B5 laag is

De instruktie daarna is weer een GOTO, dus als B5 hoog is wordt deze GOTO uitgevoerd en blijft de PIC in dit lusje hangen.

Daarna wordt het ledje uit gezet met BCF 05,0 dan volgt er nog een wacht lus en uiteindelijk een GOTO naar het begin van het programma.

 

Het is misschien leuk om volgende week meerdere leds te laten branden, bijvoorbeeld een looplicht. Dit kan dan op 2 manieren, het meest voor de hand liggend op dit moment is:

-Wachten

-led 1 aan en led 7 uit

-Wachten

-led 2 aan en led 1 uit

-Wachten

-led 3 aan en led 2 uit

-Wachten

-led 4 aan en led 3 uit

-Wachten

-led 5 aan en led 4 uit

-Wachten

-led 6 aan en led 5 uit

-Wachten

-led 7 aan en led 6 uit

-Wachten

-Opnieuw

 

Maar het kan ook makkelijker met een subroutine voor het stukje programma dat de PIC laat wachten en door alle 8 bits van het W register in 1 keer naar alle 8 leds te sturen met het MOVWF 06 commando.

Groetjes, Dennis 

 

Voorbeeld van een programma zoals gedemonstreerd tijdens de CURSUS:           

      list    p=16f84

      #include p16f84.inc

  

;     Led op A0 via 470R weerstand naar GND

;     Schakelaar op B5 naar GND (eventueel via 470R)

      BSF      03,5

      BCF      05,0

;     BCF      01,7

      BCF      03,5

 

HIER: MOVLW      0FF         ;Zet 100 op geheugenplaats 0C

      MOVWF      0C

      MOVLW      000         ;Zet 0 op geheugenplaats 0D

      MOVWF      0D

WAIT: DECFSZ      0D,1        ;Trek 1 van de waarde in 0D af, zet waarde terug en sla volgende over bij waarde 0

      GOTO      WAIT

      DECFSZ      0C,1        ;Trek 1 van de waarde in 0C af, zet waarde terug en sla volgende over bij waarde 0

      GOTO      WAIT

      BSF      05,0        ;Zet ledje aan, poort A bit 0

 

  

KNOP: BTFSC      06,5        ;Wacht als knopje ingedrukt, poort B bit 5

      GOTO      KNOP

  

      MOVLW      0FF         ;Zet 100 op geheugenplaats 0C

      MOVWF      0C

      MOVLW      000         ;Zet 0 op geheugenplaats 0D

      MOVWF      0D

WAIT2:      DECFSZ      0D,1        ;Trek 1 van de waarde in 0D af, zet waarde terug en sla volgende over bij waarde 0

      GOTO      WAIT2

      DECFSZ      0C,1        ;Trek 1 van de waarde in 0C af, zet waarde terug en sla volgende over bij waarde 0

      GOTO      WAIT2

     BCF      05,0        ;Zet ledje uit, poort A bit 0

      GOTO      HIER        ;Terug naar het begin van het programma

  

      dw 0x0102

      dw 0x0304

      dw _LP_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF      

      end  

 

 

* Ter informatie *   bij Microchip vond ik de pagina's:

PIC16F84A Device   -   Index
http://www.microchip.com/1010/pline/picmicro/families/16f8x/devices/16f84a/index.htm 

PIC16F84A Datasheet   -   DS35007B
http://www.microchip.com/download/lit/pline/picmicro/families/16f8x/35007b.pdf 

PIC16F8X EEPROM Memory Programming Specification   -   DS30262D
http://www.microchip.com/download/lit/suppdoc/specs/30262d.pdf 

MPASM™ Assembler     PICmicro® Quick Reference Card   -   DS30400E
http://www.microchip.com/download/tools/picmicro/code/mpasm/30400e.pdf 

 

Rien pa0mll

samenvatting van cursus door PA3FDC:

Wat Dennis ons heeft verteld in de 1e les:

De PIC is een microcontroller. Dat betekent dat er naast een processor ook RAM en I/O in zit.

 

Opbouw van de microcontroller:

Zie datasheet PIC16F84A, pagina 3, figure 1-1

Programmageheugen (flash program memory 1k x 14bits)

 

Hierin staat het programma. Behalve tijdens het programmeren (flashen) kan dit geheugen niet worden veranderd.

Het programma bestaat uit instructies die achtereenvolgens worden uitgevoerd.

De PIC kent 35 verschillende instructies. Zie datasheet PIC16F84A, pagina 34, table 7-2.

 

·       Het programma wordt geschreven op de pc.

·       De programma-instructies worden door een assembler vertaald in machinetaal.

·       Vervolgens wordt deze machinetaal met het programma propic2 via de programmer in het programmageheugen van de PIC geschreven. ("geflashed")

 

Werkgeheugen (RAM file registers 68 x 8bits)

Zie datasheet PIC16F84A, pagina 6, figure 2-1.

Dit geheugen wordt gebruikt door het programma voor de opslag van tijdelijke gegevens. Dit geheugen heeft 68 plaatsen van 8 bits.

Elke geheugenplaats wordt aangeduid door een getal (adres).

Zoals in de tabel is te zien begint het werkgeheugen bij adres 0Ch en eindigt bij 4Fh. De kleine letter "h" bij 0Ch en 4Fh geeft aan dat het hexadecimale getallen zijn (in het 16-tallig stelsel).

0Ch =12 en 4Fh =79. In het "blok" tussen 12 en 79 zitten 68 geheugenplaatsen (adressen).

 

Waarom begint het geheugen bij 0Ch (12) en niet gewoon bij 1?

Omdat de adressen van 01h t/m 0Bh gebruikt worden voor speciale doeleinden.

 

Op deze adressen bevinden zich de "special function registers". Hiermee kunnen we bijvoorbeeld communiceren met de buitenwereld door één of meer pennetjes hoog of laag te maken of de ingebouwde timer besturen.

 

W-register.

Zoals later zal blijken is het W-register de spil in de PIC controller. Bij bijna alle instructies die de PIC kent, wordt het W-register gebruikt.

 

Verder bevat de PIC o.a. nog de ALU, de programmateller, de stack, een EEPROM, I/O-poorten en een timer. Deze onderdelen zijn wel degelijk belangrijk,  maar we behoeven er hier nu niet verder op in te gaan om de werking van de PIC uit te leggen.

 

Een voorbeeld.

 

Om de werking van de instructies te verduidelijken hebben we geprobeerd om te volgen wat er in de eerste vijf regels van een voorbeeldprogramma gebeurt:

 

 

BSF   03,5

MOVLW 00F

MOVWF 01

CLRF  05

BSF   05,4

 

 

1e regel:

BSF       03,5

 

Het commando BSF betekent "Bit Set f". Deze instructie maakt een bit hoog (1). BSF wordt hier gevolgd door twee getallen.

 

In de instructieset (Tabel 7-2) staat in de eerste kolom:   BSF    f, b  

 

·         BSF is het commando

·         f is een adres in het geheugen (hier 03)

·         b duidt aan welk bit er 1gemaakt moet worden (hier 5).

 

Op elk adres staan 8 bits. De bits tellen van 0 - 7.

 

In de tabel "figure 2-1" staat achter adres 03h "STATUS". Dit is het statusregister.

Met deze opdracht maken we dus bit 5 in het statusregister 1 (hoog).

 

(Zonder verder hier op in te gaan, schakelen we hiermee het geheugen om van "Bank 0" naar "Bank 1". In "Figure 2-1"  van de linker kolom naar de rechterkolom. Het bit dat we hebben veranderd bestuurt dus het geheugen.)

  

2e regel:

MOVLW      00F

 

MOVLW betekent: verplaats letterlijk naar W. Het getal dat achter het commando MOVLW staat wordt verplaatst naar W (het W-register).

 

In de tabel staat:  MOVLW k

 

·         MOVLW is het commando

·         k is een getal. (dus geen adres, maar letterlijk een getal)

 

Na dit commando heeft het W-register de waarde 0F.

  

3e regel:

MOVWF      01

 

 MOVWF f : verplaats de inhoud van het W-register naar  adres f.

 

·         MOVWF is het commando

·         f is een geheugenadres (hier 01)

 

We hadden het W-register hiervoor de waarde 0F gegeven. Adres 01 zal dus ook de waarde 0F krijgen.

Bedenk dat we in de 1e regel wat dit programma zijn omgeschakeld naar geheugen "Bank 1" (de rechterkolom van de tabel 2-1). In tabel 2-1 zien we dat adres 01 (er staat bij 81h) het OPTION-REGISTER is.

 

(Met het option-register kunnen we de prescaler besturen, maar hier gaan we nu niet verder op in.)

 

4e regel

CLRF      05

 

 CLRF f : maak adres f  leeg (0)

 

·         CLRF is het commando

·         f is een geheugenadres (hier 05)

 

Adres 05 is het register TRISA. (Zie tabel rechter kolom)

Na dit commando heeft het TRISA-register de waarde 0.

  

5e regel

BSF      05,4

 

Dit is bijna gelijk aan de instructie in regel 1.

Hier wordt op adres 05 (het TRISA-register) bit 4 "geset" (1-gemaakt).

Na dit commando is bit 4 van het register 1 (hoog).

 

In de 4e regel hebben we het TRISA-register leeg gemaakt. Bit 4 is het enige bit dat 1 is. TRISA heeft dus nu de waarde 8.

 

 

De bovenstaande vijf regels zijn nog geen werkend programma, maar dienen als voorbeeld.

'73 TonHit Counter