www.mikrocontroller.net

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


Autor: asdf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
unsigned int read_eeprom(unsigned int l_addr, unsigned int h_addr) {
   unsigned int data = 0;
   ECS = 0; //Chipselect -> enabled
   DelayUs(100);
   write_spi(READ); // READ ist eine Konstante mit dem Wert 0x03 ->laut Datenblatt
   write_spi(h_addr); // High Byte der 16bit Adresse
   write_spi(l_addr); // Low Byte der 16Bit Adresse
   data = read_spi(); // gelesenen Daten in der variable data abspeichern
   ECS = 1;      // Chipselect -> disabled
   DelayUs(100);
   return data;  
}

Hier die Funktion um Daten in den Speicher zu schreiben
Adresse und Daten werden übergeben
Code:
void write_eeprom(unsigned int data, unsigned int l_addr, unsigned int h_addr) {
   ECS = 0;  //Chipselect -> enabled
   DelayUs(100);
   write_spi(WREN); // Write enable bit setzen; hat den wert 0x06 laut Datenblatt
                       muss dieses Write enable Latch vor jedem Schreibzyklus
                       gesetzt werden 
   ECS = 1;  // Chipselect -> disabled
   DelayUs(100);

   DelayMs(20);

   ECS = 0;  // Chipselect -> enabled
   DelayUs(100);
   write_spi(WRITE); //WRITE ist eine Konstante mit dem Wert 0x02->laut Datenblatt
   write_spi(h_addr); // High Byte der 16bit Adresse
   write_spi(l_addr); // Low Byte der 16Bit Adresse
   write_spi(data);  // Daten schreiben
   ECS = 1;  // Chipselect -> disabled
   DelayUs(100);
}

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.