SPI beim Atmega168

OP #1389350
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
Gast
>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
Gast
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)));
  }
OP
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.