Da ich noch nie mit einem Transceiver gearbeitet habe, benötige ich hier bitte Eure Hilfe!
Für die Ansteuerung eines LED-Cubes per Funk möchte ich zwei 2,4GHz-Tranceiver von Cypress CYWUSB6934-48LTXC verwenden.
Auf der Sender- und Empfängerseite kommen zwei Mikrocontroller von Atmel (AT90PWM316) zum Einsatz.
Die Kommunikation wird über die SPI-Schnittstelle realisiert.
Ich möchte zum Test nur einen Datensatz (0b10000101) an den Empfänger übertragen.
Die Datenübertragung von 0b10000101 am MOSI-Pin funktioniert.
Leider kommt aber am Empfänger nichts an.
So wie ich das verstanden habe, müssten die übertragenen Daten am MISO-Pin des Empfänger-Transceivers mit dem Oszi zu messen sein.
Alle Register der Transceiver wurden in der Grundeinstellung belassen.
Hier der C-Code für den Sender:
Hier der C-Code für den Empfänger:Code:#include <avr/io.h> #include <util/delay.h> void SPI_MasterInit(void) { SPCR |= (1<<SPE); // SPI enable SPCR |= (0<<DORD); // Send MSB first SPCR |= (1<<MSTR); // UC = Master SPCR |= (1<<CPOL); // CLK positiv phase SPCR |= (0<<CPHA); // Sampling data to begin SPCR |= (1<<SPR1); // CLK / 64 = 125kHz DDRB = (1<<PB1)|(1<<PB7); // Set MOSI and SCK output DDRD = (1<<PD3); // Set SS output } void SPI_MasterTransmit(char adress, char cData) { SPDR = adress | 0x80; // Start transmission adress - write mode while (!(SPSR & (1<<SPIF))); // Wait for transmission complete SPDR = cData; // Start transmission data - transmit while (!(SPSR & (1<<SPIF))); // Wait for transmission complete } void Chip_Select() { PORTD = (0<<PD3); //SS = 0 } void Chip_Select_off() { PORTD |= (1<<PD3); //SS = 1 } int main(void) { SPI_MasterInit(); // SPI Initialisierung while (1) { Chip_Select(); // Chip Select SPI_MasterTransmit(0x03, 0b10010101); // Übergabe der Adresse & Daten an die Funktion SPI_MasterTransmit Chip_Select_off(); // Chip Select off _delay_us(200); } }
Code:#include <avr/io.h> #include <util/delay.h> void SPI_MasterInit(void) { SPCR |= (1<<SPE); // SPI enable SPCR |= (0<<DORD); // Send MSB first SPCR |= (1<<MSTR); // UC = Master SPCR |= (1<<CPOL); // CLK positiv phase SPCR |= (0<<CPHA); // Sampling data to begin SPCR |= (1<<SPR1); // CLK / 64 = 125kHz DDRB = (1<<PB1)|(1<<PB7); // Set MOSI and SCK output DDRD = (1<<PD3); // Set SS output } void SPI_MasterTransmit(char adress) { SPDR = adress; // Start transmission adress - read mode while (!(SPSR & (1<<SPIF))); // Wait for transmission complete } void Chip_Select() { PORTD = (0<<PD3); //SS = 0 } void Chip_Select_off() { PORTD |= (1<<PD3); //SS = 1 } int main(void) { SPI_MasterInit(); // SPI Initialisierung while (1) { Chip_Select(); // Chip Select SPI_MasterTransmit(0x03); // Übergabe der Adresse an die Funktion SPI_MasterTransmit Chip_Select_off(); // Chip Select off _delay_us(200); } }
Lesezeichen