mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega32 und DataFlash - keine Kommunikation möglich


Autor: nowayback (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

gleich vorweg: diese Frage habe ich zuvor im Roboternetz gepostet, 
allerdings konnte mir dort keine Antwort gegeben werden. Ich hoffe, 
unter eich findet sich jemand, der mir mit meinem Problem helfen kann.
Der Link zum Crosspost: 
http://www.roboternetz.de/phpBB2/viewtopic.php?p=4...

Ich bin gerade dabei, meinen Atmega32 mit dem Atmel Dataflash AT45DB321D 
(http://www.atmel.com/dyn/resources/prod_documents/...) zu 
verbinden, um auf eine größere Sinus-Tabelle zugreifen zu können.
Den Code habe ich von 
http://www.siwawi.arubi.uni-kl.de/avr_projects/#bf_app übernommen.
Allerdings ist der Source nicht mit meinem Atmega32 pinkompatibel, 
deswegen habe ich hier: http://paste2.org/p/224984 die Zeilen 76 und 77 
angepasst und hier http://paste2.org/p/224985 die Zeilen 93-95 
entsprechend abgeändert.

Hier meine Verkabelung (Flash - µC):
SI - MOSI (PB5)
SCK - SCK (PB7)
RESET - VCC
CS - SS (PB4)
SO  - MISO (PB6)
GND - GND
VCC - VCC
WP - VCC
Natürlich ist VCC (sowie Reset und WP) nicht direkt mit den 5 Volt 
verbunden, sondern indirekt über 2 Leuchtdioden. So kommen nur ca. 3,5V 
am Flash an.

Leider klappt die Verbindung nicht.
Ich habe zwar mit einem Oszilloskop ausmessen können, dass SCK und MOSI 
ordnungsgemäß funktionieren.
Allerdings antwortet der Flash nicht; MISO ist stets auf GND.
Somit bin ich nicht einmal in der Lage, die ID bzw. den Status 
auszulesen.
Es fließt ungefähr ein Strom von ~1mA über VCC und die LEDs zum Flash.

Für jede Hilfe bin ich dankbar, mit meinem Latein bin ich nach 
mehrtägiger Fehlersuche am Ende.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Natürlich ist VCC (sowie Reset und WP) nicht direkt mit den 5 Volt
>verbunden, sondern indirekt über 2 Leuchtdioden. So kommen nur ca. 3,5V
>am Flash an.

Ein Spannungsregler ist ja auch so unglaublich teuer.
Vergiss den Schrott mit Diodenstabilisierung.

Autor: Juri R. (genmutant)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spannungsregler auf 3.3V ist angeschlossen, als Output krieg ich 
allerdings nur durchgehend high.
Irgendwelche weiteren Ideen?
Vielleicht sind die Ports oder internen Pull-Ups falsch?
Im Moment sind sie so eingestellt:
PORTB |= (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7); 
DDRB |= (1<<DDB5) | (1<<DDB7) | (1<<DDB4);
DDRB &= ~(1<<DDB6);

SPSR = (1<<SPI2X);
SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL);

Für weitere Hilfe wäre ich sehr dankbar!
Mit freundlichen Grüßen,
Juri

Autor: nowayback (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Entfernen der Pullup-Widerstände brachte auch keinen Erfolg, nun 
liegt MISO ständig auf Ground.

Kann mir denn wirklich keiner helfen?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Juri R. schrieb:

>
> SPSR = (1<<SPI2X);
> SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL);
> 
>

Ich habe gerade sowohl in meiner alten ASM-Source als auch in der 
C-Source nachgeschaut: bei mir läuft der AT45DB081D als auch der 
AT45DB161D im SPI-Mode 0, also ohne CPHA und CPOL.
Ansonsten sind die Dinger sehr pflegeleicht.

Gruß aus Berlin
Michael

Autor: Juri R. (genmutant)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Whoooow super!
Das scheint die Lösung gewesen zu sein!
Vielen, vielen Dank!

Wieso steht im Datenblatt Mode 3 kompatibel -.-
Naja völlig egal, es scheint jetzt zu funzen, jedenfalls konnte ich die 
ID auslesen. Der Rest wird dann früher oder später auch noch funzen :)

Nochmal vielen Dank,
Juri

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

fein, wenn er sich jetzt meldet. :)
Im Datenblatt steht Mode 0 und Mode 3 hmmm....
Vermutlich ist das Timing irgendwo an der Grenze. Meine haben jedenfalls 
im Mode 0 noch keine Probleme gemacht (mehrere im Einsatz).

Falls Du die Pagesize umschalten willst: das klappt nicht unbedingt beim 
ersten mal (steht auch im Datenblatt).
Ich habe da immer eine kurze Routine mit UART benutzt, das Statusbyte 
über UART ausgegeben und das Kommando gesetzt.
Dann Strom weg und wieder ran. Wenn er umgeschaltet war ok, sonst eben 
nochmal Strom weg usw.

Mir ist die Pagesize als 2er Potenz lieber, rechnet sich irgendwie 
besser. ;-)

Gruß aus Berlin
Michael

Autor: Juri R. (genmutant)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du vielleicht noch einen C-Code zum Lesen von einem Byte aus dem 
Flash (Buffer)? Das will irgendwie nicht klappen -.-
Egal ob ich jetzt zusätzliche Don't Cares sende vor dem Abfragen oder 
nicht. Verschiedene OP-Codes hab ich auch schon ausprobiert (es gibt 
laut Datenblatt 2).

Viele Grüße,
Juri

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.