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

2 x attiny 2313 uart problem z kodem

lenny35 27 Kwi 2010 16:53 1218 4
  • #1 8009262
    lenny35
    Poziom 13  
    Witam!

    Próbuje od tygodnia skomunikować dwa attiny2313 aby jeden przesyłał pomiar temperatury do drugiego. Proszę o sprawdzenie mojego kodu bo już nie mam pomysłów. Na odbiorniku nie mam żadnego odczytu. Połączenie elektryczne od txd do rxd OK.

    Nadajnik:

    $regfile = "attiny2313.dat"

    $crystal = 8000000
    $baud = 2400
    Config Serialout = Buffered , Size = 20
    Enable Interrupts


    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

    Config 1wire = Portb.7

    'Zmienne
    Dim Temperatura As Byte
    Dim I2 As Byte


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



    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32

    Cursor Off
    Cls


    Dsid1(1) = 1wsearchfirst()
    Dsid2(1) = 1wsearchnext()

    Do
    1wreset
    1wwrite &H55
    1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika
    1wwrite &HBE
    Temperatura = 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

    Wait 1


    Temperatura = Temperatura / 2

    Print temperatura ; Chr(13) ;

    Locate 1 , 1
    Lcd "Temp1: " ; Temperatura ; Chr(0) ;

    I2 = I2 / 2

    Locate 2 , 1
    Lcd "Temp2: " ; I2 ; Chr(0) ;



    Loop
    End

    Odbiornik:

    $regfile = "attiny2313.dat"

    $crystal = 8000000

    $baud = 2400

    $hwstack = 32

    $swstack = 8

    $framesize = 24

    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

    Config Serialin = Buffered , Size = 20 , Bytematch = 13

    Enable Interrupts

    Dim Flaga As Byte

    Dim Temperatura As Byte
    Dim Temperatura2 As Byte

    'Przyciski

    Config Pinb.1 = Input
    Config Pinb.2 = Input

    Set Pinb.1
    Set Pinb.2
    Reset Pinb.3

    Up_sw Alias Pinb.1
    Down_sw Alias Pinb.2

    Dim T_alarm As Byte
    Dim T_alarm_e As Byte


    'PROGRAM GŁÓWNY

    Readeeprom T_alarm_e , 3
    T_alarm = T_alarm_e

    Cursor Off


    Do

    If Up_sw = 0 And Down_sw = 0 Then Gosub Ustawienia

    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


    Lcd "Temp: " ; Temperatura ; "C" 'wyświetl wynik
    If Temperatura < T_alarm Then Gosub Alarm


    End If
    Return

    Serial0charmatch:
    Set Flaga 'Jeżeli coś nam wpadnie do bufora to ustawia flagę na 1
    Return


    Ustawienia:
    Cls
    Lcd "Konfiguracja"

    Do
    Locate 1 , 1
    Lcd "Temp. alarmu"
    Locate 2 , 1
    Lcd "Temp=" ; T_alarm ; Chr(0) ; "C"
    If Up_sw = 0 Then Incr T_alarm
    Waitms 50
    If T_alarm > 50 Then T_alarm = 50
    If Down_sw = 0 Then Decr T_alarm
    Waitms 50
    If T_alarm < 1 Then T_alarm = 1
    Loop Until Up_sw = 0 And Down_sw = 0
    T_alarm_e = T_alarm
    Writeeeprom T_alarm_e , 3
    Cls
    Locate 1 , 1
    Lcd "Zapisano"
    Wait 1
    Cls

    Return

    Alarm:

    Do

    Cls
    Lcd "Alarm temp."

    Set Pinb.3
    Wait 1
    Reset Pinb.3
    Wait 1
    Loop Until Up_sw = 0
    Cls

    Return

    Z góry dzięki za pomoc!!!
  • #2 8009505
    Andrzej_;)
    Poziom 14  
    Witam :)

    Jak połączyłeś ze sobą te procesorki?
    Może tam jest błąd?

    Powinno być tak:
    RxD pierwszego na TXD drugiego
    TxD pierwszego na RxD drugiego
    i wspólna masa dla obu
  • #3 8009534
    lenny35
    Poziom 13  
    Jeśli chce wysyłać tylko w jedną stronę to muszę mieć wszystkie połączenia czy wystarczy txd nadajnika do rxd odbiornika??? Chce użyć HM-R868S i HM-T868S. Narazie jest połączone jednym kabelkiem od txd nadajnika na rxd odbiornika.
  • #5 8009648
    lenny35
    Poziom 13  
    No ale jak zrobić wspólną masę jak układy będą oddalone o np. 20m ???

    Dodano po 25 [minuty]:

    Po podłączeniu masy działa.:D Ale jak poradzić sobie w przypadku jak będę chciał przesyłać sygnał radiowo?
REKLAMA