Problem mit seriellem EEPROM 25LC640!

Gast #1568513
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.