-         

Ergebnis 1 bis 5 von 5

Thema: [BASCOM] Einfacher Datenlogger für die Speicherung im EEPROM

  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638

    [BASCOM] Einfacher Datenlogger für die Speicherung im EEPROM

    Anzeige

    Hallo!


    Um nach längerer Bascom-Abstinenz wieder in Übung zu kommen habe ich mal einen kleinen Logger geschrieben. Es ist nichts weltbewegendes, aber vielleicht sucht ja der ein oder andere solche Codeschnipsel oder findet Anregungen für ähnliche Projekte.

    Mir ging es hierbei rein um die Speicherung im EEPROM, da ich sowas selten gemacht hatte und dafür bietet sich so ein kleiner Logger an. Um überhaupt etwas loggen zu können nahm ich einen lichtabhängigen Widerstand. Temperatursensoren waren zwar da, aber es musste schnell und einfach sein.

    Verwendet wurde ein AtMega88 ohne viel Peripherie. Aus diesem Grunde wird auch der interne EEPROM verwendet, worin ja nicht wirklich viel Platz zu finden ist. Aber dennoch - es funktioniert.

    Der Controller misst jede Sekunde den Wert des ADC0 und mittelt nach 60s alle Werte. So kann man sagen, der durchschnittliche Lichteinfall jeder Minute wird gemessen. Dieser Mittelwert wird in zwei Bytes aufgespalten und ins EEPROM geschrieben. Nachdem die Adresse 250 erreicht wurde, schaltet der Logger ab. Gelesen wird, indem die zwei Bytes wieder aus dem EEPROM gelesen und der ursprüngliche Wert daraus berechnet wird. Über zwei LEDs wird der aktuelle Zustand angezeigt. LED1 visualisiert, ob das Logging aktiv ist und LED2 leuchtet wenn gerade eine Routine durchlaufen wird (ziemlich hilfreich beim Debugging).

    Die Software ist bewusst so programmiert, dass noch weitere Funktionen hinzugefügt werden können. Ich habe mir das bereits früh angewöhnt um Programme problemlos erweitern zu können. Somit wird auf Warteschleifen komplett verzichtet.

    Die Hauptschleife prüft lediglich ob im UART-Buffer etwas steht und fragt ständig ab, ob geloggt werden soll. In der Timer-ISR wird die Variable für die Sekunden hochgezählt und gegebenenfalls bei erreichen der 60. Sekunde in die Routine für die Mittelung und Speicherung gesprungen. Außerdem wird in dieser ISR ein Messwert erfasst und in die Messwerttabelle gespeichert. Die restlichen Routinen werden nur auf Befehl vom User angesprochen.

    Der User kann mittels Terminal mit dem Kontroller kommunizieren. Die Kommunikation ist (noch) recht einfach gehalten:
    (e) ... Logging einschalten
    (d) ... Logging ausschalten
    (r) ... Lese EEPROM
    (l) ... Lösche EEPROM
    (s) ... Status
    Es erfolgen kurze Bestätigungsmeldungen bei Tastendruck bzw. die entsprechende Aktion wird sofort ausgeführt und am Terminal ausgegeben. Terminalsteuerung exestiert (noch?) keine.

    Was ich noch verbessern möchte:
    • Es sind sicher noch einige Fehler im Code
    • Bei Reset wird alles vergessen und neu gestartet, die zuletzt verwendete Adresse wird zurückgesetzt und somit werden alle bisherigen Messwerte überschrieben
    • Terminalsteuerung, eventuell (braucht aber leider ziemlich viel Flash)
    Bis jetzt ist der Flash zu 25% gefüllt, vielleicht geht da noch weniger (es sei denn ich bastel mir wirklich noch eine Terminalsteuerung).

    Ich bin um Rückmeldungen immer dankbar und es würde mich sehr freuen, wenn jemand gefallen an dem kleinen "Mini-Projekt" findet und/oder Anregungen für mich hat.


    Grüße
    Thomas

    lichtlogger_1_0_0.bas

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von Scotch
    Registriert seit
    15.10.2004
    Ort
    Bei Braunschweig
    Alter
    45
    Beiträge
    305
    Hallo Thomas,

    es ist zwar schon ein wenig her das Du Dein Programm hier veröffentlicht hast.
    Aber da ich selber einen kleinen Logger bauen will, finde ich Deine minimallösung einen gute Einstiegshilfe.
    Das einzige was ich jetzt spontan an Deinem Code verändern würde ist die Auswertung der Tasteneingaben.
    Du hast für jeden Tastendruck einen If Anweisung geschrieben.
    Ich würde es mit einer Select Case abfrage machen. Finde es dann etwas Übersichtlicher.
    Ob es beim compilieren einen Vorteil bring weiß ich nicht, könnte man aber mal überprüfen.
    z. B. wie auf der Seite
    http://www.rowalt.de/mc/avr/avrboard/04/avrb04.htm

    Wenn ich das richtig verstehe, verwendest Du den Internen EEprom, ich werde dann per I2C
    auf ein externen erweitern. Was ich auch schon immer mal testen wollte, ist das schreiben auf einer
    SD Karte. Müsste mir da dann erst mal ein schreib/lese Hardware aufbauen.
    Als Prozessor kommt bei mir dann ein Atmega 368 (Arduino Pro Mini) zum Einsatz.
    Den hab ich hier noch rumliegen und ist schnell per ber USB<->RS232 Adapter und dem Bootloader
    beschrieben.
    Der Bootloader verbraucht zwar etwas Speicher, aber das sollte bei einem Logger nicht das Problem werden.
    Andere speichern dort viel größere Projekte drauf (z.B. Wiicopter Steuerung)


    Gruß Ingo
    Geändert von Scotch (13.04.2012 um 19:27 Uhr)

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Hallo Scotch!


    Vielen Dank für deine Antwort. Es stimmt, es ist bereits eine Weile her und ich habe das Programm auch nur zu Übungszwecken geschrieben, um wieder "einzusteigen".

    Inzwischen exestiert auf meinem Schreibtisch eine Uhr mit eingebautem I2C-Temperatursensor und I2C-EEPROM, die ebenfalls anständig loggen kann. Die Kommunikation mit der Uhr erfolgt über ein Terminal und die Ausgabe der Uhrzeit mit Statusdaten über ein LCD-Display.
    Die Besonderheit: Die Uhr kann mit "echten" Kommandos gesteuert werden. Statt der etwas bescheuerten "Eine-Ziffer-ist-ein-Menüpunkt"-Bedienung können nun Befehle eingegeben werden welche erst nach drücken der Enter-Taste ausgelöst werden. Für mich war das eine große Hürde.
    Der Logging-Intervall ist einstellbar von 1-99 Minuten, tritt ein Logging-Ereignis ein wird ein Zeitstempel und anchließend die Temperatur im externen EEPROM abgespeichert.
    Klicke auf die Grafik für eine größere Ansicht

Name:	clocktemp_term.gif
Hits:	32
Größe:	33,9 KB
ID:	22121
    Grüße
    Thomas

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von Scotch
    Registriert seit
    15.10.2004
    Ort
    Bei Braunschweig
    Alter
    45
    Beiträge
    305
    Hallo Thomas,

    das mit den Befehl Eingabe ist eine interessante gefällt mir.

    Ich will mir erst mal einen Akku Logger für ein RC Modell bauen.
    Dieser soll mir dann die aktuelle Belastung in Ampere mitschreiben welche über ein Sensor in kurzen Zeiten gemessen wird.
    Des weiteren sollen dann noch Max, Min und Gesamtentnahme speichern.
    Bei einer Messdauer von ca. 15 Minuten und 10 Messungen pro Sec. würde ich auf 9000 Messergebnisse kommen.

    Gruß Ingo

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Hallo Ingo!


    An der Eingabe der Befehle habe ich auch einige Zeit geknabbert. Ich werde in Kürze den Codeschnipsel im Forum einstellen, damit auch andere es verwenden können. Ich finde, damit lässt sich das Gerät wesentlich angenehmer bedienen.
    Grüße
    Thomas

Ähnliche Themen

  1. BASCOM einfacher als ASM für Spielzeugbotsteuerung? (klar)
    Von PICture im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 76
    Letzter Beitrag: 24.01.2011, 19:20
  2. EEprom 9306 mit Bascom ansprechen
    Von rogerberglen im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 18.03.2010, 21:06
  3. Hexfile mit Bascom für EEPROM erzeugen
    Von elkokiller im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 27.06.2008, 22:57
  4. Einfacher GPS Decoder mit Mega8 und Bascom-AVR
    Von gpsklaus im Forum Eigene fertige Schaltungen und Bauanleitungen
    Antworten: 10
    Letzter Beitrag: 13.02.2007, 01:45
  5. Bascom - eeprom adress
    Von Arne im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 11.08.2005, 19:49

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •