Forum: Mikrocontroller und Digitale Elektronik Mega32 SPI Master hängt sich auf?


von Timo (Gast)


Lesenswert?

nun ich muss leider mal mein Problem hier anführen da ich seit stunden 
die SPI nicht zum laufen bekomme.

Nun vielleicht sehr ich auch im Code den Fehler nicht.
Ich nutze den mega32 als SPI Master via Hardware.
Ich möchte ergänzen, dass ich zum Debuggen ein LCD angeschlossen habe.

Laut Aussagen des LCD bleibt die Übertragung hier stehen.
1
while(!(SPSR & (1<<SPIF)));

hier mein Code:
1
typedef unsigned char BYTE;
2
typedef unsigned short WORD;
3
4
// Settings for SPI
5
#define SPI_PORT        PORTB
6
#define SPI_PORT_DIR    DDRB
7
#define MISO            6
8
#define MOSI            5
9
#define SCK             7
10
11
void SPI_MasterInit(void)
12
{
13
  /* Set MOSI and SCK output, all others input */
14
  // Set SPI Pins
15
  SPI_PORT_DIR |= (1<<MOSI);      // SPI_PORT_DIR.MOSI = Output
16
    SPI_PORT_DIR &= ~(1<<MISO);      // SPI_PORT_DIR.MISO = Input
17
    SPI_PORT_DIR |= (1<<SCK);      // SPI_PORT_DIR.SCK = Output
18
    SPI_PORT_DIR |= (1<<PB4);      // SPI_PORT_DIR.PB4 = Output
19
20
  /* Enable SPI, Master, set clock rate fck/2 */
21
    // Master, full Speed, Mode 0, MSB first
22
    SPCR |= (1<<SPE)|(1<<MSTR);
23
    SPCR &= ~(1<<SPR0)|(1<<SPR1);
24
    SPSR |= (1<<SPI2X);
25
26
    //PORTB |= (1 << PB7)|(1 << PB4);
27
28
}
29
30
void send_byte(BYTE cData)
31
{
32
  /* Start transmission */
33
  char buffer[7];
34
  lcd_clrscr();
35
  //PORTB &= ~(1 << PB4);  // set chip select to low
36
  SPDR = cData;
37
  itoa(cData, buffer, 16); // Hex
38
  lcd_puts(buffer);
39
  lcd_gotoxy(0,1);
40
  lcd_puts("Daten im Speicher\n");
41
  /* Wait for transmission complete */
42
  while(!(SPSR & (1<<SPIF)));
43
  lcd_puts("Übertragung fertig");
44
}
45
46
int main(void) 
47
{
48
        sei();
49
        BYTE test= 0x0F;
50
        send_byte(test);
51
52
        for(;;)
53
        {
54
55
        }
56
}

Vielleicht findet jemand den Fehler.

Timo

von Peter D. (peda)


Lesenswert?

Anschluß /SS nicht als Ausgang konfiguriert.

Peter

von Timo (Gast)


Lesenswert?

Doch als Ausgang ist der, siehe
1
SPI_PORT_DIR |= (1<<PB4);      // SPI_PORT_DIR.PB4 = Output

Timo

von Luke (Gast)


Lesenswert?

Ev überseh ichs auch, aber wo rufst du
1
MasterInit
auf?

von Timo (Gast)


Lesenswert?

schade über mein haupt.
Ja ich denke irgendwo sollte ich des SPI_MasterInit() aufrufen sonst 
wird des wohl nie was.

Jetzt sollte es doch dann gehen..
DANKE

von Luke (Gast)


Lesenswert?

gern geschehen, ich kenne diese Art von "Fehler" ja auch zu gut ;))

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.