Hallo. Ich messe die Periodendauer eines Rechtecksignals, mit Hilfe von Input Capture. Das ganze habe ich schon auf einem AT90 PWM3 realisiert. Jetzt soll es auf einem MEGA644 erledigt werden. Allerdings springt mein Programm nicht in die Timer 1 Capture ISR. Mir kommt es so vor als ob ich dazu noch ein Bit aktivieren muss. Hat jemand einen Tipp für mich?
ein ICPIE gibt es nicht. Das ICIE1 Input Capture Interrupt Enable habe ich gesetzt.
Hast du das ICIE1 im richtigen Register gesetzt? Hast du den Interruptvektor richtig benannt (TIMER1_CAPT_vect)?
Zur Erklärung kann ich noch sagen: Die Timer Überläufe bekommt mein Programm wohl mit, d.h. der Timer 1 läuft. LED an PB2 leuchtet Mein Rechtecksignal liegt an PD6 an. Jedoch leuchtet PB1 nicht, d.h. die ISR wird gar nicht ausgelöst.
Mal ganz nebenbei... Was hast du mit dieser Zeile vor???
>> TCCR1A |= 0x00;
...macht nicht wirklich Sinn...
Gruß,
Magnetus
Hast du auch die richtigen Defs included? Vielleicht compilierst du ja immer noch den Code für den 90PWM3 ???
Hast du recht. Da stand erst ein anderer Wert drin, den ich dann in 0x00 geändert hab, da ist es wohl stehen geblieben. Da es so oder so mit 0x00 initialisiert kann ich die Zeile rauswerfen. Hast du keine Idee woran das liegt, dass die ISR nicht aufgerufen wird? Ich wäre dir sehr dankbar. Sitz nämlich schon den halben Tag vor dem Problem. Viele Grüße Matthias
Hab im AVR Studio schon auf den 644er umgestellt. Der Code an sich ist im Prinzip der gleiche. Register sind gleich benamt.
Ähem, AVR Studio? Heißt das, du hast das noch gar nicht auf realer Hardware getestet? Sorry, aber die Simulation hat erfahrungsgemäß eher mal einen Bug als das echte Silizium...
Doch, ich teste es in der Hardware. Habe die Platine vor mir, die LED sind real. Es verwundert mich, dass er in die eine ISR reinspringt. Ihn das Rechtecksignal am ICP Pin jedoch wohl unbeeindruckt lässt. Hab schon nachgemessen, am Rechtecksignal gibts nichts auszusetzen. Das Signal liegt auch am richtigen Pin an.
OK. Ich habe den Fehler gefunden. Ich hatte zuerst mit meinem kompletten Programm getestet, da hat bei der Periodenmessung aber irgendwas nicht gestimmt. Also hab ich den entsprechenden Teil rauskopiert um diesen Programmteil einzeln testen zu können. Dabei muss mir irgendwie die Einstellungen um den Multiplexer, der das Signal auf den Atmel schaltet, verlorengegangen sein. Nachdem ich den Code herauskopiert hatte hab ich dann das Signal nicht mehr nachverfolgt, und so ist mir entgangen, dass es gar nicht bis zum Atmel kommt. Vielen Dank um eure kreativen Ideen, obwohl es an meiner eigenen Dummheit lag. Naja, aus Fehlern lernt man. Gruß Matthias
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.