www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik hw spi atmega16


Autor: Christian Mertens (inscene)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <stdlib.h>  

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

#define SPI_PORT PORTB
#define SPI_DDR  DDRB
#define SPI_PIN  PINB

#define SPI_SDI  5
#define SPI_SCK  7
#define SPI_CS  4
#define SPI_SDO   6

unsigned short spi_Trans(unsigned short data)
{
    uint8_t highbyte;
    uint8_t lowbyte;

    lowbyte = data;
    highbyte = (data >> 8);

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


    SPI_PORT &= ~(1 << SPI_CS);    //vorsichtshalber SS selber setzen
    SPDR = lowbyte;
    // Wait for transmission complete 
    while(!(SPSR & (1<<SPIF)))
    ;
    SPI_PORT |= (1 << SPI_CS); // SS zurücksetzen
    _delay_ms(1);

    return SPDR;
}

void spi_InitPort(void)
{
    SPI_DDR=(1<<SPI_SDI)|(1<<SPI_SCK)|(1<<SPI_CS);
    SPI_PORT=(1<<SPI_CS);
    SPCR|=(1<<SPE)|(1<<MSTR);
}

int main(void)
{
    spi_InitPort();
    spi_Trans(0xA000);
}

Ich freue mich über jede hilfe.

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Code sieht an sich OK aus. Wohin sendest du denn die Daten und wie sieht 
gegenfalls deine Empfangsroutine aus?

Gruß

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso machst du eine "return SPDR;" deine Funktion empfängt doch gar 
nix...

Du sendest doch bloß 2 Byte..

Wie kontrollierst du ob was ankommt?

Mit was möchtest du sprechen?

Autor: Christian M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.