ledi
10.08.2010, 11:03
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:
#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);
}
}
Hier der C-Code für den Empfänger:
#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);
}
}
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:
#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);
}
}
Hier der C-Code für den Empfänger:
#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);
}
}