Forum: Mikrocontroller und Digitale Elektronik timer läuft nicht


von mufus (Gast)


Lesenswert?

Kann mir bitte jemand weiter helfen??? Mein Timer will nicht :-(

jedes mal wenn ich den controller starte, hängt er sich auf


1
ISR (TIMER0_OVF_vect)
2
{
3
    //Interrupt Aktion alle 100ms
4
  //goto RESTART;
5
  //wdt_reset();
6
  goto *((void**) 0);
7
}
8
9
//Funktion zum messen
10
unsigned int read_cm(unsigned char address)
11
{
12
  unsigned char lowbyte, highbyte;
13
  unsigned int distance;
14
15
  // Timer 0 konfigurieren
16
    TCCR0A = (1<<WGM01);         //CTC Modus
17
    TCCR0B |= (1<<CS01)|(1<<CS00);    //Prescaler 1
18
    
19
    OCR0A = 160;            //((16000000/64)/100000) = 160
20
 
21
    TIMSK0 |= (1<<OCIE0A);        //Compare Interrupt erlauben
22
 
23
    sei();                //Global Interrupts aktivieren
24
25
...

von Karl H. (kbuchegg)


Lesenswert?

mufus schrieb:
> Kann mir bitte jemand weiter helfen??? Mein Timer will nicht :-(
>
> jedes mal wenn ich den controller starte, hängt er sich auf

Logisch

> ISR (TIMER0_OVF_vect)

OVF    so wie 'Overflow'

>     TIMSK0 |= (1<<OCIE0A);        //Compare Interrupt erlauben

OCIE   so wie Output Compare

Du brauchst schon einen Interrupt Handler, der auch zu den von dir 
freigegenenen Interrupts passt.
Entweder Overflow freigeben und ISR für Overflow
oder Output Compare freigeben und ISR für Output Compare.

Aber einen Interrupt freigeben für den es keinen ISR-Handler gibt, wird 
mit Reset bestraft.

von mufus (Gast)


Lesenswert?

ich habe jetzt
1
ISR (TIMER0_COMPA_vect)...

verwendet, jedoch weiterhin das gleiche problem

ich glaub es ist einfach zu warm ich kann nicht mehr richtig denken :-(

von Karl H. (kbuchegg)


Lesenswert?

mufus schrieb:

> ich glaub es ist einfach zu warm ich kann nicht mehr richtig denken :-(

Scheint so.
Dein kompletter Code sieht in meiner Kristallkugel auch schon ganz 
verschwommen aus.

von Tobias H. (obazda)


Lesenswert?

goto *((void**) 0);


Springt in den reset...

von Oliver (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Du brauchst schon einen Interrupt Handler, der auch zu den von dir
> freigegenenen Interrupts passt.

In diesem speiziellen Fall gehts auch ohne. Ob der nun über 
bad_interrupt wg. ganz fehlender ISR oder per
1
goto *((void**) 0);
 einen Software-Reset macht, kommt auf das selbe hinaus.

Oliver

von Karl H. (kbuchegg)


Lesenswert?

Oliver schrieb:
> Karl heinz Buchegger schrieb:
>> Du brauchst schon einen Interrupt Handler, der auch zu den von dir
>> freigegenenen Interrupts passt.
>
> In diesem speiziellen Fall gehts auch ohne. Ob der nun über
> bad_interrupt wg. ganz fehlender ISR oder per
1
goto *((void**) 0);
> einen Software-Reset macht, kommt auf das selbe hinaus.

Kopfklatsch

Das hab ich ja noch gar nicht gesehen!
Ich hab mich nur auf die ISR Namen konzentriert und gar nicht 
mitbekommen, was er in der ISR macht.

Was soll das denn sein?
Ein µC der sich timergesteuert selber resettet?

Wer erklärt mir wozu das gut sein soll. Der Watchdog ist doch schon 
lange erfunden.

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.