hw spi atmega16

OP #1134315
Lesenswert?

Hallo Leute,

ich sitze hier und versuche über die Hardware SPI meines ATMEGA16 Daten 
zu senden. Leider ohne Erfolg. Vielleicht kann mir ja einer meinen 
Fehler zeigen.

Ich habe folgenden Code:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/pgmspace.h>
4
#include <avr/eeprom.h>
5
#include <stdlib.h>  
6

7
#define F_CPU 8000000UL
8
#include <util/delay.h>
9

10
#define SPI_PORT PORTB
11
#define SPI_DDR  DDRB
12
#define SPI_PIN  PINB
13

14
#define SPI_SDI  5
15
#define SPI_SCK  7
16
#define SPI_CS  4
17
#define SPI_SDO   6
18

19
unsigned short spi_Trans(unsigned short data)
20
{
21
    uint8_t highbyte;
22
    uint8_t lowbyte;
23

24
    lowbyte = data;
25
    highbyte = (data >> 8);
26

27
    SPI_PORT &= ~(1 << SPI_CS);  //vorsichtshalber SS selber setzen
28
    SPDR = highbyte;
29
    // Wait for transmission complete 
30
    while(!(SPSR & (1<<SPIF)))
31
    ;
32
    SPI_PORT |= (1 << SPI_CS); // SS zurücksetzen
33

34

35
    SPI_PORT &= ~(1 << SPI_CS);    //vorsichtshalber SS selber setzen
36
    SPDR = lowbyte;
37
    // Wait for transmission complete 
38
    while(!(SPSR & (1<<SPIF)))
39
    ;
40
    SPI_PORT |= (1 << SPI_CS); // SS zurücksetzen
41
    _delay_ms(1);
42

43
    return SPDR;
44
}
45

46
void spi_InitPort(void)
47
{
48
    SPI_DDR=(1<<SPI_SDI)|(1<<SPI_SCK)|(1<<SPI_CS);
49
    SPI_PORT=(1<<SPI_CS);
50
    SPCR|=(1<<SPE)|(1<<MSTR);
51
}
52

53
int main(void)
54
{
55
    spi_InitPort();
56
    spi_Trans(0xA000);
57
}

Ich freue mich über jede hilfe.
Gast #1134510
Lesenswert?

Ich sende die Daten zu einem RFM12 Funkmodul. Ich habe das ganze per 
Software SPI Implementierung schon am laufen. Nun wollte ich gerne den 
HW SPI verwenden.
Die main Funktion habe ich gekürzt damit es lesbarer ist. Normal werden 
verschiedene Kommandos an das RFM12 zur Konfiguration gesendet und 
danach immer wieder der selbe string verschickt. Aber es kommt nix beim 
Empfänger an.
Wie schon gesagt, per Software SPI läuft das.

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