Hallo, ich habe eine technische Schwierigkeit. Ich möchte mit Atmega48 4 Signallänge jeweils an 4-Pins(PD0-PD0) messen lassen. Bei Pegelwechsel wird Interuppt auslösen. Die Zeit wird mit 16-Bit-Timer1 ausgemessen. Ich möchte den Messwert aus OCR1AH und OCR1AL korrekt auslesen. Wenn ich den Messwert direkt aus aus OCR1AH und OCR1AL auslese, dann könnte es zum falschen Ergebnis führen. Weil man liest erst OCR1AH und dann OCR1AL oder umgekehrt. Dabei gebt ein Problem: Der Übergang von 8-Bit zu 9bit. Um das zu vermeiden soll man die zwei Register gleichzeitig ablesen. Gibt es eine vernünftige Lösung?
Alex schrieb: > Gibt es eine vernünftige Lösung? Deswegen sind ja für das Highbyte Latches eingebaut. Also erst High-, dann Lowbyte lesen und fertig. :-)
Hi >Deswegen sind ja für das Highbyte Latches eingebaut. >Also erst High-, dann Lowbyte lesen und fertig. :-) Eher umgedreht. MfG Spess
Andersherum. Du musst zuerst OCR1AL lesen, damit wird gleichzeitig OCR1AH in einen Zwischenspeicher gelesen. Wenn Du dann OCR1AH liest, liest er den aus dem Zwischenspeicher. Beim Schreiben erst High, dann low.
Sorry, hast recht. Beim Lesen Low zuerst, beim Schreiben High. http://www.mikrocontroller.net/articles/AVR_16-Bit-Register
Tut mir leid , der Messwert steht in TCNT1 Register nicht in OCR1A
Hi
>Tut mir leid , der Messwert steht in TCNT1 Register nicht in OCR1A
Macht nichts:
To ensure that both the high and low bytes are read and written
simultaneously when the CPU accesses these registers, the access is
performed using an 8-bit temporary High Byte Register (TEMP).
This temporary register is shared by all the other 16-bit registers.
MfG Spess
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.