Hallo, Bascom Programm und schaltpläne sind angehängt. In diesem Programm läuft ein Timer ab, nach ablauf wird ein Relais geschaltet und ein Alarmton ausgegeben. Soweit funktioniert alles. Im Programm gint es eine Vartiable " C " je nachdem welchen Wert ich für C eingebe, wird dieser im Internen EEprom des Atmega 8 gespeichert, dieser Wert wird nach dem Reset aus dem EEprom geholt und der Timer starte von vorne. Programm funktioniert Tadelos, falls es jemand Brauchen kann Prog ist im Anhang. So nun zu meinem Problem, ich möchte diesen Wert nicht im Internen EEprom sondern im Externen I²C EEprom abspeichern, hat jemand evtl eine Idee wie ich das bewerksteligen Kann? EEprom ist ein 24C02 Lg Kai
Hallo Helfer, dieser Beitrag ist auch von mir, ist nun gelöst. Also auf das externe EEprom schreiben geht, aber wie binde ich das in das oben vorgestellte Programm ein?
Hallo habe den Bascom Code angehängt, Hardware ist die selbe. Habe das Programm geschrieben, weis aber nicht mehr weiter. Wie kann ich den Wert aus dem EEprom auslesen und als Variable C benutzen? Weis jemand wo das Problem im Programm liegt?? Fehlermeldungen habe ich keine.
statt I2crbyte Lesen , Nack 'Lese Wert aus EEprom so I2crbyte C , Nack Was versprichst du dir aber davon, externes EEPROM zu verwenden?
Hallo Joachim, versuch gleich mal aus. Das wird eine art Timer der jede minute den wert auf dem eeprom zurückschreiben soll bzw. abziehen. Da ich den Internen eeprom nur 100.000 mal sprich 100.000 Minuten beschreiben kann und den Externen 1.000.000 mal bietet sich das natürlich an diesen zu verwenden. Danke werd es mal testen.
@ Kai Burghart (tekasiko) >Da ich den Internen eeprom nur 100.000 mal sprich 100.000 Minuten Das sind 70 Tage, etwas mehr als 2 Monate. >beschreiben kann und den Externen 1.000.000 mal bietet sich das Das sind 700 Tage, knapp zwei Jahre. Und wenn man es richtig macht, reicht auch der interne EEPROM ewig. http://www.mikrocontroller.net/articles/Speicher#EEPROM_Schreibzugriffe_minimieren MFG Falk
Hallo Falk, ja das würde wohl gehen, aber der externe EEprom ist eine SmartCard die von Benutzer zu Benutzer unterschiedliche Werte hat, daher fällt der interne Speicher aus. Aber vielen Dank für den Tipp
Hallo zusammen, So der EEprom läuft. Nun möchte ich statt dem 24C02 EEprom einen 14C02 EEprom (Chipkarte) Beschreiben und lesen. Das funktioniert nicht mit dem oben genannten Programm. Ich denke das die Adressen &HA0 und HA1 in diesem Fall nicht korekt sind, da ich als Ausgabe immer 255 habe, das bedeutet ja die Karte ist leer. Weis jemand von euch was die korekte adresse ist? Datenblatt der Karte habe ich angehängt. Vielen Dank schon mal.
>Weis jemand von euch was die korekte adresse ist?
Steht auf der ersten Seite: Es ist 0xA0
Halo Holger, wenn ich aber I2cstart 'Start I2C I2cwbyte &0XA0 'Sende Slave adresse I2cwbyte A I2cwbyte X 'Sende Wert I2cstop 'Stop I2C Waitms 10 eingebe, habe ich immer eine Fehlermeldung Invalid Datatype [[0011]0[&0XA0]] Variable not dimensioned [0->0]
>wenn ich aber > >I2cwbyte &0XA0 'Sende Slave > >eingebe, habe ich immer eine Fehlermeldung >Invalid Datatype [[0011]0[&0XA0]] >Variable not dimensioned [0->0] Nimm halt I2cwbyte &HA0 'Sende Slave Wenns damit nicht geht schliess die Karte richtig an;)
Hallo, habe die Karte richtig angeschlossen, SCL und SDA auf SCL und SDA VCC auf VCC Gnd auf Gnd und die anderen 2 auf Gnd Ist richtig oder? Karte hat 6 Kontakte die mittleren 2 sin nicht belegt daher auf Gnd Klappt nicht, bekomme immer 255
So nun funktioniert es, habe alles nochmal überprüft, war tatsächlich falsch angeschlossen. Vielen Dank
Hallo nochmal, so das Schreiben funktioniert jetzt, Code ist angehängt, Datenblatt in meinem vorherigen Beitrag. Jetzt möchte Ich C als Variable Haben (irgend ein Wert zwischen 0-99) Zudem möchte ich noch einen Namen einfügen. Sprich wenn ich die Karte einschiebe, start drücke sollte er die Karte beschreiben mit Bsp: Kai Burghart 60 Momentan kann ich ja nur den Wert "60" schreiben, und diesen wieder auslesen. Wenn ich aber "Kai Burghart" schreiben will und die "60" in einen anderen Block und den wieder auslesen will, wie kann ich das machen? Die Adresse &HA0 und &HA1 sind für die Variable belegt in diesem Fall "60" Jetzt brauche ich eine andere Adresse für "Kai Burghart" Bitte helft mir ich verzweifle hier. Vielen dank schon mal für eure mühe.
Mir scheint, du hast die Funktionsweise noch nicht verstanden... 0xA0 und 0xA1 sind die Adressen des Bausteins, nicht die der einzelnen Speicherplätze. Sinnvollerweise drehst du die Sache rum, da die Zeit eine feste Breite (Integer, 2 Byte?) hat. Anschliessend kommt der string mit dem Namen, die Länge ist naturgemäss variabel. Also den Zahlenwert schreibst/liest du aus Adresse 0 und 1 (oder nur 0, falls nur ein Byte. Der string beginnt entsprechend bei Adresse 1 (oder 2) und wird mit einer 0 beendet. Für den Namen schreibst du einfach die ASCII-Codes der Zeichenkette ins EEPROM, anschliessend eine 0 (Stringende). Lesen beginnt dann bei 1 (oder 2), solange bis die 0 erreicht wird. Bei der Stringverarbeitung von Bascom muss ich jetzt allerdings passen.
Hallo Joachim, ich gebe zu, ich versteh das ganze EEprom nicht wirklich. köntest du mir das bitte ein bischen genauer erklären? Wäre dir sehr dankbar dafür.
Stell die eine Schublade mit 256 Fächern vor, an eine bestimmte Stelle willst du was legen oder herausnehmen. Blöderweise gibt es mehrere solche Schubladen - und nun stehst du dumm da. Ohne zu wissen, welche Schublade und welches Fach kannst du damit nichts anfangen. Auch wenn es bei dir nur eine Schublade (dein EEPROM) gibt, es könnten sich noch andere Dinge dort befinden. Der übliche Weg: gehe zur richtigen Schublade (0xA0) und lege was in das richtige Fach (Byteadresse), wie im richtigen Leben. Für den Fall, dass du etwas herausnehmen möchtest, heisst die Adresse nicht mehr 0xA0, sondern 0xA1, um dem Baustein mitzuteilen, dass du lesen willst. Jetzt gibt es oft die Fälle, dass du nicht nur eine Sache schreiben oder lesen willst, sondern mehrere hintereinander. Dazu muss dann nicht jedes Mal die ganze Prozedur (gehe in den Raum, suche die Schublade, suche das Fach, lege oder nimm was aus dem Fach) gemacht werden, sondern es kann hintereinander mehreres getan werden. Das geht sowohl beim Schreiben (page write) als auch beim Lesen.
@ALL Wollte mich noch bei euch allen bedanken, hat alles soweit funktioniert dank eurer Hilfe. Danke. Liebe Grüße Kai
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.