Hallo, ich habe bislang ein Servosignal per externem Interupt ausgewertet. Nun will ich den ICP1 Pin, PortB 0 nehmen. Ich habe PB0 auf Eingang, Pullup an, // Port Init DDRB = 0xFE; // Port Ausgang PB0=ICP1 Eingang PORTB = 0x01; // Port low PullUp PB0 an Timer1 VT /64, IPC Noicecanceler an TCCR1B = 0b1000011; // Timer1/64 Noise Canceler Und die Interupts frei gegeben TIMSK = 0b10100001; // Timer2 Compare Interupt Timer0 Overflow TICIE1 = Input Capture natürlich auch mit sei();// Interups freigeben Leider komme ich durch Pegelwechsel an PB0 nicht in diese Routine: ISR(SIG_INPUT_CAPTURE1) { mach was,.... } Kann mir jemand sagen, warum der ICP1 so nicht den INT0 ersetzt? Gruß Tobi
"ATMegas" gibts viele. Hättest Du vielleicht die Güte, auch mitzuteilen, welchen davon Du zu verwenden gedenkst? Abgesehen davon: Nimm nicht die alten "SIGNAL"-Namen, sondern die neueren Vektornamen, die denen aus dem Datenblatt entsprechen, nur, dass jeweils ein "_vect" hinten dranhängt. Und vor allem: Zeig mal vollständigen Code ohne "Abtipp-Artefakte"!
Hallo, ich nutze einen ATmega8. ich habe nur Teile des Codes rausgesucht, da er zimlich lang ist. Gruß Tobi
> TCCR1B = 0b1000011; // Timer1/64 Noise Canceler
Zähl mal die Nullen und Einsen.... Und gewöhn Dir ne vernünftige
Schreibweise an (z.B. mit Bitshifts, da passiert so was schon mal
nicht...). Du hast nämlich nicht den Noise Canceler aktiviert, sondern
den Capture auf steigende Flanke konfiguriert. Wenigstens beim TIMSK
stimmt es anscheinend.
Hallo, hast Recht, habe eine Null vergessen. Aber trotzdem geht es nicht so, wie ich will. Tobi
Hast Du die richtige Header-Datei eingebunden ? Für viele Interrupts sind die Einsprungadressen der verschiedenen AVR-Derivate unterschiedlich.
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.