Forum: Mikrocontroller und Digitale Elektronik SPI lässt sich nicht konfigurieren


von Attila C. (attila)


Lesenswert?

Hallo!

Atmega 8, interner Oszi 8Mhz.Atmel Studio 7. Zu Testzwecken folgendes 
geschrieben:

int main(void)
{
  DDRB=(1<<SS)|(1<<SCK)|(1<<MOSI);
  PORTB &=~(1<<SS);

  SPCR=(1<<SPE)|(1<<MSTR);
  SPSR=(1<<SPI2X);

    while (1)
    {
        PORTB=0xFF;
  _delay_ms(100);
    PORTB=0x00;
    _delay_ms(100);
    }
}

Die Schleife wird nur ausgeführt wenn ich "SPCR=(1<<SPE)|(1<<MSTR);" 
auskommentiere. Kann das an Studio 7 liegen? Ich habe so wie geschrieben 
schon zig mal SPI konfiguriert.

Danke!

von Dennis (Gast)


Lesenswert?

Mechaniker an Brücke: SPI wurde ermahnt sich konfigurieren zu lassen!

von Bastian W. (jackfrost)


Lesenswert?

Warum willst du den ganzen PortB toggeln wenn du SPI aktiviert hast ?

Geht das überhaupt wenn die Hardware die Kontrolle über SCK und MOSI hat 
?

Gruß JackFrost

von Attila C. (attila)


Lesenswert?

Warum: Weil, wenn nichts mehr geht, muss man das berühmte Lämpchen 
blinken lassen. ;-)

Habe das grade mal ausprobiert. Du hast recht: Die Pins die nicht vom 
SPI "verwaltet" werden lassen sich toggeln.

Weiter geht es mit der Fehlersuche! Danke Bastian!

von Bastian W. (jackfrost)


Angehängte Dateien:

Lesenswert?

Ich hab deinen Code Ausschnitt mal im Simulator laufen lassen.

Da läuft die Schleife ohne Probleme.

Was läuft denn bei dir nicht ?

Gruß JackFrost

von Attila C. (attila)


Lesenswert?

Wow! Danke Bastian! Ich hatte natürlich vor dem Port togglen erst mal 
versucht ein Byte zu senden. (So wie ich es schon zig mal mit meinem 
kopierten Code gemacht hatte.) Da sich da aber komischerweise nix auf 
dem Oszi bewegt hat , habe ich das Port togglen reingeschrieben. Und 
dann Zeile für Zeile auskommentiert. Wenn ich "SPCR=(1<<SPE)|(1<<MSTR);" 
auskommentiere, also das SPI quasi deaktiviere wird die Schleife 
erreicht. Sonst zeigt das Oszi 2 grade Linien. :-(

von SPI ins Software Transmitter (Gast)


Lesenswert?

Ohne mir den Code usw angeguckt zu haben: Das oder etwas sehr ähnliches 
hatte ich vor ca. 5 Jahren mal mit einem Atmega644 von Pollin und damals 
auch hier im Forum gepostet.

Als ich das Enable SPI Transmit Bit gesetzt hatte ist der Controller 
einach hängen geblieben. Das SPI Senden musste ich dann per Software 
lösen. Das SPI Empfangen hat glücklicherweise funktioniert.

von chris (Gast)


Lesenswert?

Attila C. schrieb:
> Wenn ich "SPCR=(1<<SPE)|(1<<MSTR);"
> auskommentiere, also das SPI quasi deaktiviere wird die Schleife
> erreicht.


Die Schleife wird natürlich immer ausgeführt, aber wenn du auf dem Rest 
von PORTB auch was sehen willst beim toggeln, musst du auch alle Pins 
auf Ausgang setzen.
Sobald das SPI die Kontrolle über die Pins hat, kannst du da manuell 
nicht mehr dran wackeln.

von Bastian W. (jackfrost)


Angehängte Dateien:

Lesenswert?

Hi,

ich mal mit einem Atmega32 ( ich hab leider keinen Atmega8 da) das mehr 
oder weniger getestet.

Ich musste nur die SPI Frequenz runternehmen und auch den SPI Mode für 
mein EEPROM anpassen. Also mit dem Atmel Studio 7 und nem Atmega32 geht 
das ohne Probleme.

Ich hab erst die Zahlen 0 - 255 in die ersten 256 Bytes geschrieben und 
dann wieder ausgelesen.

Gruß JackFrost

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.