Frequenzmessung über ICP

OP #1060700
Lesenswert?

Habe mich bereits einmal bei euch im Forum bemerkbar gemacht.

Ich will über den ICP ein 58kHz Rechtecksignal messen.

Den Atmega128 betreibe ich mit 8MHz.
Der Noise-Cancler ist aktiv.

Die Übertragung über RS232 funktioniert soweit.

Das Problem ist, dass egal ob ich ein generiertes 1kHz Signal, oder die 
geforderten 58kHz in den Pin ICP einspeise, das Resultat bleibt sich 
gleich. (klar, es schwankt ab und an).

Die Frequenzauswertung wird über das zugehörige .net Programm 
ausgewertet.

Danke fürs Antworten.
Angehängte Dateien:
OP #1060934
Lesenswert?

Habe einen Pin Togglen lassen.

Das ICF wird ordnungsgemäss gesetzt und die Routine abgerufen.
Auch die Overflow-Routine wird ausgelöst (am Oszi gemessen).


Das komische ist, dass das Overflow-Register immer mit dem Wert 192dez. 
ausgegeben wird.
Das Overflow-Register befindet sich auf R21.

Jemand weitere Ideen?
Gast #1060941
Lesenswert?

Ja. Der Overflow hat damit eigentlich gar nichts zu tun. Der kommt 
eigentlich immer bei 256, ref 65536. Der Capture Event liest nur den 
Zaehler aus und wirft den Zaehlerwert in das Captureregister. Wenn man 
sich fuer die Periodelaenge interessiert, sollte man den Zaehler im 
capture interrupt nullen. Nein ?
OP #1060963
Lesenswert?

Ich messe die Differenz der zwei ICP Interrupts. Zeit zwei minus Zeit 
eins gibt die Taktdifferenz. Dazu das Overflow-Register mit 65536 
multiplizieren und dazuaddieren.

Also das Rechenprinzip ist mir klar.

Ich habe den Code nun mal so abgeändert, dass ich das Overflow-Register 
auf den Wert 100d fixiere und ihn auch nicht hochzählen lasse.
Trotzdem kommt bei der Übertragung der Wert 178 für R21 heraus.
1
overflow:
2
push temp
3
in temp,SREG
4
push temp
5

6
ldi mpr,100
7
mov overf,mpr
8

9

10
pop temp
11
out sreg,temp
12
pop temp
13
reti
1
polling_meas:
2

3
ldi temp,1
4
cpse finito,temp
5
rjmp polling_meas
6
cli
7
ldi zeichen,'@'
8
rcall serout
9
mov zeichen,time11
10
rcall serout
11
mov zeichen,time12
12
rcall serout
13
mov zeichen,time21
14
rcall serout
15
mov zeichen,time22
16
rcall serout
17
mov zeichen,overf
18
rcall serout
19
ldi finito,0
20
ldi status,0
21
rjmp init

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren