Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega 8 - Termometr bezprzewodowy - brak znaku +/-

Danonek51 05 Lip 2013 17:47 4857 11
  • #1 05 Lip 2013 17:47
    Danonek51
    Poziom 8  

    Początkujący 62l. Zrobiłem termometr bezprzewodowy avrproject.ru/publ/peredacha_izmerennoj_temperatury_po_radiokanalu_svjazka_nrf24l01_i_ds18b20/1-1-0-106. Termometr działa, lecz problem polega na tym, że nie wyświetla się znak + -. Nie wiem gdzie jest przyczyna, czy w kodzie nadajnika czy odbiornika. Załączam wsad bas.

    Nadajnik:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Odbiornik:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Będę bardzo wdzięczny za odpowiedź.

    0 11
  • #2 06 Lip 2013 01:54
    Jacek Rutkowski
    Poziom 24  

    Danonek51 napisał:

    Dim D_bytes(33) As Byte , B_bytes(33) As Byte
    Cls
    Lcd "NRF24L01+DS18B20"
    Lowerline
    Lcd "T: " ; B_bytes(1) ; "C" 'ňĺěďĺđŕňóđŕ


    W odbiorniku masz odbierany tylko jeden bajt B_bytes(1) wyświetlany jako temperatura i może mieć tylko 0-255 wartości :cry:
    Musiałbyś zmienić program w nadajniku aby nadawać także znak temperatury i w odbiorniku aby go wyświetlać...

    0
  • Pomocny post
    #4 08 Lip 2013 02:29
    Jacek Rutkowski
    Poziom 24  

    nadajnik:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    D_bytes(6) = temp_sign 'Packet_count 'Byte 5
    W tym bajcie zamiast licznik jest wysyłany znak temperatury.
    odbiornik:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    if (b_bytes(5)=0 then 'jesli temperatura jest ujemna
    Lcd "T: -" ; B_bytes(1) ; "C" 'ňĺěďĺđŕňóđŕ
    else 'jesli jest dodatnia
    Lcd "T: +" ; B_bytes(1) ; "C" 'ňĺěďĺđŕňóđŕ
    end if
    Natomiast w tym warunku jest sprawdzany znak temperatury i odpowiednio wyświetlany.
    Nie testowałem tego w układzie ponieważ go nie mam, sprawdź czy działa i odezwij się.

    Ps.
    Wkradł się drobny błąd zamiast
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    powinno być:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod



    Poprawiony kod nadajnika, w złym miejscu zmieniałem zmienną od znaku temperatury.
    Teraz przy ujemnych bedzie "-" a przy zerze i dodatnich "+"

    If Sign = "+" And T1 = 0 Then ' óáčđŕĺě çíŕę "+" ń íóëĺâîé ňĺěďĺđŕňóđű
    Sign = " "
    temp_sign=1
    End If


    :
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Ps. W załącznikach nowa wersja nadajnika i odbiornika obsługująca ułamki temperatury oraz nie wyświetlająca "+" przy 0°C

    1
  • #5 01 Wrz 2013 09:25
    Krzysztof_lolek
    Poziom 11  

    Witam!
    Chciałbym się dołączyć do dyskusji zadając pytanie ile danych można przesłać przez nRF2L01? Obecnie robię urządzenie które będzie mierzyć temperaturę, ciśnienie i wilgotność, a następnie będzie przesyłać do odbiornika. Czy przy czymś taki należy wkorzystać osobne zmienne D_bytes tak jak poniżej:

    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod

    Oczywiście odbiornik też tak należy skonfigurować.

    Czy takie rozwiązanie ogranicza ilosć przesyłania danych do 6?

    0
  • #6 02 Wrz 2013 00:15
    Jacek Rutkowski
    Poziom 24  

    Witam,
    teoretycznie nRF24L01 może przesyłać 1 do 32 bajtów informacji w/g pdf-a jednak przy próbie przesyłania 5 bajtów informacji początkowo działa a po kilku minutach przestaje odbiornik potwierdzać odbiór. Nie udało mi się jeszcze ustalić dlaczego ale przy przesyłaniu tylko 1 bajtu zmiennego i reszty stałej nie występuje ten problem. Datasheets tego układu jak dla mnie jest zbyt ubogi i nie rozumiem jak można wysłać więcej niż 5 bajtów danych.

    0
  • #7 02 Wrz 2013 08:24
    Krzysztof_lolek
    Poziom 11  

    Witam!
    Czy z tego co piszesz moge mieć problem z przesłaniem:
    temperatury zewnetrznej
    znaku temperatury
    wilgotności
    ciśnienia
    i jeszcze temperatury nc CO - mam rację?

    Mam jeszcze jedno pytanie zwiazane z tym ukladem, a mianowice obecnie mój nadajnik opiera się na atmega 8 natomiast odbiornik na atmega 16. Niestety odbiornik jest zegarem z PCF8563 (który oblicz także wschody i zachody słońca) i program który jest napisany zajmuje 93% pamięci i chciałbym podmienić go na atmegę 32. I tutaj pojawił się problem - program się wgrywa ale Atmega 32 jakby wpada do pętli i juz z niej nie wychodzi (oczywiscie zmieniam typ procka w programie na atmege32). Poniżej zamieszczam kod do konfiguracji i obsługi nRF24L01

    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod


    Wydaje mi się, że program w pada do petli i z niej nie wychodzi gdyż nie spełniony jest ten warunek:
    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod


    Kolejną rzeczą którą chę zauważyć to, że parametr Noss przy konfiguracji sprzętowej SPI został ustawiony na "0" gdyż przy "1" temp nie jest odczytywana.

    Muszę przejść na Atmege 32 bo program mi sie już nie mieści, a jeszcze chciałbym dodać obsługę dcf77 i odbiór jeszcze dodatkowych zmiennych przez nRF24L01. Jacek czy masz może jakies sugestie co może powodować te problemy z ATMEG-a32?

    P.S.
    W sprawie problemów z przesyłaniem większej liczby zmiennych to można by napisac do producentra do Trondheim z jakiś zapytaniem. Albo może to urok Bascom-a?

    0
  • #8 22 Wrz 2013 13:49
    Krzysztof_lolek
    Poziom 11  

    Chciałbym kontynuować temat związany z termometrem. Wiem z opisu układu nRF24L01, że jeden układ w roli odbiornika może odbierać sygnał z 6 nadajników, taka informacja jest na stronie 35 na dziesiątem rysunku. Oczywiście należy skonfigurować adresy nadajników. W moim wypadku były by dwa nadajniki. Na stronie 37 są już wypisane konkretne adresy czy tych należy użyć i którym miejscu należałoby je zapisać w powyższym przykładzie? Proszę o wskazówki, jeśłi sam coś ustalę zamieszczę w naszej dyskusji.

    P.S.
    Wciąż mam problem z uruchomieniem odbiornika na atmega 32 wysledziłem że coś się dzieje z SPI. Na atmega 16 mam taką konfigurację modułu sprzętowego SPI:

    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod



    Ciekawostką jest to, że jak zmienię Noss=1 to wtedy układ nie działa i nie odbiera. Skąd ten problem bo w atmedze8 i powyższym przykładzie jest Noss=1

    0
  • #9 24 Wrz 2013 19:34
    Jacek Rutkowski
    Poziom 24  

    Witam,
    sam chciałem wysyłać większą ilość danych niż 1 czy 5 bajtów bo w/g opisu można wysyłać do 32 bajtów na raz ale nie potrafię tego uruchomić a przy przesyłaniu 5 bajtów zacina się nadajnik po kilkuset ramkach.
    Próbowałem wysyłać też pakietowo do 2 odbiorników ale też mi nie działało. Działa tylko wysyłanie pojedynczych bajtów jak w przykładach z MCS.

    0
  • #10 24 Wrz 2013 22:56
    Krzysztof_lolek
    Poziom 11  

    Panowie ja przesyłałem z jedengo nadajnika na dwa odbiorniki tylko że wysyłane było to samo także nic dziwnego że to działało. Ja borykam się wciąż z problemem przejściem z atmega 16 na atmegę32. Przy A32 układ jakby się zwiesza pokazuje temperature -0. Nie wiem jak usunąc ten problem na, a 16 działa ale na A32 już nie. Miałem też ciekwa sytuację z tym ukladem nRF24L01 dla Atmega 16 musiałem dać szeregowo dwi diody 1N4148 aby obniżyć napięcie zasilania na układ nRF bo jak VCC na nim było większe od 2,9 to układ się zawieszał teraz jest 2,8 i działa bez problemu. Może dal A32 też trzeba jakoś zmieniać tę wartość. I na koniec czy mozna spod AVR Burn coś pozmieniać w fusbit-ach dla moadułu SPI, może coś tam mam jeszcze nie tak w tej A32??? Obecnie ustawiłęm kwarc zewnętrzny 16MHz i wyłączyłem JTAG - tak jak w Atmega 16 - czy coś mozna tu jeszcze zrobić?

    Update
    Poanowie udało się mi uruchomić atmegę 32, trzeba było podpiąć SS jednak do portu PB4, a nie do innego jak miałem wcześniej i zmienić napięcie zasilania na nRF24L01 na dokładnie 3,3 V. Wcześniej miałem 2,9V i atmega 32 nic nie odbierał z nRF24L01. Obecnie będę próbował przesłać jeszcze dwie dodatkowe zmienne a mianowicie ciśnienie i wilgotność. Koniecznie tez chiałbym ziększyć ilość wysyłanych bajtów 5 może okazać się za mało jeśli bede chciał podawać wartość, ciśnienia lub wilgotności, po przecinku.

    0
  • #11 28 Paź 2013 21:22
    Krzysztof_lolek
    Poziom 11  

    Panowie problemem z układem nRF24L01 było zmodyfikowanie kodu do BASCOM-a tak aby można było przesłać większą ilość danych. Jeden kolegów z tego forum o imieniu Tomasz zasugerował mi w którym miejscu trzeba zmienić kod. Jak się okazało był to pierwszy krok do osiągnięcia celu. Moja propozycja zmian, które pozwoliły przesłać następujące dane:
    1. temperaturę z dokładnością do jednego miejsca po przecinku oraz informacją o znaku (3 zmiene byte)
    2. ciśnienie atmosferyczne w hPa (2 zmienne byte)
    3. wilgotność powietrza z dokładnością do jednego miejsca po przecinku (2 zmienne byte)

    dodatkowo przesyłam jeszcze dwie stałe jedną szesnastkową drugą dziesiętną.

    Razem przesyłam 9 zmiennych typu byte. A teraz moje wskazówki gdzie co i jak zmienić na początek nadajnik:

    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod


    A teraz fragmentu programu w odbiorniku tutaj jest konieczne zmiana w 3 miejscach i tak:
    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod

    Kolejne zmienne bytes przedstawiają informacje o temperaturze, ciśnieniu, wilgotności, znaku temperatury oczywiście trzeba pamiętać o kolejności przesyłanych danych.

    Konieczna jest jeszcze zmiana w następujących podprogramie w odbiorniku:
    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod


    Proszę zwrócić uwagę na cyfrę 9 czyli ilość przesyłanych zmiennych przy komentarzu " ustawienie ilosci bitów do odczytania z pierwszego nadajnika w moim przypadku wynosi ona 9"

    U mnie po tych zmianach całoś działa bez problemu. Kolejnym krokiem który chciałbym zrobić to przesyłanie danych z dwóch nadajników do jednego odbiornika. Może ktoś z Was ma pomysł jak to zrobić to bedę wdzięczny za sugestię. W razie problemów z moimi poprawkami proszę o informację postaram się pomóc. Oczywiście przesyłane zmienne w nadajniku trzeba zadeklarować.
    Pozdrawiam mam nadzieję, że komuś to pomoże

    Update
    Przesyłam obecnie 14 zmiennych wszystko działa bez problemu. Będę chciał jeszcze dodać 4 zmienne informujące o stanie regulatora łdowania solar i temperaturze akumlatorów.

    0
  • #12 12 Sty 2015 13:45
    sq9onw
    Poziom 9  

    Czy ktoś ma może kod na termometr 4 kanałowy?

    0