Forum: Mikrocontroller und Digitale Elektronik Gesamte EEPROM Memory auslesen


von Gast (Gast)


Lesenswert?

...versuche gerade den gesamten Speicher Inhalt wie: Name, Main Memory 
bzw. App. Register  auslesen, klappt aber irgendwie nicht.

Es handelt sich hier um One Wire EEPROM (organized as one page of 256 
bits and 64 bit one-time programmable application register)



OneWire ds( input );

byte data[256];

for (int i = 0; i < 256; i++) {
   data[i] = ds.read();
   Serial.print(data[i], HEX);
}

vielleicht kann jemand helfen :(

von gast (Gast)


Lesenswert?

was macht :
   data[i] = ds.read();

was seht da drin

wie arbeitet:
   Serial.print(data[i], HEX);


was für ein EEPROM .. typ, bezeichnung ....

von Gast (Gast)


Lesenswert?

na ja ich soll die Maxim OneWire DS Bausteine auslesen/beschreiben, ich 
habe es an Arduino Atmega 328 angeschlossen.

Deswegen suche etwas Hilfe da ich nicht weiter komme L

von gast (Gast)


Lesenswert?

was macht denn die funktion :

Serial.print(data[i], HEX);

das steckt dahinter ... das ist ein funktionsaufruf .. zeige die 
funktion und man sieht was sie macht
wenn du hier bereits grübelst was ich meine ...

ich suche :
... print(char* ... , char..)
{
 //hier steht code ....
}


und wie heißt das eeprom ?
typ ?  herstellerlink ...
datenblattlink


mit so spärlichen angaben bisher von dir sage ich es liegt an zeile 47 , 
88 und 0815

von Gast (Gast)


Lesenswert?

Also... ich versuche den DS2431 (1024-Bit 1-Wire EEPROM von MAXIM) zu 
lesen bzw. zu beschreiben.
Die Software zur ARDUINO Board bittet die OneWire Library (OneWire.h) 
zur Verfügung. Mit der Bibliothek versuche ich den EEPROM zu lesen.

Die "Serial.print(data[i], HEX)" Funktion bedeutet - Zeige die 
abgespeicherte im Array (data[]) Werte als HEX im Serial-Monitor.


Ich kann den EEPROM teilweise lesen aber beschreiben funktioniert 
überhaupt nicht...  :(

von gast (Gast)


Lesenswert?

das is cshonmal ne einleitung ^^
zumidnest weiß man um was es geht

wie ist deine initiolisierung ?
nicht vom 1wire .. sondern vom EEPROM


das eeprom muss zum auslesen vorher beschrieben werden
mit einem " ich will lesen" befehl
ebeso gibts einen " ich will schreiben" befehl


hast du die onewire lib geprüft wie die übertragung stattfindet und mit 
der übertrgung des DS verglichen ?


wie das EEPROM angesprochen wird steht im datenblatt

von Dietmar M. (Firma: keine) (didima)


Lesenswert?

Zum Einlesen des EEPROMS DS2431 dient das folgende Programm:
1
#include <OneWire.h>
2
3
OneWire  ds(11);    // 1-wire on pin 2
4
byte     addr[8];   // Contains the eeprom unique ID
5
void setup(void)
6
{
7
 Serial.begin(57600);
8
}
9
 
10
void loop(void)
11
{
12
 byte i;
13
 byte dat[13];
14
15
 SearchAddress(addr);
16
17
 dat[0] = 0x01;
18
 dat[1] = 0x02;
19
 dat[2] = 0x03;
20
 dat[3] = 0x04;
21
 dat[4] = 0x05;
22
 dat[5] = 0x06;
23
 dat[6] = 0x07;
24
 dat[7] = 0x08;
25
 
26
 WriteRow(0,dat);
27
 ReadAllMem();    //print all mem content
28
 
29
 while(1);
30
}
31
32
void SearchAddress(byte* address) //Search for address and confirm it
33
{
34
 int i;
35
 if ( !ds.search(address))
36
 {
37
   Serial.print("No device found.\n");
38
   ds.reset_search();
39
   delay(250);
40
   return;
41
 }
42
 
43
 Serial.print("ADDR= ");
44
 for( i = 0; i < 8; i++)
45
 {
46
   Serial.print(address[i], HEX);
47
   Serial.print(" ");
48
 }
49
50
 if ( OneWire::crc8( address, 7) != address[7])
51
 {
52
     Serial.print("CRC is not valid, address is corrupted\n");
53
     return;
54
 }
55
 
56
 if ( address[0] != 0x2D)
57
 {
58
     Serial.print("Device is not a 1-wire Eeprom.\n");
59
     return;
60
 }
61
 Serial.println();
62
}
63
64
void WriteReadScratchPad(byte TA1, byte TA2, byte* data)
65
{
66
 int i;
67
 ds.reset();
68
 ds.select(addr);
69
 ds.write(0x0F,1);  // Write ScratchPad
70
 ds.write(TA1,1);
71
 ds.write(TA2,1);
72
 for ( i = 0; i < 8; i++)
73
   ds.write(data[i],1);  
74
 
75
 ds.reset();
76
 ds.select(addr);    
77
 ds.write(0xAA);         // Read Scratchpad
78
 
79
 for ( i = 0; i < 13; i++)    
80
   data[i] = ds.read();
81
}
82
83
void CopyScratchPad(byte* data)
84
{
85
 ds.reset();
86
 ds.select(addr);
87
 ds.write(0x55,1);  // Copy ScratchPad
88
 ds.write(data[0],1);
89
 ds.write(data[1],1);  // Send TA1 TA2 and ES for copy authorization
90
 ds.write(data[2],1);
91
 delay(25); // Waiting for copy completion
92
 //Serial.print("Copy done!\n");
93
}
94
95
void ReadAllMem()
96
{
97
 int i;
98
 ds.reset();
99
 ds.select(addr);
100
 ds.write(0xF0,1);  // Read Memory
101
 ds.write(0x00,1);  //Read Offset 0000h
102
 ds.write(0x00,1);
103
 
104
 for ( i = 0; i < 128; i++) //whole mem is 144
105
 {
106
   Serial.print(ds.read(), HEX);
107
   Serial.print(" ");
108
 }
109
 Serial.println();
110
}
111
112
void WriteRow(byte row, byte* buffer)
113
{
114
 int i;
115
 if (row < 0 || row > 15) //There are 16 row of 8 bytes in the main memory
116
   return;                //The remaining are for the 64 bits register page
117
   
118
 WriteReadScratchPad(row*8, 0x00, buffer);
119
 
120
 // Print result of the ReadScratchPad
121
 for ( i = 0; i < 13; i++)
122
 {
123
   Serial.print(buffer[i], HEX);
124
   Serial.print(" ");
125
126
 }
127
 
128
 CopyScratchPad(buffer);
129
 
130
}

Es ist getestet und funktioniert.
Mir selbst fehlt noch ein ähnliches Programm um diesen Chip zu 
beschreiben.

: Bearbeitet durch Moderator
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
Noch kein Account? Hier anmelden.