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

Komunikacja radiowa 2x Attiny23 - uart

lenny35 21 Kwi 2010 16:10 2023 7
  • #1 7987248
    lenny35
    Poziom 13  
    Witam!

    Przeszukałem cale forum ale nie mogę znaleźć odpowiedzi na moje pytania.
    A mianowicie: Zrobiłem sobie płytki 2x Attiny23, na jednej DS1820 do pomiaru temperatury na drugiej lcd, który ma mierzoną temp. wyświetlać. Do komunikacji radiowej w jedną stronę wybrałem HM-R868S i HM-T868S.
    Czy mógłby mi ktoś pomóc z częścią programową. Moja znajomość Bascoma nie jest jeszcze za dobra a tym bardziej protokołu UART. Będę wdzięczny za wszystkie podpowiedzi, a jeszcze bardziej za jakieś gotowe programiki:D.

    Z góry dzięki!!!
  • #2 7988843
    11111olo
    Poziom 42  
    Poczytaj o PRINT i INPUT.
  • #3 8006558
    lenny35
    Poziom 13  
    Stworzyłem taki kod ale najczęściej odbieram zero. Czasem wyśle dobrze temperaturę. Podpowiedzcie co jest źle bo już nie mam pomysłów.

    Odbiornik:

    $regfile = "attiny2313.dat" 'informuje kompilator o pliku
    'dyrektyw mikrokontrolera
    $crystal = 8000000 'informuje kompilator
    'o częstotliwości oscylatora

    Config Lcd = 16 * 2

    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.3 , Db6 = Portd.2 , Db7 = Portb.0 , E = Portd.5 , Rs = Portd.6


    $baud = 19200

    Config Serialin = Buffered , Size = 20
    Config Serialout = Buffered , Size = 20

    Enable Interrupts


    Dim T1_wys As String * 4
    Dim T1 As Byte
    Dim T2_wys As String * 4
    Dim T2 As Byte

    Cls

    Do
    Input T1_wys
    Home
    T1 = Val(t1_wys)
    Lcd "odczytalem" ; T1 ; " "
    Input T2_wys
    T2 = Val(t2_wys)
    Lowerline
    Lcd "Odczytalem" ; T2 ; " "
    'wait 1
    Loop
    End

    Nadajnik:

    $regfile = "attiny2313.dat" 'informuje kompilator o pliku
    'dyrektyw mikrokontrolera
    $crystal = 8000000 'informuje kompilator

    Config Lcd = 16 * 2

    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.3 , Db6 = Portd.2 , Db7 = Portb.0 , E = Portd.5 , Rs = Portd.6


    $baud = 19200

    Config Serialin = Buffered , Size = 20
    'Config Serialout = Buffered , Size = 20
    Enable Interrupts

    Config 1wire = Portb.7


    cls

    'zmienne 1-wire'
    Dim I1 As Byte
    Dim I2 As Byte
    Dim T1 As Byte
    Dim T2 As Byte
    Dim T1_wys As String * 4
    Dim T2_wys As String * 4

    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte

    '-----------------------------------

    Do

    1wreset
    1wwrite &H55
    1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika
    1wwrite &HBE
    I1 = 1wread(2)
    '---------------------------------
    1wreset
    1wwrite &H55
    1wverify Dsid2(1) 'wysylam adres drugiego czujnika
    1wwrite &HBE
    I2 = 1wread(2)
    '---------------------------------

    '--------konwersja temp dla wszystkich dsow
    1wreset
    1wwrite &HCC
    1wwrite &H44


    T1 = I1 / 2
    T2 = I2 / 2

    T1_wys = Str(t1)
    T2_wys = Str(t2)


    Print T1_wys ; Chr(13);
    Print T2_wys ; Chr(13);

    Home
    Lcd "wyslalem " ; T1
    Lowerline
    Lcd "wyslalem " ; T2

    Wait 1

    Loop
    End
  • #4 8006706
    tomson5
    Poziom 16  
    Mnie ktoś pomógł to teraz się tym podzielę

    Nadawanie:

    
    -----konfiguracja-------
    $baud = 2400
    Config Serialin = Buffered , Size = 20
    Config Serialout = Buffered , Size = 20
    
    ---------jakiś tam program-----
    Print Temperatura ; Chr(13) ;       'Wyślij po RS wartość zmiennej temperatura
    
    


    Odbiór:

    
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 2400
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    Config Lcd = 16 * 2           'ZAMIENIONE WYJŚCIA LCD
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portb.2 , E = Portc.4 , Rs = Portc.5
    'Nie korzystam z ADC więc Db7 = portc.0
    Deflcdchar 1 , 14 , 10 , 14 , 32 , 32 , 32 , 32 , 32 'tworzymy znak stopnia
    Config Serialout = Buffered , Size = 20
    Config Serialin = Buffered , Size = 32 , Bytematch = 13
    Enable Interrupts
    
    Dim Flaga As Byte
    Dim Temperatura As Single , Temperatura2 As Single
    Do
    If Flaga = 1 Then 'jeżeli flaga ustawiona na 1 to odbieramy dane z bufora 
       Input Temperatura
       Reset Flaga 'ustawiamy flagę na 0
       Gosub Wyswietlanie  
    End If
    Loop
    End
    
     Wyswietlanie:
     If Temperatura <> Temperatura2 Then 'jeżeli temperatura się zmieni to odświerzamy wyświetlacz , zapobiega to mruganiu 
      Temperatura2 = Temperatura
          Cls
         Locate 1 , 1 : Lcd "T="
         Locate 1 , 3 : Lcd Temperatura ; Chr(1) ; "C"       'wyświetl wynik 
         Cursor Off
       End If
      Return
    
    
    
    
    Serial0charmatch:
    Set Flaga      'Jeżeli coś nam wpadnie do bufora to ustawia flagę na 1            
    Return
    
  • #5 8006945
    lenny35
    Poziom 13  
    Tomson5 mógłbyś jeszcze podpowiedzieć jak masz ustawione zmienne w programie nadawania. Chodzi mi o to jako co masz ustawioną zmienną "temperatura" w nadajniku. Jakbyś mógł podać mi cały program twojego nadajnika to był bym wdzięczny. Z góry dziękuje!!!
  • #7 8007749
    lenny35
    Poziom 13  
    Ok. Dzięki. Przetestuję i napiszę jak poszło.:D
  • #8 8009319
    lenny35
    Poziom 13  
    Niestety program nie działa!:cry:

    Dodano po 1 [godziny] 45 [minuty]:

    Ok. Działa. :D Problem leżał w błędnym połączeniu.
REKLAMA