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üsste ich die übertragenen Daten am MISO-Pin des Empfänger-Transceivers mit dem Oszi zu messen sein.
Alle Register des Transceivers wurden in der Grundeinstellung belassen.
Hier der C-Code:
| Code : |
/**************************************** *
* Prozessor: AT90PWM316 *
* Clock: Osz. int.8MHz *
******************************************/
#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
}
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 |= !(1<<PD3); //SS = 0
}
void Chip_Select_off()
{
PORTD |= (1<<PD3); //SS = 1
}
int main(void)
{
DDRD |= (1<<PD3);
SPI_MasterInit(); // SPI Initialisierung
while (1)
{
Chip_Select(); // Chip Select
SPI_MasterTransmit(0x03, 0b10000101);
// Übergabe der Daten an die Funktion SPI_MasterTransmit
Chip_Select_off(); // Chip Select off
}
}
|
|
/**************************************** *
* Prozessor: AT90PWM316 *
* Clock: int.8MHz *
******************************************/
#include <avr/io.h>
#include <util/delay.h>
void SPI_MasterInit(void) // Init SPI
{
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
}
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 |= !(1<<PD3); //SS = 0
}
void Chip_Select_off()
{
PORTD |= (1<<PD3); //SS = 1
}
int main(void)
{
DDRD |= (1<<PD3);
SPI_MasterInit(); // SPI Initialisierung
while (1)
{
Chip_Select(); // Chip Select
SPI_MasterTransmit(0x03, 0b10000101);
// Übergabe der Daten an die Funktion SPI_MasterTransmit
Chip_Select_off(); // Chip Select off
}
}