Hallo zusammen Als Neuling versuchte ich, ein einfaches Programm, das den Timer 0 zählen lässt und bei einem Überlauf eine Interruptroutine ausführt zu programmieren. Leider schlägt bereits die Simulation in AVR Studio 4 fehl, da offenbar eine Zuweisung aus r16 an TIMSK0 zu folgender Fehlermeldung führt: Illegal argument type or count. Die entsprechende Zeile im beiliegenden Code ist mit einem Pfeil gekennzeichnet. Für Hinweise zur Lösung wäre ich dankbar. Gruss Justus
Hi... TIMSK0 kenne ich nicht, das Timer-Interrupt-Mask-Register heißt bei den üblichen AVRs TIMSK. Falls das beim Mega169 anders sein sollte, bitte ich um Verzeihung... Bit- & Bytebruch... ...HanneS...
Im am Anfang des Codes definierten Include File des Mega169 sind die Register bzw. Speicher-Adressen wie folgt benannt: ;*********************************************************************** ****** ; I/O Register Definitions ;*********************************************************************** ****** ;**** Memory Mapped I/O Register Definitions (0xFF-0x60) **** .equ LCDDR18 = 0xFE [snip] .equ ADCH = 0x79 .equ ADCL = 0x78 .equ TIMSK2 = 0x70 .equ TIMSK1 = 0x6F .equ TIMSK0 = 0x6E .equ PCMSK1 = 0x6C .equ PCMSK0 = 0x6B d.h. meiner Meinung nach hat jeder der drei Timer ein eigenes "Mask"-Register. Und der Name, den ich benützt habe scheint auch korrekt zu sein. Die Fehlermeldung deutet vielleicht auf etwas anderes... aber auf was? Justus
Wie der Hilfe zum Befehl out zu entnehmen ist, darf der erste Parameter, also die Zieladresse nur zwischen 0 und 63 (dezimal) liegen. Bei Adressen oberhalb dieses Wertes muß man statt dessen sts verwenden. Das gleiche gilt sinngemäß für in / lds. Gruß Ingo
Vielen Dank. Da wäre ich vermutlich nie darauf gekommen, da ich den Initialisierungscode aus einem Beispiel kopiert habe. Justus
Ha da war ich kürzlich auch ;) Du solltest mal avra versuchen (assembler, keine ahnung ob's den auch für windows gibt), der gibt klarere Auskunft was falsch ist. Dein Programm beginnt in der Interrupt Tabele, was schlecht ist, diese Erfahrung musste ich auch schon machen. Wenn jetzt ein interrupt aufgerufen wird der nach Timer0_OVF kommt springt der mitten in deinen code, was vermutlich nicht erwünscht ist. schreibe entweder (dirty) ein .org $0030 (naja > 26 IIRC) vor dein reset: oder was viel besser ist füll die Interrupttabelle ganz auf. Die Sache mit dem OUT <-> STS ist bei dem m169 doch sehr häufig der hat viele I/O-register, daher auch viele >64 ($40) schau im zweifel in die m169def.inc. Ich hänge mal mein aktuellen Code an. (auch Butterfly) Achtung Chaos. ;) Ist viel auskommentiert. Nimm das aber nicht als Mass der Dinge, ich mach das auch erst seit sehr kurzer Zeit. ;)
Knapp zwei Jahre später auf einen Beitrag zu antworten ist bestimmt sehr sinnvoll...
STK500-Besitzer wrote: > Knapp zwei Jahre später auf einen Beitrag zu antworten ist bestimmt sehr > sinnvoll... ??? 2007 - 2004 = 3...
>STK500-Besitzer wrote: >> Knapp zwei Jahre später auf einen Beitrag zu antworten ist bestimmt sehr >> sinnvoll... >??? >2007 - 2004 = 3... Das fällt unter Rundungsfehler... :)
argh, peinlich, hab ich grade mal direkt nicht gemerkt, sry ;) Dann wollen wir den thread wieder in Ruhe weiter sterben lassen. Wie pietätlos von mir.
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.