PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SDCARD und LCD Display zusammen am SPI???



yak
13.08.2006, 20:48
Hallo

Wie initialisiere ich den SPI am Mega 128 wenn ich als Slave ein Display und eine SDCARd habe.

Wie steuere ich dann das Display oder die SD card???

Finde kein beispiel wo mehr als ein gerät am SPI hängt .

Einzeln geht es aber wenn ich eines vom beiden einbinde geht nur das was als erstes angesprochen wurde.

linux_80
13.08.2006, 22:33
Hallo,

schon mal diese Seite angeschaut:
https://www.roboternetz.de/wissen/index.php/SPI

yak
14.08.2006, 16:19
Habe ich auch schon gelesen.

Aber mir geht es um die Programmiertechnische sache.

Wie initialiesiere den SPI für beide geräte.
was muß ich vorher tun um das Display oder die SD Card anzusprechen???

linux_80
14.08.2006, 16:47
Du meinst was Du dem Slave senden sollst, damit es was macht ?

für die SD-Card gibts diese Seite:
http://www.ulrichradig.de/
dann unter AVR und MMC-SD schauen.

Beim LCD kommt es drauf an welches das ist, aber wenn es nur ein Schieberegister davorgesetzt hat, also ansonsten parallel angeschlossen werden könnte (zB. HD44780 kompatibel), muss man die einzelnen Bits eben über das SPI erst rausschieben, ansonsten reagiert das LCD gleich.

Es muss nur immer vorher der richtige Slave ausgewählt werden, damit es die Daten auch annimmt.

yak
14.08.2006, 17:28
Also Das Display ist ein Nokia 6100 von Display 3000

Mein Fehler liegt bei folgender Zeile im SPI Init ich weiß aber den Unterschied nicht.



void spi_init()
{
int Timeout = 0;


MMC_Direction_REG &=~(1<<SPI_DI);
MMC_Direction_REG |= (1<<SPI_Clock);
MMC_Direction_REG |= (1<<SPI_DO);
MMC_Direction_REG1 |= (1<<MMC_Chip_Select);
MMC_Direction_REG |= (1<<SPI_SS);
MMC_Direction_REG |= (1<<DISPL_RESET);
MMC_Direction_REG |= (1<<DISPL_Chip_Select);



MMC_Write1 |= (1<<MMC_Chip_Select);
MMC_Write |= (1<<DISPL_Chip_Select);
for(int a=0;a<200;a++)
{
nop();
};
//Wartet eine kurze Zeit

SPCR=(1<<SPIE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);
//Display OK SDCARD nicht

//SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);
//SDCARD OK Display nicht
SPSR = (0<<SPI2X);
return(0);
}

#define MMC_Write PORTB
#define MMC_Write1 PORTA
#define MMC_Read PINB
#define MMC_Direction_REG DDRB
#define MMC_Direction_REG1 DDRA //CS für SDCARD
#define SPI_DI 3
#define SPI_DO 2
#define SPI_Clock 1
#define MMC_Chip_Select 1
#define SPI_SS 0
#define DISPL_Chip_Select 5
#define DISPL_RESET 6


Das heist wenn ich den SPI nicht einschalte dann geht das display aber die SD nicht und umgekehrt.