timer interupt i pic12f675

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

timer interupt i pic12f675

Inlägg av victor_passe »

Hej, jag blev just klar med en 4*5 led matris som styrs av en pic12f675 som visar en text som är skriven i eeprom.
Den scrollar texten såklart men den gör det olika snabbt beroende på hur många pixlar som är på.
Jag målar nämligen upp bilden ca 1000 gånger och byter sedan till nästa bild.

Att använda en timer är såklart mycket bättre men jag vet inte hur dem funkar.

Hur skriver jag om jag vill ha en timer som triggar en interupt ca 3 gånger i sekunden?
Man ska hellst kunna själv ställa in hastigheten med en konstant i programmet om det ska gå något snabbare/saktare än 3 gånger per sek.
upplösningen behöver inte vara mer än 4 lägen eller något.

När timern är "klar" ska variabeln "next"bli 1.

Jag fattar grova drag hur det funkar, att man ska starta timern och ställa in en prescaler och enabla interupt eller något sådant. men hur det översätts till asm vet jag inte.

Det är alltså en 12f675 som kör på den interna 8Mhz.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Din timer kan ju ha t.ex. 100hz update eller så.
det ger steg på 10ms, brukar vara vettigt.

sedan så är det bara att ha en variabel som säger vad den ska räkna upp/ner ifrån. 33 blir då t.ex. 330ms, 50=500ms osv..
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Att använda en timer är såklart mycket bättre men jag vet inte hur dem funkar.

Kanske lite onödigt att säga, men det står (surprice!) i databladet... :-)

> Hur skriver jag om jag vill ha en timer som triggar en interupt ca 3 gånger i sekunden?

Eller 6, 9, 12, 24 ggr/s eller något annat som enkelt delas ner till 3.
Nornalt har man an bas-timer som man sedan räknar för att få
sina andra delays som applikationen behöver. Som Micke_s beskrev...

> men hur det översätts till asm vet jag inte.

Exemplen i databladet brukar alltid vara i just assembler. Så det blir
inget att "översätta". Och en beskrivning nerskriven som
vanlig löpande text är i princip bara att skirva av som assembler
som gör samma sak som texten beskriver.

Men viktigast är att du sätter igång !!
Fråga sedan när du kör fast...
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

jag hade använd timer1 till detta

Sätt
TMR1CS = 1
T1CKPS = 1

TMR1IE = 1

och glöm inte global interrupt enable

vid timer1 overflow ska TMR1 laddas om med 10 000 för få en tidsbas på 10ms

Det är trevligt att ha en vettig tidsbas att gå ifrån, t.ex. 10ms, 20ms, 1ms osv beroende på kravet på räknarna. Jag brukar välja 10ms vanligtvis så kan man snabbt återanvända kod.
Skriv svar