Sida 1 av 1
Få Timer1 att snurra på PIC18F2620
Postat: 25 april 2007, 15:23:44
av ankan
Det den inte att snurra. Har jag tur ger den interrupt en gång i alla fall.
Är det någon skillnad att få Timer1 att snurra på en PIC18 än på en PIC16? Hittar ingen skillnad i databladet i alla fall.
Sätter detta vid uppstart:
Kod: Markera allt
T1CON = 0x0F; // Extern kristall, enable
PIR1.TMR1IF = 0; // Nollställ flaggan
PIE1.TMR1IE = 1; // Enabla timer1 interrupt
INTCON = 0b1100000; // GIE och PIE enable
Vid avbrott görs bara detta för att testa:
Kod: Markera allt
if (PIR1.TMR1IF) {
porta.f2^=1;
PIR1.TMR1IF=0;
}
Det fungerade på min PIC16F88 utan problem med en klockkristall som är stabiliserad med två kondingar på 39pF mot jord.
Ibland tänds i alla fall dioden som sitter på utgången efter att jag har programmerat PICen men den släcks aldrig igen så interruptet verkar bara köras en gång om jag har tur.
Postat: 25 april 2007, 15:54:31
av Micke_s
Glöm inte att ställa in tris registren
Postat: 25 april 2007, 16:05:25
av ankan
Problemet låg i att man intekunde köra porta.f2^=1. Det var porta.f2=lata.f2^1 som gäller.
Då har man lärt sig något nytt igen vad som skiljer PIC16 och PIC18..
Postat: 25 april 2007, 23:06:32
av sodjan
Vad är det som skilljer mellan PIC18 och PIC16?
Att man inte får slarva med initieringen av portarna
är i alla fall ingen skillnad.
"Felet" du får är p.g.a av att du inte har stängt av de analoga
funktionerna på POSTA pinnarna, och din kod fungerar helt enligt
dokumentationen...
Igen, de små grå rutorna med "NOTE!" finns där i databladet
av en anledning.
> Det var porta.f2=lata.f2^1 som gäller.
Eller "lata.f2=lata.f2^1"
Postat: 26 april 2007, 07:10:36
av ankan
Glömde skriva med initsieringen av portarna. Men jag hade satt porta.f2=0, trisa.f2=0 och adcon = 0xff (har jag för mig det var).
Initsierade dock inte lata men det kanske man borde göra. Hur som helst.
Det som verkar skilja PIC16 och PIC18 åt är att PIC16 kan man läsa av portarna med porta men på PIC18 så måste man läsa av lata.
Postat: 26 april 2007, 09:09:42
av Icecap
Du kan helt fint läsa av porten i PIC18 men är det så att du belastar porten med så hög ström att den inte kan ge 'H' ifrån sig läsas den som 'L', detta kan man undvika vid att läsa LATx som är det som PORTx BORDE vara....
Postat: 26 april 2007, 09:45:29
av sodjan
En annan sak...
Se till att det inte finns viktig information i "ämnet" på tråden som inte
även finns i själva inlägget. Ämnes raden syns inte när man svarar (korkat i sig).
I detta fall får man ta till onödiga grepp för att veta vilken PIC modell
som används.
> Initsierade dock inte lata
Finns inget som heter så. Hur menar du ?
> Det som verkar skilja PIC16 och PIC18 åt är att PIC16 kan man läsa
> av portarna med porta...
På den punkten skilljer det sig inte alls. De fungerar i princip helt
likadant vid läsning från PORTx registren.
> adcon = 0xff
Det finns inget register som heter ADCON på 18F2620.
Det är möjligt att h'FF' fungerar (i korrekt register!) men det är inte det
föreslagna värdet i kodexemplet i databladet. Är det inte enklast
att bara använda det som finns i exemplet ?
Postat: 26 april 2007, 11:16:32
av Marta
Det är ADCON1 som skall sättas till ettor i de sex lägsta bitarna för att välja alla ingångar som digitala.
Detta är en av de saker som har försämrat i denna PIC-familj. Uppdelningen av analoga och digitala ingångar är mycket hårdare styrd av hårdvaran. Varför i he****e de inte valde att t.ex. utnyttja en av de oanvända bitarna i andra ADCON? för att bankselecta i ADCON1 vet bara Microchip.
Postat: 26 april 2007, 11:31:22
av sodjan
Jag är inte helt med på vad det är som är problemet !?
Det är väl bara att göra som man ska ?
Dessutom görs detta (oftast) bara *en* gång i uppstarten, så
om man får pilla i ett extra register kan knappast ha någon
större betydelse.
Men det kanske är någon poäng som jag totalt har missat...
Postat: 26 april 2007, 11:59:41
av Marta
På de PIC som inte har så många analoga ingångar är konfigurationen bitmappad så det är fritt valbart vilka pinnar som skall vara analoga. Här bestämmer man bara hur många det skall vara, Mikrochip har redan bestämt vilka... Inte alls bra, speciellt när man skall göra ett enkelsidigt kort.
Postat: 26 april 2007, 21:01:20
av sodjan
OK, då förstår jag...

En viss poäng där, visst...