timer0 at90can stört can-stack

OP #2289134
Lesenswert?
• ▲
▼
hallo,

ich habe in meinem projekt eine merkwürdige "entdeckung" gemacht.
wie vllt. schon einige gelesen habe, lasse ich einen sensor die 
helligkeit einer led erfassen. die messwerte werden dann per can-stack 
verschickt zu eine regelung
als test wollte ich timer0 initialisieren und die led alle sekunde oder 
2ekunden tooglen lassen. das klappt soweit auch jedoch funktioniert dann 
die can kommunikation nicht mehr. die adc daten werden versendet und die 
regelung schickt werte zurück. jedoch wird die ISR des can-stacks 
scheinbar nur noch 9-17mal aufgerufen und dann nie wieder. die 9-17 ist 
eine ungefähre angabe da das ziemlich stochastisch zu seinen scheint

ich frage mich wie das kommen kann, can und timer0 haben doch nichts 
miteinander zu tun, zumindest habe ich keine register gesehen die 
abhängig sind oder sonst was. oder irre ich mich?

wäre für ein wenig hilfe dankbar

den timer0 des at90can habe ich wie folgt initialisiert:
1
#define clock_factor F_CPU/(64*256)     //interruptzähler
2

3
volatile uint16_t clock = clock_factor, second;
4
void timer0_init(){
5
  // Timer0
6
  TCCR0A |=  (1<<CS00) | (1<<CS01);    //prescaler 64    
7
  TIMSK0 |= (1<<TOIE0);    //overflow
8
  TCNT0 = 0;          //counter = 0
9
  /* 16000000 / 64 = 250000
10
     250000 / 256(8bit) = ca. 976
11
  */
12
  clock = clock_factor;
13
  second = 0;
14
  led==1;
15

16
}
17

18
ISR(TIMER0_OVF_vect){
19
  clock--;
20
    if (clock==0){  // nach 244 durchlaufen ist eine second vorgegangen
21
    clock = clock_factor;
22
    second++;
23
    if (second == 5){   
24
      if(led == 1){
25
        setLedBrightness(100);  
26
        led=0;
27
      }
28
      else{
29
        setLedBrightness(0);
30
        led=1;
31
      }  
32
      second=0;                         
33
        }
34
   }
35

36
}
OP #2289190
Lesenswert?
• ▲
▼
hups korrekt, das sollte eigentlich in den anhang gehören

ich habe jetzt meinen can-stack angehängt. den habe ich mir aus einem 
beitrag hier aus dem forum abgeleitet.
die main beinhaltet funktionen wie wait und inits für ADC und PWMs. 
diese funktionen habe ich mal weggelassen sonst wird es vllt etwas viel 
bzw. sind die denke ich mal uninteressant. kann ich aber trotzdem gern 
nachreichen

wa smeinst du genau mit fehlerbild?

ich hoffe nun kann mir evtl geholfen werden

liebe grüße
Angehängte Dateien:
#2289232
Lesenswert?
• ▲
▼
Natürlich macht die Einschaltung des Timer0-Ints erstmal nichts aus.
Den CAN-Kram habe ich mir nicht angeschaut, das einzige, was ich mir 
vorstellen könnte, ist die Funktion setLedBrightness().
Mach doch mal so:

ISR(TIMER0_OVF_vect)
{
  clock--;

}

Dann siehst du, ob es der Interrupt selbst (was ich mir nicht vorstellen 
kann) oder der Rest der ISR ist.
clock ist eine lokale Variable? Evtl. Stackprobleme?
OP #2289249
Lesenswert?
• ▲
▼
danke für die antwort

setLedBrightness stellt nur die PWM für die LED ein, sprich ich setze 
dazu das entsprechende OCRnA bzw OCRnB Reg.

ich habe das problem gerade folgendermaßen gelöst(vorzeitig zumindest)
im can-stack, empäfnger ISR: ich hatte am ende den empfänger interrupt 
nicht geresetet (BXOK). das könnte durchaus mein problem behoben haben 
aber mal in nächster zeit schauen wie das system reagiert.

clock wird in der init mit dem vorteiler quasi als factor definiert.
und in der isr habe ich doch clock--; geschrieben ?

aber ich werde mal näher auf die ISR eingehen vllt liegt da wirklich 
noch ein kleines problem

danke erstmal

liebe grüße

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.