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

[Atmega16][rfm02][ds18b20]Bezprzewodowy termometr

sq3fyk 25 Lis 2008 12:05 5484 18
  • #1 5780896
    sq3fyk
    Poziom 11  
    Witam serdecznie
    Po mojej glowie krazy pomysl zbudowania bezprezwodowego termometru na bazie modulow rfm02.Wiem ze moduly komunikuja sie z uc za pomoca spi.Moje pytanie brzmi w jaki sposub wyslac temperature z czujnika ds18b20 poprzez atmega16 do modulu rfm02 ??.Prosze nieodsylac mnie do google bo juz szukalem z marnym skutkiem.
    http://www.youtube.com/watch?v=D2OhEwkSdFM w tym linku jest taki przykladowy uklad.
    Prosze o porade w bascomie inne jezyki niesa mi znane.
  • #2 5780925
    n01x
    Poziom 12  
    sq3fyk napisał:
    Witam serdecznie
    Po mojej glowie krazy pomysl zbudowania bezprezwodowego termometru na bazie modulow rfm02.Wiem ze moduly komunikuja sie z uc za pomoca spi.Moje pytanie brzmi w jaki sposub wyslac temperature z czujnika ds18b20 poprzez atmega16 do modulu rfm02 ??.Prosze nieodsylac mnie do google bo juz szukalem z marnym skutkiem.
    Link[/code]


    Sam sobie odpowiedzialeś jak - przez SPI.
  • #3 5808390
    Piotr Kania
    Poziom 15  
    ja buduje coś takiego ale na frm12 :)
  • #4 5808411
    sq3fyk
    Poziom 11  
    A udostepnisz kolego jakies szczegoly ? (nieporosze o gotowca) :)
  • #5 5809568
    Morrrf
    Poziom 13  
    Też próbuje zbudować taki termometr. Obecnie siedzę nad projektem płytki nadajnika w eaglu. Jak skończę to mogę się podzielić jak będzie jakieś zainteresowanie z Waszej strony.
  • #6 5811355
    fazolek
    Poziom 12  
    Mam to zrobione na rfm12. Akurat nie pisze w bascomie ale zasada jest prosta robisz pomiar odczytujesz 2 bajty i wysyłasz przez rfm12. Jak posterować RFM12 i RFM02 którego akurat bym nie używał znajdziesz w dokumentacji tam są gotowe kody źródłowe w C ale tam są chyba jeszcze niewielkie błędy.

    http://loee.jottit.com/rfm12b_and_avr_-_quick_start link z pełnym opisem. Po tej lekturze nie ma opcji żeby z tym nie ruszyć. Zasilanie może być 5V nic się tym modułom nie stanie są odporne nawet na podłączenie odwrotnego zasilania a przynajmniej ja tak sobie ich nie uwaliłem.
  • #7 5831017
    Piotr Kania
    Poziom 15  
    Pytanie do kolegi "fazolek" jak wysłać te dwa bajty przez rfm12 ? początkuje z c, napisałem obsługę wyświetlacza i 1 wire na ds18B20 ale nie umiem tych 2 bajtów wysłać i odebrać . Bardzo proszę o pomoc
  • #8 5839485
    fazolek
    Poziom 12  
    Więc tak to co wrzuciłem w linku tam jest wszystko opisane. Nadajnik należy skonfigurować jako nadajnik :) w urządzeniu mierzącym temp, zmierzyć temp zapisać do 2 rejestrów np MSB,LSB dalej
    
    writeCmd(0x0000);
          rfSend(0xAA); // PREAMBLE
          rfSend(0xAA);
          rfSend(0xAA);
          rfSend(0x2D); // SYNC
          rfSend(0xD4);
          
          rfsend(MSB);
          rfsend(LSB);
    
          rfSend(0xAA); // DUMMY BYTES
          rfSend(0xAA);
          rfSend(0xAA);
    
    

    w ten sposób wysłało się wynik pomiaru. Kolejno odczekać np 1 sek i zapętlić do wykonania pomiaru.


    W odbiorniku
    
    while(1) {
            for (i=0; i<16; i++) {
              MSB = rfRecv();
              LSB = rfRecv();
              // a tu wyświetlanie czy cokolwiek co sie chce zrobić z wynikiem
            }
            FIFOReset();
        }
    


    Oczywiście na początku trzeba odpowiednio to poinicjować porty i takie tam. Wysyłanie tego AA to preambuła która synchronizuje układ nadajnika w odbiorniku tego się nie odbiera,
    Proponuje jednak na początek wrzucić w procki to co dałem w linku podłączyć diody i sprawdzać czy nawiązał połączenie. Kod jest w 100% dobry. Zasilanie może być 5V tego się raczej nie da upalić. Rezystor który jest w układzie hmm sam nie wiem po co jest bo bez niego też działa. Co najważniejsze kod jest na pasmo 868MHz zmiana na 433 to jedynie zmiana jednego rejestru ale tu już odsyłam do dokumentacji.
  • #9 5840239
    Piotr Kania
    Poziom 15  
    Kurcze wielkie dzięki oto właśnie mi chodziło ja mam ustawione na 433 bo podobno to ma dawać większy zasięg, wielkie dzięki :)

    Dodano po 2 [minuty]:

    aha jeszcze jedno msb i lsb mam jako char moze tak być ?
  • #10 5884495
    fazolek
    Poziom 12  
    Też miałem ten problem. Trzeba w jednym miejscu zrobić jakby reset po pełnej transmisji. Jak tylko będę na 2 kompie to podeśle kody takiej biblioteki do obsługi RFM12B
    
    /* RESET FIFO */
    void FIFOReset() {
    writeCmd(0x0000);
    writeCmd(0x8299);	
    writeCmd(0xCA81);
    writeCmd(0xCA83);
    }
    

    Coś takiego to było, może nie 8299 to trzeba sprawdzić jeszcze w dokumentacji ty masz 8239 i działa więc wpisz 0x8239
    Powinieneś tą funkcje wywołać zaraz po dummy byte bo tak cała reszta działa - jest transmisja a to cieszy :)
    Ja ten fragment dodałem w nadajniku po wysłaniu i w odbiorniku
    poczytaj o komendzie 0xCA81 i 0xCA83
    Pozdrawiam Filip
  • #11 5884769
    Piotr Kania
    Poziom 15  
    teraz działa :D wielkie dzięki !!!.A biblioteki napweno się przydadzą!
  • #12 5884810
    kaktus_c++
    Poziom 18  
    Witam, zainteresowało mnie to, antena rozumiem może być zrobiona z kawałka drutu?, a czy są takie miniaturowe naklejane płaskie anteny ? (jak np. ta: http://www.kamami.pl/?id_prod=4326200)

    Rozumiem frm12 się nadaje do zdalnego sterowania? - to znaczy służy jednocześnie jako nadajnik i odbiornik?
    I jaki zasięg ma takie urządzenie?//(to już znalazłem 200-300m w terenie)
  • #13 5887113
    sq3fyk
    Poziom 11  
    Antena z linku jest na pasmo 2,4ghz na pasmo 433 nie widzialem naklejanych mozna zastosowac kawalek cwiercfalowy czyli okolo 70cm (kawalka przewodu).
    Modul rfm12 jest transciverem wiec moze nadawac jak i odbierac dane.Ja w projekcie zakladam tylko wysylanie danych z czujnika do odbiornika wiec komunikacja w obie strony jest zbedna.Pozdrawiam
  • #14 5887145
    Piotr Kania
    Poziom 15  
    Antena może być z kawałka drutu albo na płytce drukowanej o tak http://www.hoperf.com/pdf/ANTENNAS%20APPLICAT...20FOR%20RF12%20and%20RF12B%20_RF-ISM-AN6_.pdf . Zdalne sterowanie chyba też ja przesyłam nim bajty, zasięg dla 433MHz = 300m w terenie (w domu spokojnie z parteru na 2 piętro bez problemów)

    Dodano po 2 [minuty]:

    a tu znajdziesz wszystko http://www.hoperf.com/rf_fsk.asp
  • #15 5887782
    kaktus_c++
    Poziom 18  
    Piotr Kania : Świetne anteny , dzięki za link.
    dwie małe(15x15mm) anteny 868MHz mają zasięg 36 m, to w zupełności dla mnie wystarczy.

    Nie rozumiem tylko jednej rzeczy : na rysunkach (str. 26) są w powiększeniu pokazane kwadratowe brązowe pola 0.5x0.5mm z czterema trójkątami - w tym miejscu jest przewiercona płytka i połączone lutem obie strony? czy może tam jest kondensator (bo pod rysunkiem pisze : zoomed picture of printed capacitor) ?
  • #16 5888424
    Piotr Kania
    Poziom 15  
    moim zdaniem to pola lutownicze celowo tak ułożone dla uzyskania odpowiedniej pojemności
  • #17 5908710
    Piotr Kania
    Poziom 15  
    Mój termometr działa świetnie mam tylko jeden problem z alarmem jak jest za nisko ustawiony, często się włącza(termometr pilnuje temp na piecu centralnym) chce dorobić przycisk kasujący alarm oto fragment kodu

    
    if (temp>=alarm)
    		{
    		LCD_xy(0,0);
    		LCD_xy(0,5);
    		write_text("ALARM");
    		LCD_xy(1,4);
    		write_text(dtostrf(celcius, 3, 1, tab));
    		uint8_t znak1[] = {0,14,10,14,0,0,0,0}; 
    		LCD_DefineCharacter(0, znak1);
    		LCD_xy(1,9);
    		write_char(0); 
    		write_text("C");
    		ALARM_ON();  // sygnał dzwiękowy ON
    		_delay_ms(200);
    		ALARM_OFF();  // sygnał dzwiękowy OFF
    		}
    


    ma to działać tak że jeśli if (temp>=alarm) zaczyna piskać alarm, potrzebuje go przyciskiem zlikwidować do kolejnego alarmu. Czy ktoś ma jakieś propozycje?
  • #18 5908977
    kaktus_c++
    Poziom 18  
    taka jest moja propozycja:
    //gdzieś na początku poza pętlami programowymi,np. zaraz pod main() deklarujesz zmienną
    bool dzwiek_wlaczony = true;
    //...
    //...
    if (temp>=alarm)
    {
          LCD_xy(0,0);
          LCD_xy(0,5);
          write_text("ALARM");
          LCD_xy(1,4);
          write_text(dtostrf(celcius, 3, 1, tab));
          uint8_t znak1[] = {0,14,10,14,0,0,0,0};
          LCD_DefineCharacter(0, znak1);
          LCD_xy(1,9);
          write_char(0);
          write_text("C");
          //tu sprawdzasz czy przycisk wyłączenia alarmu jest w tym momencie naciśnięty,
          //jeśli tak, to ustawiasz dzwiek_wlaczony = false;
          if (dzwiek_wlaczony)
          {
             ALARM_ON();  // sygnał dzwiękowy ON
             _delay_ms(200);
             ALARM_OFF();  // sygnał dzwiękowy OFF
          }
    }
    else//jeśli temperatura spadła poniżej alarm, znaczy że alarm jest już wyłączony,
    // gdy temperatura znowu wzrośnie to sygnał dźwiękowy się włączy bo dzwiek_wlaczony = true;
    {
     dzwiek_wlaczony = true;
    } 
  • #19 8434744
    yok
    Poziom 1  
    Witam.

    Mam pytanie dotyczące modułów RFM12b. Od kilku miesięcy bezskutecznie usiłuję uruchomić te układy. Próbowałem już wszystkiego - bez efektu. Dlatego mam prośbę do kolegów fazolek i Piotr Kania, o ile dobrze rozumiem udało wam się wygrać batalie z tymi mikro systemami, stąd moja prośba - jeśli możecie podajcie adres mailowy do siebie celem wymienienia doświadczeń w sprawie tych układów... Opracowałem już cały projekt systemu nadzorowania i obsługi urządzeń domowych ale bez modułów bezprzewodowych cały projekt traci na znaczeniu - proszę kolegów o pomoc w tej sprawie.

    Pozdrawiam
REKLAMA