erstellt 12.06.2010 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Atmega 8 speichert im Eeprom | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Zunächst
einmal , was überhaupt ist ein Eeprom ? Also der Begriff kommt aus dem Englischen und ist die Abkürzung für (Electrically Erasable Programmable Read-Only Memory ) was soviel heißt wie Elektrisch Programmier und Löschbarer nur Lese Speicher. Die Funktion kann man sich in etwa vorstellen wie mehrere nebeneinander gestellte Batterien, die wenn sie geladen sind den Wert 1 und wenn sie leer sind den Wert 0 beinhalten. Da Batterien sich mit der Zeit selber entladen würden sie auch mit der Zeit ihren Inhalt also die Werte verlieren , ganz genau so ist es auch beim Eeprom, nur dauert es da etwas länger bis zu mehrere Jahre. Und wozu braucht man Eeproms ? Man benötigt Eeprom's um dauerhaft Werte speichern zu können, also so das auch eingestellte Werte z.B. nach dem Aus und wieder Einschalten der Versorgungsspannung noch vorhanden bleiben. Man denke an eine Uhr in der ich das Datum einstelle , um nicht nach jedem erneuten einschalten das Datum neu eingeben zu müssen werden solche Werte dauerhaft im Eeprom gespeichert. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Der Atmega 8 hat einen Eeprom
Speicher von 512 Byte, die minimale Anzahl der Schreib-Lesezyklen beträgt 100 000. Beachten sollte man das dass Schreiben ins Eeprom eine gewisse Zeit in Anspruch nimmt , in etwa 9 Millisekunden dass sollte der Programmierer in seinen Programm mit einplanen. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Um einige Versuche mit dem EEprom Speicher zu unternehmen, hab ich eine kleine Schaltung erstellt, die auch zu andere Zwecke benutzt werden kann. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Die Schaltung besteht aus einem
Atmega 8 Mikroprozessor mit angeschlossenen Display und einer
SPI
Schnittstelle über den der Atmega programmiert wird. Die Stromversorgung wird über einen Festspannungsregler 78L05 auf konstante 5 V gehalten. Um den Aufwand gering zu halten benutze ich zur Stromversorgung ein altes ausgedientes Stecker Netzteil wie sie auch zum laden von Handys benutzt werden. Davon hat man ja meistens noch einige zu Hause rumliegen. Zusätzlich noch als Signalgeber einen Piezo und einigen Leuchtdioden . Der Trimmer P1 dient zur Kontrasteinstellung des Displays , R6 ist der Vorwiderstand für die Display Hintergrundbeleuchtung. INT0 und INT1 sind zwei Jumper (Jumper offen ) die zu Testzwecke geschlossen werden können, wird in diesem Versuch aber nicht benutzt. Zusätzlich wurde eine Verbindung vom PIN B. 2 des Atmega 8 zur Hintergrundbeleuchtung des LCD Moduls geschaffen um die Hintergrundbeleuchtung innerhalb des Programmablaufs ein bzw. auszuschalten ,um bei einem möglichen Batterie betrieb den Stromverbrauch so niedrig wie möglich zu halten. Zusätzlich wurde noch ein Taster angebracht um die im EEprom gespeicherten Werte wieder löschen zu können. Im nachhinein hab ich mich entschlossen der Schaltung noch einen Akku zu spendieren, damit die Schaltung notfalls auch ohne Netzversorgung läuft. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
Hier
die dazugehörige Platine, der Atmega versteckt sich
hinter dem Display .
Auf der rechten Seite befindet sich die Pragrammierschnittstelle in Form eines 9 poligen SUB-D Stecker wobei von den 9 Polen allerdings nur 5 benötigt werden. Habe mir aber angewöhnt bei allen meinen Schaltungen aus Kompatibilitätsgründen den gleichen Stecker zu verwenden. Und da bietet sich dieser Stecker an weil er auch bei PC's eine Standardschnittstelle war , zumindest bis die neuen USB Schnittstellen auf dem Markt kamen. In den heutigen modernen PC's sind diese kaum noch zu finden, deshalb liegt bestimmt noch bei manch einem Zuhause dieser Stecker in irgend welchen Wühlkisten herum. Die kleine Platine die aufgesteckt wurde ist ein 1 Kanal Funkempfänger somit ist man auch in der Lage über Funk einen Befehl an den Atmega zu senden. Der Taster in der Mitte der Platine dient zum löschen des Eeproms. Oben links über dem Display befindet sich links der 5 Volt Festspannungsregler und rechts davon eine Steckbrücke ( Jumper )zum unterbrechen der Stromversorgung. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hier soll versucht werden Daten im Internen Eeprom vom Atmega 8 zu speichern und wieder auszulesen. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Generell
gibt es verschieden Möglichkeiten Daten im internen EEprom zu
speichern. Eine Möglichkeit ist es direkt eine Variable als EEprom Variable zu deklarieren , damit werden die Daten innerhalb des Programms direkt in der Variable abgespeichert und liegen damit schon im EEprom . Die andere Möglichkeit besteht darin die Befehle "WriteEeprom" und "ReadEprom" zu benutzen. Zunächst befassen wir uns mit der Epromvariable. Die Epromvariable ist keine echte Variable sondern nur ein Synonym dafür,deshalb gelten für diese Quasivariable nicht die gleichen Gesetzmäßigkeiten wie für eine echte Variable. Einige der Anweisungen funktionieren einfach nicht mit der Eprom Variablen. Um also den vollen Funktionsumfang bei der Programmierung zu erhalten bedienen wir uns eines Tricks indem wir die Eprom Variable immer erst in eine LocaleVariable kopieren , dann kann sie bearbeitet werden um sie dann anschließend wieder zurück zu kopieren. Nachfolgend die grundsätzliche Vorgehensweise: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Das Komplette Programm erstellt mit Bascom welches je nach Bedarf geändert werden kann : | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Funktion | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Nach dem Einschalten des Atmega's leuchtet zuerst die grüne Led
für ca
6 Sekunden und verlöscht dann wieder anschließend
wird ständig die Hauptschleife durchlaufen und am Eingang Pin D.0 abgefragt ob ein Signal vom Funkempfänger vorhanden ist, gleichzeitig blinkt die Rote Led als Funktionskontrolle . Sollte ein Funksignal empfangen werden wird die Hintergrundbeleuchtung des Displays eingeschaltet und ein Pieps Ton ausgegeben anschließend wird die Anzahl der Empfangenen Funksignale auf dem Display angezeigt und alle drei Led's blinken für eine gewisse Zeit. Nach dem das blinken der drei Led's beendet ist, blinkt wieder die Rote Led und die Schaltung ist wieder Betriebsbereit. Während das blinken der Rote Led kann jederzeit die Taste gedrückt werden um die Anzahl der eingegangen Meldungen zu löschen. Ansonsten bleibt die Anzahl der Meldungen auch enthalten wenn die Betriebsspannung zwischenzeitlich ausgeschaltet wurde. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Aktualisiert am 12.05.2019 |