Forum: Compiler & IDEs Periodendauer


von Matthias (Gast)


Lesenswert?

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?

von inoffizieller WM-Rahul (Gast)


Lesenswert?

ICPIE?

von Matthias (Gast)


Lesenswert?

ein ICPIE gibt es nicht. Das ICIE1 Input Capture Interrupt Enable habe
ich gesetzt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hast du das ICIE1 im richtigen Register gesetzt?

Hast du den Interruptvektor richtig benannt (TIMER1_CAPT_vect)?

von Magnus Müller (Gast)


Lesenswert?

...Code...?

von Matthias (Gast)


Lesenswert?

Ja hab ich:

TIMSK1 |= (1<<ICIE1)|(1<<OCIE1A);
ISR(TIMER1_CAPT_vect)

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Den Code hab ich in den Anhang gehängt

von Matthias (Gast)


Lesenswert?

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.

von Magnus Müller (Gast)


Lesenswert?

>> Jedoch leuchtet PB1 nicht

Ähm.... LED verpolt? ggg

von Matthias (Gast)


Lesenswert?

Nein, daran liegt es nicht.

von Magnus Müller (Gast)


Lesenswert?

Mal ganz nebenbei... Was hast du mit dieser Zeile vor???

>> TCCR1A |= 0x00;

...macht nicht wirklich Sinn...

Gruß,
Magnetus

von Magnus Müller (Gast)


Lesenswert?

Hast du auch die richtigen Defs included? Vielleicht compilierst du ja
immer noch den Code für den 90PWM3 ???

von Matthias (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

Hab im AVR Studio schon auf den 644er umgestellt. Der Code an sich ist
im Prinzip der gleiche. Register sind gleich benamt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ä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...

von Matthias (Gast)


Lesenswert?

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.

von Matthias (Gast)


Lesenswert?

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

von Magnus Müller (Gast)


Lesenswert?

Kleine Ursache, große Wirkung ;)

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
Noch kein Account? Hier anmelden.