Udoskonalony Termometr bezprzewodowy

Prezentacje projektów
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Udoskonalony Termometr bezprzewodowy

Post autor: niveasoft » 13 wrz 2021, 8:58

Spokojnie. To było prawie pięć lat temu...
Nic skomplikowanego tam nie ma. Tiny13 powinien mieć ustawiony Fusebit CKDIV8 czyli tak jak z fabryki po to by pracował na częstotliwości 1.2MHz.
Atmega ma pracować na 8MHz więc dla Mega328P to już trzeba CKDIV8 wyłączyć.
Tiny13 nadaje piątym pinem. Żeby wyeliminować problemy sprzętowe z radiami wystarczy, że połączy się masy układów i pin 5 Tiny13 połączy z RXD wybranej Atmegi. To zadziała jak zwykłe połączenie USART. Jak to nie działa to tym bardziej radia nie ruszą.

To się nie może nie udać. Baudrate tam jest 1200. No zwykły serial tyle że z dodanym buforem FiFo.
Możesz sobie sprawdzić nadajnik Tiny13 podłączając go przejściówką USB<>TTL do terminala w komputerze (taki w którym można wybrać baud 1200 np. HTerm).
Wszystko to da się sprawdzić w kilkanaście minut.
inspector_electro
Posty: 21
Rejestracja: 23 kwie 2017, 13:11

Re: Udoskonalony Termometr bezprzewodowy

Post autor: inspector_electro » 13 wrz 2021, 10:56

Wszystko jest tak jak piszesz, poza jednym. Podłączyłem tiny do terminala przez ttl. W terminalu nie wyskakuje nawet krzaczek.
Dioda podłączona do pinu 5 tiny i do plusa tiny, cały czas świeci. Przygasa co jakiś czas na około 200 / 500ms. W tym momencie nie ma żadnych danych w terminalu.
Nie wiem co jest nie tak.
Nie trzeba nic zmieniać w kodzie od tiny?
inspector_electro
Posty: 21
Rejestracja: 23 kwie 2017, 13:11

Re: Udoskonalony Termometr bezprzewodowy

Post autor: inspector_electro » 13 wrz 2021, 20:45

Korzystam z tego kodu. Kompiluję go i wgrywam do tiny. Terminale milczą. Sprawdziłem też inne moduły USB TTL.
  1. $regfile = "ATtiny13.dat"
  2. $crystal = 1200000
  3. $hwstack = 4
  4. $swstack = 2
  5. $framesize = 24
  6.  
  7.  
  8. '****************************************************
  9. '*             WIRELESS THERMOMETER                 *
  10. '*             WITH CIRCULAR BUFFER                 *
  11. '*               TRANSMITTER PART      Tiny13       *
  12. '*              niveasoft@tlen.pl                   *
  13. '*                 2017-03-09                       *
  14. '****************************************************
  15.  
  16. '-DESCRIPTION-
  17. ' For energy saving device is in Powerdown Mode most of the time.
  18. ' It weakup after Watchdog Restart every ~8s
  19. ' SRAM is not cleared so even after Reset variable Count holds seconds counter
  20. ' So every ~8s x Period_const device read Raw data from DS18B20 and measure battery voltage.
  21. ' If no error has occured then it packed data, own number and calculated CRC is coded
  22. ' into Manchester and send via radio.
  23. ' Also for energy saving voltage divider is enabled only for measure time.
  24. ' Schematic and PCB design can be found at http://bart-projects.cba.pl
  25.  
  26.  $noramclear                                                'for non clearing Count variable
  27.  
  28.  Config Watchdog = 8192 : Start Watchdog :
  29.  
  30.                                Const Node_nr = 1
  31.                                Const Period_const = 8       '8x8s=~1min
  32.  
  33. Config Submode = New
  34.  
  35. Tx_pin Alias Portb.0
  36. Divider_gnd Alias Portb.1
  37. Battery_terminal Alias Pb3
  38.  
  39.  Config Tx_pin = Output                                     'set radio off
  40.  
  41. Set Divider_gnd                                             'no GND for divider
  42.  
  43. '-[1WIRE]-
  44. Config 1wire = Portb.4
  45.  
  46.   Dim Multip As Byte
  47.  
  48. '-[RADIO]-
  49. Dim Buffer(18) As Byte
  50. Dim Wrd_1 As Word At Buffer(1) Overlay                      'pre
  51. Dim Wrd_2 As Word At Buffer(3) Overlay                      'pre
  52. Dim Wrd_3 As Word At Buffer(5) Overlay                      'ds
  53. Dim Wrd_4 As Word At Buffer(7) Overlay                      'ds
  54. Dim Wrd_5 As Word At Buffer(9) Overlay                      'adc
  55. Dim Wrd_6 As Word At Buffer(11) Overlay                     'adc
  56. Dim Wrd_7 As Word At Buffer(13) Overlay                     'id
  57. Dim Wrd_8 As Word At Buffer(15) Overlay                     'crc
  58. Dim Wrd_9 As Word At Buffer(17) Overlay                     'tail
  59.  Const Tail = &HAA
  60. 'Wrd_1 = &HAAAA                                              'for preamble this will send
  61. 'Wrd_2 = &HAAAA                                              '0101010101010101010101010101...
  62.  
  63. '-[BATTERY MEASURE]-
  64. Dim Adc_read As Word At Buffer(3) Overlay
  65.  
  66.  
  67. '-[POWERSAVING]-
  68. Dim Count As Byte : Incr Count
  69.  
  70. '-[MANCHESTER]-  '1 become "01" and 0 become "10" so longest break in TX is "1001"
  71. Function Code(byref Temp As Byte) As Word                   'we use target variable instead local
  72.  
  73.    Multip = 8
  74.    Do
  75.       Shift Code , Left , 2
  76.       Decr Multip
  77.       If Temp.multip = 1 Then
  78.          Code = Code + 1                                    '01
  79.       Else
  80.          Code = Code + 2                                    '10
  81.       End If
  82.    Loop Until Multip = 0
  83.  
  84. End Function
  85.  
  86. If Count > Period_const Then
  87.  Count = 0
  88.  
  89.     Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
  90.  
  91.      Config Divider_gnd = Output
  92.       Reset Divider_gnd
  93.  
  94.     Multip = 0
  95.  
  96.      1wreset
  97.      If Err = 0 Then
  98.       1wwrite &HCC
  99.       1wwrite &H44
  100.  
  101.        Waitms 750
  102.  
  103.       1wreset
  104.        1wwrite &HCC
  105.        1wwrite &HBE
  106.  
  107.        Buffer(1) = 1wread(9)
  108.        If Buffer(8) = &H10 Then
  109.         If Crc8(buffer(1) , 8) <> Buffer(9) Then Multip = 1
  110.        Else
  111.         Multip = 1
  112.        End If
  113.  
  114.      Else
  115.       Multip = 1
  116.      End If
  117.  
  118.  
  119.    If Multip = 0 Then
  120.  
  121.       Open "COMB.0:1200,8,N,1" For Output As #1
  122.  
  123.         'Set Tx_pin
  124.  
  125.       'DS18B20
  126.        'Buffer(1) = &HBB
  127.        'Buffer(2) = &HBB
  128.  
  129.       'ADC
  130.        'Buffer(3) = &HF0
  131.        'Buffer(4) = &H00
  132.  
  133.        Adc_read = Getadc(battery_terminal)                  'result in Buffer(1), Buffer(2)
  134.  
  135.       'NODE
  136.         Buffer(5) = Node_nr
  137.         Buffer(17) = Node_nr
  138.  
  139.       'CRC
  140.         Buffer(18) = Crc8(buffer(1) , 5)
  141.  
  142.  
  143.    ''  Wrd1 and Wrd2 (four bytes)can be filled at the end so now can be as helpw
  144.  
  145.        Wrd_3 = Code(buffer(1))                              'ds
  146.        Wrd_4 = Code(buffer(2))                              'ds
  147.        Wrd_5 = Code(buffer(3))                              'adc
  148.        Wrd_6 = Code(buffer(4))                              'adc
  149.        Wrd_7 = Code(buffer(17))                             'id
  150.        Wrd_8 = Code(buffer(18))                             'crc
  151.        Buffer(1) = Tail
  152.        Wrd_9 = Code(buffer(1))
  153.  
  154.        Buffer(1) = Tail
  155.        Buffer(2) = Tail
  156.  
  157.        Buffer(3) = Tail
  158.        Buffer(4) = Tail
  159.  
  160.        Printbin #1 , Buffer(1)
  161.  
  162.        Reset Tx_pin
  163.         Set Divider_gnd
  164.  
  165.    End If
  166. End If
  167.  
  168. Stop Adc
  169.  
  170.    Config Powermode = Powerdown
  171.  
  172. End
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Udoskonalony Termometr bezprzewodowy

Post autor: niveasoft » 13 wrz 2021, 20:51

Ten Tiny13 nadaje w Bin a nie w ASCII więc może w normalnym terminalu nic nie zobaczysz.
Złapię może zaraz jakiegoś Tiny13 i zerknę co tam nadaje ;)
inspector_electro
Posty: 21
Rejestracja: 23 kwie 2017, 13:11

Re: Udoskonalony Termometr bezprzewodowy

Post autor: inspector_electro » 13 wrz 2021, 21:21

Żeby było ciekawiej, próbowałem też wersję z tiny 85 i - jest dokładnie to samo.
Mam Bascom 81 może tu tkwi problem?
inspector_electro
Posty: 21
Rejestracja: 23 kwie 2017, 13:11

Re: Udoskonalony Termometr bezprzewodowy

Post autor: inspector_electro » 13 wrz 2021, 21:23

niveasoft pisze:
13 wrz 2021, 20:51
Ten Tiny13 nadaje w Bin a nie w ASCII więc może w normalnym terminalu nic nie zobaczysz.
Faktycha. Nie zajarzyłem tego. Ale teoretycznie powinno wywalać krzaki na terminalu.
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Udoskonalony Termometr bezprzewodowy

Post autor: niveasoft » 13 wrz 2021, 21:45

Tak jak się można było spodziewać wszystko działa co widać na screenie.
Tam jest taka zmienna Multip.
W okolicach linii 121 jest warunek "If Multip = 0 Then" Zakomentuj to i End If od niego.
Jeśli jest problem z odczytem DS18B20 (nie ma go, nie odpowiada lub zła CRC) to ta zmienna ma wartość i nic nie jest wysyłane.
Sprawdź Dallasa bo ja mam tu tez inne zadania ;)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
inspector_electro
Posty: 21
Rejestracja: 23 kwie 2017, 13:11

Re: Udoskonalony Termometr bezprzewodowy

Post autor: inspector_electro » 13 wrz 2021, 21:49

Ok. dzięki sprawdzę.
inspector_electro
Posty: 21
Rejestracja: 23 kwie 2017, 13:11

Re: Udoskonalony Termometr bezprzewodowy

Post autor: inspector_electro » 14 wrz 2021, 8:25

A więc tak:
Z zaremowanym multip wyświetlacz pokazuje crc ok, napięcie baterii, i temperaturę 136 stopni i się nie zmienia.
Gdy multip jest odkomentowany to brak danych. Mam kilka dallasów i na każdym jest tak samo 136 stopni, lub z multip brak danych.
Testy przeprowadziłem podłączając tiny i megę32 bezpośrednio bez modułów 433mhz.
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Udoskonalony Termometr bezprzewodowy

Post autor: niveasoft » 14 wrz 2021, 8:42

Nie pokazuje CRC ok tylko pokazuje że to właśnie komunikacja z DS`em szwankuje.
Nie wiem czy wiesz, że CRC8 z ośmiu zer to też zero więc gdy DS jest niezasilany lub linia zwarta do masy to CRC nie załatwia sprawy bo będzie się zgadzać. Przewidziano to i jeden bajt w tej transmisji ma stałą wartość &H10. Tak więc i to jest sprawdzane. Jesli odczyta same zera - to ósmy bajt tez ma zera i to jest linia 108. Potem dopiero sprawdza się CRC.
Nie bądź kaczką tylko lekko przerób program na Tiny i wyświetl sobie te dziewięć bajtów z Dallasa na terminalu. Trzy minuty roboty.
Na przykład :
  1. Buffer(1) = 1wread(9)
  2. For N = 1 to 9
  3.  Print Hex(buffer(n) ;
  4. Next
No po prostu zobacz co tam się dzieje bo ja Tobie komunikacji z DS`em nie poprawię.
ODPOWIEDZ