ATmega2560 - Konfiguracja 2x UART

Pytania, kody i porady dotyczące nie tylko Bascom.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: ATmega2560 - Konfiguracja 2x UART

Post autor: pimowo » 13 paź 2020, 8:46

Tak się przespałem z tym wszystkim i wpadły mi dwie rzeczy do głowy...
1. Zasilanie, do testów zasilam wszystko z USB laptopa i może Arduino MEGA z ESP nie wyrabia?
2. Bootloadrer Arduino, czy możliwe, że on coś miesza przy przesyłaniu długich stringów?
Wieczorem znów siądę do testów ;)
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: ATmega2560 - Konfiguracja 2x UART

Post autor: niveasoft » 13 paź 2020, 8:55

Kolego policzyłem na palcach i Twoja zmienna Cmd ma teraz 204 znaki. Zadeklarowałeś ją na przynajmniej taką długość? Może jeździsz tam po jakichś innych zmiennych?
Proponuję sobie zmienną Cmd zadeklarować na co najmniej 250, lub więcej, a do kodu dodać dyrektywę "$bigstrings".
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: ATmega2560 - Konfiguracja 2x UART

Post autor: pimowo » 13 paź 2020, 9:15

Bartek, zmienne mają zadeklarowane dokładnie 250 znaków - pisałem wcześniej, że na ATmega328 wszystko działa jak należy.
Skoro to nie ustawienia UART, MEGA, bootloader, kod czy tam zmienne, to zostaje tylko zasilanie wszystkiego - jeszcze dziś zrobię test.

$bigstrings? o tym nie słyszałem ;)
Czy to znaczy, że można używać dłuższych stringów niż 254 znaki?
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: ATmega2560 - Konfiguracja 2x UART

Post autor: pimowo » 15 paź 2020, 14:37

Kilka roboczogodzin poszło w... diabły, a ja dalej w punkcie wyjścia...
Proszę o pomoc bo sam sobie z tym nie poradzę.

Program dla ATmega328 (Arduino UNO) wszytko działa jak należy, ESP co minutę posyła dane
  1. $regfile = "m328pdef.dat"
  2. $crystal = 16000000                                         'zewnętrzny rezonator kwarcowy 16MHz - standard Arduino
  3. $hwstack = 64
  4. $swstack = 16
  5. $framesize = 64
  6.  
  7. Config Submode = New
  8.  
  9. '--- UART ---
  10. Config Com1 = 115200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  11. Open "Com1:" For Binary As #1 : Const Esp = 1
  12. Config Serialin0 = Buffered , Size = 250 , Bytematch = 10
  13. Config Input = Crlf , Echo = Crlf : Echo Off
  14.  
  15. Dim Com1_str As String * 250
  16.  
  17. '--- TIMER ---
  18. Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1 : Compare0a = 155       '10ms @16MHz/1024
  19.  
  20. '--- czas ---
  21. Dim 100ms As Byte , 1s As Byte , 1m As Byte
  22.  
  23. '--- ESP8266 ---
  24. Dim Esp_nadaje As Byte
  25. Dim Send_time As Byte
  26. Dim Cmd As String * 250
  27. Dim Cmd_len As String * 25
  28. Dim Lenght As Byte
  29. Dim State As Byte
  30. Dim Mem_state As Byte
  31.  
  32. Const Startup = 0
  33. Const Waiting = 1
  34. Const Send_len = 2
  35. Const Sending = 3
  36.  
  37. '--- obsługa ESP8266 ---
  38. Sub Esp8266
  39.  
  40.    Select Case State
  41.  
  42.       Case Startup
  43.  
  44.          If Instr(com1_str , "WIFI GOT IP") > 0 Then
  45.  
  46.             Cmd = "AT+CIPSTART={034}TCP{034},{034}192.168.1.2{034},80"
  47.  
  48.             Print #esp , Cmd
  49.  
  50.             Cmd = "GET /receiver.php?key=1234"
  51.             Cmd = Cmd + "&&id=1;11;2;22;3;33"
  52.             Cmd = Cmd + "&type=water;volt;gas;volt;elec;volt"
  53.             Cmd = Cmd + "&value=0.001;1.11;0.01;2.22;0.0005;3.33"
  54.             Cmd = Cmd + "&current=1;---;2;---;3;---"
  55.             Cmd = Cmd + "&device=ip&name=PiCount_2_"
  56.             Cmd = Cmd + "{032}HTTP/1.1{013}{010}"
  57.             Cmd = Cmd + "Host:{032}192.168.1.2"
  58.             Cmd = Cmd + "{013}{010}{013}{010}"
  59.  
  60.             Mem_state = State                               'zapamiętaj, że zaczynamy
  61.             State = Waiting
  62.  
  63.          End If
  64.  
  65.       Case Waiting                                          'jeśli czekamy na odpowiedź
  66.  
  67.          Select Case Com1_str
  68.  
  69.             Case "OK"                                       'jeśli zobaczymy OK
  70.  
  71.                Select Case Mem_state
  72.  
  73.                   Case Startup                              'Poprzedni był auto-start, więc to pierwszy "OK"
  74.  
  75.                      Mem_state = Send_len
  76.  
  77.                      Lenght = Len(cmd) : Cmd_len = Str(lenght)
  78.                      Cmd_len = "AT+CIPSEND=" + Cmd_len
  79.  
  80.                      Print #esp , Cmd_len
  81.  
  82.                   Case Send_len                             'drugie „OK”, więc wysyłamy Len danych, które chcemy wysłać
  83.  
  84.                      Print #esp , Cmd
  85.  
  86.                      State = Sending
  87.                      Mem_state = Sending                    'zapamiętaj, że wysyłamy dane do serwera
  88.                                                             'do obsługi błędów
  89.                End Select
  90.  
  91.             Case "ERROR"                                    'błąd połączenia
  92.  
  93.                State = Startup : Send_time = 0
  94.  
  95.             Case "CLOSED"                                   'połączenie zamknięte
  96.  
  97.                State = Startup : Send_time = 0
  98.  
  99.          End Select
  100.  
  101.       Case Sending                                          'wysyłka danych
  102.  
  103.          Select Case Com1_str
  104.  
  105.             Case "SEND OK"                                  'wysyłanie powiodło się
  106.  
  107.                State = Startup : Send_time = 0
  108.  
  109.             Case "CLOSED"                                   'połączenie zamknięte
  110.  
  111.                State = Startup : Send_time = 0
  112.  
  113.             Case "SEND FAIL"                                'wysyłanie nie powiodło się
  114.  
  115.                State = Startup : Send_time = 0
  116.  
  117.          End Select
  118.  
  119.    End Select
  120.  
  121. End Sub
  122.  
  123. Enable Interrupts
  124.  
  125. '**********************
  126. '*** PROGRAM GŁÓWNY ***
  127.  
  128. Do
  129.  
  130.    If Tifr0.ocf0a = 1 Then                                  'minęło 10ms - flagę ustawia Timer
  131.  
  132.       Tifr0.ocf0a = 1                                       'kasuj flagę
  133.  
  134.       If 100ms < 9 Then
  135.  
  136.          Incr 100ms
  137.  
  138.       Else                                                  'minęło 100ms
  139.  
  140.          100ms = 0
  141.  
  142.          If 1s < 9 Then
  143.  
  144.             Incr 1s
  145.  
  146.          Else                                               'minęła 1s
  147.  
  148.             1s = 0
  149.  
  150.             If 1m < 59 Then
  151.  
  152.                Incr 1m
  153.  
  154.             Else                                            'minęła 1m
  155.  
  156.                1m = 0
  157.  
  158.                Print #esp , "AT+RST"                        'budź ESP i ślij dane na serwer
  159.  
  160.             End If
  161.  
  162.          End If
  163.  
  164.       End If
  165.    End If
  166.  
  167.    If Esp_nadaje = 1 Then
  168.  
  169.       Esp_nadaje = 0
  170.  
  171.       Call Esp8266
  172.  
  173.    End If
  174.  
  175. Loop
  176.  
  177. '*** KONIEC GŁÓWNEJ PĘTLI ***
  178. '****************************
  179.  
  180. '--- przerwanie UART ---
  181. Serial0charmatch:
  182.  
  183.    $asm
  184.    !PUSH R6
  185.    !PUSH R16
  186.    !PUSH R17
  187.    !PUSH R18
  188.    !PUSH R19
  189.    !PUSH R22
  190.    !PUSH R24
  191.    !PUSH R25
  192.    !PUSH R26
  193.    !PUSH R27
  194.    !PUSH R30
  195.    !IN R24, SREG
  196.    !PUSH  R24
  197.    $end asm
  198.  
  199.    $timeout = 3000
  200.    Input #esp , Com1_str
  201.    Clear Serialin0
  202.  
  203.    Esp_nadaje = 1
  204.  
  205. '          Tuned with NoSave Tool 1.10
  206.  
  207.    $asm
  208.    !POP  R24
  209.    !OUT SREG, R24
  210.    !POP R30
  211.    !POP R27
  212.    !POP R26
  213.    !POP R25
  214.    !POP R24
  215.    !POP R22
  216.    !POP R19
  217.    !POP R18
  218.    !POP R17
  219.    !POP R16
  220.    !POP R6
  221.  $end Asm
  222.  
  223. Return
Program dla ATmega2560 (Arduino MEGA) tu nic nie działa jak należy - ESP nie posyła danych (jak go podglądam konwerterem USB-UART to wisi na "WIFI GOT IP") Komunikacja z PC działa super, ale tylko przez minutę od startu, później ESP ma posłać dane. Gdy ESP dostaje "AT+RST" to komunikacja PC-MEGA zamiera
  1. $regfile = "m2560def.dat"
  2. $crystal = 16000000                                         'zewnętrzny rezonator kwarcowy 16MHz - standard Arduino
  3. $hwstack = 64
  4. $swstack = 16
  5. $framesize = 64
  6.  
  7. Config Submode = New
  8.  
  9. '--- UART PC ---
  10. Config Com1 = 115200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  11. Open "Com1:" For Binary As #1 : Const Pc = 1
  12. Config Serialin0 = Buffered , Size = 250 , Bytematch = 13
  13. Config Input = Cr , Echo = Cr : Echo Off
  14.  
  15. Dim Com1_str As String * 250
  16.  
  17. '--- UART ESP ---
  18. Config Com2 = 115200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  19. Open "Com2:" For Binary As #2 : Const Esp = 2
  20. Config Serialin1 = Buffered , Size = 250 , Bytematch = 10
  21. Config Input1 = Crlf , Echo = Crlf : Echo Off
  22.  
  23. Dim Com2_str As String * 250
  24.  
  25. '--- TIMER ---
  26. Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1 : Compare0a = 155       '10ms @16MHz/1024
  27.  
  28. '--- czas ---
  29. Dim 100ms As Byte , 1s As Byte , 1m As Byte
  30.  
  31. '--- PC ---
  32. Dim Pc_nadaje As Byte
  33. Dim Bufor As Byte
  34. Dim Pc_dane(2) As String * 20
  35.  
  36. '--- ESP8266 ---
  37. Dim Esp_nadaje As Byte
  38. Dim Send_time As Byte
  39. Dim Cmd As String * 250
  40. Dim Cmd_len As String * 25
  41. Dim Lenght As Byte
  42. Dim State As Byte
  43. Dim Mem_state As Byte
  44.  
  45. Const Startup = 0
  46. Const Waiting = 1
  47. Const Send_len = 2
  48. Const Sending = 3
  49.  
  50. '--- obsługa PC ---
  51. Sub Pc_uart
  52.  
  53.    Bufor = Split(com1_str , Pc_dane(1) , " ")
  54.  
  55.    Select Case Pc_dane(1)
  56.  
  57.       Case "halo"
  58.  
  59.          Print #pc , "hej"
  60.  
  61.       Case "123"
  62.  
  63.          Print #pc , "abc"
  64.  
  65.       Case "haha"
  66.  
  67.          Print #pc , "hi hi"
  68.  
  69.    Case Else                                                'jeżeli odebrany znak to żaden z powyższych to wyczyść bufor
  70.  
  71.       Print #pc , "ehhh... cos poszlo nie tak..."
  72.  
  73.       Pc_dane(1) = ""
  74.       Pc_dane(2) = ""
  75.  
  76.    End Select
  77.  
  78.    'wyczyść bufor i wyjdź
  79.    Pc_dane(1) = ""
  80.    Pc_dane(2) = ""
  81.  
  82. End Sub
  83.  
  84. '--- obsługa ESP8266 ---
  85. Sub Esp_uart
  86.  
  87.    Select Case State
  88.  
  89.       Case Startup
  90.  
  91.          If Instr(com1_str , "WIFI GOT IP") > 0 Then
  92.  
  93.             Cmd = "AT+CIPSTART={034}TCP{034},{034}192.168.1.2{034},80"
  94.  
  95.             Print #esp , Cmd
  96.  
  97.             Cmd = "GET /receiver.php?key=1234"
  98.             Cmd = Cmd + "&&id=1;11;2;22;3;33"
  99.             Cmd = Cmd + "&type=water;volt;gas;volt;elec;volt"
  100.             Cmd = Cmd + "&value=0.001;1.11;0.01;2.22;0.0005;3.33"
  101.             Cmd = Cmd + "&current=1;---;2;---;3;---"
  102.             Cmd = Cmd + "&device=ip&name=PiCount_2_"
  103.             Cmd = Cmd + "{032}HTTP/1.1{013}{010}"
  104.             Cmd = Cmd + "Host:{032}192.168.1.2"
  105.             Cmd = Cmd + "{013}{010}{013}{010}"
  106.  
  107.             Mem_state = State                               'zapamiętaj, że zaczynamy
  108.             State = Waiting
  109.  
  110.          End If
  111.  
  112.       Case Waiting                                          'jeśli czekamy na odpowiedź
  113.  
  114.          Select Case Com1_str
  115.  
  116.             Case "OK"                                       'jeśli zobaczymy OK
  117.  
  118.                Select Case Mem_state
  119.  
  120.                   Case Startup                              'Poprzedni był auto-start, więc to pierwszy "OK"
  121.  
  122.                      Mem_state = Send_len
  123.  
  124.                      Lenght = Len(cmd) : Cmd_len = Str(lenght)
  125.                      Cmd_len = "AT+CIPSEND=" + Cmd_len
  126.  
  127.                      Print #esp , Cmd_len
  128.  
  129.                   Case Send_len                             'drugie „OK”, więc wysyłamy Len danych, które chcemy wysłać
  130.  
  131.                      Print #esp , Cmd
  132.  
  133.                      State = Sending
  134.                      Mem_state = Sending                    'zapamiętaj, że wysyłamy dane do serwera
  135.                                                             'do obsługi błędów
  136.                End Select
  137.  
  138.             Case "ERROR"                                    'błąd połączenia
  139.  
  140.                State = Startup : Send_time = 0
  141.  
  142.             Case "CLOSED"                                   'połączenie zamknięte
  143.  
  144.                State = Startup : Send_time = 0
  145.  
  146.          End Select
  147.  
  148.       Case Sending                                          'wysyłka danych
  149.  
  150.          Select Case Com1_str
  151.  
  152.             Case "SEND OK"                                  'wysyłanie powiodło się
  153.  
  154.                State = Startup : Send_time = 0
  155.  
  156.             Case "CLOSED"                                   'połączenie zamknięte
  157.  
  158.                State = Startup : Send_time = 0
  159.  
  160.             Case "SEND FAIL"                                'wysyłanie nie powiodło się
  161.  
  162.                State = Startup : Send_time = 0
  163.  
  164.          End Select
  165.  
  166.    End Select
  167.  
  168. End Sub
  169.  
  170. Enable Interrupts
  171.  
  172. '**********************
  173. '*** PROGRAM GŁÓWNY ***
  174.  
  175. Do
  176.  
  177.    If Tifr0.ocf0a = 1 Then                                  'minęło 10ms - flagę ustawia Timer
  178.  
  179.       Tifr0.ocf0a = 1                                       'kasuj flagę
  180.  
  181.       If 100ms < 9 Then
  182.  
  183.          Incr 100ms
  184.  
  185.       Else                                                  'minęło 100ms
  186.  
  187.          100ms = 0
  188.  
  189.          If 1s < 9 Then
  190.  
  191.             Incr 1s
  192.  
  193.          Else                                               'minęła 1s
  194.  
  195.             1s = 0
  196.  
  197.             If 1m < 59 Then
  198.  
  199.                Incr 1m
  200.  
  201.             Else                                            'minęła 1m
  202.  
  203.                1m = 0
  204.  
  205.                Print #esp , "AT+RST"                        'budź ESP i ślij dane na serwer
  206.  
  207.             End If
  208.  
  209.          End If
  210.  
  211.       End If
  212.    End If
  213.  
  214.    If Pc_nadaje = 1 Then
  215.  
  216.       Pc_nadaje = 0
  217.  
  218.       Call Pc_uart
  219.  
  220.    End If
  221.  
  222.    If Esp_nadaje = 1 Then
  223.  
  224.       Esp_nadaje = 0
  225.  
  226.       Call Esp_uart
  227.  
  228.    End If
  229.  
  230. Loop
  231. End
  232.  
  233. '*** KONIEC GŁÓWNEJ PĘTLI ***
  234. '****************************
  235.  
  236. '--- przerwanie UART ---
  237. Serial0charmatch:
  238.  
  239.    $asm
  240.    !PUSH R6
  241.    !PUSH R16
  242.    !PUSH R17
  243.    !PUSH R18
  244.    !PUSH R19
  245.    !PUSH R22
  246.    !PUSH R24
  247.    !PUSH R25
  248.    !PUSH R26
  249.    !PUSH R27
  250.    !PUSH R30
  251.    !IN R24, SREG
  252.    !PUSH  R24
  253.    $end asm
  254.  
  255.    $timeout = 3000
  256.    Input#pc , Com1_str
  257.    Clear Serialin0
  258.  
  259.    Pc_nadaje = 1
  260.  
  261. '          Tuned with NoSave Tool 1.10
  262.  
  263.    $asm
  264.    !POP  R24
  265.    !OUT SREG, R24
  266.    !POP R30
  267.    !POP R27
  268.    !POP R26
  269.    !POP R25
  270.    !POP R24
  271.    !POP R22
  272.    !POP R19
  273.    !POP R18
  274.    !POP R17
  275.    !POP R16
  276.    !POP R6
  277.     $end Asm
  278.  
  279. Return
  280.  
  281. Serial1charmatch:
  282.  
  283.    $asm
  284.    !PUSH R6
  285.    !PUSH R16
  286.    !PUSH R17
  287.    !PUSH R18
  288.    !PUSH R19
  289.    !PUSH R22
  290.    !PUSH R24
  291.    !PUSH R25
  292.    !PUSH R26
  293.    !PUSH R27
  294.    !PUSH R30
  295.    !IN R24, SREG
  296.    !PUSH  R24
  297.    $end asm
  298.  
  299.    $timeout = 3000
  300.    Input #esp , Com2_str
  301.    Clear Serialin1
  302.  
  303.    Esp_nadaje = 1
  304.  
  305. '          Tuned with NoSave Tool 1.10
  306.  
  307.    $asm
  308.    !POP  R24
  309.    !OUT SREG, R24
  310.    !POP R30
  311.    !POP R27
  312.    !POP R26
  313.    !POP R25
  314.    !POP R24
  315.    !POP R22
  316.    !POP R19
  317.    !POP R18
  318.    !POP R17
  319.    !POP R16
  320.    !POP R6
  321.  $end Asm
  322.  
  323. Return
Na moje oko coś jest nie tak z konfiguracją UART, ale za cholerę nie wiem o co chodzi :evil:

Próbowałem już przeróżnych ustawień UART i zawsze jest coś nie tak. Zasilanie też zmieniałem, połączenia sprawdzone milion razy. Kod specjalnie okroiłem do minimum aby wykluczyć inne rzeczy, które tam mają działać.
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: ATmega2560 - Konfiguracja 2x UART

Post autor: niveasoft » 15 paź 2020, 16:27

ESP po resecie chyba wysyła dużo takich diagnostycznych danych z innym baudrate. Zrób mały test.
Przed tym Print #esp , "AT+RST" wyłącz przerwania tak że nie odbierze żadnych śmieci. Tak na próbę ;)
  1. Disable Interrupts
  2. Print #esp , "AT+RST"
  3. Wait 2
  4. Enable Interrupts
Pisałem, że ja bym to podglądał tak jak na dołączonym obrazku ;)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: ATmega2560 - Konfiguracja 2x UART

Post autor: pimowo » 15 paź 2020, 16:32

Zaraz sprawdzę, ale... Bartek, na UNO ESP działa, a na MEGA (drugi UART) nie chce?
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: ATmega2560 - Konfiguracja 2x UART

Post autor: niveasoft » 15 paź 2020, 16:36

Czegoś trzeba być pewnym...i krok po kroku eliminować.
Zamiast tych rejestrów spróbuj odłożyć wszystkie...
  1. Serial1charmatch:
  2.    
  3.  $pushall
  4.  
  5.    $timeout = 3000
  6.    Input #esp , Com2_str
  7.    Clear Serialin1
  8.  
  9.    Esp_nadaje = 1
  10.  
  11.  $popall
  12.  
  13. Return
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: ATmega2560 - Konfiguracja 2x UART

Post autor: pimowo » 15 paź 2020, 18:47

Po zmianach nic się nie zmieniło...
Przed zmianami i po zmianach w kodzie to co "wypluwa" ESP wgląda tak samo.
*podłączyłem się dodatkowym konwerterem USB-UART poprzez rezystor 10k pod RX MEGI - w domu mam tylko diody prostownicze.
  1. AT+RST
  2.  
  3. OK
  4. WIFI DISCONNECT
  5.  
  6.  ets Jan  8 2013,rst cause:1, boot mode:(3,7)
  7.  
  8. load 0x40100000, len 23200, room 16
  9. tail 0
  10. chksum 0x72
  11. load 0x3ffe8000, len 948, room 8
  12. tail 12
  13. chksum 0x50
  14. ho 0 tail 12 room 4
  15. load 0x3ffe83b8, len 3888, room 12
  16. tail 4
  17. chksum 0x1d
  18. csum 0x1d
  19. rdǃ;$ÄźăŚ#ţ
  20. ready
  21. WIFI CONNECTED
  22. WIFI GOT IP
Po zmianach:
  1. AT+RST
  2.  
  3. OK
  4. WIFI DISCONNECT
  5.  
  6.  ets Jan  8 2013,rst cause:1, boot mode:(3,7)
  7.  
  8. load 0x40100000, len 23200, room 16
  9. tail 0
  10. chksum 0x72
  11. load 0x3ffe8000, len 948, room 8
  12. tail 12
  13. chksum 0x50
  14. ho 0 tail 12 room 4
  15. load 0x3ffe83b8, len 3888, room 12
  16. tail 4
  17. chksum 0x1d
  18. csum 0x1d
  19. rdǃ;$ÄźăŚ#ţ
  20. ready
  21. WIFI CONNECTED
  22. WIFI GOT IP
BASCOM wyrzucał mi błędy przy:
  1. Serial1charmatch:
  2.  
  3.    $pushall
  4.  
  5.    $timeout = 3000
  6.    Input #esp , Com2_str
  7.    Clear Serialin1
  8.  
  9.    Esp_nadaje = 1
  10.  
  11.    $popall
  12.  
  13. Return
więc zmieniłem na:
  1. Serial1charmatch:
  2.  
  3.    Pushall
  4.  
  5.    $timeout = 3000
  6.    Input #esp , Com2_str
  7.    Clear Serialin1
  8.  
  9.    Esp_nadaje = 1
  10.  
  11.    Popall
  12.  
  13. Return
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: ATmega2560 - Konfiguracja 2x UART

Post autor: niveasoft » 15 paź 2020, 19:31

Trochę ciasno z czasem, żebym to podłączył. Do jednego projektu potrzebuję RTC na SPI a nie I2C więc napisałem obsługę MCP79520 dla bascomowych komend i działa :D
Teraz zabieram się za kolejny kod...ehhh

Spróbuj w Case Startup dopisać "Else" czyli jak wiadomość "WIFI GOT IP" nie została znaleziona to ma wysłać to co dostał do PC.
Czyli jak wyśle do PC "WIFI GOT IP" to znaczy że albo tam masz jedną spację więcej albo coś podobnego :D
Trzeba tego tylko poszukać. Masz drugi USART to korzystaj.
  1. Case Startup
  2.  
  3.          If Instr(com1_str , "WIFI GOT IP") > 0 Then
  4.  
  5.             Cmd = "AT+CIPSTART={034}TCP{034},{034}192.168.1.2{034},80"
  6.  
  7.             Print #esp , Cmd
  8.  
  9.             Cmd = "GET /receiver.php?key=1234"
  10.             Cmd = Cmd + "&&id=1;11;2;22;3;33"
  11.             Cmd = Cmd + "&type=water;volt;gas;volt;elec;volt"
  12.             Cmd = Cmd + "&value=0.001;1.11;0.01;2.22;0.0005;3.33"
  13.             Cmd = Cmd + "&current=1;---;2;---;3;---"
  14.             Cmd = Cmd + "&device=ip&name=PiCount_2_"
  15.             Cmd = Cmd + "{032}HTTP/1.1{013}{010}"
  16.             Cmd = Cmd + "Host:{032}192.168.1.2"
  17.             Cmd = Cmd + "{013}{010}{013}{010}"
  18.  
  19.             Mem_state = State                               'zapamiętaj, że zaczynamy
  20.             State = Waiting
  21.          Else
  22.             Print #pc , Com1_str
  23.          End If
W tym Sub Serial1charmatch możesz zapalić LED na początku, zaraz za Pushall a zaraz przed Popall zgasić LED. Jak tam utknie to LED będzie świecić ciągle...No szukaj efektywnie :P
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: ATmega2560 - Konfiguracja 2x UART

Post autor: pimowo » 16 paź 2020, 0:52

OK, już coś wiem, ale najciekawsze później ;)

Po dodaniu:
  1.          Else
  2.             Print #pc , Com1_str
  3.          End If
nic nie wyrzuca na UART

Gdy dodałem LED, to program dochodzi do przerwania, LED się zaświeca i nie gaśnie - tak jak pisał Bartek tu paragram wisi.
Ale gdy skasowałem linię "Clear Serialin1" to program przechodzi dalej, LED gaśnie, ale niestety nadal to nic nie działa i ESP "wypluwa" z siebie komunikaty kończąc "WIFI GOT IP"

No i teraz najciekawsze...
Programy cały czas ładowałem poprzez USB - bootloader Arduino, ale coś mnie podkusiło aby wrzucić program "normalnie" czyli poprzez USBasp i tu zonk... ATmega2560 normalnie się programuje, ale nic nie działa i to dosłownie nic. Napisałem programik aby tylko LED sobie mrugał i nawet to nie działa, ale... ale gdy wrzucę bootloader Arduino poprzez Arduino IDE i później wrzucę swój mini programik to LED radośnie mruga.
O co tu chodzi? Programy załadowane poprzez USBasp nie działają - uC niby się programuje - ale bootloader mogę wgrać bez problemu przez USBasp w Arduino IDE

Testów ciąg dalszy... prosty programik z jednym UART wgrany przez USBasp (BASCOM IDE lub mkAVRcalculator) nie działa, ale gdy mam bootloader Arduino to ten sam program już działa - no prawie działa bo odpowiada tylko raz na zapytanie przez termianal - ten sam programik na Arduino UNO wgrywany przez UART (USB) lub USBasp działa poprawnie.

Zgłupiałem już totalnie, o co tu chodzi?
Czy z moją płytką (klon Arduino MEGA) czy ze mną jest coś nie tak?

PS
W mkAVRcalculator mam ustawiony zewnętrzny rezonator kwarcowy, wyłączony Interfejs JTAG oraz wyłączony wewnętrzny podział zegara przez 8
ODPOWIEDZ