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.