Witam.
Mam zlutowe dwa identyczne układy Atmega32 + CC1000PP. Udało mi się je skalibrować. Potrzebuje przesłać między nimi dane. Zacząłem od tego, że dla ustawień CC1000PP (UART, 1.2kbaud) należy przesyłać preambułę 0x55 ustawiłem 200 bitów, układ skonfigurowany jako RX odbiera mi 0xFF. Funkcje wyglądają następująco:
Do nadawania:
void Wysylaj (void)
{
char my_byte;
//preambuła
for(my_byte=0; my_byte<100; my_byte++) {
CC1000PP_send(0);
CC1000PP_send(1);
}
}
void CC1000PP_send(char bit) {
if(bit) {
PORTD |= _BV(DIO);
} else {
PORTD &= ~_BV(DIO);
}
}
Do odbioru:
void Odbierz (void)
{
char rec_b=0;//, cntr=0, bit_cntr=0;
if(!close_lock()) return; //try to close the PLL lock
rec_b = CC1000PP_receive_byte();
PORTA = rec_b;
}
char CC1000PP_receive(void)
{
char ret;
ret = DCLK;
return ret;
}
char CC1000PP_receive_byte(void)
{
char my_bit=1, my_byte=0; //my_byte is used for storing result
while(1) {
if(CC1000PP_receive()) my_byte|=my_bit;
if(my_bit==128) break;
my_bit <<= 1;
}
return my_byte;
}
Według tego co się doczytałem z noty katalogowej CC1000 dla UART'a w trybie TX używana jest tylko linia DIO. A dla trybu RX tylko DCLK. Gdzie tu szukać błędu? I czy taki kod ma szanse działać, a jeśli nie, prosiłbym chociaż o algorytm jak powinny takie funkcję działać. Z góry dziękuję.
Mam zlutowe dwa identyczne układy Atmega32 + CC1000PP. Udało mi się je skalibrować. Potrzebuje przesłać między nimi dane. Zacząłem od tego, że dla ustawień CC1000PP (UART, 1.2kbaud) należy przesyłać preambułę 0x55 ustawiłem 200 bitów, układ skonfigurowany jako RX odbiera mi 0xFF. Funkcje wyglądają następująco:
Do nadawania:
void Wysylaj (void)
{
char my_byte;
//preambuła
for(my_byte=0; my_byte<100; my_byte++) {
CC1000PP_send(0);
CC1000PP_send(1);
}
}
void CC1000PP_send(char bit) {
if(bit) {
PORTD |= _BV(DIO);
} else {
PORTD &= ~_BV(DIO);
}
}
Do odbioru:
void Odbierz (void)
{
char rec_b=0;//, cntr=0, bit_cntr=0;
if(!close_lock()) return; //try to close the PLL lock
rec_b = CC1000PP_receive_byte();
PORTA = rec_b;
}
char CC1000PP_receive(void)
{
char ret;
ret = DCLK;
return ret;
}
char CC1000PP_receive_byte(void)
{
char my_bit=1, my_byte=0; //my_byte is used for storing result
while(1) {
if(CC1000PP_receive()) my_byte|=my_bit;
if(my_bit==128) break;
my_bit <<= 1;
}
return my_byte;
}
Według tego co się doczytałem z noty katalogowej CC1000 dla UART'a w trybie TX używana jest tylko linia DIO. A dla trybu RX tylko DCLK. Gdzie tu szukać błędu? I czy taki kod ma szanse działać, a jeśli nie, prosiłbym chociaż o algorytm jak powinny takie funkcję działać. Z góry dziękuję.