logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

wysłanie 2 bajtów za pomocą rfm12, atmega8, c

Piotr Kania 07 Gru 2008 23:16 3154 4
REKLAMA
  • #1 5831397
    Piotr Kania
    Poziom 15  
    Mam taki problem że mierze temperaturę za pomocą ds18b20 dostaje wynik(2 bajty lsb i msb) i wyświetlam go na lcd działa pięknie, teraz chce go wysłać bezprzewodowo za pomocą rfm12b fragment kodu wysyłania wygląda tak
    
    while(1){
    LEDR_ON();
    RFXX_WRT_CMD(0x0000);//read status register
    RFXX_WRT_CMD(0x8239);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
    ChkSum=0;
    RF12_SEND(0xAA);//PREAMBLE
    RF12_SEND(0xAA);//PREAMBLE
    RF12_SEND(0xAA);//PREAMBLE
    RF12_SEND(0x2D);//SYNC HI BYTE
    RF12_SEND(0xD4);//SYNC LOW BYTE
    RF12_SEND(0x30);//DATA BYTE 0
    ChkSum+=0x30;
    RF12_SEND(0x31);//DATA BYTE 1
    ChkSum+=0x31;
    RF12_SEND(0x32);
    ChkSum+=0x32;
    RF12_SEND(0x33);
    ChkSum+=0x33;
    
    RF12_SEND(0x34);
    ChkSum+=0x34;
    RF12_SEND(0x35);
    ChkSum+=0x35;
    RF12_SEND(0x36);
    ChkSum+=0x36;
    RF12_SEND(0x37);
    ChkSum+=0x37;
    RF12_SEND(0x38);
    ChkSum+=0x38;
    RF12_SEND(0x39);
    ChkSum+=0x39;
    RF12_SEND(0x3A);
    ChkSum+=0x3A;
    RF12_SEND(0x3B);
    ChkSum+=0x3B;
    RF12_SEND(0x3C);
    ChkSum+=0x3C;
    RF12_SEND(0x3D);
    ChkSum+=0x3D;
    RF12_SEND(0x3E);
    ChkSum+=0x3E;
    RF12_SEND(0x3F); //DATA BYTE 15
    ChkSum+=0x3F;
    RF12_SEND(ChkSum); //send chek sum
    RF12_SEND(0xAA);//DUMMY BYTE
    RF12_SEND(0xAA);//DUMMY BYTE
    RF12_SEND(0xAA);//DUMMY BYTE
    RFXX_WRT_CMD(0x8201);
    LEDR_OFF();
    LEDG_OFF();
    for(i=0;i<10000;i++)for(j=0;j<123;j++);//sleep 1 second appr.
    };
    

    jak zrobić żeby wysłało mi te 2 bajty :)

    Proszę nie wyłączać BBcode, jeśli kolega używa w treści postu znaczników/tagów.
    [zumek]
  • REKLAMA
  • #2 5832994
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 5833671
    Piotr Kania
    Poziom 15  
    ok spróbuje jak ktoś jeszcze coś wie na ten temat to proszę pisać, dzięki
  • REKLAMA
  • #4 5967501
    kofi84
    Poziom 12  
    
    while(1){
    LEDR_ON();
    RFXX_WRT_CMD(0x0000);//read status register
    RFXX_WRT_CMD(0x8239);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
    ChkSum=0;
    RF12_SEND(0xAA);//PREAMBLE
    RF12_SEND(0xAA);//PREAMBLE
    RF12_SEND(0xAA);//PREAMBLE
    RF12_SEND(0x2D);//SYNC HI BYTE
    RF12_SEND(0xD4);//SYNC LOW BYTE
    
    
    // tutaj możesz wpisać co chcesz wysłać
    // w postaci RF12_SEND(bajt_do_wysłania)
    
    
    RF12_SEND(0xAA);//DUMMY BYTE
    RF12_SEND(0xAA);//DUMMY BYTE
    RF12_SEND(0xAA);//DUMMY BYTE
    RFXX_WRT_CMD(0x8201);
    LEDR_OFF();
    LEDG_OFF();
    for(i=0;i<10000;i++)for(j=0;j<123;j++);//sleep 1 second appr.
    };
    
  • #5 6602054
    wallker
    Poziom 2  
    Witam.

    Widze że wiele osób ma problemy z rfm12.
    Ja również męczyłem się z nimi dłuższy czas.

    Nie mogłem dostać przerwania w odbiorniku informującego o tym, że przyszła kolejna porcja danych.
    Po wyłączeniu synchronizacji w module odbiorczym (0xca87)okazało się, ze owszem z nadajnika przychodzi bit synchronizacji 0x2d ale drugi ma wartość 0x43 zawsze a nie 0xd4.
    Następne bajty były całkowicie przypadkowe.
    W nadajniku zmieniłem kod tak, że po wysłaniu 0x2d zrobiłem 1ms przerwy.
    Odbiornik odebrał 0x2d a potem 0x00.
    Faktycznie okazało się, ze nadajnik ma problem ze zbyt szybkim odebraniem kolejnego bajtu od uP.
    Po wstawieniu pętli opóźniającej w procedurze wysyłającej bajty udało się zestawić poprawną transmisje.
REKLAMA