mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8Bit Timer/Counter 0


Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo erstmal.

Ich habe ein Problem mit meinem Atmega 8L. Ich habe alle Parameter 
eingestellt für den 8 Bit Timer/Counter0, aber die angeschlossene 
Leuchtdiode will nicht angehen. Ich verwende den internen clock und noch 
nicht einen Quarz. Oder liegt es vielleicht daran? Richtig angeschlossen 
ist alles an dem Atmega 8L. Hier erstmal das Programm:

#include <stdint.h>
#include <stdlib.h>

#include <avr/eeprom.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/sleep.h>
#include <avr/wdt.h>

int main (void)
{
 DDRC=1; //Daten Direction Register->PCO als Ausgang Schalten
 TCCR0=00000101;  //Prescaler einstellen-> Division von 1024
 TIMSK=1;         //Interrupt für Overflow counter aktiviert
 TCNT0=0;         //counter auf 0 setzen
 PORTC=1;         //PC0 auf 1 setzen->Diode aus
 sei();           //Atkivierung des Global Interrupt

 while(1);       //unendlichschleife

   return 0;
}


ISR(TIMER0_OVF_vec)    //ISR von 8 Bit Timer/Counter0
{
PORTC=0;    //PCO-> wird zu null->LED sollte angehen
}

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab dies noch geändert, aber es läuft immer noch nicht

TCCR0=00000101; ->TCCR0=0b00000101;

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr/interrupt.h>
#include <avr/io.h>

Die Reihenfolge der #includes ist nicht egal - pack mal das #include 
<avr/io.h> ganz nach oben. Da sind die prozessorabhängige Defines drin, 
die in anderen headern gebraucht werden.

Oliver

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab ich gemacht. geht nicht. hab mich übrigens oben mit dem Kommentaren 
vertan, mit der Led-> das muss natürlich andersrum sein

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klär bitte erst einmal, ob die LED nun bei 1 oder 0 leuchtet, und ob sie 
überhaupt irgendwann mal leuchtet. Beim STK500 beispielsweise leuchten 
die Dinger bei 0.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: Was sinnvoll sein kann: PORTC ^= 1 im Interrupt, dann blinkt die 
LED. Wenn der Mega8 wie ab Werk mit 1MHz arbeitet, dann kann man das 
noch sehen.

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sie leuchtet bei 0. übrigens ich benutze kamavr und ponyprog um die hex 
rüberzuschieben. Der Compiler zeigt ab und an eine Warnmeldung an:

TIMER0_OVF_vec appears to be misspelled signal handler

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und sie leuchtet auch

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und das schreibst du jetzt??? Häng dem mal ein "t" an, dann geht's.

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geht leider immer noch nicht mit dem t bei vect

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist jetzt wengstens die Meldung weg? Gibt's noch andere "unwichtige" 
Meldungen?

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die eine ist weg und es gibt nun gar keine mehr

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hab das Programm mal berichtigt und die anderen includes auch mal 
weggemissen, aber geht so immer noch nicht





#include <avr/io.h>
#include <avr/interrupt.h>



int main (void)
{
 DDRC=1;        //Daten Direction Register->PCO als Ausgang Schalten
 TCCR0=0b00000101;  //Prescaler einstellen-> Division von 1024
 TIMSK=1;           //Interrupt für Overflow counter aktiviert
 TCNT0=0;           //counter auf 0 setzen
 PORTC=0;           //PC0 auf 1 setzen->Diode an
 sei();             //Atkivierung des Global Interrupt

 while(1);         //unendlichschleife

   return 0;
}


ISR(TIMER0_OVF_vect)    //ISR von 8 Bit Timer/Counter0
{
PORTC=1;    //PCO-> wird zu null->LED sollte aus gehen
}

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Atmels Simulator klappt das prima.

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na ja, aber Simulator ist halt nicht die Realität. ich kann es mir beim 
besten willen nicht erklären. Die led leuchtet vor sich hin, aber aus 
geht sie nicht. Hab die led an einen 100 ohm widerstand gehängt.

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hab jetzt das Programm mal geändert und so geht die led aus. Das 
heisst, der counter zählt auf jeden fall, aber ich komme nicht in die 
ISR


#include <avr/io.h>
#include <avr/interrupt.h>



int main (void)
{
 DDRC=1;        //Daten Direction Register->PCO als Ausgang Schalten
 TCCR0=0b00000101;  //Prescaler einstellen-> Division von 1024
 TIMSK=1;           //Interrupt für Overflow counter aktiviert
 TCNT0=0;           //counter auf 0 setzen
 PORTC=0;           //PC0 auf 1 setzen->Diode an
 sei();             //Atkivierung des Global Interrupt

 while(1)         //unendlichschleife
 {
  if(TCNT0==255)
  PORTC=1;

 }

   return 0;
}


ISR(TIMER0_OVF_vect)    //ISR von 8 Bit Timer/Counter0
{
PORTC=1;    //PCO-> wird zu null->LED sollte aus gehen
}

Autor: Michael Schmidt (schimito)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meiner Meinung nach fehlt noch

sei(); //Intterupts global aktivieren

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sei ist drin.guck mal genau hin

Autor: po (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so funktioniert jetzt. liegt irgendwie am compiler

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.