Hi, ich bin gerade dabei ein Signal zu Capturen. Dieses Signal ist insgesamt maximal 130 ms lang. Dieses Signal ist so aufgebaut das zum Start eine Highflanke von 9 ms kommt und dann eine Lowflanke von 4,5 ms kommt. Danach folgen noch ca 64 Bit mit jeweils 1120µs. Ich habe den Timer Capture Int. genutzt. In dieser ISR Routine wollte ich gerne das ICES1 Flag (im TCCR1B Register) toggeln um von High auf Low Flanke zu triggern. Leider habe ich genau da eine Denkblockade wie ich dieses Bit toggeln kann mit so wenig Befehlen wie moeglich. Desweiteren habe ich ein kleines Problem mit den 9 ms. Mein ICR1 (Input Capture Register) zaehlt ja maximal bis 65355. Wie sollte ich ein Ueberlauf verhindern? Ich hoffe mir kann da jemand ein bischen unter die Arme greifen. Ich benutze ein Mega8 mit 8 Mhz und programmiere alles mit ASM. Mfg Dirk
toggeln: in r16, TCCR1b ldi r17, 0b01000000 eor r16,r17 out TCCR1B, r16 Überlauf: entweder Vorteiler erhöhen (max. Zeit wird entsprechend dem Vorteiler vervielfacht, Auflösung sinkt entsprechend) oder den Timer per Software erweitern, in der T1_OV-Routine ein Register erhöhen, so wird aus dem 16bit-Zähler ein 24bit-Zähler. Der Inhalt dieses Registers wird natürlich bei einem ICP nicht automatisch irgendwo abgespeichert, dass muss die Software in der ICP-Routine tun. Muss man bei der Programmierung sehr aufpassen, ICP-Int könnte gerade in dem Augenblick kommen, an dem der Zähler überläuft, im ICP steht also 0x0000, aber das Softwareregister ist noch nicht incrementiert -> Messwert ist komplett falsch.
Hi, ich danke Dir Crazy Horse. Jetzt sollte es eigentlich kein grosses Problem mehr sein. mfg Dirk
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.