Hi Leute .. Als NewBee bei Atmel hat man so seine Probleme ... Das Board ist ein STK500 mit Atmel8 Der Externe Int0 und Int1 funktionieren prima mit den Tasten, aber warum läuft der Timer nicht bzw generiert keine Interrupts bzw warum wird inth1 nur vom Tastendruck und nicht zusätzlich zyklisch vom Timer-generierten Interrrupt angesprungen ? Da fehlt wohl irgendetwas? Danke schon mal für die Hilfe. Konrad
Wo hast du denn deine Timer-Overflow-Interrupt-Routine?
> aber warum läuft der Timer nicht bzw generiert keine Interrupts bzw > warum wird inth1 nur vom Tastendruck und nicht zusätzlich zyklisch > vom Timer-generierten Interrrupt angesprungen ? > > Da fehlt wohl irgendetwas? Eigentlich nicht. Sollte so funktionieren. Auch in der Simulation läuft das sauber durch.
Ich denke das ist der Interrupt Vektor 10 .. Zum test springt sowohl der externe Interrupt1 und der Timer-Overfl.Int nach inth1: ?? Angepringen über zeile 12: rjmp inth1 ;10 TC0 overflow Sollte zumindest ..
Also ich sehe da auch keine Probleme. Sollte eigentlich funktionieren. Interrupt-Vektor-Nummer stimmt auch. Welche Taktfrequenz hast Du denn? Passiert an Port B gar nichts ohne Tastendruck?
'cli' und 'sei' in den Interrupt-Routinen kannst du dir sparen. Der 'cli' wird beim Auslösen eines Interrupts sowieso ausgeführt und beim Verlassen mit 'reti' wird das 'I'-Flag wieder gesetzt.
Nein, am Port B ändert sich nix .. Der Zählerstand von r16 ändert sich nur bei Tastendruck ... ähhh ( peinlich ) ich hae grade festgestellt, dass im Borad ein ATMega8515L steckt .. ich hoffe, das mach nix .. die Port-Adressen für die Interrupt Register sind gleich ? dumme Frage zur Simmulation. Simmuliert die auch die Interrupts ? Das tut Sie bei mir nicht ..
Also ich kenne keinen "Atmel8". Falls Du den ATMega8 meinst, dann vergleiche bitte mal die Interrupt-Sprungtabellen vom Mega8 und Mega8515. Die sind nämlich unterschiedlich. Beim Mega8535 wäre es gegangen, die ist identisch mit der des Mega8. ...
> die Port-Adressen für die Interrupt Register sind gleich ?
Die Adressen der Register im I/O-Space (wenn Du das mit
"Portadressen" meinst) sind vermutlich gleich. Aber die
Interrupt-Vektoren sind es nicht. Daher vermutlich auch das
"nicht-Funktionieren" des Timer Overflow-Interrupts. Der liegt beim
Mega8515 nämlich auf Vektor Nr. 8 (Adresse 0x07)
So allso ich bin schon ein bischen doof .. sorry .. Es steckt ein ATMega8515 drin .. habe auch die Int-Vektorentabelle korrigiert ... es geht zwar noch nix .. aber ich muß jetzt erst mal das richtige handbuch runterladen .. vielleicht sind die Timer0 Register auch anders .. sorry und danke nochmal .. Konrad
Aua... Wieder Jemand, der ohne Datenblatt drauflos wurschtelt... Das tut weh... ...
hi, will den Thread nicht ewig in die Länge führen. Habe Timer1 16bit auf dem ATmeg8 dieser soll im CTC Mode arbeiten. habe COM1A0 im TCCR1A gesetzt und CTC1 im TCCR1B ebenso. CTC Modus aktiviert und OC1A wird getoggelt beim compare mit OCR1Ax. Muss ich noch im TIMSK das OCIE1A setzen oder wird der OC1A Pin auch ohne dieses Bit getoggelt? Ich weiss es ist keine grosse Mühe es zu setzen,aber kann man es auch weglassen? Vielen Dank daniel
hi, ps der Interruptvector für Timer 0 Overflow unss an die Adresse 0x007 .org 0x007 rjmp inth1 daniel
Wenn Du das OCIE1A setzt, musst Du auch eine Interrupt-Routine definieren, sonst gibts bei jedem Compare einen Reset (vorausgesetzt Du programmierst in C). Das setzen des Ausgangspins ist aber völlig unabhängig davon, ob der Interrupt aktiv ist oder nicht.
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.