Forum: Mikrocontroller und Digitale Elektronik SPI-Problem ATmega8 (Assembler)


von mäxchen (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Ich habe ein Problem beim ansteuern eines EEPROMS über SPI.
Beim EEPROM handelt sich um den Typ M95640.
Und zwar müsste das Programm folgendes machen:
1. SPI initialisieren, als Master, Modus 0.
2. 00000011 senden, READ-Befehl
3. 00000000 senden, Adresse High-Byte
4. 00000000 senden, Adresse Low-Byte
5. Daten enpfangen (dafür Dummybyte (0x00) senden)
6. Empfangene Daten an Port D ausgeben
7. fertig

Wenn ich jetzt das Programm auf dem uc laufen lasse, erscheint immer 
der Wert 7F am Port D. Der EEPROM sollte jedoch auf allen Speicherzellen 
FF haben, da er neu ist.
Ich habe schon zwei verschiedene EEPROMS ausprobiert, auf beiden ist 
dasselbe Problem, Ich habe auch schon die Verbindungen kontrolliert, 
aber es ist alles in Ordnung, also muss der Fehler wohl am Programm 
liegen.
Und im Forum habe ich auch schon gesucht, habe aber nichts gefunden.

Ich hoffe, ihr könnt mir bei dem Problem helfen.

Gruss  Mäxchen

von Dennis B. (higret)


Lesenswert?

Hi

ich hab SPI noch nicht wirklich benutzt, aber muss die Abfrage

 sbis   SPSR,SPIF


nicht vor dem

out SPDR, data

??


lg

von mäxchen (Gast)


Lesenswert?

Nö, sbis kontrolliert, ob die übertragung vollständig ist.
Ist sie nicht vollständig, wird   rjmp   Wait_Transmit    ausgeführt, 
sonst überspringt sie das Programm, lädt die epmfangenen Daten in das 
register data, und kehr vom unterprogramm zurück.

P.S.: Die SPI_MasterTransmit und SPI_MasterInit wurden grösstenteils vom 
Datenblatt des mega8 entnommen.

Gruss mäxchen

von Dennis B. (higret)


Lesenswert?

stimmt hab ma eben das datenblatt angeschaut.


aber was mir aufgefallen ist, sind data direction, CPOL und CPHA 
richtig?

EDIT: hab mir mal das datenblatt des eeprom angeguckt, sollte mit den 
standard einstellung vom atmega8 funktionieren. der fehler muss also 
woanders liegen.

vielleicht in der Verdrahtung??

lg

von mäxchen (Gast)


Lesenswert?

Nein die Verdrahtung stimmt 100%ig. Hab ich schon mehrere Male 
kontrolliert.

von Dennis B. (higret)


Lesenswert?

muss PORTB nicht noch als ausgang definiert werden??

oder hast du das nur beim kopieren vergessen?

von mäxchen (Gast)


Lesenswert?

Port B wird in SPI_MasterInit als Ausgang definiert.

von Dennis B. (higret)


Lesenswert?

oh stimmt, hmm keine ahnung wo dann der fehler ist

von mäxchen (Gast)


Lesenswert?

Hat dann sonst niemand eine Idee woran das liegen könnte?

von Michael U. (amiga)


Lesenswert?

Hallo,

Schaltung scheint ja super geheim zu sein...
Ich vermisse die Behandlung von /CS.
Das muß beim PowerOn H sein und dann auf L gelegt werden.

Wie sind /WP und vor allem /HOLD bei Dir beschaltet?

Gruß aus Berlin
Michael

von mäxchen (Gast)


Lesenswert?

Die Schaltung ist überhaupt nicht geheim, einfach den EEPROM über das 
SPI angeschlossen.
1
Ich vermisse die Behandlung von /CS.
2
Das muss beim PowerOn H sein und dann auf L gelegt werden.

Wirklich? bei meinem Programm ist dieser beim Einschalten ständig auf 
Masse. Das werd ich mal ändern.
1
Wie sind /WP und vor allem /HOLD bei Dir beschaltet?

Die sind auf high-Pegel, also  nicht aktiv.

Also ich ändere mal das mit dem CS-Pin und gib dann mal einen Bericht 
obs lauft oder nicht :)

Gruss Mäxchen

P.S. Wie macht man hier eigentlich Zitate?

von mäxchen (Gast)


Lesenswert?

Es funktioniert immer noch nicht :(((
Langsam bin ich echt am verzweifeln ...

von Werner S. (bocnc)


Lesenswert?

Hallo,

gibt es schon eine Lösung für das Problem. Ich lese zwar immer FF, aber 
auch wenn ich vorher versucht habe was zu schreiben

Gruß
Werner

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.