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