Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Speichern von Monatswerten Kategorie: C-Control I V1.1 (von MaPi - 14.08.2008 16:41)
 Als Antwort auf Re: Speichern von Monatswerten von ficher - 12.08.2008 20:20
MaPi nutzt:  CC1-Unit V1.1, CC1-M-Unit V1.1, CC1-Station V1.1, C-Control 2
Elmar,
ich rede nur über das externe, mittels I2C-Bus angesprochene, ursprüngleich vorhandene EEPROM auf der CControl 1.1...
Wenn die EEPROM-Datei jedes Mal nach dem Schreiben geschlossen wird, wird auch der Zähler für die Datei im EEPROM aktualisiert. Abgesehen davon, sind nach jedem Schreibvorgang die Daten fest im EEPROM und durch einen Stromausfall nicht mehr zu löschen.

Wenn Du die EEPROM-Datei öffnest und offen hälst, kannst Du hier soviel Werte nacheinander reinschreiben wie das EPROM hergibt.
Da Du eventuell die Datei zwischendurch schließen wirst, vielleicht nur der Ordnung halber, mußt Du sie beim nächsten Mal
        entweder mit OPEN# FOR APPEND öffnen, um alte Daten zu halten und neue Daten anzuhängen,
        oder mit OPEN# FOR WRITE öffnen, um die alten Daten (alle zur gleichen Zeit) mit den neuen zu überschreiben. Sobald Du die Datei so öffnest, werden die alten Daten für die CC1 nicht mehr gültig sein und über CCBASIC nicht mehr auszulesen.
--> siehe hierzu Dokumentation CCBASIC-Befehle.

Gibts eventuell mehr Möglichkeiten mit den neuen BASIC++-Dialekten? Weiß ich nicht, könnte sein.

Nun jedenfalls hast Du mit o.g. Methode die Werte immer im EEPROM, kannst sie wie gewünscht immer wieder über schreiben, kannst aber nur den Gesamtwert über die Anzahl der gespeicherten, wirklich vorhandenen Monatswerte ziehen. Das heißt, bei jedem Überlauf von 12 Monaten beginnst Du wieder bei 0 und somit hast Du den Gesamtwert nur über max. 1Jahr. Eine kontinuierliche Historie über die letzen 12 Monate lässt sich damit nicht machen (außer Du hälst die Daten in Excel auf dem PC).

Wie gesagt, wenn Du einen Ringspeicher im EEPROM realisierst, könntest Du immer die letzen 12 Monate halten und zum Gesamtwert zusammenrechnen.

Doch dazu musst Du gezielt auf die Daten zugreifen können --- hier greifen die Hinweise von den anderen Forumschreibern...Du musst direkt über den I2C auf die Speicherzellen des EEPROMS zugreifen, diese lesen, manipulieren etc.

Kennst Du Dich mit Assembler und CCBASIC aus? Dann versuche die Routinen bei CCTOOLS oder DEEPXS zu verstehen und zu nutzen.

Ich habe nur frühe DEEPXS-Versionen in meinem Archiv, die letzte Version von Mark Hämmerling ist nicht mehr im Netz verfügbar. Doch auch die alten Lösungen sollten arbeiten. Damit kannst Du recht bequem auf die Speicherzellen im ext. EEPROM zugreifen.

Überlegungen:
1. Die Basisadresse des EEPROMS wird $0 sein. Hier liegt irgendwo der Zähler für die Grösse des CCBASIC-Programms (steht in CCINTERN), das aktuell im EEPROM ist (also Dein Programm).
2. Über den Programmzähler kann die Länge des BASIC-Programms ermittelt und danach der OFFSET errechnet werden, um sicher an das Ende des Programmspeichers im EEPROM zu kommen und dieses nicht durch EEPROM-Manipulationen zu überschreiben (sonst Programmabsturz).
3. Weißt Du den Offset, kannst Du diesen zur Basisadresse addieren, um die absolute Adresse zu bekommen, ab der Du im EEPROM Deine Daten schreiben kannst.

Ich denke, dies solte möglich sein. Werde versuchen, mich mal damit zu beschäftigen und gebe Dir Feedback. Vielleicht kannst Du mal schauen, was mit den CCTOOLS-Routinen/Vorschlägen zu machen ist. Generell werden wohl alle Lösungen nur über in Assembler geschriebene (existierende) Routinen realisiert sein.

Ich würde mich mit der PC-Auslese-Lösung nicht zufrieden geben.
Schau mal, was geht.
Grüsse, Mak

> hallo
>
> ansonsten falls ich das so nicht hinbekomme, würde ich gerne die werte nacheinander abspeichern und sie per notebook bei bedarf auslesen.
>
> ich schreibe also die werte mit "open for append und print" in den eeprom.
>
> wenn die datei voll ist, sollte aber der wert vor stromausfall trotzdem sicher sein und daher weiterhin aktuell gespeichert werden. kann ich die datei als "endlosdatei" beschreiben, sodass immer die ältesten werte zuerst überschreibe, oder kann man nur die ganze datei löschen und wieder von neuem beginnen.
>
> gruß
> elmar
>
>
> > Hallo Elmar,
> > also wie gesagt:
> > Du kannst die Daten in das externe EPROM der CC1 (und nicht etwa in das interne) schreiben mit PRINT# Befehl des CCBASIC und diese auch wieder mit INPUT' lesen. Dazu bedarf es keiner ausgefeilten Kniffe.
> >
> > Ein Problem bleibt. Der Zugriff ist nur sequentiell, Du kannst also immer nur hintereinander schreieb und lesen oder die Datei immer wieder komplett überschreiben.
> >
> > Berechtigt fragst Du nach einem gezielten Zugriff auf einzelne Datenworte in der Datei.
> > Dies ist so nicht möglich.
> >
> > Lösung(?): Nutzung des Softwarepakets DEEPXS von Mark Hämmerling. Damit soll man auf jedes Byte des externen EPROMs der CC1 Zugriff erlangen. Ich finde dieses Paket leider hier unter den Links nicht, habe es aber sich och irgendwo zuhause.
> > Wenn ich Zeit finde, schaue ich da mal rein, um Dir ev. weiterhelfen zu können.
> > Schau mal im Netz, ob Du das Programmpaket noch irgendwo auftreiben kannst.
> > Grüsse,
> > MaPi

 Antwort schreiben

Bisherige Antworten:

Problem gelöst mit DeepXS!!! (von MaPi - 17.08.2008 18:32)
    Re: Problem gelöst mit DeepXS!!! (von ficher - 19.08.2008 7:10)
        Re: Problem gelöst mit DeepXS!!! (von MaPi - 19.08.2008 23:18)