...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 :(
was macht : data[i] = ds.read(); was seht da drin wie arbeitet: Serial.print(data[i], HEX); was für ein EEPROM .. typ, bezeichnung ....
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
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
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... :(
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.