Strona 1 z 2

RS485

: 28 sty 2018, 23:58
autor: Jacek
Witam - chcę skorzystać z Bartka funkcji dla Atmegi 2560 dla portu com1:
  1.  
  2. Config Print0 = Portd.2 , Mode = Set
  3. Config Pind.2 = Output 'ustaw pin jako wyjściowy
  4.  
ale niestety kompilator wykazuje błąd
Error : 1 Line : 294 Unknown statement [PRINT0 "Slave T= " ; TEMP_1 ; "C "]
co może być przyczyną - proszę o pomoc.
pozdrawiam Jacek.

Re: RS485

: 29 sty 2018, 7:31
autor: pimowo
W swoim kodzie zamiast:
  1. PRINT0 "Slave T= " ; TEMP_1 ; "C "
daj:
  1. PRINT "Slave T= " ; TEMP_1 ; "C "

Re: RS485

: 29 sty 2018, 18:09
autor: Jacek
Witam - tak zrobiłem - pytanie czy transmisja pójdzie na com1 w A2560 czy na com2.
pozdrawiam Jacek.

Re: RS485

: 29 sty 2018, 18:24
autor: niveasoft
Jak procek ma drugi lub więcej UART to musisz otworzyć kanał. Potem każda akcja jest związana z kanałem.
Czyli jeśli otworzysz Open "COM2:" For Binary As #2 to ten "hash #2" potem obowiązuje i żeby coś nadać drugim UARTem to piszesz Print #2 , "Test"
  1. Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  2. Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  3. Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  4. Config Com4 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  5.  
  6. 'Open all UARTS
  7. Open "COM2:" For Binary As #2
  8. Open "COM3:" For Binary As #3
  9. Open "COM4:" For Binary As #4
  10.  
Więc żeby coś nadać czwartym piszesz Print #4 , "Test"
..ale to nie koniec. Potem żeby coś sprawdzić na czwartym kanale piszesz Ischarwaiting(#4) ...dalej Inkey(#4) itd...

Re: RS485

: 29 sty 2018, 19:11
autor: Jacek
Witam - dzięki za odpowiedzi - czyli przy przesyłaniu ascii również pisze
  1. Open "com2:" for ascii as #2
czy zawsze ma być
  1. Open "com2:" for binary as #2
pozdrawiam Jacek.

Re: RS485

: 29 sty 2018, 19:23
autor: niveasoft
Wciskasz w Bascom F1 i wpisujesz polecenie OPEN a Bascom Ci wyświetli Helpa na ten temat ;)
Dla UART sa tylko tryby RANDOM i BINARY.

Re: RS485

: 29 sty 2018, 20:03
autor: Jacek
Witam - dzięki - o postępach poinformuje w tym wątku.

pozdrawiam Jacek.

Re: RS485

: 29 sty 2018, 23:54
autor: Jacek
Witam - próbowałem z takim programem:
  1. $regfile = "m2560def.dat"
  2. $crystal = 16000000
  3. $hwstack = 40
  4. $swstack = 16
  5. $framesize = 32
  6. $baud = 19200
  7.  
  8. Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  9. Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  10.  
  11. Config Serialin0 = Buffered , Size = 100                                        'buforowoanie  pierwszy uart
  12. Config Serialin1 = Buffered , Size = 100                                        'buforowoanie  drugi uart
  13. Config Serialout0 = Buffered , Size = 100                                       'buforowoanie  pierwszy uart
  14. Config Serialout1 = Buffered , Size = 100                                       'buforowoanie  drugi uart
  15. Declare Sub Test
  16.  
  17. Open "com1:" For Binary As #1
  18.  
  19. Do
  20.  
  21.  Call test
  22.  
  23. Close #1
  24.  
  25. Loop
  26.  
  27. End
  28.  
  29. Sub Test
  30.  
  31.  Print #1, "test"
  32.  
  33. End Sub
i podglądem w Bascomowym terminalu porty poustawiane są tak samo w Arduino Mega jak i w terminalu - niestety nic nie przychodzi z Arduino dioda TX nic nie nadaje - gdzie robię błąd.

pozdrawiam Jacek.
P.S. jest coś nie tak z powiadomieniami bo nie przychodzą -mam zaznaczone obserwuj temat.

Re: RS485

: 30 sty 2018, 1:08
autor: niveasoft
Typowy błąd.Kiedy używasz serialin lub serialout to musisz włączyć przerwania czyli "Enable Interrupts"
Wyrzuć też Close #1

Re: RS485

: 30 sty 2018, 22:21
autor: Jacek
Witam - co mam źle w programie dla A328p ( ma wysyłać przez port com na zmianę 0 i 1 co sekundę )
  1. $regfile = "m328pdef.dat"
  2. $crystal = 16000000
  3. $hwstack = 64
  4. $swstack = 64
  5. $framesize = 128
  6. $prog &HFF , &HFF , &HDE , &HFD                                                 ' generated. Take care that the chip supports all fuse bytes.
  7. Debug Off
  8. '--------------------------------------------------------------------
  9. 'KONFIGURACJA LCD
  10. Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5       'mirley UPT M16
  11. Config Lcd = 20 * 4
  12. '--------------------------------------------------------------------
  13. 'KONFIGURACJA TIMER1
  14. Config Timer1 = Timer , Prescale = 8
  15. Enable Timer1 : On Timer1 Przertimer1
  16. Enable Interrupts
  17. '--------------------------------------------------------------------
  18. 'KONFIGURACJA PORTÓW
  19. Config Portb.5 = Output : Portb.5 = 1
  20. Config Portd.2 = Input : Pind.2 = 1
  21. Config Portd.3 = Input : Pind.3 = 1
  22. Config Portd.4 = Input : Pind.4 = 1
  23. Config Portd.7 = Output
  24. Config Print = Portd.7 , Mode = Set
  25. '--------------------------------------------------------------------
  26. Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32                                'znak stopnia C
  27. Deflcdchar 1 , 14 , 17 , 17 , 31 , 17 , 17 , 17 , 2                             'litera Ą
  28. Deflcdchar 2 , 9 , 10 , 12 , 8 , 24 , 8 , 15 , 32                               ' litera Ł
  29. Deflcdchar 3 , 4 , 4 , 10 , 10 , 10 , 17 , 17 , 31                              ' ikona delty
  30. '--------------------------------------------------------------------
  31. 'KONFIGURACJA PORTU COM
  32. $baud = 57600
  33. Config Serialin = Buffered , Size = 100
  34. Config Serialout = Buffered , Size = 100
  35. '--------------------------------------------------------------------
  36. Config Portd.7 = Output
  37. Config Print = Portd.7 , Mode = Set
  38. '--------------------------------------------------------------------
  39. 'ALIASY PORTÓWa
  40. Arduino_led Alias Portb.5                                                       'LED na płytce Arduino
  41.  
  42.  '--------------------------------------------------------------------
  43. 'ZMIENNE KOMUNIKACJI
  44. Dim Ile_elementow As Byte                                                       '
  45. Dim Znak_ As Byte
  46. Dim Uart_komenda As String * 20                                                 'musi byc wystarczjaco dlugie
  47. Dim Getcommands(10) As String * 10                                              'tablica na pociete komendy
  48. '--------------------------------------------------------------------
  49. 'ZMIENNE   CZASU
  50. Dim Dziel(6) As Byte
  51. Dim Flaga10ms As Bit
  52. Dim Flaga100ms As Bit
  53. Dim Flaga500ms As Bit
  54. Dim Flaga1s As Bit
  55. Dim Flaga2s As Bit
  56. Dim Flaga10s As Bit
  57. '--------------------------------------------------------------------
  58. Dim A As Bit
  59. '--------------------------------------------------------------------
  60. 'DEKLARACJE PODPROGRAMÓ
  61. Declare Sub Wyswietl
  62. Declare Sub Mruganie
  63. '--------------------------------------------------------------------
  64.  
  65.  
  66. Cursor Off Noblink
  67. Wait 2
  68. Cls
  69. Call Wyswietl
  70. '--------------------------------------------------------------------
  71. 'PĘTLA GŁÓWNA
  72. Do
  73.  
  74.    If Flaga10ms = 1 Then                                                        'co 10 ms
  75.       Flaga10ms = 0                                                             'wyzeruj Flaga10ms
  76.     End If
  77.  
  78.  
  79.    If Flaga100ms = 1 Then                                                       'co 100ms
  80.       Flaga100ms = 0
  81.       Call Wyswietl                                                             'wyzeruj Flaga100ms
  82.    End If
  83.  
  84.    If Flaga500ms = 1 Then                                                       'co 50ms
  85.       Flaga500ms = 0                                                            'wyzeruj Flaga500ms
  86.    End If
  87.  
  88.    If Flaga1s = 1 Then                                                          'co1s
  89.       Flaga1s = 0
  90.       Toggle A
  91.       Print A
  92.       Call Mruganie                                                             'wyzeruj Flaga1s                                                              '
  93.    End If
  94.  
  95.  
  96.    If Flaga2s = 1 Then                                                          'co2s
  97.       Flaga2s = 0                                                               'wyzeruj Flaga2s
  98.    End If
  99.  
  100.    If Flaga10s = 1 Then                                                         'co10s
  101.       Flaga10s = 0                                                              'wyzeruj Flaga10s
  102.    End If
  103.  
  104.  
  105.  
  106. Loop
  107. End
  108. '--------------------------------------------------------------------
  109. 'Wyświetlanie
  110. Sub Wyswietl
  111.         Locate 1 , 1 : Lcd "A: " ; A
  112.  
  113. End Sub
  114. '--------------------------------------------------------------------
  115. 'MRUGANIE DIODĄ LED CO 1 SEKUNDĘ
  116. ' CO BY BYŁO WIDAĆ ŻE UKŁAD ŻYJE
  117. Sub Mruganie
  118.    Toggle Arduino_led
  119. End Sub
  120. '--------------------------------------------------------------------
  121. '            podprogram przerwań Timer1
  122. Przertimer1:
  123.    Timer1 = 45536                                                               'wstawienie do Timer1 wartości 45536
  124.    Incr Dziel(1)                                                                'zwiększaj dzielnik 1
  125.    If Dziel(1) = 1 Then                                                         'jeśli dzielnik 1 zwiększy się 1 razy
  126.       Dziel(1) = 0                                                              'wyzeruj dzielnik 1
  127.       Set Flaga10ms                                                             'ustaw Flaga10ms
  128.       Incr Dziel(2)                                                             'zwiększaj dzielnik 2
  129.       If Dziel(2) = 10 Then                                                     'jeśli dzielnik 2 zwiększy się 10 razy
  130.          Dziel(2) = 0                                                           'wyzeruj dzielnik 2
  131.          Set Flaga100ms                                                         'ustaw Flaga100ms
  132.          Incr Dziel(3)                                                          'zwiększaj dzielnik 3
  133.          If Dziel(3) = 5 Then                                                   'jeśli dzielnik 3 zwiększy się 5 razy
  134.             Dziel(3) = 0                                                        'wyzeruj dzielnik 3
  135.             Set Flaga500ms                                                      'ustaw Flaga500ms
  136.             Incr Dziel(4)                                                       'zwiększaj dzielnik 4
  137.             If Dziel(4) = 2 Then                                                'jeśli dzielnik 4 zwiększy się 2 razy
  138.                Dziel(4) = 0                                                     'wyzeruj dzielnik 4
  139.                Set Flaga1s                                                      'ustaw Flaga1s
  140.                Incr Dziel(5)                                                    'zwiększaj dzielnik 5
  141.                If Dziel(5) = 2 Then                                             'jeśli dzielnik 5 zwiększy się 2 razy
  142.                   Dziel(5) = 0                                                  'wyzeruj dzielnik 5
  143.                   Set Flaga2s                                                   'ustaw Flaga2s
  144.                   Incr Dziel(6)                                                 'zwiększaj dzielnik 6
  145.                   If Dziel(6) = 5 Then                                          'jeśli dzielnik 6 zwiększy się 5 razy
  146.                      Dziel(6) = 0                                               'wyzeruj dzielnik 6
  147.                      Set Flaga10s                                               ' Ustaw Flaga10s
  148.                   End If                                                        'koniec warunku
  149.                End If                                                           'koniec warunku
  150.             End If                                                              'koniec warunku
  151.          End If                                                                 'koniec warunku
  152.       End If                                                                    'koniec warunku
  153.    End If                                                                       'koniec warunku
  154. Return                                                                          'powrót
  155.  '' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
a co mam źle w programie dla A2560 ma odbierać to co wyśle A328p
  1. $regfile = "m2560def.dat"
  2. $crystal = 16000000
  3. $hwstack = 40
  4. $swstack = 16
  5. $framesize = 32
  6. '$baud = 19200
  7.  
  8. Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  9. Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  10.  
  11. Config Serialin1 = Buffered , Size = 100                                        'buforowoanie  pierwszy uart
  12. Config Serialin2 = Buffered , Size = 100                                        'buforowoanie  drugi uart
  13. Config Serialout1 = Buffered , Size = 100                                       'buforowoanie  pierwszy uart
  14. Config Serialout2 = Buffered , Size = 100                                       'buforowoanie  drugi uart
  15.   '-------------------------------------------------------------------
  16. '                    SP9DR Pawel Labendz
  17. '                 T6963C graphic display support demo 240 * 128
  18. 'First we define that we use a graphic LCD
  19. '--------------------------------------------------------------------
  20. 'The dataport is the portname that is connected to the data lines of the LCD
  21. 'The controlport is the portname which pins are used to control the lcd
  22. 'CE, CD etc. are the pin number of the CONTROLPORT.
  23. ' For example CE =5 because it is connected to PORTC.5
  24. 'mode 8 gives 240 / 8 = 30 columns , mode=6 gives 240 / 6 = 40 columns
  25. 'The connections of the LCD used in this demo
  26. 'LCD pin                  connected to
  27. ' 1        GND            GND         'black
  28. '2        +5V           +5V          'red
  29. '3        nc          not connected  'yellow
  30. '4        C/D            PORTC.0    'brown
  31. '5        /RD            PORTC.1     'green
  32. '6        /WR            PORTC.2    'blue
  33. '7-14     DBA            PORT A0-A7
  34. '15       /CE            PORTC.3     'blue
  35. '16       RESET          PORTC.4     'white
  36. '17       NC                     not connected
  37. '18       MD2            GND         'green
  38. '19       FS             PORTC.5     'white
  39. '20       NC                     not connected
  40. '--------------------------------------------------------------------
  41. Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 4 , Cd = 5 , Wr = 2 , Rd = 3 , Reset = 6 , Fs = 7 , Mode = 6
  42. '--------------------------------------------------------------------
  43. 'KONFIGURACJA TIMER1
  44. Config Timer1 = Timer , Prescale = 8
  45. Enable Timer1 : On Timer1 Przertimer1
  46. 'Enable Interrupts
  47. '--------------------------------------------------------------------
  48. 'KONFIGURACJA PORTÓW
  49. Config Print = Portd.1 , Mode = Set                                             'Port RS485Dir
  50. Config Portd.1 = Output
  51. Config Portk.0 = Output : Portk.0 = 1
  52. '--------------------------------------------------------------------
  53. 'ALIASY PORTÓW
  54. Led_live Alias Portk.0                                                          'LED pokazująca że układ żyje
  55. '--------------------------------------------------------------------
  56. 'ZMIENNE   CZASU
  57. Dim Dziel(6) As Byte
  58. Dim Flaga10ms As Bit
  59. Dim Flaga100ms As Bit
  60. Dim Flaga500ms As Bit
  61. Dim Flaga1s As Bit
  62. Dim Flaga2s As Bit
  63. Dim Flaga10s As Bit
  64. '--------------------------------------------------------------------
  65. Dim A As Byte
  66.  
  67. Declare Sub Wyswietl
  68. Declare Sub Mruganie
  69. Enable Interrupts
  70. Open "com2:" For Binary As #1
  71.  
  72. Cursor Off Noblink
  73. Waitms 500
  74. Cls
  75.  
  76.  
  77. Locate 1 , 1 : Lcd "A: " ; A
  78. Do
  79.    If Ischarwaiting() <> 0 Then
  80.       A = Inkey()
  81.       Locate 1 , 1 : Lcd "A: " ; A
  82.    End If
  83.  
  84.  
  85.  
  86.  
  87.    If Flaga10ms = 1 Then                                                        'co 10 ms
  88.       Flaga10ms = 0                                                             'wyzeruj Flaga10ms
  89.       Call Wyswietl
  90.    End If
  91.  
  92.  
  93.  
  94.    If Flaga100ms = 1 Then                                                       'co 100ms
  95.       Flaga100ms = 0                                                            'wyzeruj Flaga100ms
  96.    End If
  97.  
  98.    If Flaga500ms = 1 Then                                                       'co 50ms
  99.       Flaga500ms = 0                                                            'wyzeruj Flaga500ms
  100.    End If
  101.  
  102.    If Flaga1s = 1 Then                                                          'co1s
  103.       Flaga1s = 0                                                               'wyzeruj Flaga1s                                                              '
  104.       Call Mruganie
  105.    End If
  106.  
  107.  
  108.    If Flaga2s = 1 Then                                                          'co2s
  109.       Flaga2s = 0                                                               'wyzeruj Flaga2s
  110.    End If
  111.  
  112.    If Flaga10s = 1 Then                                                         'co10s
  113.       Flaga10s = 0                                                              'wyzeruj Flaga10s
  114.    End If
  115.  
  116. Loop
  117.  
  118. End
  119.  
  120. Sub Wyswietl
  121.  
  122.  
  123. End Sub
  124.  
  125. Sub Mruganie
  126.    Toggle Led_live
  127. End Sub
  128.  
  129.  '--------------------------------------------------------------------
  130. '            podprogram przerwań Timer1
  131. Przertimer1:
  132.    Timer1 = 45536                                                               'wstawienie do Timer1 wartości 45536
  133.    Incr Dziel(1)                                                                'zwiększaj dzielnik 1
  134.    If Dziel(1) = 1 Then                                                         'jeśli dzielnik 1 zwiększy się 1 razy
  135.       Dziel(1) = 0                                                              'wyzeruj dzielnik 1
  136.       Set Flaga10ms                                                             'ustaw Flaga10ms
  137.       Incr Dziel(2)                                                             'zwiększaj dzielnik 2
  138.       If Dziel(2) = 10 Then                                                     'jeśli dzielnik 2 zwiększy się 10 razy
  139.          Dziel(2) = 0                                                           'wyzeruj dzielnik 2
  140.          Set Flaga100ms                                                         'ustaw Flaga100ms
  141.          Incr Dziel(3)                                                          'zwiększaj dzielnik 3
  142.          If Dziel(3) = 5 Then                                                   'jeśli dzielnik 3 zwiększy się 5 razy
  143.             Dziel(3) = 0                                                        'wyzeruj dzielnik 3
  144.             Set Flaga500ms                                                      'ustaw Flaga500ms
  145.             Incr Dziel(4)                                                       'zwiększaj dzielnik 4
  146.             If Dziel(4) = 2 Then                                                'jeśli dzielnik 4 zwiększy się 2 razy
  147.                Dziel(4) = 0                                                     'wyzeruj dzielnik 4
  148.                Set Flaga1s                                                      'ustaw Flaga1s
  149.                Incr Dziel(5)                                                    'zwiększaj dzielnik 5
  150.                If Dziel(5) = 2 Then                                             'jeśli dzielnik 5 zwiększy się 2 razy
  151.                   Dziel(5) = 0                                                  'wyzeruj dzielnik 5
  152.                   Set Flaga2s                                                   'ustaw Flaga2s
  153.                   Incr Dziel(6)                                                 'zwiększaj dzielnik 6
  154.                   If Dziel(6) = 5 Then                                          'jeśli dzielnik 6 zwiększy się 5 razy
  155.                      Dziel(6) = 0                                               'wyzeruj dzielnik 6
  156.                      Set Flaga10s                                               ' Ustaw Flaga10s
  157.                   End If                                                        'koniec warunku
  158.                End If                                                           'koniec warunku
  159.             End If                                                              'koniec warunku
  160.          End If                                                                 'koniec warunku
  161.       End If                                                                    'koniec warunku
  162.    End If                                                                       'koniec warunku
  163. Return                                                                          'powrót
  164.  '' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  165.  
  166.  
podłączyłem UNO z Mega drucikami podłączenie krosowane na lcd od A2560 cały czas jest 0.

pozdrawiam Jacek.
P.S. w terminalu Bascoma jest wszystko tak jak należy raz jest 0 raz jest 1.