Hallo Ist es denn wirklich so schwer mit dem SPI Bus??? Habe ein Display und eine SD-Card am Hardware SPI meines 128iger Mega. Port B Pin B.3 =MISO Pin B.2 = MOSI Pin B.1 = CLK Pin A.1 = CS SD-CARD Pin B.5 = CS Display Pin B.6 = Reset Display B.2 B.1 ist parallel am Display und SDCARD B.3 nur empfangen an SDCARD und nicht am Display da es nur empfängt. SS nicht belegt wie initialisiere ich den SPI??? wie kommuniziere ich mit dem Display und mit der SDCARD???? Komme nicht weiter. wenn ich den Code von Ullrich radig nehme für die MMC geht mein Display nicht aber die SDCARD. Wenn ich den code für das Nokia 6100 nutze geht das display aber die SD nicht. Ich mußß ja nur einmal den SPI initialsieren und dann nur mit CS den Slave auswählen aber wie??? habe schon probiert den CS auf High der SDCARD und den CS auf low des Displays um das Display anzusteuern aber ohne erfolg. könnte mir einer ein Beispiel zeigen wie man den SPI global initialisiert und dann das entsprechende gerät über CS abfragt. Danke
Allgemeiner Ablauf der SPI-Kommunikation: setze das CS-Signal des Slave low. übertrage Daten in beide Richtung synchron zum Takt (Dazu muß man nur ein bestimmtes Bit in einem SPI-Register setzen. (Müsste ich jetzt auch nachgucken). Solange CS low ist, übernimmt der Slave mit jeder (vorher festgelegten) Taktflanke (SCK) die Daten. Wenn du also mit der SD-Karte kommunizieren möchstest, mußt du Port A.1 auf low setzen und Port B.5 muß high sein. Der Ruhezustand beider Pins ist High (kann man auch per externem Pull-Up-Widerstand erzwingen). >habe schon probiert den CS auf High der SDCARD und den CS auf low des >Displays um das Display anzusteuern aber ohne erfolg. Das könnte auch an der Taktgeschwindigkeit liegen.
>>SS nicht belegt
gib SS einen definierten Pegel, siehe Datenblatt, sonst schaltet der MC
mal ganz schnell in den SPI-Slavemodus.
> sonst schaltet der MC > mal ganz schnell in den SPI-Slavemodus. Nur, wenn man ihn zuvor als SPI slave konfiguriert hat. Wenn er SPI master ist, ist das /SS-Pin ein normales GPIO-Pin.
Ich zitiere mal aus dem ATmega128 Datenblatt S.166 >Master Mode >When the SPI is configured as a master (MSTR in SPCR is set), the >user can determine the direction of the SS pin. If SS is configured >as an output, the pin is a general output pin which does not affect >the SPI system. Typically, the pin will be driving the SS pin of the >SPI slave. If SS is configured as an input, it must be held high to >ensure Master SPI operation. If the SS pin is driven low by >peripheral circuitry when the SPI is configured as a master with the >SS pin defined as an input, the SPI system interprets this as another >master selecting the SPI as a slave and starting to send data to it. >To avoid bus contention, the SPI system takes the following actions: >1. The MSTR bit in SPCR is cleared and the SPI system becomes a >slave. As a result of the SPI becoming a slave, the MOSI and SCK pins >become inputs. Wenn also jemand den SS Pin nicht benutzt ist der auf Default eingang , kein Pullup jetzt muss er nur noch ein bisschen nach low kippen und der Master ist ein Slave.
> wenn ich den Code von Ullrich radig nehme für die MMC > > geht mein Display nicht aber die SDCARD. Da fehlt ein Komma. Meinst du: ... geht mein Display, nicht aber die SDCARD. oder ... geht mein Display nicht, aber die SDCARD. ?
> Wenn also jemand den SS Pin nicht benutzt ist der auf Default > eingang, kein Pullup jetzt muss er nur noch ein bisschen nach low > kippen und der Master ist ein Slave. OK, überredet. ;-) Ist wohl sowieso das Sinnvollste, diesen Pin als Standard-Slaveselect zu benutzen. Im vorliegenden Fall braucht man natürlich zwei Slaveselects, aber spricht ja nix dagegen, einen davon mit /SS zu implementieren.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.