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.
timer interupt i pic12f675
-
- Inlägg: 2436
- Blev medlem: 28 januari 2007, 18:45:40
- Ort: Kungsbacka
> 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...
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...
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.
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.