interrupt Anpassungsprobleme

Gast #181600
Lesenswert?
• ▲
▼
Hallo zusammen,

vorab sei gesagt ich bin Neuling.
Im Konkreten will ich Code vom ATMega16 für den AT90CAN128 anpassen.
Folgendes funktioniert auf dem Mega16:
---------------------------------------------------------------
SIGNAL (SIG_OVERFLOW0)
{
  i++;
  TCNT0 = 55;
}

int main(void){
  volatile WORD i;
  TCCR0 = (1<<CS01);
  TCNT0 = 55;
  timer_enable_int(_BV(TOIE0));
  sei();
while(1){
//Programmcode
}--------------------------------------------------------------

Mein Versuch einer Anpassung war jetzt:
---------------------------------------------------------------
SIGNAL (SIG_OVERFLOW0A)
{
  i++;
  TCNT0 = 55;
}

int main(void){
  volatile WORD i;
  TCCR0A = (1<<CS01);
  TCNT0 = 55;
  timer_enable_int(_BV(TOIE0));
  sei();
while(1){
//Programmcode
}--------------------------------------------------------------

Leider wird nie in die SIGNAL Methode gesprungen.
Ich nun nicht mehr wo ich weiter suchen kann um heraus zu finden ob ich
noch mehr anpassen muß bzw. etwas falsch angepaßt habe. Wäre toll wenn
mir da einer bei helfen könnte.

Gruß Richy
Gast #181601
Lesenswert?
• ▲
▼
Was ist der SIG_OVERFLOW0A?

Ein timer kann nur einen OVERFLOW haben, also reicht SIG_OVERFLOW0
Etwas anderes währe ein compare match ;-)

Schau Dir mal die C:\WinAVR\avr\include\avr\iom128.h an, da sind
die möglichen SIGNALS definiert.
Gast #181602
Lesenswert?
• ▲
▼
Richtig, SIG_OVERFLOW0A ist sicher falsch.
Das A hat da nix zu suchen, soweit ich weiß hatte ich es auch mal ohne
dieses ausprobiert. Leider ohne Erfolg.

Irgendetwas anderes muß ich zusätzlich noch falsch machen.

Aber Danke für den Tipp:
C:\WinAVR\avr\include\avr\iom128.h
Das hat mich generell ein bischen weiter gebracht ... hab mir dann im
Verzeichnis auch die iocan128.h und io.h angesehen. Hat mein
Gesamtverständnis für .h Dateien voran getrieben.   :-)

Schönen Gruß,
Richy
Gast #181603
Lesenswert?
• ▲
▼
Ich hab' mir den Code noch ma angesehen, dabei ist mir noch
aufgefallen...

Wie schaffst Du es eine lokale variable (volatile WORD i; ist ja in
main() lokal) in einer SIGNAL routine zu inkrementieren, das kapier ich
nicht?

lege mal Dein "volatile WORD i;" als globale variable an ... oder
gibt es eventuell schon ein globales "i" - dann musst Du natürlich
das in main() entfernen.

 ;-)
Werner
Gast #181605
Lesenswert?
• ▲
▼
Ich dachte das tue ich mit:

  timer_enable_int(_BV(TOIE0));

Mir würde es auch helfen wenn mir jemand sagen könnte wo und wie ich
eine Dokumetation zu der Funktion timer_enable_int() bekommen kann.
Bzw. wie ich herausfinden kann welche Funktionen es sonst noch alles
gibt.

Im Anhang mein komplettes Programm ... ich versteh einfach nicht warum
die SIGNAL() nie aufgerufen wird. Wer kann mir helfen?

Gruß Richy
Angehängte Dateien:

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.