Zmiana oprogramowania po RS485 , czy możliwe ?

Pytania, kody i porady dotyczące nie tylko Bascom.
grafii1
Posty: 58
Rejestracja: 23 wrz 2018, 11:28

Re: Zmiana oprogramowania po RS485 , czy możliwe ?

Post autor: grafii1 » 26 wrz 2019, 22:26

Witam , watchdog był nie raz konfigurowany to dużo nie zmieniło . Jeśli chodzi o podłączenie to bootloader wgrywany mkII a soft laptop > konwerter na rs485 ======== MAX485 > tx i rx PRO MINI . Może to uściślijmy dla porządku .
1. wgrywamy bootloadera przez avr mkii
2. po wgraniu ręcznie resetujemy pro mini dla "świętego spokoju"
3. wgrywamy soft przez rs485
4. podczas wgrywania ale przed zakończenie procek resetowany jest ale już przez wgrany soft i powinien potwierdzić
to MSC bootloaderowi cele sprawdzenia czy poprawnie się wgrał - i tu się " wywala " tak mi się wydaje
5. Można wgrywać softy po rs485 ale w sofcie musi być zawarty reset programowy , bo przecież po resecie idzie od
początku programu
Jak coś żle zrozumiałem to proszę mnie poprawić
Awatar użytkownika
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Zmiana oprogramowania po RS485 , czy możliwe ?

Post autor: Pikczu » 27 wrz 2019, 9:58

Mozesz wkleic obydwa kody bootloadera i ten który ładujesz później?
grafii1
Posty: 58
Rejestracja: 23 wrz 2018, 11:28

Re: Zmiana oprogramowania po RS485 , czy możliwe ?

Post autor: grafii1 » 27 wrz 2019, 13:26

Witam wczoraj w nocy a właściwie dzisiaj zrobiłem jeszcze raz test na rs232 z DTR na RST w pro mini i wszystko chodzi tak jak powinno , posiedzę jeszcze nad 485 i dam znać
Awatar użytkownika
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Zmiana oprogramowania po RS485 , czy możliwe ?

Post autor: Pikczu » 27 wrz 2019, 17:01

.
Ostatnio zmieniony 27 wrz 2019, 22:48 przez Pikczu, łącznie zmieniany 1 raz.
grafii1
Posty: 58
Rejestracja: 23 wrz 2018, 11:28

Re: Zmiana oprogramowania po RS485 , czy możliwe ?

Post autor: grafii1 » 27 wrz 2019, 20:43

Tu nie chodzi o pokazanie kodu , przecież jest dostępny w linkach w poprzednich postach a dodana jest tylko konfiguracja portd.2 potrzebnego do współpracy z MAX485 , zresztą odnośniki też w linkach .Teraz walczę z rs485 i sytuacja wygląda tak że też działa ale czasami coś się wywala przy programowaniu . Po prostu podaje konkretne informacje żeby się nie rozpisywać ale ... ten jest z linku do testów
  1. $regfile = "m328pdef.dat"
  2. $crystal = 16000000
  3. $hwstack = 32
  4. $swstack = 16
  5. $framesize = 24
  6.  
  7. $baud = 1200
  8.  
  9. Config Watchdog = 512
  10.  
  11. Config Serialin = Buffered , Size = 20
  12. Config Portb.5 = Output
  13.  
  14. Config Portd.2 = Output
  15. Config Print0 = Portd.2 , Mode = Set
  16.  
  17. Portb.5 = 0
  18.  
  19. Dim Command As String * 10 , Znak As Byte
  20. Dim Command_timeout As Byte , Got_str As Byte
  21. Dim Timer_programowy As Word
  22. Enable Interrupts                                           'dla buforowanego UARTu potrzebne sa przerwania
  23.  
  24. '*** START ***
  25. Do
  26.  '---------------------------------------------------------------------
  27.  'If Timer_programowy < 500 Then
  28.  ' Incr Timer_programowy
  29.  'Else
  30.  ' Timer_programowy = 0
  31.   Toggle Portb.5
  32.  'End If
  33.  
  34.  '---------------------------------------------------------------------
  35.   'poniżej odbiór i analiza tego co nadeszło z USART
  36.  
  37.  If Ischarwaiting() > 0 Then                                'jeśli w buforze czeka znak
  38.  
  39.   Znak = Inkey()
  40.    Command_timeout = 50
  41.  
  42.    Select Case Znak
  43.     Case 10                                                 'zignoruj
  44.     Case 13 : Got_str = 1                                   'nadszedł Enter więc sprawdź komendę
  45.     Case Else
  46.      Command = Command + Chr(znak)                          'jeśli to nie ENTER ani LF to dodaj do stringa
  47.    End Select
  48.  
  49.    If Len(command) > 9 Then Got_str = 1                     'zabezpieczenie by nie przepełnić zmiennej
  50.  
  51.    If Got_str = 1 Then
  52.  
  53.     If Command = "R" Then
  54.      Disable Interrupts                                     'wylaczenie przerwan
  55.      Start Watchdog                                         'uruchomienie Watchdoga
  56.      Do                                                     'petla nieskonczona
  57.      Loop                                                   'w niej czekamy na Reset
  58.     End If
  59.  
  60.       Command = ""
  61.  
  62.     'end if Got_str
  63.    End If
  64.  
  65.  End If
  66.  
  67.  If Command_timeout > 0 Then                                'jesli nadeszły jakieś znaki
  68.   Decr Command_timeout                                      'pomału odliczaj
  69.  
  70.   'najwyraźniej to były błedne znaki więc usuń je i czekaj na poprawne
  71.  
  72.    If Command_timeout = 0 Then Command = ""
  73.  End If
  74.  
  75.  Waitms 1                                                   'tylko na potrzeby tego kodu
  76.                                         'by wolniej odliczało Timeout
  77.  
  78. Loop
  79. End
i bascomowy bootloader tak przerobiony jak w linkuhttps://bart-projects.cba.pl/bootloader.html
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Zmiana oprogramowania po RS485 , czy możliwe ?

Post autor: niveasoft » 04 paź 2019, 0:22

Przepraszam, ze tak późno, ale chyba nie przeczytałem jednego postu i już później nie dostałem powiadomienia o następnych :D
Co do tych kroków:
grafii1 pisze:Witam , watchdog był nie raz konfigurowany to dużo nie zmieniło . Jeśli chodzi o podłączenie to bootloader wgrywany mkII a soft laptop > konwerter na rs485 ======== MAX485 > tx i rx PRO MINI . Może to uściślijmy dla porządku .
1. wgrywamy bootloadera przez avr mkii
2. po wgraniu ręcznie resetujemy pro mini dla "świętego spokoju"
3. wgrywamy soft przez rs485
4. podczas wgrywania ale przed zakończenie procek resetowany jest ale już przez wgrany soft i powinien potwierdzić
to MSC bootloaderowi cele sprawdzenia czy poprawnie się wgrał - i tu się " wywala " tak mi się wydaje
5. Można wgrywać softy po rs485 ale w sofcie musi być zawarty reset programowy , bo przecież po resecie idzie od
początku programu
Jak coś żle zrozumiałem to proszę mnie poprawić
No to tak:
1. Pominę
2. Po wgraniu bootloadera, przy pierwszym programowaniu, nie trzeba resetować ręcznie. Spowodowane to jest tym, że bootloader startuje, czeka 10x100ms na jakieś dane z komputera, ale jak ich nie ma to kończy pracę i każe procesorowi skoczyć na początek flash pod adres $oo. Tam jednak nic nie ma, same FF. Procesor szybko czyta te FF przez cały pusty flash i dojeżdża do miejsca gdzie zaczyna się bootloader. Koło sie zamyka. bootloader czeka 10x100ms i znów wysyła procek pod $00
3. Pominę
4. Nie, to nie tak. Komputer wysyła do BL trzy bajty.Status, CRC i numer bloku. Potem wysyła 128 bajtów i drugie CRC. Procesor sprawdza CRC. Jak się zgadza odsyła OK i programuje jedną stronę, jak nie to odsyła BŁĄD i komputer powtarza blok. Na koniec komputer zmienia status na 4 - koniec programowania i procesor ma znowu odesłać OK. Po tym, po 20ms procesor ma skoczyć już do nowego programu.
5. No i tu się zgodzę.

Widzę że chyba muszę to pyknąć na próbę ;) Mam takie gotowe płyteczki mega328P z RS485 tylko muszę podmienić kwarc na 16MHz.
https://bart-projects.cba.pl/fun.html

Mierzymy czas :P
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Zmiana oprogramowania po RS485 , czy możliwe ?

Post autor: niveasoft » 04 paź 2019, 1:14

Okay. Działa za każdym razem. Bez problemu.
Bootloader:
  1. '----------------------------------------------------------------
  2. '                          (c) 1995-2009, MCS
  3. '                        Bootloader.bas
  4. '  This sample demonstrates how you can write your own bootloader
  5. '  in BASCOM BASIC
  6. '  VERSION 2 of the BOOTLOADER. The waiting for the NAK is stretched
  7. '  further a bug was resolved for the M64/M128 that have a big page size
  8. '-----------------------------------------------------------------
  9. 'This sample will be extended to support other chips with bootloader
  10. 'The loader is supported from the IDE
  11.  
  12. '       LB     FB    FBH    FBX
  13. $prog &HFF , &HFF , &HDA , &HFD                             ' generated. Take care that the chip supports all fuse bytes.
  14.  
  15. '$crystal = 12000000
  16. $crystal = 16000000
  17. '$crystal = 14745600
  18. $baud = 115200                                              'this loader uses serial com
  19. 'It is VERY IMPORTANT that the baud rate matches the one of the boot loader
  20. 'do not try to use buffered com as we can not use interrupts
  21.  
  22. 'possible return codes of the PC bootloader.exe
  23. ' -6005    Cancel requested
  24. ' -6006    Fatal time out
  25. ' -6007    Unrecoverable event during protocol
  26. ' -6008    Too many errors during protocol
  27. ' -6009    Block sequence error in Xmodem
  28. ' -6016    Session aborted
  29.  
  30. $regfile = "m328pdef.dat"
  31. Const Loaderchip = 32
  32.  
  33.  
  34. #if Loaderchip = 32                                         ' Mega32
  35.     $loader = $3c00                                         ' 1024 words
  36.     Const Maxwordbit = 6                                    'Z6 is maximum bit                                   '
  37.     Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  38.  
  39.     485_en Alias Portd.2 : Config 485_en = Output
  40.     Config Print0 = Portd.2 , Mode = Set
  41.  
  42. #endif
  43.  
  44. Const Maxword =(2 ^ Maxwordbit) * 2                         '128
  45. Const Maxwordshift = Maxwordbit + 1
  46. Const Cdebug = 0                                            ' leave this to 0
  47.  
  48. #if Cdebug
  49.    Print Maxword
  50.    Print Maxwordshift
  51. #endif
  52.  
  53. 'Dim the used variables
  54. Dim Bstatus As Byte , Bretries As Byte , Bblock As Byte , Bblocklocal As Byte
  55. Dim Bcsum1 As Byte , Bcsum2 As Byte , Buf(128) As Byte , Csum As Byte
  56. Dim J As Byte , Spmcrval As Byte                            ' self program command byte value
  57.  
  58. Dim Z As Long                                               'this is the Z pointer word
  59. Dim Vl As Byte , Vh As Byte                                 ' these bytes are used for the data values
  60. Dim Wrd As Word , Page As Word                              'these vars contain the page and word address
  61. Dim Bkind As Byte , Bstarted As Byte
  62. 'Mega 88 : 32 words, 128 pages
  63.  
  64.  
  65.  
  66. Disable Interrupts                                          'we do not use ints
  67.  
  68.  
  69. 'Waitms 100                                                  'wait 100 msec sec
  70. 'We start with receiving a file. The PC must send this binary file
  71.  
  72. 'some constants used in serial com
  73. Const Nak = &H15
  74. Const Ack = &H06
  75. Const Can = &H18
  76.  
  77. 'we use some leds as indication in this sample , you might want to remove it
  78. 'Config Pinb.2 = Output
  79. 'Portb.2 = 1                                                 'the stk200 has inverted logic for the leds
  80. 'Config Pinb.3 = Output
  81. 'Portb.3 = 1
  82.  
  83. $timeout = 800000                                           'we use a timeout
  84. 'When you get LOADER errors during the upload, increase the timeout value
  85. 'for example at 16 Mhz, use 200000
  86.  
  87. Bretries = 5                                                'we try 5 times
  88. Testfor123:
  89. #if Cdebug
  90.     Print "Try " ; Bretries
  91.     Print "Wait"
  92. #endif
  93. Bstatus = Waitkey()                                         'wait for the loader to send a byte
  94. #if Cdebug
  95.    Print "Got "
  96. #endif
  97.  
  98. Print Chr(bstatus);
  99.  
  100. If Bstatus = 123 Then                                       'did we received value 123 ?
  101.    Bkind = 0                                                'normal flash loader
  102.    Goto Loader
  103. Elseif Bstatus = 124 Then                                   ' EEPROM
  104.    Bkind = 1                                                ' EEPROM loader
  105.    Goto Loader
  106. Elseif Bstatus <> 0 Then
  107.    Decr Bretries
  108.    If Bretries <> 0 Then Goto Testfor123                    'we test again
  109. End If
  110.  
  111. 'For J = 1 To 10                                             'this is a simple indication that we start the normal reset vector
  112. '   Toggle Portb.2 : Waitms 100
  113. 'Next
  114.  
  115. #if Cdebug
  116.   Print "RESET"
  117. #endif
  118. Goto _reset                                                 'goto the normal reset vector at address 0
  119.  
  120.  
  121. 'this is the loader routine. It is a Xmodem-checksum reception routine
  122. Loader:
  123.   #if Cdebug
  124.       Print "Clear buffer"
  125.   #endif
  126.   Do
  127.      Bstatus = Waitkey()
  128.   Loop Until Bstatus = 0
  129.  
  130.  
  131. '  For J = 1 To 3                                            'this is a simple indication that we start the normal reset vector
  132. '     Toggle Portb.2 : Waitms 50
  133. '  Next
  134.  
  135.   If Bkind = 0 Then
  136.      Spmcrval = 3 : Gosub Do_spm                            ' erase  the first page
  137.      Spmcrval = 17 : Gosub Do_spm                           ' re-enable page
  138.   End If
  139.  
  140.  
  141. Bretries = 10                                               'number of retries
  142.  
  143. Do
  144.   Bblocklocal = 1
  145.   Bstarted = 0                                              ' we were not started yet
  146.   Csum = 0                                                  'checksum is 0 when we start
  147.   Print Chr(nak);                                           ' firt time send a nack
  148.   Do
  149.  
  150.     Bstatus = Waitkey()                                     'wait for statuse byte
  151.  
  152.     Select Case Bstatus
  153.        Case 1:                                              ' start of heading, PC is ready to send
  154.             Csum = 1                                        'checksum is 1
  155.             Bblock = Waitkey() : Csum = Csum + Bblock       'get block
  156.             Bcsum1 = Waitkey() : Csum = Csum + Bcsum1       'get checksum first byte
  157.             For J = 1 To 128                                'get 128 bytes
  158.               Buf(j) = Waitkey() : Csum = Csum + Buf(j)
  159.             Next
  160.             Bcsum2 = Waitkey()                              'get second checksum byte
  161.             If Bblocklocal = Bblock Then                    'are the blocks the same?
  162.                If Bcsum2 = Csum Then                        'is the checksum the same?
  163.                   Gosub Writepage                           'yes go write the page
  164.                   Print Chr(ack);                           'acknowledge
  165.                   Incr Bblocklocal                          'increase local block count
  166.                Else                                         'no match so send nak
  167.                   Print Chr(nak);
  168.                End If
  169.             Else
  170.                Print Chr(nak);                              'blocks do not match
  171.             End If
  172.        Case 4:                                              ' end of transmission , file is transmitted
  173.              If Wrd > 0 And Bkind = 0 Then                  'if there was something left in the page
  174.                  Wrd = 0                                    'Z pointer needs wrd to be 0
  175.                  Spmcrval = 5 : Gosub Do_spm                'write page
  176.                  Spmcrval = 17 : Gosub Do_spm               ' re-enable page
  177.              End If
  178.             '  Waitms 100                                   ' OPTIONAL REMARK THIS IF THE DTR SIGNAL ARRIVES TO EARLY
  179.              Print Chr(ack);                                ' send ack and ready
  180.  
  181.              'Portb.3 = 0                                    ' simple indication that we are finished and ok
  182.              Waitms 20
  183.              Goto _reset                                    ' start new program
  184.        Case &H18:                                           ' PC aborts transmission
  185.              Goto _reset                                    ' ready
  186.        Case 123 : Exit Do                                   'was probably still in the buffer
  187.        Case 124 : Exit Do
  188.        Case Else
  189.           Exit Do                                           ' no valid data
  190.     End Select
  191.   Loop
  192.   If Bretries > 0 Then                                      'attempte left?
  193.      Waitms 1000
  194.      Decr Bretries                                          'decrease attempts
  195.   Else
  196.      Goto _reset                                            'reset chip
  197.   End If
  198. Loop
  199.  
  200.  
  201.  
  202. 'write one or more pages
  203. Writepage:
  204.  If Bkind = 0 Then
  205.    For J = 1 To 128 Step 2                                  'we write 2 bytes into a page
  206.       Vl = Buf(j) : Vh = Buf(j + 1)                         'get Low and High bytes
  207.       !lds r0, {vl}                                         'store them into r0 and r1 registers
  208.       !lds r1, {vh}
  209.       Spmcrval = 1 : Gosub Do_spm                           'write value into page at word address
  210.       Wrd = Wrd + 2                                         ' word address increases with 2 because LS bit of Z is not used
  211.       If Wrd = Maxword Then                                 ' page is full
  212.           Wrd = 0                                           'Z pointer needs wrd to be 0
  213.           Spmcrval = 5 : Gosub Do_spm                       'write page
  214.           Spmcrval = 17 : Gosub Do_spm                      ' re-enable page
  215.  
  216.           Page = Page + 1                                   'next page
  217.           Spmcrval = 3 : Gosub Do_spm                       ' erase  next page
  218.           Spmcrval = 17 : Gosub Do_spm                      ' re-enable page
  219.       End If
  220.    Next
  221.  
  222.  Else                                                       'eeprom
  223.      For J = 1 To 128
  224.        Writeeeprom Buf(j) , Wrd
  225.        Wrd = Wrd + 1
  226.      Next
  227.  End If
  228.  'Toggle Portb.2 : Waitms 10 : Toggle Portb.2                'indication that we write
  229. Return
  230.  
  231.  
  232. Do_spm:
  233.   Bitwait Spmcsr.0 , Reset                                  ' check for previous SPM complete
  234.   Bitwait Eecr.1 , Reset                                    'wait for eeprom
  235.  
  236.   Z = Page                                                  'make equal to page
  237.   Shift Z , Left , Maxwordshift                             'shift to proper place
  238.   Z = Z + Wrd                                               'add word
  239.   !lds r30,{Z}
  240.   !lds r31,{Z+1}
  241.  
  242.   #if _romsize > 65536
  243.       !lds r24,{Z+2}
  244.       !sts rampz,r24                                        ' we need to set rampz also for the M128
  245.   #endif
  246.  
  247.   Spmcsr = Spmcrval                                         'assign register
  248.   !spm                                                      'this is an asm instruction
  249.   nop
  250.   nop
  251. Return
  252.  
  253.  
  254. 'How you need to use this program:
  255. '1- compile this program
  256. '2- program into chip with sample elctronics programmer
  257. '3- select MCS Bootloader from programmers
  258. '4- compile a new program for example M88.bas
  259. '5- press F4 and reset your micro
  260. ' the program will now be uploaded into the chip with Xmodem Checksum
  261. ' you can write your own loader.too
  262. 'A stand alone command line loader is also available
  263.  
  264.  
  265. 'How to call the bootloader from your program without a reset ???
  266. 'Do
  267. '   Print "test"
  268. '   Waitms 1000
  269. '   If Inkey() = 27 Then
  270. '      Print "boot"
  271. '      Goto &H1C00
  272. '   End If
  273. 'Loop
  274.  
  275. 'The GOTO will do the work, you need to specify the correct bootloader address
  276. 'this is the same as the $LOADER statement.
Kod programu głównego:
  1.     $regfile = "m328pdef.dat"
  2.     $crystal = 16000000
  3.     $hwstack = 32
  4.     $swstack = 16
  5.     $framesize = 24
  6.     $baud = 115200
  7.  
  8.     Config Serialin = Buffered , Size = 20
  9.  
  10.     485_en Alias Portd.2 : Config 485_en = Output
  11.     Config Print0 = Portd.2 , Mode = Set
  12.  
  13.     Dim Command As String * 10 , Znak As Byte
  14.     Dim Command_timeout As Byte , Got_str As Byte
  15.  
  16. '*************************************************
  17. '*            NA POTRZEBY DEMO                   *
  18. '*************************************************
  19.    Dim Timer_programowy As Byte
  20.  
  21.   R_led Alias Portb.0 : Config R_led = Output : Set R_led   'będą migały na przemian
  22.   G_led Alias Portd.7 : Config G_led = Output               ': Set G_led
  23. '*************************************************
  24. '*        TIMER2 CONFIG FOR TIME BASE            *
  25. '*************************************************
  26.  
  27.   Config Timer2 = Timer , Prescale = 1024 , Clear_timer = 1
  28.   Compare2a = 155                                           '10ms @16MHz/1024
  29.  
  30.  
  31.  
  32.     Enable Interrupts                                           'dla buforowanego UARTu potrzebne sa przerwania
  33.  
  34.     '*** START ***
  35.     Do
  36.      '---------------------------------------------------------------------
  37.      If Tifr2.ocf2a = 1 Then                                   '10ms
  38.       Tifr2.ocf2a = 1
  39.  
  40.       If Timer_programowy < 24 Then
  41.        Incr Timer_programowy
  42.       Else                                                  '500ms
  43.        Timer_programowy = 0
  44.        Toggle R_led
  45.        Toggle G_led
  46.       End If
  47.  
  48.  
  49.      '---------------------------------------------------------------------
  50.       'poniżej odbiór i analiza tego co nadeszło z USART
  51.  
  52.         If Ischarwaiting() > 0 Then                                'jeśli w buforze czeka znak
  53.  
  54.          Znak = Inkey()
  55.  
  56.           Select Case Znak
  57.            Case 10                                                 'zignoruj
  58.            Case 13 : Got_str = 1                                   'nadszedł Enter więc sprawdź komendę
  59.            Case Else
  60.             Command = Command + Chr(znak)                          'jeśli to nie ENTER ani LF to dodaj do stringa
  61.           End Select
  62.  
  63.           If Len(command) > 9 Then Got_str = 1                 'zabezpieczenie by nie przepełnić zmiennej
  64.  
  65.           If Got_str = 1 Then
  66.  
  67.            If 0 < Instr(command , "AT+RST") Then
  68.             Disable Interrupts                                 'wylaczenie przerwan
  69.             Print "Resetting in progress..."
  70.             Start Watchdog                                  'uruchomienie Watchdoga
  71.             Do                                                     'petla nieskonczona
  72.             Loop                                                   'w niej czekamy na Reset
  73.            End If
  74.  
  75.              Command = ""
  76.             Got_str = 0
  77.           Else
  78.            Command_timeout = 30
  79.           End If
  80.  
  81.         End If
  82.  
  83.         If Command_timeout > 0 Then                                'jesli nadeszły jakieś znaki
  84.          Decr Command_timeout                                      'pomału odliczaj
  85.  
  86.          'najwyraźniej to były błedne znaki więc usuń je i czekaj na poprawne
  87.  
  88.           If Command_timeout = 0 Then Command = ""
  89.         End If
  90.  
  91.      End If
  92.     Loop
  93.     End
W programie Bootloadera trzeba zwrócić uwagę na ustawienie "$timeout = 800000" Im szybszy procesor tym liczba powinna być większa wiec zwiększyłem z 4 na 8
W programie głównym pewnym wrażliwym ustawieniem jest "Command_timeout = 30" Np. Przy wartości 10 procesor dla $baud 115200 już sie sam nie resetuje.
Przy $baud 1200 chyba musisz to jeszcze znacznie wydłużyć. Chodzi o to jak długo spływa kolejny znak.

Miłego kodowania ;)
PS. Tam w jednym miejscu pisze 500ms a faktycznie jest 250ms. Zmieniłem sobie żeby szybciej, weselej migały, ale zapomniałem zmienić komentarz.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
grafii1
Posty: 58
Rejestracja: 23 wrz 2018, 11:28

Re: Zmiana oprogramowania po RS485 , czy możliwe ?

Post autor: grafii1 » 04 paź 2019, 9:32

Dzięki za wskazówki , też nie mam kiedy kontynuować testów . Zastanawiałem się dlaczego po rs232 idzie bez problemów nawet bez dtr i z różnymi konfiguracjami . Dużą poprawę uzyskałem odznaczając w linii 178 waitms 100 . Będę jeszcze działał na konwerterze z ft232rl , dam znać co i jak ...
grafii1
Posty: 58
Rejestracja: 23 wrz 2018, 11:28

Re: Zmiana oprogramowania po RS485 , czy możliwe ?

Post autor: grafii1 » 06 paź 2019, 23:14

Witam , czy kolega działał na " przewodowym " połączeniu ? . Owszem u mnie działa ale tylko do 57600 , problem był w konwerterze na standardowej " chińszczyźnie " się rwało dopiero na ft232 można było testować . Na analizatorze zauważyłem że jest problem na przełączeniu max485 , zanim jedna transmisja się skończy i przełącz maxa ( konwerter ) na odbiór , pro mini już odpowiada i " swojego " maxa przestawia na nadawanie co prawda twa to około 50us ale raczej dwa mastery są nie wskazane w danej chwili . Myślę że soft bootloadera jest przystosowany do full duplex . Mimo wszystko czy podłącze przez 232 czy na 485 max co mogę osiągnąć to 57600 , może to pro mini a może coś innego , no nic będę jeszcze testował i informował co i jak ...
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Zmiana oprogramowania po RS485 , czy możliwe ?

Post autor: niveasoft » 06 paź 2019, 23:32

Najtańszym za 7zł50gr takim jak na dołączonym obrazku.
W układzie docelowym Mega328P z kwarcem 16MHz i MAX485.
Ten komplet który dałem dwa posty wyżej to przetestowałem i działa na pewno. Spędziłem nad tym pół godziny bo musiałem posprawdzać co gdzie mam na tej docelowej płytce :D

Co do samych prędkości to z kwarcem Usartfriendly właśnie też tym najtańszym adapterem śmigam 250kb/s
Tam jednak faktycznie trzeba było zrezygnować z bascom`owego sterowania i tradycyjnie zająć się tym samemu, ale to może być spowodowane tym że w Modbus czekamy przez czas potrzebny na przesłanie dwóch znaków i jak nic nie nadeszło to dopiero oznacza koniec transmisji więc tego sterowania bym tu nie przesądzał.

Co do softu bootloadera - przez bluetooth mam obecnie cos połączone 115200 i cały czas działa jak złoto czyli wgrywanie nowego softu i debug.
Oczywiście HC-05 trzeba najpierw przestawić na tę prędkość.
  1. Set Rs485dir
  2.  For Mbj = 1 To Mbruncount
  3.     Print #1 , Chr(mbruncheck(mbj));      'send out this data
  4.  Next
  5. 'tu możesz wstawić, na próbę, Waitms 1-3
  6. Reset Rs485dir
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
ODPOWIEDZ