Få Timer1 att snurra på PIC18F2620

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Få Timer1 att snurra på PIC18F2620

Inlägg 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.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Glöm inte att ställa in tris registren
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg 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..
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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"
ankan
Inlägg: 1091
Blev medlem: 12 november 2004, 01:50:35

Inlägg 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.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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....
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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 ?
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, då förstår jag... :-)
En viss poäng där, visst...
Skriv svar