Ved en blød start kan det lige skrives at PIC er en microprocesser (kontroller), dvs. en CPU. Denne enheder kan programmers til et utal af forskellige ting. Som vi alle ved er det jo sådan en tingest der sidder i vores PC, blot en intel-ting og ikke en PIC.
Først et par ting omkring PIC - processoren :
PIC processoren er en RISK - processor hvilket blot siger noget om hastigheden den afvikler kommandoer på, samt hvordan den er opbygget inde i.
Fordelen ved en PIC iforhold til en intel CPU, er at PIC en har relativt få kommandoer og at den kan trække strøm på alle portene. Der kan trækkes omkring 10 mA på hver ben på PICen, dvs der kan sættes dioder på alle bene uden transistore (husk formodstand på omkring 220 ohm).
Først anskaffes en brænder til PIC - kredsen. Her kan jeg anbefale PIC-start plus, men der kan også findes et print som man kan lave billigt på internettet på adr : www.beyondlogic.org . Men herved kan der opstå problemmer med at overføre data til sin PIC, men prøv jere lidt frem. Har selv en PIC start plus, den koster omkring 1200 kr, men så kan den ofså brænde alle PIC, og viker i Windows uden problemmer.
Efter denne brænder er anskaffet downloades et kompilerings program f.eks. Mplab. Når dettte er gjordt findes en C++ kompiler. Her anbefaler jeg mplabc.exe. Denne kompiler installeres i mplab, således at programmet kan kompileres C++ filer til PIC - kredesen. Dette er desvære forskelligt fra hver version af mplab, men se evt en hjælpe file i mplab, eller prøv denne opskrift :
Åben mplab
Under menuen "edit" findes menu-feltet install lang, vælg denne. Her i vælges mplabc1 og under gemmense vælges den exe fil der hedder mplabc.exe. Hvis dette findes virker det også, mend lidt held.
Efter dette er gjordt skal der oprettes et projekt. Når dette er gjordt oprettes en "node" (en file.c). Når noden er oprettet vælges egenskaber og der vælges det rigtige hex format (der er kun 3 mulighder) og c-filen kompileres. Her er det en god ide at have en c file man er helt sikker på virker, f.eks.
"
void main()
{
}
"
(Folkens dette er kun en beskrivelse, og jeg kan desværre ikke hjælpe særlig meget hvis I ikke kan overføre et almindeligt program til en PIC. Vil helst bruge energi på selve programmeringen !!!)
Nu starter selve programeringen ....
På en PIC - kredes findes porte, dvs man deler udgange/indgange på kredsen op i 8 bits porte (kaldet I/O). Disse porte er der mulighed for at sætte retningen på. Dvs. læsses der på porten eller skrives der til porten. Dette gøres via. en variabel kaldet "TRISB" (register til PORT B). F.kes
"
void main()
{
TRISB=0; //Helle PORTB sættes til en udgang. Dvs RB0 til RB7 (se evt datablad på PIC16F84)
PORTB=255; //Alle bit på PORTB sættes høje. Alle ben på PORTB er 5 volt
}
"
Hvis vi derimod vil sætte en port til en indgang skrives dette således :
"
void main()
{
TRISB=255; //Helle PORTB sættes til en indgang. Dvs RB0 til RB7
char a=0; //Opretter 8 bit variabel og sætter den til 0
a=PORTB; //Gemmer værdien fra PORTB i a
TRISC=0; //Helle PORTC sættes til en udgang. For at kunne få et resultat
PORTC=a; //Overføre værdien fra a til PORTC
}
"
(Husk at include den file der høre til PIC - kredsen før main funktionen)
Ud af dette har vi lært kort om :
TRISX : Sætter retning på port
PORTX : Selve den port der læses/skrives fra
char : variabel type
For at gøre det nemmere at skrive og læse fra en port er der indført at PORTA.0 betyder RA0.
"
char a=0;
TRISB=255;
a=PORTB.0; //Læser IKKE hele porten, men kun bit 0 (RA0)
"
I skrive måder til PIC - kredsen kan også nævnes at :
Ved bin bruges
0b0000000 : eks. "TRISB=0b00000000;"
Ved HEX bruges
0x11111111 : eks "TRISB=0xff;"
Hvis man nu vil bevæge sig lidt længere og gå i gang med seriel kommunikation så findes der en header ser14.h der åbner muligheder for dette det sammen gælder for interrupt.
Hvor angår PC - programmet kunne dette f.kes. starte med at skrive og læse fra printerporten. På denne port kan sættes 8 lysdioder eller kontakter (husk modtande ikke under 300 ohm).
Lad os starte let og simpelt i dos (TC eller hvad den nu hedder) (skal være ren dos ikke win 2000)
Her bruges kommandoen outportb til at skrive ud med.
inportb bruges til at læse porten
f.eks
"
#include<dos.h>
void main()
{
outportb(0x3f8,255); // Slå kommandoen op hvis der er problemmer udskriver tegn til lpt1 - port
delay(1000); // Holder pause
outportb(0x3f8,0); // Udskriver 0 til LPT1
delay(1000); // Holder pasuse
}
"
Dette program blinker med alle bene på lpt1 porten (printerporten). For at finde en fortegnelse over LPT - porten se www.beyondlogic.org. Ben 25 er gound og fra ben 2 til ben 9 er der data....
I Windows bruges kommandoen "outb" og "inb" istedet for "outpotb" og "inportb". Der findes også en kommando kaldet "poke" og "peek" som gør det sammen. Denne virker f.eks. i qbasic. I Delphi råder jeg folk til at bruge en driver wizard, eller se om der ikke findes et api-kald.
Hvis der ønskes seriel kommunikation via. Windows i C, bruges "CreateFile" til at skabe adgang til porten. Søg om det på nettet ellers kan det være jeg skriver om det en anden dag. ("CreateFile" er et API - kald hvis jeg husker rigtigt og kan derfor bruges i alle programmerings sprog i Windows)
Dette var min første korte lektion i PIC - programmering i C++
(Held og lykke med PIC - programmeringen)
Ups det skulle have være 50 UP, men kan ikke ændre det....
[Redigeret d. 05/06-02 02:19:23 af Janus S. Andersen]
Er det bare mig eller er dette ikke en artikel?
jeg kan ikke finde pørgsmålet!
mvh.
Thomas Christensen