Hallo Daniel,
vielleicht kannst du dir da (https://www.roboternetz.de/community...ngen-Messgerät) etwas abgucken?
(Ist zwar für den RP6, aber der hat auch den ATmega32...)
Hallo Daniel,
vielleicht kannst du dir da (https://www.roboternetz.de/community...ngen-Messgerät) etwas abgucken?
(Ist zwar für den RP6, aber der hat auch den ATmega32...)
Gruß
Dirk
Danke euch beiden.
Ich habe das gestern auch mal mit der Capture and Compare Unit probiert aber damit hat es leider gar nicht geklappt. Eigentlich dachte ich für sowas einfaches würde das ohne Probleme mit dem Timer klappen....aber naja :/
Der Compiler hat mir gar nichts zu der Variable Counter gesagt (und die Ausgabe per UART klappt auch ohne Probleme) aber trotzdem danke für den Hinweis
Den Link schaue ich mir mal an und gucke mal ob ich da was von entnehmen kann.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Warum setzt Du eigentlich den Wert icrcnt_start.i16h in der ISR laufend zurück, ohne dass Du ihn jemals änderst ? Nicht dass es viel ausmachen würd', aber es ist sinnlos.
Für die einmalige Initialisierung hätte Dir das gereicht:Code:icrcnt_start.i16h = 0; // Reset upper 16 bits (start value)
Code:static icrcounter_t icrcnt_start = {.i32=0};Wenn der Stackspeicher nicht stark benutzt wird, dann ist es möglich dass zufällig für sich diese lokale Variable immer wieder die gleiche Adresse im Stack benutzt wird, dann geht es.../hh10d_meas.c:48: warning: 'Counter' may be used uninitialized in this function
Änderst sich die Stackbenutzung kann dort ein anderer Wert stehen, mit entsprechendem Ergebnis.
Grundsätzlich hat eine lokale Variable als verloren betrachtet zu werden, außer sie wird static deklariert, dann bleibt sie im Speicher erhalten.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Ich empfand das verlinkte Programm auch ein wenig undurchsichtig, vor allem die Structs und Unions, kann man zwar so machen, muss man aber nicht. Auch ist, obwohl's tatsächlich nicht viel ausmacht, bei jedem Triggern des Input Capture eine Messung möglich. Ein Unterscheiden zwischen erster und zweiter Flanke ist nicht notwendig.
Die normale Vorgehensweise ist so, man nimmt sich 'ne unsigned 16Bit Variable und zieht in der ISR immer den alten Zählerstand vom Neuen ab. Dass dann auch z.B. 200 - 65000 richtig behandelt wird, wird durch Berücksichtigung der Overflows erreicht. Die Overflows werden mit der Zählerbreite multipliziert und zum Ergebnis addiert.
Wichtig ist dabei auf race-conditions aufgrund der Codelaufzeit zu achten, die im Bereich des Zählerüberlaufs vorkommen können, als auch das Ergebnis atomar zu übergeben, damit während der Ausgabe nichts vefälscht wird.
Lesezeichen