Bekomme SPI im ATMega8 nicht zum Laufen

OP #4289135
Lesenswert?
• ▲
▼
Hi,

ich stehe gerade etwas auf dem Schlauch. Ich versuche seit Stunden den 
SPI im ATMega8 zum Laufen zu bekommen, aber der regt sich überhaupt 
nicht.

Ich habe den Code jetzt komplett aufs wesentliche runtergebrochen. Auf 
einem Pin sende ich zwischendurch ein paar Impulse, um zu sehen an 
welcher Stelle im Programm ich bin.

Nachdem ich den SPI aktiviert und konfiguriert habe, schreibe ich ein 
Byte in SPDR. Darauf hin müsste er doch anfangen zu senden, richtig?

Der Screenshot zeigt, dass das Programm durchlaufen wird, der SPI aber 
nichts tut.

Liebe Grüße,
Adrian.

edit: fast den Code vergessen...
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
#define SCK  PB5    //  CLK
5
#define MOSI  PB3    //  MOSI
6
#define DEBUG1  PC4    //   Pin für debug Impulse
7

8

9
void SPI_enable(void);
10
void debug(uint8_t);
11

12
int main(void)
13
{
14
  PORTC &= ~(1 << DEBUG1);    // Debug Port auf low und Ausgang
15
  DDRC |= (1 << DEBUG1);
16
  
17
  PORTB &= ~((1 << SCK) | (1 << MOSI));  // SCK / MOSI Ports auf low und Ausgang 
18
  DDRB |= (1 << SCK) | (1 << MOSI);
19
  
20
  debug(1);        // DEBUG Impuls 1
21
  
22
  PORTB |= (1 << SCK);      // Impuls zeigt, dass der SCK Ausgang funktioniert
23
  PORTB &= ~(1 << SCK);
24
  
25
  PORTB |= (1 << MOSI);      // Impuls zeigt, dass der MOSI Ausgang funktioniert
26
  PORTB &= ~(1 << MOSI);
27
  
28
  void SPI_enable(void);
29
  
30
  PORTB |= (1 << SCK);      // Impuls zeigt, dass der SCK Ausgang funktioniert
31
  PORTB &= ~(1 << SCK);
32

33
  SPDR = 0xFF;          // Jetzt müsste doch eine Clock zu sehen sein !?
34
  
35
  //while(!(SPSR & (1 << SPIF))){}  // Warten bis der Transfer abgeschlossen ist.
36
  
37
  debug(2);        // DEBUG Impuls 2
38
  
39
  return 0;
40
}
41

42
void SPI_enable(void)
43
{
44
  SPCR = 0b01110000;          // SPIE=0, SPE=1, DORD=1, MSTR=1, CPOL=0, CPHA=0, SPR1=0, SPR1=0
45
  SPSR &= ~(1 << SPI2X);      // SPI2X=0
46
  return;
47
}
48

49

50
void debug(uint8_t n)        // Sendet n kurze Debug-Impulse
51
{
52
  uint8_t x;
53
  for(x=1; x<=n; x++){
54
    
55
    PORTC |= (1 << DEBUG1);
56
    PORTC &= ~(1 << DEBUG1);
57
  }
58
  return;
59
}
Angehängte Dateien:
OP #4289317
Lesenswert?
• ▲
▼
Ulrich F. schrieb:
> Adrian E. schrieb:
>> void SPI_enable(void);
> Mitten in Main eine Funktionsdekalration?
> 1. das kann nicht funktionieren.(zumindest nicht das tun was du
> erreichen möchtest)
> 2. Wieso schreit der Compiler nicht?

Uups, da war es wohl schon etwas spät.. Aber nein, der Compiler schreit 
nicht.
Leider kann ich das erst heute Abend wieder testen.

Aber klar, so wird SPI_enable() ja nie ausgeführt..

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.