Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Timer su Atmega2560

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

-1
voti

[1] Timer su Atmega2560

Messaggioda Foto Utentedaniele1996 » 27 ago 2014, 13:33

Salve a tutti, ho rimesso mano su datasheet di questo micro per poter mettere in funzione un timer, in quanto mi interesserebbe avere il tempo trascorso dall'ultimo reset... ho guardato le lib arduino, ma siccome voglio complicarmi la vita, ho deciso di provarne a scrivere uno io...
L'intenzione è questa:
- imposto il timer
- lo avvio
- conto il tempo trascorso

leggendo nel datasheet ho letto che bisogna impostare dei registri e l'ho fatto:
Codice: Seleziona tutto
/*
* Mega2560_USART.c
*
* Created: 26/08/2014 10:42:09
*  Author: Daniele
*/

#define FOSC 16000000L// Clock Speed
#include <avr/io.h>
#include <avr/interrupt.h>


int main(void)
{
        TCCR0A|=((1<<CS11)|(1<<CS10));
   TCCR0B |=(1<<WGM12);

   OCR0A = 255;
   DDRB = 0xFF;
   PORTB = 0x00;

   sei();
    while(1)
    {
       
    }
}

ISR(TIMER0_COMPA_vect){
   PORTB = ~PORTB;
   
}


Solo che non funziona... :/ e non capisco dove sta il problema... ho provato a rileggere nel DS se ho tralasciato qualcosa, ma non mi sembra...
PS: ho messo la PORTB per poter vedere ad occhio (con un led) se funziona ma non gira :/
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

0
voti

[2] Re: Timer su Atmega2560

Messaggioda Foto Utentefranx » 28 ago 2014, 11:46

I bit WGM12, CS11 e CS10 si trovano nel TCCR1B.
Puoi linkare il tuo DS?
Avatar utente
Foto Utentefranx
465 3 10
Frequentatore
Frequentatore
 
Messaggi: 199
Iscritto il: 28 feb 2010, 17:43

0
voti

[3] Re: Timer su Atmega2560

Messaggioda Foto Utentedaniele1996 » 29 ago 2014, 20:13

ho sistemato tutto... ecco il codice:

Codice: Seleziona tutto
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned long int time = 0;

   void initTimer(){
      TCCR1A = 0;
      TCCR1B = 0;
      TCNT1 = 0;

      OCR1A = 16; // compare match register 16Mhz/1024/1000 Hz 1ms
      TCCR1B |= (1 << WGM12); // CTC mode
      TCCR1B |= (1 << CS12) | (1<<CS10); // 1024 prescaler
      TIMSK1 |= (1 << OCIE1A); // Abilito gli interrupt

   }
   
   ISR(TIMER1_COMPA_vect){
      time++;
   }



ho rivisto il datasheet, e l'ho sistemato...
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti