RS485 + atmega32 (EvB 5.1)

Pytania, kody i porady dotyczące nie tylko Bascom.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: RS485 + atmega32 (EvB 5.1)

Post autor: niveasoft » 12 wrz 2017, 22:28

Chcesz powiedzieć, że nie możesz się z nim dogadać i wyślesz zainteresowanemu do testu? Hahaha :D Wyślij :D
Napisz na bartek.niveasoft@gmail.com o adres i nie zapomnij do koperty włożyć zwrotnego znaczka(żebym nie dopłacał do odsyłania :P), ale zastrzegam, że kod obsługi tu pokażemy.

Takie sprawy rozwiązuje bardziej z własnej ciekawości. Mogę do tego podłączyć Saleae i dużo się pewnie wyjaśni.
pirzol
Posty: 11
Rejestracja: 07 wrz 2017, 15:19

Re: RS485 + atmega32 (EvB 5.1)

Post autor: pirzol » 13 wrz 2017, 8:22

Nie ma sprawy :),
kod sterownika solarów z zapisem na SD też upubliczniłem lata temu. Może śliczny nie jest (uczyłem sie bascoma) ale działa.


Większość ludzi i tak idzie po gotowca do sklepu. Jakiś promil chce się nauczyć i to dla nich są fora i merytoryczne dyskusje, więc publiczny kod sprzyja zgłębianiu tematów.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: RS485 + atmega32 (EvB 5.1)

Post autor: niveasoft » 15 wrz 2017, 13:15

Ahahahaha najbardziej mi sie spodobała kartka/wypełniony formularz pocztowy ahahahaha :D
Postaram się przez weekend do tego zajrzeć i odesłać w poniedziałek hahahaha :D
Naprawdę wypełniony formularz mnie rozłożył hahaha :D
pirzol
Posty: 11
Rejestracja: 07 wrz 2017, 15:19

Re: RS485 + atmega32 (EvB 5.1)

Post autor: pirzol » 15 wrz 2017, 21:47

Czekałem w kolejce to uzupełniłem druczek.
:D
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: RS485 + atmega32 (EvB 5.1)

Post autor: niveasoft » 17 wrz 2017, 12:28

Rozkminiłem to, ale chwile mi to zajęło bo bym nie pomyślał, że ten kit AVT taki kiepski :P
Ten moduł po prostu nie nadąża za Bascomem bo użyto tam programowego UARTU.
Kiedy wpisywałeś coś "z palca" to prawdopodobnie terminal po jednym znaku otwierał i kończył nadawanie.
Bascom natomiast włączał nadawanie, wysyłał cztery znaki i dopiero kończył nadawanie.
Nie było przerwy pomiędzy znakami i chyba program w tym Attiny się nie wyrabia.

Kiedy każdy znak nadasz osobno to termometr ożywa :D

Używam Printbin bo do zwykłego Print "T02" Bascom na końcu doda znak NULL czego ten termometr też nie lubi.
Ten program odpytuje ten adres co 5s bo jest trochę przygotowany do odpytywania innych adresów.
  1. $regfile = "m32def.dat"
  2. $crystal = 16000000
  3. $hwstack = 64
  4. $swstack=40
  5. $framesize = 64
  6. $baud = 9600
  7.  
  8. '*****************************************************************
  9. '*                       CONFIG LCD                              *
  10. '*****************************************************************
  11.  
  12. Config Lcd = 20x4
  13. Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
  14. Cursor Off , Noblink
  15. Cls
  16.  
  17.  
  18.  
  19. '*****************************************************************
  20. '*         CONFIG BUFFERED USART FOR DEBUG via USB               *
  21. '*****************************************************************
  22.  
  23. 'Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  24.  
  25.  Config Serialin0 = Buffered , Size = 50               'RX from Terminal
  26.   Dim Char As Byte , Cmd_timeout1 As Byte , Got_str1 As Byte
  27.   Dim Command1 As String * 30
  28.  
  29.   Dim Address As String * 4
  30.   Dim Buff(4) As Byte At Address Overlay
  31.  
  32.   Dim Temperatures(2) As String * 20
  33.  
  34.   'Open "COM1:" For Binary As #1
  35.  
  36. Config Print0 = Portd.2 , Mode = Set                        ' specify RS-485 and direction pin
  37. Config Portd.2 = Output
  38.  
  39. '*****************************************************************
  40. '*                TIMER2 FOR TIME BASE                           *
  41. '*****************************************************************
  42. Config Timer2 = Timer , Prescale = 1024 , Compare = Disconnect , Clear_timer = 1
  43.  Compare2 = 155                                        '10ms @16MHz/1024
  44.  
  45. Dim Miliseconds As Byte , Seconds As Byte , Helpb As Byte , N As Byte
  46.  
  47.   Enable Interrupts
  48.  
  49. Dim 1b As Byte
  50. Dim 2b As Byte
  51. Dim 3b As Byte
  52. Dim 4b As Byte
  53.  
  54. Do
  55.  
  56.  '--[ TIMER2 10ms ]----------------------------
  57.  If Tifr.ocf2 = 1 Then
  58.   Tifr.ocf2 = 1
  59.  
  60.   If Miliseconds < 99 Then
  61.    Incr Miliseconds
  62.   Else
  63.    Miliseconds = 0
  64.  
  65.    Incr Seconds : If Seconds > 5 Then Seconds = 0
  66.  
  67.    Select Case Seconds
  68.  
  69.     Case 0
  70.  
  71.      Locate 1 , 1 : Lcd "*" : Waitms 200 : Cls   'Heartbeat ;)
  72.  
  73.      'tak nie zadziała
  74.      '--------------------------------------------
  75. '      Buff(1) = &H54
  76. '      Buff(2) = &H30
  77. '      Buff(3) = &H32
  78. '      Buff(4) = &H0D
  79.  
  80. '      Printbin Buff(1)
  81.      '--------------------------------------------
  82.  
  83.      'teraz zadziała
  84.      '--------------------------------------------
  85.       1b = &H54                                             ' (T)
  86.       2b = &H30                                             ' (0)
  87.       3b = &H32                                             ' (2)
  88.       4b = &H0D                                             ' (ENTER)
  89.  
  90.       Printbin 1b
  91.       Printbin 2b
  92.       Printbin 3b
  93.       Printbin 4b
  94.      '--------------------------------------------
  95.  
  96.    End Select
  97.  
  98.  
  99.   End If
  100.  
  101.  
  102.    'COM1 USB
  103.      If Cmd_timeout1 > 0 Then
  104.       Decr Cmd_timeout1
  105.        If Cmd_timeout1 = 0 Then
  106.         'Got_str1 = 1
  107.          Command1 = ""
  108.        End If
  109.      End If
  110.  
  111.  
  112.  End If
  113.  
  114.  
  115. '--[ USART0 COM1 USB ]------------------------
  116.  If 0 < Ischarwaiting() Then
  117.  
  118.    Char = Inkey()
  119.  
  120.    Select Case Char
  121.     Case 10
  122.     Case 13 : Got_str1 = 1
  123.     Case Else
  124.      Command1 = Command1 + Chr(char)
  125.  
  126.    End Select
  127.  
  128.    If Len(command1) > 49 Then Got_str1 = 1
  129.  
  130.    If Got_str1 = 0 Then Cmd_timeout1 = 50              '50x10ms
  131.  
  132.    'end if Ischarwaiting
  133.  End If
  134.  
  135.  '--[ PARSE COM1 USB ]-------------------------
  136.  If Got_str1 = 1 Then
  137.  
  138.    '-----------------------------------
  139.    ' przykładowa odpowiedź T23= 31,9"C;T24= 34.1"C
  140.  
  141.     Helpb = Split(command1 , Temperatures(1) , ";")         'podzieli na dwie linie ;)
  142.  
  143.     Locate 2 , 1 : Lcd Temperatures(1)
  144.     Locate 3 , 1 : Lcd Temperatures(2)
  145.  
  146.       Got_str1 = 0
  147.     Command1 = ""
  148.   Cmd_timeout1 = 0
  149.  
  150.  End If
  151.  
  152.  
  153. Loop
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
pirzol
Posty: 11
Rejestracja: 07 wrz 2017, 15:19

Re: RS485 + atmega32 (EvB 5.1)

Post autor: pirzol » 17 wrz 2017, 19:52

Cześć
Sprawdziłem na płycie EvB4.1 i ... działa :D !

Prawie wszystkie kombinacje wysyłania polecenia na RS485 sprawdziłem, ale do głowy mi nie przyszło żeby puścić znaki oddzielnie jako "printbin".
Do głowy mi nie przyszło, że takie literowanie przyniesie pozytywny efekt :oops: . Teraz czyta pomiary z dwóch modułów :).

co dwie pary oczu to nie jedna.
;)

Odczyt z czujników: T04, T23
Aktywowanie podświetlenia LCD.
  1.     $regfile = "m32def.dat"
  2.     $crystal = 16000000
  3.     $hwstack = 64
  4.     $swstack=40
  5.     $framesize = 64
  6.     $baud = 9600
  7.  
  8.     '*****************************************************************
  9.     '*                       CONFIG LCD                              *
  10.     '*****************************************************************
  11.  
  12.     Config Lcd = 20x4
  13.     Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
  14.     Cursor Off , Noblink
  15.     Cls
  16.     ' wlacz LCD
  17.     Set Porta.2
  18.  
  19.  
  20.     '*****************************************************************
  21.     '*         CONFIG BUFFERED USART FOR DEBUG via USB               *
  22.     '*****************************************************************
  23.  
  24.     'Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  25.  
  26.      Config Serialin0 = Buffered , Size = 50               'RX from Terminal
  27.       Dim Char As Byte , Cmd_timeout1 As Byte , Got_str1 As Byte
  28.       Dim Command1 As String * 30
  29.  
  30.       Dim Address As String * 4
  31.       Dim Buff(4) As Byte At Address Overlay
  32.  
  33.       Dim Temperatures(2) As String * 20
  34.  
  35.       'Open "COM1:" For Binary As #1
  36.  
  37.     Config Print0 = Portd.2 , Mode = Set                        ' specify RS-485 and direction pin
  38.     Config Portd.2 = Output
  39.  
  40.     '*****************************************************************
  41.     '*                TIMER2 FOR TIME BASE                           *
  42.     '*****************************************************************
  43.     Config Timer2 = Timer , Prescale = 1024 , Compare = Disconnect , Clear_timer = 1
  44.      Compare2 = 155                                        '10ms @16MHz/1024
  45.  
  46.     Dim Miliseconds As Byte , Seconds As Byte , Helpb As Byte , N As Byte
  47.  
  48.       Enable Interrupts
  49.  
  50.     Dim 1b As Byte
  51.     Dim 2b As Byte
  52.     Dim 3b As Byte
  53.     Dim 4b As Byte
  54.  
  55.     Do
  56.  
  57.      '--[ TIMER2 10ms ]----------------------------
  58.      If Tifr.ocf2 = 1 Then
  59.       Tifr.ocf2 = 1
  60.  
  61.       If Miliseconds < 99 Then
  62.        Incr Miliseconds
  63.       Else
  64.        Miliseconds = 0
  65.        Incr Seconds : If Seconds > 15 Then Seconds = 0
  66.  
  67.        Select Case Seconds
  68.         Case 0
  69.         cls
  70.         Locate 1 , 1 : Lcd "Ask * T04" : Waitms 200 ': Cls   'Heartbeat ;)
  71.  
  72.          'tak nie zadziała
  73.          '--------------------------------------------
  74.     '      Buff(1) = &H54
  75.     '      Buff(2) = &H30
  76.     '      Buff(3) = &H32
  77.     '      Buff(4) = &H0D
  78.  
  79.     '      Printbin Buff(1)
  80.          '--------------------------------------------
  81.  
  82.          'teraz zadziała
  83.          '--------------------------------------------
  84.           '1b = &H54                                             ' (T)
  85.           '2b = &H30                                             ' (0)
  86.           '3b = &H32                                             ' (2)
  87.           '4b = &H0D                                             ' (ENTER)
  88.  
  89.           1b = &H54                                             ' (T)
  90.           2b = &H30                                             ' (0)
  91.           3b = &H34                                             ' (4)
  92.           4b = &H0D                                             ' (ENTER)
  93.  
  94.           Printbin 1b
  95.           Printbin 2b
  96.           Printbin 3b
  97.           Printbin 4b
  98.          '--------------------------------------------
  99.           case 7
  100.           cls
  101.           Locate 1 , 1 : Lcd "Ask * T23" : Waitms 200 ': Cls   'Heartbeat ;)
  102.                     'teraz zadziała
  103.           1b = &H54                                             ' (T)
  104.           2b = &H32                                             ' (2)
  105.           3b = &H33                                             ' (3)
  106.           4b = &H0D                                             ' (ENTER)
  107.  
  108.           Printbin 1b
  109.           Printbin 2b
  110.           Printbin 3b
  111.           Printbin 4b
  112.  
  113.        End Select
  114.  
  115.  
  116.       End If
  117.  
  118.  
  119.        'COM1 USB
  120.          If Cmd_timeout1 > 0 Then
  121.           Decr Cmd_timeout1
  122.            If Cmd_timeout1 = 0 Then
  123.             'Got_str1 = 1
  124.              Command1 = ""
  125.            End If
  126.          End If
  127.  
  128.  
  129.      End If
  130.  
  131.  
  132.     '--[ USART0 COM1 USB ]------------------------
  133.      If 0 < Ischarwaiting() Then
  134.  
  135.        Char = Inkey()
  136.  
  137.        Select Case Char
  138.         Case 10
  139.         Case 13 : Got_str1 = 1
  140.         Case Else
  141.          Command1 = Command1 + Chr(char)
  142.  
  143.        End Select
  144.  
  145.        If Len(command1) > 49 Then Got_str1 = 1
  146.  
  147.        If Got_str1 = 0 Then Cmd_timeout1 = 50              '50x10ms
  148.  
  149.        'end if Ischarwaiting
  150.      End If
  151.  
  152.      '--[ PARSE COM1 USB ]-------------------------
  153.      If Got_str1 = 1 Then
  154.  
  155.        '-----------------------------------
  156.        ' przykładowa odpowiedź T23= 31,9"C;T24= 34.1"C
  157.  
  158.         Helpb = Split(command1 , Temperatures(1) , ";")         'podzieli na dwie linie ;)
  159.  
  160.         Locate 2 , 1 : Lcd Temperatures(1)
  161.         Locate 3 , 1 : Lcd Temperatures(2)
  162.  
  163.           Got_str1 = 0
  164.         Command1 = ""
  165.       Cmd_timeout1 = 0
  166.  
  167.      End If
  168.  
  169.  
  170.     Loop
Ostatnio zmieniony 17 wrz 2017, 20:30 przez pirzol, łącznie zmieniany 3 razy.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: RS485 + atmega32 (EvB 5.1)

Post autor: niveasoft » 17 wrz 2017, 19:54

To napisz mi tylko czy masz programator czy używasz and-load to jeszcze załaduje bootloader przed wysyłką.
pirzol
Posty: 11
Rejestracja: 07 wrz 2017, 15:19

Re: RS485 + atmega32 (EvB 5.1)

Post autor: pirzol » 17 wrz 2017, 20:00

Mam programator :)
Twoja metoda odczytu działa też z boot loaderem.

pisz na PW. Jak się mogę odwdzięczyć ?
:)
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: RS485 + atmega32 (EvB 5.1)

Post autor: niveasoft » 17 wrz 2017, 20:06

Tu można dodać kod Bascomowy poprzez wybranie tego najbliżej lewej krawędzi splittera "Select code" ..tam poniżej tych najczęsciej używanych są dopiero te alfabetyczne. Nie miałem po prostu czasu przesunąć Bascom do tych najbardziej używanych.
Za to narobiłem się by ładnie kolorował :D
pirzol
Posty: 11
Rejestracja: 07 wrz 2017, 15:19

Re: RS485 + atmega32 (EvB 5.1)

Post autor: pirzol » 17 wrz 2017, 20:32

już poprawiłem publikacje kod,
nie musisz odsyłać w Poniedziałek
Jak znajdziesz czas w tygodniu
;)
ODPOWIEDZ