Forum: Mikrocontroller und Digitale Elektronik Signallänge korrekt vermessen


von Alex (Gast)


Lesenswert?

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?

von Floh (Gast)


Lesenswert?

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. :-)

von spess53 (Gast)


Lesenswert?

Hi

>Deswegen sind ja für das Highbyte Latches eingebaut.
>Also erst High-, dann Lowbyte lesen und fertig. :-)

Eher umgedreht.

MfG Spess

von Herr M. (herrmueller)


Lesenswert?

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.

von Floh (Gast)


Lesenswert?

Sorry, hast recht. Beim Lesen Low zuerst, beim Schreiben High.
http://www.mikrocontroller.net/articles/AVR_16-Bit-Register

von Alex (Gast)


Lesenswert?

Tut mir leid , der Messwert steht in TCNT1 Register nicht in  OCR1A

von spess53 (Gast)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

Alles klar, danke

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
Noch kein Account? Hier anmelden.