SPI ATmega16

Gast #2396666
Lesenswert?

Hallo zusammen

Ich habe ein Problem mit dem SPI meines mega16. Schlussendlich bin ich 
soweit, dass ich den code vom Datenblatt kopiert habe und auch das 
funktioniert nicht.
Wenn ich den SPI initialisiere und dann ein Byte ins SPDR schreibe, dann 
sollte ja das Byte gesendet werden. Ich sehe aber nichts mit meinem 
analogen KO, auch wenn ich dass in einer Endlosschlaufe mache.
Wenn ich dann auf das SPIF Flag im SPSR warte, dann wird das nie 
gesetzt.

ss habe ich probehalber jetzt weggelassen und testweise sogar MISO und 
MOSI des mega16 verbunden. So sollte doch das geschriebene Byte direkt 
wieder eingelsesn werden!

Programmiere jetzt mit dem AVR-Studio5 und habe alle codeoptimierungen 
ausgeschalten!

Hoffe einer kann mir helfen.
Peet

Anbei noch der Code:

1
#include <avr/io.h>
2

3
void SPI_MasterInit(void)
4
{
5
  int dummy;
6
  /* Set MOSI and SCK output, all others input */
7
  DDRB = 0x00;
8
  DDRB = (1<<5)|(1<<7);
9
  /* Enable SPI, Master, set clock rate fck/16 */
10
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
11
  dummy   = SPSR;                   // clear SPIF bit in SPSR
12
    dummy   = SPDR;
13
}
14

15
void SPI_MasterTransmit(char cData)
16
{
17
  /* Start transmission */
18
  SPDR = cData;
19
  /* Wait for transmission complete */
20
  while(!(SPSR & (1<<SPIF)));
21
}
22

23

24
int main(void)
25
{
26
  SPI_MasterInit();
27
  
28
    while(1)
29
    {
30
    SPI_MasterTransmit('AA');
31
    }
32
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren