Forum: Mikrocontroller und Digitale Elektronik 8 Bit Timer Atmega32


von frank (Gast)


Lesenswert?

Hi,
ich möchte den 8bit timer in ctc modus betreiben,
prescaler 1
leider stimmt was bei meinem code nicht,
könnt ihr mir helfen?
int sec=0;
void inttimer()
{
TIMSK=(1<<OCIE0);
OCR0=250;
TCNT0=0;
TCCR0=(1<<WGM01) | (1 << CS00);
}
ISR(TIMER0_COMPA_vect)
{
sec++;
}
int main()
{
inttimer();
sei();
while(1)
{
 sec an 7 segmentanzeige ausgeben
}
}

von Justus S. (jussa)


Lesenswert?

sec muss volatile sein..kA ob noch mehr falsch ist

von frank (Gast)


Lesenswert?

danke hat aber nichts gebracht

von frank (Gast)


Lesenswert?

kann mir wer helfen

von gast (Gast)


Lesenswert?

WAS stimmt denn nicht ?

von frank (Gast)


Lesenswert?

es wird sec nicht an der segmentanzeige angezeigt
Die funktion zur ansteuerung der segmente hab ich ausgiebig getestet und 
hat keinen fehler

von Justus S. (jussa)


Lesenswert?

kann es sein, dass du beim Kompilieren eine Warnung bekommst und diese 
ignorierst?

von Thilo M. (Gast)


Lesenswert?

Was gibt dein Compiler denn für Meldungen 'raus?
>int main()
kommt mir ohne return etwas merkwürdig vor.
Auch die leere Klammer dürfte so nicht funktionieren.

Probier's mal mit 'int main (void)'
und am Ende der Funktion mit 'return;'

von frank (Gast)


Lesenswert?

Hab ich im nur hier vergessen
Die Sekunden werden einfach nicht an der Segment Anzeige Angezeigt
hab schon static sec und volatile probiert wird aber immer 0 ausgegeben.

von Justus S. (jussa)


Lesenswert?

Nochmal: Welche Warnungen bekommst du beim Kompilieren?

von frank (Gast)


Lesenswert?

Folgende warnungen:
TIMER0_COMPA_vect appears to be a misspelled signal handler
bei zeile
ISR(TIMER0_COMPA_vect)

suggest parentheses around assignment used as truth value
bei zeile
if (sec=0)

>if (sec=0) hab ich korrigiert zu if (sec==0)
dann hatte ich keine fehler mehr funktioniert aber noch immer nicht.

von Justus S. (jussa)


Lesenswert?

frank wrote:

> TIMER0_COMPA_vect appears to be a misspelled signal handler
> bei zeile
> ISR(TIMER0_COMPA_vect)

und warum ignorierst du diese Warnung einfach? Da steht doch genau der 
(oder ein) Fehler...

von frank (Gast)


Lesenswert?

wie kann ich ihn beheben?

von Stefan E. (sternst)


Lesenswert?

frank wrote:
> wie kann ich ihn beheben?

Indem du im Datenblatt oder der AVR-Libc-Doku nachschaust, wie der 
Interrupt richtig heißt, und den Namen im deinem Programm entsprechend 
korrigierst.

von MWS (Gast)


Lesenswert?

Mach's A weg.

von Walter (Gast)


Lesenswert?

der Timer0 kennt nur einen Compare, siehe iom32.h, richtig wäre :

/* Timer/Counter0 Compare Match */
#define TIMER0_COMP_vect    _VECTOR(10)

der Timer1 kennt dagegen COMPA und COMPB, siehe Datenblatt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.