Page 1 of 1

Timer/Counter1 16bit ATmega8535

PostPosted: 02 Jul 2014, 08:32
by Alex8010
Salve a tutti, e complimenti per il forum. Premetto che è il primo progetto che vado a svolgere con un microcontrollore ATmega8535 quindi se le domande risulteranno banali non me ne vogliate. Per l'applicazione che voglio sviluppare ho bisogno di utilizzare il Timer/Counter1 a 16 bit del micro in modalità normal mode con un prescaler di 256, i miei dubbi sono:
1)Quando all'interno del programma parte il conteggio?
2)E' possibile farlo partire quando dico io? O cmq resettarlo azzerandolo o svolgendo qualche altra operazione?

Grazie a tutti quelli che mi daranno risposta

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 02 Jul 2014, 09:55
by deluca
Salve alex8010 e benvenuto al forum.
Ti invito a presentarti nella sezione apposita e se possibile spiegare i motivi della tua richiesta.

In che linguaggio devi sviluppare il fw per il uC AVR?

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 02 Jul 2014, 10:06
by Alex8010
Il motivo è a scopo didattico universitario...il linguaggio è assembly avr

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 02 Jul 2014, 11:02
by deluca
I timer partono quando tu decidi di farli partire, ovviamente puoi anche decidere di fermarli.
li puoi ricaricare o "azzerare" in run-time (durante l'esecuzione del fw)

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 02 Jul 2014, 11:23
by Alex8010
Quindi, nel mio caso specifico, il timer/counter parte nel momento in cui inizializzo i Control Register e nel caso in cui volessi rifare un nuovo conteggio basta azzerare i registri?

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 08 Jul 2014, 16:26
by Alex8010
Ho continuato nell'applicazione del Timer/counter ma purtroppo ho un problema che non riesco a risolvere,spero che vivamente possiate darmi una mano, vi descrivo la funzione che devo svolgere. Devo andare a contare il tempo per cui un comparatore passa dallo stato logico alto a basso cioè, quando Vin>Vref. Il valore del conteggio varierà in base a quanto piu' rapida è la tensione Vin ad essere maggiore di Vref. Per poter avviare dei conteggi consecutivi ho inserito un bottone esterno che mi permetti di resettare il conteggio e che per obblighi circuitali azioni un relè attivando un circuito. Quando accendo il circuito il conteggio è esatto, quando vado a fare nuovi conteggi con il bottone, il conteggio risulterà sempre maggiore non riuscendo piu' a diminuire anche nel caso in cui la Vin risulta maggiore di Vref in un tempo brevissimo. Volevo chiedervi se magari c'è qualche errore nel codice che ho scritto, vi elenco la parte riguardante il timer/counter1:

Code: Select all
Initcont:                           
        ldi   temp, 0b00000100
        out    TCCR1A,all0
        out   TCCR1B, temp  ;T/C0 counts at CK/256

ResetCont:
      sbi PortC,3 // attiva relè
                rcall Delay8ms //Operation Time Relè 8ms

       
      ldi PosTime,0
                ldi PosAperture,0
                out TCNT1L,all0
                out TCNT1H,all0
      rjmp Confronto
       
Confronto:
        SBIC    ACSR, ACO   ; Skip next instruction if ACO = 0
        rjmp Confronto
        rjmp LeggiValore


LeggiValore:

;LEGGI VALORE T/C1     
         in cont1,TCNT1L
         in cont2,TCNT1H

;Parte inerente al bottone

NuovaLettura:
                 in R16,PinD
       SBIC PIND,4
       rjmp NuovaLettura
       rjmp ButtonC3
      
ButtonC3:
     cbi PortC,3 //disattiva relè
     rcall Delay5ms//Release Time Relè 5ms
     rjmp Reset

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 09 Jul 2014, 07:25
by einstein
ciao alex8010, io non sono pratico di assembler avr,
scusa la mia ignoranza ma c'è qualcosa che non mi convince, non mi convince proprio l'applicazione !!
ma chi ti ha proposto questa applicazione?

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 09 Jul 2014, 08:26
by Alex8010
Lo scopo del progetto è realizzare un esposimetro, per rappresentare un numero elevato di luce, l'ADC interno del micro a 10 bit non bastava, abbiamo pensato cosi' di utilizzare questo metodo sfruttando il Timer/Counter a 16 bit per rappresentare piu' valori

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 11 Jul 2014, 10:05
by deluca
@alex
mi sono sforzato, cercando di capire il funzionamento dell'oggetto che hai descritto,
ma con tutta la mia buona volontà, non riesco proprio a interpretare quello che vuoi dire... :)

"rappresentare un numero elevato di luce, l'ADC interno del micro a 10 bit non bastava, abbiamo pensato cosi' di utilizzare questo metodo sfruttando il Timer/Counter a 16 bit per rappresentare piu' valori"


Se sei ancora interessato prova a disegnare e postare un semplice flow-chart per descriverne il funzionamento,
forse ci capiamo meglio....

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 11 Jul 2014, 23:33
by js-bascom
Forse Alex vorrebe usare un "bit banged" ADC a 16 bits?

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 12 Jul 2014, 11:00
by einstein
js-bascom wrote:Forse Alex vorrebe usare un "bit banged" ADC a 16 bits?


@js
scusate la mia ignoranza,
possibile realizzare adc 16bit con timer?

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 12 Jul 2014, 11:30
by js-bascom
Beh con un timer e un comparator, ;) vedi
;**** A P P L I C A T I O N N O T E A V R 4 0 0 ************************
;*
;* Title: Low Cost A/D Converter
;* Version: 1.0
;* Last updated: 97.07.18
;* Target: AT90Sxxxx (All AVR Devices)
;*
;* Support E-mail: avr@atmel.com
;*
;* Code Size :37 words
;* Low Register Usage :0
;* High Register Usage :2
;* Status Flag Usage :1 (t flag)
;* Interrupt usage :Timer/Counter0 overflow interrupt,
;* Analog comparator interrupt
;*
Forse c'e qualche metodo per aver 16 bits con questo approccio, io non l'ho usato mai. Pero' i vecchi AVR (e PICs) che non avevano ADC usavano questo metodo.

Potrei allegare l'application note (PDF e ASM) se intersessa a qualcuno. Non so se e' ancora reperibile dal' Atmel/

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 12 Jul 2014, 12:12
by deluca
ciao js-bascom tutto bene?

ai tempi degli At90s8515 avevo visto l' an# di Atmel, ma mai attenzionata.
Il fatto è che la risoluzione è troppo bassa (uso del timer0), forse la #401 potrebbe essere un tantino + educational?

che ne dici......

Re: Timer/Counter1 16bit ATmega8535

PostPosted: 12 Jul 2014, 23:16
by js-bascom
Si, la #401 ha infatti 8 bits di resolution mentre la #400 ne ha solo 6 bits.