Forum: Mikrocontroller und Digitale Elektronik SPI beim Atmega168


von Thomas W. (thomas100)


Lesenswert?

Hallo Forum,

ich versuch heute schon den ganzen Tag, die SPI-Schnittstelle an meinem 
Atemga168 zum laufen zu bekommen. Leider bisher ohne Erfolg.

So sieht mein Programm aus:
1
#include "avr/io.h"
2
3
int main (void)
4
{
5
  //SPI-Init
6
  PORTB |= _BV(PB3);  //MOSI als Ausgang, Pegel High
7
  DDRB |= _BV(PB3);
8
  
9
  PORTB &= ~_BV(PB5);  //SCK als Ausgang, Pegel Low
10
  DDRB |= _BV(PB5);
11
  
12
  PORTB |= _BV(PB4);  //MISO als Eingang, Pull-Up an
13
  DDRB &= ~_BV(PB4);
14
 
15
  SPCR = _BV(MSTR) | _BV(SPE) | _BV(SPR0); //Master, SPI enable, 1.25MHz
16
17
  SPDR = 0xaa;         // send byte
18
  while (!(SPSR & _BV (SPIF)));
19
}

Doch leider passiert genau nix. Ich seh auf meinen Oszi weder bei MOSI 
noch bei SCK irgend etwas. Brauch ich noch irgend eine Außenbeschaltung? 
Irgend was, was ich übersehen habe?
Programmieren kann ich den µC, daher sollten die Pins ja in Ordnung 
sein.

Danke für eure Hilfe.

Gruß
Thomas

von Matthias L. (Gast)


Lesenswert?

>ch seh auf meinen Oszi weder bei MOSI noch bei SCK irgend etwas.

Kannst du auch nicht.

Ich hab jetzt den Code nicht im Detail durchgelesen, aber falls der 
funktioniert, dann sendet der einmal 0xAA direkt nach dem Reset.

Danach läuft der aus dem main() heraus ins Nirwana....

=> Endlosschleife

von holger (Gast)


Lesenswert?

Schalte den SS Pin auf Ausgang. Das ist wichtig!

Und mach mal ne Schleife. Sonst gibts nur ganz kurz was zu messen ;)

 while(1)
  {
   SPDR = 0xaa;         // send byte
   while (!(SPSR & _BV (SPIF)));
  }

von Thomas W. (thomas100)


Lesenswert?

hallo Matthias.
Genau, du hast recht. Er müsste ein einziges mal 0xaa senden. Aber das 
müsste ich sehen. Aber nix. Da wackelt nichts!

Ich hab das senden auch schon in eine Endlosschelife gesetzt. Hat auch 
nichts geändert :-(

Gruß
Thomas

von Thomas W. (thomas100)


Lesenswert?

Huchu!! Es geht!

@ holger:
Danke, der Tipp mit dem SS war genau der Hinweis. Es geht!!

Danke Euch!!

Gruß
Thomas

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.