mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Timer Atmega8515


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

ich habe eine Problem mit dem Timer beim Atmega8515.

Hab mich so gut es ging durch das Datenblatt gewurstelt, doch irgendwo 
klemmt es noch.

Leider finde ich nirgends einen Beispiel Code und mit dem Tutorium komme 
ich auch nicht recht weiter.

Hier mein Code.

/* Test Timer Atmega8515 STK 500 */

 
#include <avr/io.h>          // (1)
#include <inttypes.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#define F_CPU 8000000UL

uint16_t count_overflow=0;
int timer;

int main (void) {            // (2)
   DDRB  = 0xff;             // (3)
   PORTB = 0xff;
   //DDRA  = 0x0;
   
   int i;
   i = 1;
   


 // Timer0 (8Bit): Normal-Mode(0), Prescaler 1/1024
  TCCR0 = (0<<FOC0)|(0<<WGM00)|(1<<COM01)|(0<<COM00)|(0<<WGM01)|(1<<CS02)|(0<<CS01)|(1<<CS00);
  TIMSK = (0<<OCIE1B)|(0<<OCIE1A)|(1<<TOIE1); // Overflow ON

  sei(); // interupts global on


   while(1) {
   
   if(i == 0 && timer == 1) {
   PORTB = 0xf0;
   i=1;
   timer = 0;
   }
   
   if(i == 1 && timer == 1) {
   PORTB = 0x0f;
   i=0;
   timer = 0;
   }
   


   } 


}


// Timer0 Overflow Interrupt ------------------------------
ISR (TIMER0_OVF_vect)
{
  count_overflow++; 
  if (count_overflow >= 4000)
  {
    timer = 1;
    count_overflow = 0; // reset counter
  }
} //-------------------------------------- Ende TOV0_INT */


Kann es sein das für die Verwendung des Timers noch etwas an den Fuse 
Bits eingestellt werden muss?

FUSE_BITS = -u -U lfuse:w:0xff:m -U hfuse:w:0xd9:m

Danke für eure Hilfe wünsch schon mal einen guten Rutsch

Gruß Sebastian

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erster Versuchsballon: Die Variable timer muss auch mit volatile 
gekennzeichnet werden. count_overflow auch, wenn es in Zukunft 
ausserhalb ISR (TIMER0_OVF_vect) benutzt wird.

Lesetipps:
http://www.mikrocontroller.net/articles/Spezial:Su...
http://www.mikrocontroller.net/forum/gcc?filter=volatile

Autor: anfaenger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du enabelst den timeroverflowinterrupt für timer1 obwohl du eigentlich 
mit timer0 arbeitest.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zunächst mal Danke für deine Antwort

ich nehme an du wolltest auf das volatile vor dem int timer hinaus.

Hab ich übernommen! Funktioniert aber leider immer noch nicht!

Gruß Sebastian

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super danke das war es!

Für alle nach mir, hier nochmal mein Funktionsfähiger Code!
/* Test Timer Atmega8515 STK 500 */

 
#include <avr/io.h>          // (1)
#include <inttypes.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#define F_CPU 8000000UL     /* Takt STK 500 mit  */

volatile uint16_t count_overflow=0;
volatile int timer;

int main (void) {            // (2)
   DDRB  = 0xff;             // (3)
   PORTB = 0xff;
   //DDRA  = 0x0;
   
   int i;
   i = 1;
   


 // Timer0 (8Bit): Normal-Mode(0), Prescaler 1/1024
  TCCR0 = (0<<FOC0)|(0<<WGM00)|(1<<COM01)|(0<<COM00)|(0<<WGM01)|(0<<CS02)|(0<<CS01)|(1<<CS00);
  TIMSK = (0<<OCIE1B)|(0<<OCIE1A)|(1<<TOIE0); // Overflow ON

  sei(); // interupts global on


   while(1) {
   
   if(i == 0 && timer == 1) {
   PORTB = 0xf0;
   i=1;
   timer = 0;
   }
   
   if(i == 1 && timer == 1) {
   PORTB = 0x0f;
   i=0;
   timer = 0;
   }
   


   } 


}


// Timer0 Overflow Interrupt ------------------------------
ISR (TIMER0_OVF_vect)
{
  count_overflow++; 
  if (count_overflow >= 4000)
  {
    timer = 1;
    count_overflow = 0; // reset counter
  }
} //-------------------------------------- Ende TOV0_INT */


Danke guten Rutsch

Sebastian

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super danke das war es!

Für alle nach mir, hier nochmal mein Funktionsfähiger Code!
/* Test Timer Atmega8515 STK 500 */

 
#include <avr/io.h>          // (1)
#include <inttypes.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#define F_CPU 8000000UL    

volatile uint16_t count_overflow=0;
volatile int timer;

int main (void) {            // (2)
   DDRB  = 0xff;             // (3)
   PORTB = 0xff;
   //DDRA  = 0x0;
   
   int i;
   i = 1;
   


 // Timer0 (8Bit): Normal-Mode(0), Prescaler 1/1024
  TCCR0 = (0<<FOC0)|(0<<WGM00)|(1<<COM01)|(0<<COM00)|(0<<WGM01)|(0<<CS02)|(0<<CS01)|(1<<CS00);
  TIMSK = (0<<OCIE1B)|(0<<OCIE1A)|(1<<TOIE0); // Overflow ON

  sei(); // interupts global on


   while(1) {
   
   if(i == 0 && timer == 1) {
   PORTB = 0xf0;
   i=1;
   timer = 0;
   }
   
   if(i == 1 && timer == 1) {
   PORTB = 0x0f;
   i=0;
   timer = 0;
   }
   


   } 


}


// Timer0 Overflow Interrupt ------------------------------
ISR (TIMER0_OVF_vect)
{
  count_overflow++; 
  if (count_overflow >= 4000)
  {
    timer = 1;
    count_overflow = 0; // reset counter
  }
} //-------------------------------------- Ende TOV0_INT */


Danke guten Rutsch

Sebastian

Autor: Gordon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommentar überflüssig!

Autor: Gordon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Stefan Ernst

gordon

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gordon wrote:
>>Stefan Ernst
>
> gordon

Muss mir das jetzt irgendetwas sagen?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.