SPI an Atmega8

OP #597064
Lesenswert?

Hallo,

ich versuche die Hardware SPI am Atmega8 zu benutzen, aber komme 
irgendwie nicht weiter.
Ja ich habe schan das Datenblatt gelesen und weiß wie die SPI vom 
Prinzip her funktionieren soll...
Aber schon bei der Simulation am PC klappt es nicht... die simulation 
bleibt immer an der Zeile "while(!(SPSR & (1<<SPIF)))" hängen, als ob 
diese bedingung nie erfüllt wird...
wie kann das sein? mache ich da was falsch?

Danke Mike

-----------code----------------------

void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDRB = (1<<PB3)|(1<<PB5);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
}

int main (void) {

  SPI_MasterInit();
  sei ();

  for (;;){

SPI_MasterTransmit(0b11111111);
_delay_ms(20);

SPI_MasterTransmit(0b00000000);
_delay_ms(20);

}
  return 0;
}
#597113
Lesenswert?

Benedikt K. wrote:
> ...schaltet ein High Pegel an diesem das SPI Interface in den Slave Mode.
Nur zur Vermeidung von Missverständnissen: /SS ist Low-aktiv. Ein 
Low-Pegel sorgt für einen Wechsel in den Slave-Betrieb.

Ansonsten aber völlig korrekt: Nur wenn /SS als Ausgang konfiguriert 
ist, dann ist man vor bösen Überraschungen sicher.
#597547
Lesenswert?

> Naja, nicht unbedingt darauf reingefallen. Aber etwas komisch kam es mir
> beim ersten mal im Datenblatt lesen schon vor... ;)

Mir käme eine Select-Leitung komisch vor, die mit high level aktiv ist. 
Weil solche Signale seit Urzeiten weit überwiegend active low sind. Das 
ist eine althergebrachte Konvention, die möglicherweise mit der 
asymmetrischen Charakteristik von Logikbausteinen in bipolarer Technik 
zu tun hat.
Persönliche Seite #597548
Lesenswert?

Andreas Kaiser wrote:
>> Naja, nicht unbedingt darauf reingefallen. Aber etwas komisch kam es mir
>> beim ersten mal im Datenblatt lesen schon vor... ;)
>
> Mir käme eine Select-Leitung komisch vor, die mit high level aktiv ist.
> Weil solche Signale seit Urzeiten weit überwiegend active low sind. Das
> ist eine althergebrachte Konvention, die möglicherweise mit der
> asymmetrischen Charakteristik von Logikbausteinen in bipolarer Technik
> zu tun hat.

Das meinte ich eigentlich auch nicht. Du hast natürlich Recht, das 
wundert mich nicht.

Mich wundert(e) viel eher, dass man für den MASTER Betrieb (Wofür es ja 
eigentlich schon ein Bit im Control-Register gibt) SS als Ausgang setzen 
muss.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren