Archiv verlassen und diese Seite im Standarddesign anzeigen : Loggen einer Lichtschrankenaktivität über die Zeit
Hallo zusammen!
ich habe ein Problem und keine Idee dafür und hatte gehofft, ihr könnt mir dabei vielleicht helfen.
Ich möchte die Aktivität einer IR-Schranke über die Zeit aufzeichnen. Das heißt konkret, dass das Unterbrechen der Schranke / Zählen von einem (batteriebetriebenen) Datenlogger aufgezeichnet werden soll.
Da das Unterbrechen aber ja nur ein kurzer Impuls ist, müsste ich mit extrem hoher Frequenz abtasten.Eigentlich würde es mir reichen, die Anzahl der Unterbrechungen in 5min- oder auch nur 15min-Segmenten zu erfassen. Dann müsste ich die Unterbrechungen mitzählen, zwischenspeichern, auslesen und zurücksetzen und irgendwie klingt das schon sehr komplex und ich bräuchts eher einfach ;-)
Ich bekomme das Unterbrechungs-Low auf einem Klinkenkabel und habe alternativ schon überlegt "einfach" eine wav. aufzunehmen und die LOWs dann hinterher auszuwerten, aber komfortabel klingt das auch nicht...
Hat jemand von euch eine Idee wie ich elegant diskrete Impulse mindestens über 12h, lieber eine Woche mit einem Datenlogger aufzeichnen könnte? [7Tage x 24h x 12 MP(5min) = 2016 << übliche Datenlogger Messpunktkapazität]
Vielen Dank schon mal im vorraus!
spyke
i_make_it
22.03.2017, 15:35
Das eine Zauberwort heist Interrupteingang.
Da muß man nicht samplen, sondern jedesmal wenn an dem Eingang ein Interuptereignis stattfinden (steigende Flanke, fallende Flank, Pegelwechsel)
wird eine ISR (Interrupt Service Routine) ausgelöst da kommt einfach ein i=i+1 konstrukt rein.
Das Zweite Zauberwort heist Timer.
Den stellst Du dir so ein, das er z.B. alle Minute oder alle 5 Minuten überläuft.
Wenn das passiert wird der inhalt von i z.B. mit einem Zeitstempel wohin geschrieben (z.B. SD Karte) und i auf null gesetzt.
Dann hadst Du immer einen Zahlenwert und einen Zeitstempel. so kannst Du alle Werte später wieder zeitlich zuordnen.
Peter(TOO)
23.03.2017, 13:29
Hallo spyke.
Wie schon geschrieben wurde, musst du dich mit den Interrupts befassen.
Falls das Ganze auf Batterie laufen soll, haben Interrupts noch einen weiteren Vorteil:
Normal müssen nur der Interrupt-Controller und der Timer durchgehend laufen, den ganzen Rest, inkl. die CPU, kann man in den Tiefschlaf versetzen.
Verwendet man noch einen 32kHz Takt für den Timer, kommt der µC mit ein paar µA aus (Da muss man dann z.B. mit Pull-Ups aufpassen, die brauchen dann den meisten Strom).
Tritt ein Interrupt auf, wird die CPU geweckt und der Strom kann natürlich schnell auf 100mA ansteigen, aber dies nur für ein paar ms.
So hält dann die Batterie leicht ein halbes Jahr oder länger.
So funktioniert auch jedes analoge Uhren-Quarzwerk. Für den Sekundenzeiger braucht man auch 10-100mA, aber nur jede Sekunde und nur für ms.
MfG Peter(TOO)
Das aufzeichnen könnte man z.B. mit einer SD Karte machen.
Wenn Du mit ATMEL Controllern arbeitest kannst Du mal nach FAT für AVR Googeln.
Allerdings braucht man dazu schon einen relativ großen Controller, weil man 2 komplette Cluster ( 2*512Byte ) zwischenspeichern muss.
Der Vorteil ist, das man die Karte aus dem Gerät nehmen kann und die Daten dann einfach per Datei in den PC kriegt.
Man könnte auch in das RAM oder das EEPROM des Controllers zwischenspeichern und dann bei bedarf die SD Karte aktivieren und die Daten dann En Bloc reinschreiben.
Das Zählen der Lichtschrankenaktivität ( Interrupt ist ne gute Idee ) kann der Controller so nebenbei mitmachen.
Problematisch sehe ich nur die Uhrzeit, hier müsste man einen RTC Chip verwenden.
Den meisten Strom wird wohl die Lichtschranke selbst brauchen.
Mit etwas Überlegung kriegt man die AVR Chips sehr stromsparend.
Peter(TOO)
24.03.2017, 23:59
Problematisch sehe ich nur die Uhrzeit, hier müsste man einen RTC Chip verwenden.
Ist gar nicht nötig, es genügt ein Timer welcher durch läuft.
Unter Unix wurde als Zeit die Sekunden seit dem 1.1.1970 eingeführt. Dies benötigt eine 23-Bit Variable, welche jede Sekunde um 1 erhöht wird. Das reicht dann für etwa 138 Jahre ab dem 1.1.1970. Dafür gibt es in C schon fertige Funktionen, ist aber gar nicht so aufwändig, man muss nur wissen wie man die Schaltjahre richtig berechnet. :-)
Je nach Anforderung kann das Intervall auch etwas anderes als 1s sein.
BTW: In den meisten meiner Geräte ist seit Mitte der 80er Jahre so ein Timer versteckt. Meist zeigt er dann nur die Zeit seit dem letzten Einschalten an, kann aber über Service-Funktionen abgerufen werden. Entstanden ist der Timer immer als erster Gehversuch mit den Timern und dem Interrupt-Controller auf einem neuen µC.
Dieser Timer hat sich dann oft als nützlich bei der Entwicklung erwiesen. Man kann erkennen, wenn irgendwie ein unplanmässiger Reset auftritt und wenn der Timer sehr nach geht, werden die Interrupts irgendwo zu lange blockiert.
MfG Peter(TOO)
Herzlichen Dank für eure Vorschläge!
Ich werde mich mal mit dem Aufbau einer solchen Interrupt-Schaltung beschäftigen und versuche das umzusetzen.
Ggf. und durchaus wahrscheinlich melde ich mich nochmal.
VG spyke
PS.: Ich war krank geworden. Daher kam von meiner Seite so lange keine Antwort.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.