Jeluca
24.02.2006, 21:55
Hallo alle zusammen, nachdem ich mich jetzt ausgiebig mit der Asembler Sprache auseinander gesetzt habe, und auch schon recht weit gekommen bin habe ich nun nach einer Woche Testen .... neu schreiben....Testen...neuschreiben,,, überlegen.. Zettel nehmen ...Ablauf schriftlich am Papier verfassen, doch einen richtigen blackpoint.
Ich habe einen Atmega32 den ich in Assembler programmiere.
Damit möchte ich mittels Capture-Eingang die Impulslänge von 5 (fünf) hintereinanderfolgenden Impulslängen messen.
High-Low(kurz)-High-Low(kurz)-High-Low - High-Low - High-Low
1 2 3 4 5
Danach ca eine halbe sekunde Pause und wieder Messen.
Ich habe schon probiert:
1. Jeden rising-Pegel über INT-capture (ISR) Zeit entnehmen- subtrahieren-SRam speichern.
Dabei komme ich aber in konflikt mit meiner Tastatur (I2C-aufwecken über INT0)
2. Timer starten - Risinge Edge - ISR
start:
sbis
rjmp
sbic
rjmp
Zeit lesen
speichern
brne start (bei 5. ten Impuls - End)
Prinzipiel funktioniert es, doch muß ich dies auch syncronisieren, das heißt er muß warten bis die Beiden kurzen Impulse folgen und dann nacheinender werte speichern (zwecks Berechnung)
wie soll ich das bewerkstelligen?
Da wärend der ISR steigende Flanken ankommen muß ich dazu den Interrupt und den Rising edge ausschalten?
(Ab und zu stimmen die Zeiten ab und zu erhalte ich tlw zu kleine Werte).
Ein TOV1 kommt nicht vor, das habe ich über eine erkennbare routine ausgelesen (Led ein bischen einschalten)
Bitte ich um hilfe.
Keinen fertigen asm-code aber Gedankenhilfe würde mich sehr freuen.
Nils[/b]
Ich habe einen Atmega32 den ich in Assembler programmiere.
Damit möchte ich mittels Capture-Eingang die Impulslänge von 5 (fünf) hintereinanderfolgenden Impulslängen messen.
High-Low(kurz)-High-Low(kurz)-High-Low - High-Low - High-Low
1 2 3 4 5
Danach ca eine halbe sekunde Pause und wieder Messen.
Ich habe schon probiert:
1. Jeden rising-Pegel über INT-capture (ISR) Zeit entnehmen- subtrahieren-SRam speichern.
Dabei komme ich aber in konflikt mit meiner Tastatur (I2C-aufwecken über INT0)
2. Timer starten - Risinge Edge - ISR
start:
sbis
rjmp
sbic
rjmp
Zeit lesen
speichern
brne start (bei 5. ten Impuls - End)
Prinzipiel funktioniert es, doch muß ich dies auch syncronisieren, das heißt er muß warten bis die Beiden kurzen Impulse folgen und dann nacheinender werte speichern (zwecks Berechnung)
wie soll ich das bewerkstelligen?
Da wärend der ISR steigende Flanken ankommen muß ich dazu den Interrupt und den Rising edge ausschalten?
(Ab und zu stimmen die Zeiten ab und zu erhalte ich tlw zu kleine Werte).
Ein TOV1 kommt nicht vor, das habe ich über eine erkennbare routine ausgelesen (Led ein bischen einschalten)
Bitte ich um hilfe.
Keinen fertigen asm-code aber Gedankenhilfe würde mich sehr freuen.
Nils[/b]