Atmega TWI 24c04 lesen / beschreiben

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 29 3 2024  16:09:05      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Atmega TWI 24c04 lesen / beschreiben
Suche nach: atmega (404)

    







BID = 838429

erasure

Gerade angekommen


Beiträge: 4
Wohnort: Worbis
 

  


Hallo

Ich wollte Daten auf ein 24C04 per twi speichern und auslesen.
Nur leider finde ich im Internet keinen gescheiten Code.

Bin dabei einen Kosmos Computer ( CP1 ) auf einen
Atmega8535 nachzubauen / progamieren. Soweit geht alles,nur möchte ich
die Daten ( das Programm ) auf einen Ser. EErom speichern / auslesen

Hier meine Daten:
Pollin board
den Atmega8535 hab ich auf 4 mhz intern laufen.

Ich schreibe in Assembler. Mit C oder Bascom hab ich mich leider noch nicht beschäftigt.

Es sollen 512 Byte gespeichert werden.

256 Byte Befehle und 256 Byte Daten in zwei Blocks.

Wäre nett wenn mir einer einen Code zukommen lassen würde.

BID = 838430

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

 

  

Hallo und herzlich willkommen im Forum!


Fertigen Code habe ich nicht, schon gar nicht in Assembler.
In C kann ich dir die Routinen zum Ansprechen der TWI geben, das ist aber im Datenblatt des µCs wunderbar dokumentiert, sogar mit Beispielen in C und Assembler.


Wie die Abfolge der I²C-Zugriffe ausseht, um das EEPROM zu schreiben/lesen ist dem entsprechenden Datenblatt zu entnehmen, auch dort habe ich nur C-Code vorrätig, der aber leicht auf Assembler umgeschrieben werden kann.



Zitat :

256 Byte Befehle und 256 Byte Daten in zwei Blocks.

Wo ist der Unterschied zwischen Befehlen und Daten?
Oder warum machst du einen Unterschied?

_________________

BID = 838643

erasure

Gerade angekommen


Beiträge: 4
Wohnort: Worbis

Hallo Donconi

Vielen dank erst mal
für die rasche Antwort. Leider kann ich mit C gar
nix anfangen. Müsst ich vieleicht umtüfteln, wenn es kein Assembler Code gibt.
Kennst du den Kosmos Computer?
Kannst ja mal Googeln. Ich hab mir den nachprogamiert , nur mit einen
LCD Display. Ein Befehl sah z.B so aus: 03 255
Die 03 war der Befehl. In diesem Fall eine Verzögerung.
die 255 war eine Date von 0 - 255. In den Fall oben verzögerte der Computer 255 Millisekunden.
Im 8535 hab ich die EErom Bänke so aufgeeilt . Untere Bank für die
Befehle ; obere Bank für die Daten zu den Befehlen. So kann ich 255 befehle mit demendsprechend den Daten speichern.
Deswegen wollte ich 512 Daten auf den 24 C 02 speichern. Vorher natürlich löschen , Damit bei den Daten wirklich nur 0 steht.
Es gab auch befehle ohne Daten natürlich: zb: 01 000
01 000 unterbrach das Programm.
02 000 zeigte den Akku an ; und so weiter....
21 befehle hatte der Computer. Voll retro. Ich nehme ihn um im Keller keine Bastelprogramme zu schreibe. Deswegen brauch ich nicht immer den Schlepptop runter zu tragen um mal eine Led blinken zu lassen.
Irgendwo gibt es auch einen link da kann man den Kosmos Computer auf den PC simulieren.



BID = 838651

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
Nur leider finde ich im Internet keinen gescheiten Code.
Dann schreib ihn dir doch selbst.
Mehr als einen PC mit dem alten MSDOS zu starten und den dazugehörgen Basic-Interpreter brauchst du dazu nicht.
Mit den neueren Betriebssystemen ist das wesentlich schwieriger, da sie es nicht erlauben, daß ein Programm direkt mit den Portpins herumfiddelt.

Der EEPROM wird dann direkt mit ein paar Leitungen vom Parallelport versorgt und programmiert. Wie das geht, steht im Datenblatt.


Zitat :
Vorher natürlich löschen , Damit bei den Daten wirklich nur 0 steht.
Das sollte nicht nötig sein und man sollte sich darauf auch nicht verlassen.
Ein Programm darf keine offenen Enden haben, sondern es muß prinzipiell korrekt beendet werden.
Entweder, in dem es die Kontrolle an das Betriebsprogramm zurückgibt, oder, indem es eine ewige Schleife ausführt.
Prozessorabhängig kannst du dich nämlich nicht darauf verlassen, dass 00 ein NOP ist, auch weisst du nicht, welche Daten der Prozessor bekommt, wenn er den Bereich physisch existenten aber dennoch adressierbaren Speichers verlässt, und schliesslich enthalten viele Speicher in gelöschtem Zustand nicht etwa 00, sondern FF.

In solchen Fällen würde dein "Löschen" genau das Gegenteil bewirken, nämlich verhindern, das ein 0 Bit auf 1 programmiert werden kann.
Umgekehrt, also 1 --> 0 geht schon.



[ Diese Nachricht wurde geändert von: perl am 16 Jul 2012 20:59 ]

BID = 838694

Brizz

Stammposter



Beiträge: 386
Wohnort: Rheine

Wenn es hilft, kann ich Dir den Assemblercode für einen 80C32 geben.

BID = 838697

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Das setzt aber voraus, dass eine Instruktion und das passende Argument immer 8 Bit groß sind bzw. nicht größer sein dürfen (es sei denn, man kodiert die Instruktionen entsprechend).

Ein 24C02 kann aber nur 256 Byte speichern und nicht 512.

@perl
Ein AVR kann aus externen ROMs kein Programm ausführen.
Nur der Interpreter für diese 21 Befehle würde, sofern schlecht programmiert, bei ungültigen Instruktionen Mist bauen.

Edit: denn ich habe erasure so verstanden, dass er diesen Kosmos-Computer mit einem AVR emulieren will.
Das Programm in form dieser 21 Instruktionen soll von einem seriellen EEPROM ausgelesen und ausgeführt werden.

Den Sinn verstehe ich zwar nicht ganz, kann man doch mit dem AVR direkt Programme ausführen, allerdings erkenne ich den akademischen Anreiz

_________________


[ Diese Nachricht wurde geändert von: DonComi am 17 Jul 2012  0:43 ]

BID = 838698

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Aufbauend auf der einfachen TWI-API aus dem Thread hier.


#define	WRITE   0
#define	READ    1

uint8_t const EEPROM_ADDR = 0xac;

uint8_t read_eeprom(uint16_t address)
{
	uint8_t upperbyte = EEPROM_ADDR;
	upperbyte |= ( (uint8_t) (address >> 7) ) & 0xFE;

	i2c_start();
	i2c_transmit(upperbyte + WRITE);
	i2c_transmit( (uint8_t) address  );
	i2c_start();
	i2c_transmit(upperbyte + READ);
	register uint8_t data = i2c_receive(NACK);
	i2c_stop();

	return data;
}


void write_eeprom(uint16_t addr, char byte)
{
	i2c_start();

	register uint8_t upperbyte = EEPROM_ADDR;
	upperbyte |= ( (uint8_t) (addr >> 7) ) & 0xFE;

	i2c_transmit(upperbyte + WRITE);
	i2c_transmit((uint8_t)(addr));
	i2c_transmit(byte);
	i2c_stop();
}


Das kann man sehr einfach in Assembler umschreiben, da braucht man nicht mal Ahnung von C zu haben.
Vorsichtshalber das Datenblatt parat halten, aber solltest du WINAVR btw. avr-gcc benutzen, dann sind die Registerbezeichnungen identisch.

Der Source läuft übrigens irgendwo bei mir in abgewandelter Form für einen *C08, also für 1kByte.


_________________


[ Diese Nachricht wurde geändert von: DonComi am 17 Jul 2012  0:51 ]

BID = 838702

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
Ein AVR kann aus externen ROMs kein Programm ausführen.
ist mir bekannt, aber ich hatte angenommen, dass der EEPROM lediglich programmiert werden soll, mit dem AVR als Option.
Daß der Chip als Programmspeicher für den Prozessor dienen sollte, hatte ich überlesen und ich kann auch keinen Sinn darin erkennen.



Zitat :
Ein 24C02 kann aber nur 256 Byte speichern und nicht 512.
Deshalb steht ja im ersten Posting, daß er einen 24C04 programmieren will.

BID = 838710

Brizz

Stammposter



Beiträge: 386
Wohnort: Rheine

Anbei der Assemblercode für den 8032.

Auch wenn die Mnemonics anders sind, kann man doch erkennen, wie
SDC und SDA gesetzt und gelesen werden müssen, um einen I2C-Chip anzusteuern (einen 24C02 und einen I2C-Uhren-Chip).

Die Zahl der NOPs habe ich jeweils auf 1 reduziert. Die Anzahl aufeinander folgender NOPs, hängt von der Taktfrequenz Deines Prozessors ab. In meinem Fall waren es jeweils 10 NOPs (80C32 mit 22,.. MHz).


[ Diese Nachricht wurde geändert von: Brizz am 17 Jul 2012  8:48 ]

BID = 838842

erasure

Gerade angekommen


Beiträge: 4
Wohnort: Worbis

Hallo
Wegen den Speicherlöschen. Ich nehme die 0 als leeren speicher , weil
wegen Anzeigetechnisch einfacher.

Hatte ich 24C02 geschrieben. Ups Natürlich einer von der Baureihe wo sich mindestens 512 Byte speichern lassen. Aber wenn ich nen 20c02 befiedeln könnte wird es mit nen 24 C 04 /8 /16 auch funktionieren.

Das mit den selberschreiben ist meine letzte Option. Nur leider wegen 11 Wöchigen Tochter erst mal auf Eis gelegt. Dachte Irgendeiner hat nen brauchbaren Assemblercode den ich nur für meine Zwecke umstricken müsste.

Danke noch mal der Code auf C. Wenn alle Stricke reißen werd ich mich wohl damit mal beschäftigen .

Ich hab auch schon mal nen Code auf Bascom gesehen. Vieleicht mach ich was damit.

BID = 838849

erasure

Gerade angekommen


Beiträge: 4
Wohnort: Worbis

Hallo

Ich hab da mal einen Link damit ihr seht worum es geht:

www.g-heinrichs.de/software/informat.htm

Das Ding heißt da Modellrechner CP1


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 23 Beiträge im Durchschnitt pro Tag       heute wurden bisher 16 Beiträge verfasst
© x sparkkelsputz        Besucher : 180692697   Heute : 8599    Gestern : 12674    Online : 442        29.3.2024    16:09
9 Besucher in den letzten 60 Sekunden        alle 6.67 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0393159389496