Forum: Mikrocontroller und Digitale Elektronik Problem mit seriellem EEPROM 25LC640!


von asdf (Gast)


Lesenswert?

Hallo

Ich möchte mit einem PIC16F877a über das SPI Interface Daten in den 
Speicher schreiben und dann wieder auslesen und auf einem Display 
anzeigen. (einfach nur mal für Testzwecke).

Die Display Ansteuerung (Nokia 3310 Display) funktioniert einwandfrei. 
Somit funktioniert auch die Datenübertragung per SPI.

So ich habe 2 Funktionen geschrieben um Daten aus dem 25LC640 auszulesen 
und zu beschreiben.

Hier die Funktion um Daten auszulesen:

Ich übergebe der Funktion die Speicher Adresse von der ich die Daten 
auslesen möchte.
Code:
1
unsigned int read_eeprom(unsigned int l_addr, unsigned int h_addr) {
2
   unsigned int data = 0;
3
   ECS = 0; //Chipselect -> enabled
4
   DelayUs(100);
5
   write_spi(READ); // READ ist eine Konstante mit dem Wert 0x03 ->laut Datenblatt
6
   write_spi(h_addr); // High Byte der 16bit Adresse
7
   write_spi(l_addr); // Low Byte der 16Bit Adresse
8
   data = read_spi(); // gelesenen Daten in der variable data abspeichern
9
   ECS = 1;      // Chipselect -> disabled
10
   DelayUs(100);
11
   return data;  
12
}

Hier die Funktion um Daten in den Speicher zu schreiben
Adresse und Daten werden übergeben
Code:
1
void write_eeprom(unsigned int data, unsigned int l_addr, unsigned int h_addr) {
2
   ECS = 0;  //Chipselect -> enabled
3
   DelayUs(100);
4
   write_spi(WREN); // Write enable bit setzen; hat den wert 0x06 laut Datenblatt
5
                       muss dieses Write enable Latch vor jedem Schreibzyklus
6
                       gesetzt werden 
7
   ECS = 1;  // Chipselect -> disabled
8
   DelayUs(100);
9
10
   DelayMs(20);
11
12
   ECS = 0;  // Chipselect -> enabled
13
   DelayUs(100);
14
   write_spi(WRITE); //WRITE ist eine Konstante mit dem Wert 0x02->laut Datenblatt
15
   write_spi(h_addr); // High Byte der 16bit Adresse
16
   write_spi(l_addr); // Low Byte der 16Bit Adresse
17
   write_spi(data);  // Daten schreiben
18
   ECS = 1;  // Chipselect -> disabled
19
   DelayUs(100);
20
}

Ich habe die Funktionen so aufgebaut wie es im Datenblatt beschrieben 
ist.
Leider tut sich gar nichts. Im Main Programm schreibe ich ein Byte 0xFF 
an die Speicheradresse 0x0000 und 2 Sekunden später sollte diese 
Speicheradresse ausgelesen werden und die Daten auf dem Display 
angezeigt werden. Leider wird mir nichts angezeigt.

Kann mir hier jemand helfen??? Habe ich vielleicht irgendwelche Delays 
vergessen oder sogar irgendwelche Initialisierungs-Maßnahmen für den 
Speicher vergessen?

Den HOLD Pin habe ich auf die Versorgungsspannung gelegt. Was soll ich 
mit dem WP Pin machen, oder stört es nicht wenn ich diesen Pin nicht 
angeschlossen habe?

Ich danke euch schon im Voraus,

mfg

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.