www.mikrocontroller.net

Forum: Compiler & IDEs interrupt Anpassungsprobleme


Autor: Richy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Richy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TIMSK muß noch korrekt beschrieben werden.

MW

Autor: Richy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Richy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh doch, du hattest Recht!
Ein  TIMSK0 |= 1;  hat all meine Probleme behoben.

Danke

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
timer_enable_int() war ein Versuch, eine Abstraktion für
etwas einzuführen, bei der es dieses gar nicht Wert ist.
Guck einfach in das Headerfile, was da drin steht.

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.