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
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.
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
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
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
Oh doch, du hattest Recht! Ein TIMSK0 |= 1; hat all meine Probleme behoben. Danke
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.