Forum: Compiler & IDEs SPI an Atmega8


von Mike B. (dolulob)


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;
}

von Benedikt K. (benedikt)


Lesenswert?

Setze SS als Ausgang, dann funktioniert es.

von Michael Wilhelm (Gast)


Lesenswert?

Nutzt du den SPI Interrupt?

MW

von Mike B. (dolulob)


Lesenswert?

nicht dass ich wüsste, ich will einfach nur bytes über die SPI 
schnittstelle schicken.
Ich hab das ganze mal software mäßig realisiert und das hat super 
funktioniert, aber wollte halt jetzt die Hardware spi nutzen

Mike

von Benedikt K. (benedikt)


Lesenswert?

Setze SS als Ausgang, dann funktioniert es.
Denn wenn dieser als Eingang geschaltet ist, schaltet ein High Pegel an 
diesem das SPI Interface in den Slave Mode.

von Johannes M. (johnny-m)


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.

von Benedikt K. (benedikt)


Lesenswert?

Stimmt, der ist Low Aktiv. Ansonsten ist das eine äußerst böse 
Fehlerquelle, da fällt glaube ich fast jeder drauf rein.

von Simon K. (simon) Benutzerseite


Lesenswert?

Benedikt K. wrote:
> Stimmt, der ist Low Aktiv. Ansonsten ist das eine äußerst böse
> Fehlerquelle, da fällt glaube ich fast jeder drauf rein.

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

von Andreas K. (a-k)


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.

von Simon K. (simon) Benutzerseite


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.

von Andreas K. (a-k)


Lesenswert?

In der ersten LPC2000 Generation ist es perfiderweise exakt umgekehrt. 
Da muss SS Eingang sein und inaktiv, so dass sich die Leitung grad nicht 
für den angestammten Zweck nutzen lässt.

von Mike B. (dolulob)


Lesenswert?

Oh, man... Danke Leute!

Das hätt ich ewig nicht gefunden! jetzt klappts (zumindest in der 
Simulation am PC).

Vielen Dank!

Mike

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
Noch kein Account? Hier anmelden.