Pagina 1 di 1

AVR TIMER_COUNTER_0

MessaggioInviato: 3 ott 2012, 11:07
da LesStrato
Salve a tutti,
stavo scrivendo un codice assembly su avr studio e ho un dubbio sul settaggio d alcuni registri: dovrei realizzare un contatore di 10s (la freq. interna del mcu è d 4 MHz) , secondo voi va bene questo codice? Vi posto la label:
WAIT_10S:
ldi temp , 0
out TCNT0 , temp
ldi temp , 0b00001010
out OCR0 , temp
ldi temp , (1 << FOC0) | (0 << WGM00) | (1 << WGM01) | ( 1 << CS02) | ( 0 << CS01) | (1 << CS00) | ( 0 << COM00) | ( 0 << COM01)
out TCCR0 , temp

In base al datasheet (atmega8535) ho settato i bit dei reg TCCR0 , TCNT0 , OCR0 in questo modo , simulando il codice non m da errori, ma come faccio a capire ke effettivamente conta realmente 10s?

Re: AVR TIMER_COUNTER_0

MessaggioInviato: 6 ott 2012, 0:24
da simo85
Premetto che non conosco l'Assembly AVR 8bit, però devi sicuramente montare il circuito e verificarlo. Un simulatore non è comunque affidabile.

Ciao.

Re: AVR TIMER_COUNTER_0

MessaggioInviato: 7 ott 2012, 14:15
da cyclone
@LesStrato
per ottenere un tempo di 10 secondi generando l'interrupt overflow con un timer dell' atmega intanto dovresti utilizzare il timer1 che è a 16bit e non l'8bit (Timer0).
Poi devi impostare il prescaler a 1024 e per finire, con un clock di 4Mhz, devi settare i registri TCNT1H=67H e TCNT1L=69H, inoltre nel caso in cui usi lo stesso timer1 nella modalità CTC devi settare OCR1H=98H e OCR1L=96H.
Con questi valori otterrai un tempo pari a 10000.128 msec con un errore percentuale pari a 0.001%

ciao