Bascom + Spi

koebsi

Neues Mitglied
02. Juni 2009
4
0
1
Sprachen
Hallo alle zusammen !

Ich versuche nun schon seit ca. 2 Wochen ein EEPROM 25LC256 von Microchip zu beschreiben. Verwenden dazu möchte ich Bascom

Der Programmablauf ist

1. Schreibschutz entfernen
spiout schreibschutz_aus lt. Datenblatt, 1 (0000 0110)

2. Schreibe Messwert
spiout schreiben lt. Datenblatt ,1 (0000 0010)
spiout adresse_hi,1
spiout adresse_lo,1
spiout messwert_rein

3. Lese Messwert
spiout lesen lt. Datenblatt ,1 (0000 0011)
spiout adresse_hi,1
spiout adresse_lo,1
spiin messwert_raus


Als MCU verwende ich einen Atmega32 und betreibe den Baustein 25LC256 an den ports

portb.7 = SCL
portb.6 = MISO
portb.5= MOSI
portb.4 = SS


und es funktioniert nicht. Ausgelesen wird in 95% der Fälle der Wert 255, manchmal 0 und hin und wieder Werte wie 241 u.dgl.

Schön langsam weiß ich nicht mehr was ich noch alles versuchen soll. Mit i2c war die ganze Angelegenheit super simpel und funktioniert auch, dennoch will ich einfach wissen wie man ein Eeprom mit spi anspricht.

Die Schaltung besteht eigentlich nur aus den folgenden Verbindungen:

portb.7 ==> SCK
pinb.6 <== SO
portb.5 ==> SI
portb.4 ==> CS

zusätzlich noch +5V an VCC, WP und HOLD
und GND an VSS

laut Datenblatt sind keine PULL-UP Widerstände erforderlich, hab auch schon versucht cs mit 10K an +5V zu hängen - hat aber auch nichts gebracht.

Meinen Bascom-code habe ich angehängt.

Muß man irgendwelche fuse-bits setzen damit spi funktioniert. Wenn ich übrigens spi-hard versuche wird nicht mal mehr der Wert 255 empfangen.

Falls irgendjehmand Ahnung hat wie man in Bascom per spi externe Bausteine anspricht ersuche ich höflichst um Tips.

lg,
köbsi
 

Anhänge

  • eeprom_spi.bas
    813 Bytes · Aufrufe: 120
Wenn ich doch nur häälfen könnnnt..... :eek:

Probieren wir's mal zunächst mit einem kurzen Blick auf die Fakten aus denen sich schon die ersten Fragen ergeben.

1.
Der Takt von 16 MHz ist richtig? Es ist auch ein 16MHz Quarz angeschlossen und die Fuses sind so gesetzt, dass der Mega32 auch wirklich mit dem Clock rennt. Sonst passt nämlich nix.

Gehen wir mal davon aus, dann ergeben sich weitere Fragen....

2.
Mit der Initialisierung der SPI werden üblicher Weise folgenden Pinkonfigurationen geschaltet:
Pin B.7 ; SCK Output
Pin B.6 ; MISO input = Daten rein
Pin B.5 ; MOSI output = Daten raus

Du verwendest die PIN's der HW-SPI, konfigurierst die SPI aber als SW-SPI und emulierst damit die HW Funktionen. Hmmmmm, gibt es dafür einen Grund?

Ich bin mir nicht sicher, ob Du das EEPROM mit einer SW-SPI-Emulation überhaupt zum Laufen bekommst weil Du hast zu wenig Einstellungsmöglichkeiten. Ich habe auch speziell diese Frage betreffen zu wenig Ahnung da ich es noch nicht gemacht habe. Aber ich würde die HW-SPI einsetzen und das Ding schon mal anders konfigurieren.

3.
Wenn Du die HW-SPI konfigurierst so muss der Mega auf jeden Fall Master sein und den Clock erzeugen. Das ist via Default nicht der Fall. Meines wissens nach ist die Default Kontif ohne Parameter für den Slave-Mode gedacht. Schau Dir bitte dazu mal die BASCOM-Hilfe zum Befehl "CONFIG SPI = HARD" an. Es gibt dort ne Menge Parameter die Du mit dem Datenblatt des EEPROM abgleichen und ggf. setzen musst.

4.
Nächste dumme Frage: Stimmt den die Beschaltung des EEPROMs zum Mega überhaupt. Bist Du Sicher das Input und Output der Daten vom Mega32 richtig beschaltet sind?
MISO ist Input und sollte auf Data Out (Pin 2) des EEPROM gehen.
MOSI ist Output und sollte auf Data In (Pin 5) des EEPROM gehen.
Ja uns Clock SCK eben auf Pin 6.

5.
Weiter glaube ich, dass ein Problem mit dem CS besteht.
Code:
Cs Alias Portb.1
Cs = 1
Damit ist in BASCOM noch lange kein PIN definiert. Es fehlt der Config um den Port auch als Ausgang zu schalten. Via Default sind alle PIN's Eingänge und man muss erst mit dem Befehl "Config Pinb.1 = Output" den Pin auf Putput schalten um ihm mit "Portb.1 = 1" zu setzen oder rückzusetzen.
Also, unabhängig von der SPI-Initialisierung ist das schon mal ein Fehler, würde ich sagen.
==> Könnte sein - mit meinem wenigen SPI Wissen - dass Du dann schon weiter kommst

Soooooo..... nun schaun' wer mal ob mir sonst noch etwas einfällt oder auffällt.....

Neee, ich glaube nicht, also schau Dir mal bitte Punkt 5 und 1 an und dann mach Dir mal über Punkt 2-4 Gedanken. Ich glaube das ist schon mal ein guter Ansatz um Weiterzusuchen.

Hoffe wirklich, dass es weiter hilft!

Grüße,
Markus
 
mein eeprom spricht mit mir...

Hallo liebe Foren-Mitglieder !

Markus hat mir den entscheidenden Tip gegeben. Der hardware-SPI ist detailreicher zu konfigurieren als der software-SPI. Die Verbindung ist jedoch so in Ordnung wie in meinem ursprünglichen Beitrag dargelegt.

Ich habe mir erlaubt im Anhang den bascom-code anzufügen - im nachhinein frag ich mich was da so kompliziert war - wie immer wenn einen etwas fuxt - oder wie wir in der steiermark sagen, wenn der teufel junge hat, hat er gleich mehrere...

DANKE nochmals für die Unterstützung
+ lg,
köbsi :D
 

Anhänge

  • spi_25lc256.bas
    1,3 KB · Aufrufe: 497
Hallo köbsi,

Markus hat mir den entscheidenden Tip gegeben. Der hardware-SPI ist detailreicher zu konfigurieren als der software-SPI. Die Verbindung ist jedoch so in Ordnung wie in meinem ursprünglichen Beitrag dargelegt.
was lange währt wird endlich gut (oder so) ;) :D

im nachhinein frag ich mich was da so kompliziert war
Wie bei IP-Adressen und Routing. Wenn man es mal verstanden hat ist es
ganz einfach :cool:
... oder LDAP ... wie nach 3 Tagen bei mir der Knoten geplatzt war, hab ich
innerhalb von 1h nen laufenden OpenLDAP-Server gehabt und sogar in der
Datenbank-Struktur Änderungen vorgenommen.

Na denn auf zu neuen Ufern (und neuen Fragen) :D

Gruß
Dino
 
Hallo köbsi,

na, da bin ich aber froh! Ich freu mich auch dass es jetzt geklappt hat!

Grüße,
Markus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)