ATXMEGa32A4AU problem z uart

Rodzina procesorów bogatszych w wiele nowych rozwiązań i dlatego warto po nie sięgnąć.
ODPOWIEDZ
grafii1
Posty: 58
Rejestracja: 23 wrz 2018, 11:28

ATXMEGa32A4AU problem z uart

Post autor: grafii1 » 06 gru 2021, 10:18

Witam , problem polega na odczytywaniu tylko 2 bajtów z bufora uart , wysyłając 5 zaków np.12345 na wyświetlaczu pojawią się tylko 12 a reszty po prostu nie ma . Czy ktoś napotkał podobny problem ...
  1. $regfile = "xm32a4udef.dat"
  2. $crystal = 32000000
  3. $hwstack = 32
  4. $swstack = 32
  5. $framesize = 32
  6.  
  7. Debug Off
  8.  
  9. Config Submode = New                                        
  10. Config Eeprom = Quick
  11.  
  12. $lib "xmega.lib"
  13. $external _xmegafix_clear
  14. $external _xmegafix_rol_r1014
  15.  
  16. Config Osc = Disabled , 32mhzosc = Enabled , 32khzosc = Enabled       'We use internal 32MHz
  17. Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1  'Internal 32MHz, no prescaler
  18.  
  19. Config Priority = Static , Vector = Application , Lo = Enabled       'Init Interrupts
  20.  
  21. Config Com3 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
  22. Config Serialin3 = Buffered , Size = 32 , Bytematch = None
  23. Open "COM3:" For Binary As #3
  24.  
  25. Enable Interrupts
  26.  
  27. Config Lcd = 16 * 2 , Chipset = Dogm162v5
  28. Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Portb.0
  29. Cursor Off
  30. Cls
  31.  
  32. Dim L1 As Byte
  33. Dim Comm As String * 8
  34. Dim Buf As Byte
  35. Dim Znak As Byte
  36.  
  37. Do
  38.  
  39.  If Ischarwaiting(#3) > 0 Then
  40.   Do
  41.    Znak = Inkey(#3)
  42.    Select Case Znak
  43.     Case 10 :                                              
  44.     Case 13 :                                              
  45.     Case Else                                                
  46.      Comm = Comm + Chr(znak)                                
  47.    End Select
  48.    Buf = Ischarwaiting(#3)
  49.   Loop Until Buf = 0
  50.  End If
  51.  Incr L1
  52.  
  53.  Cls
  54.  Locate 1 , 1 : Lcd Comm
  55.  Locate 2 , 1 : Lcd L1
  56.  Comm = ""
  57.  Wait 1
  58.  
  59. Loop
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: ATXMEGa32A4AU problem z uart

Post autor: niveasoft » 06 gru 2021, 11:24

Może uC reaguje na pierwszy znak i ledwo zdąży nadejść drugi a trzeciego jeszcze nie ma i spełniony jest warunek Buf = Ischarwaiting(#3) równe zero.
Lepiej zareaguj na jakiś koniec transmisji typu Enter lub LineFeed albo timeout jak w Modbus. Wtedy to sobie wyświetl a nie w kółko Cls i Wait 1
Tak poza tym Serialin3 to raczej COM4. Może w tym problem ;)
grafii1
Posty: 58
Rejestracja: 23 wrz 2018, 11:28

Re: ATXMEGa32A4AU problem z uart

Post autor: grafii1 » 06 gru 2021, 12:43

Witam , na elektrodzie taka sama odpowiedź ... ale ciekawa rzecz , nie ma różnicy jak wytnę linie
  1. 'Config Serialin3 = Buffered , Size = 32 , Bytematch = None
.
Może inny sposób na sprawdzenie zawartości bufora ...

ok , sprawdziłem zmieniając na serialin3 na 2 = COM3 , teraz nic nie wyświetla
Ostatnio zmieniony 06 gru 2021, 12:48 przez grafii1, łącznie zmieniany 1 raz.
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: ATXMEGa32A4AU problem z uart

Post autor: niveasoft » 06 gru 2021, 12:45

Jak wytniesz linię to bufora nie ma wcale. Odbierzesz właśnie jeden lub dwa bajty które akurat spływają.
Zmień cyferkę z Serialin3 na Serialin2.
grafii1
Posty: 58
Rejestracja: 23 wrz 2018, 11:28

Re: ATXMEGa32A4AU problem z uart

Post autor: grafii1 » 06 gru 2021, 12:55

przetestowałem od seliain1 do serialin4 i tylko na serialin2 brak jakichkolwiek znaków
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: ATXMEGa32A4AU problem z uart

Post autor: niveasoft » 06 gru 2021, 13:05

Bo reszta pinów jest nieskonfigurowana i łapie śmieci z powietrza.

Gdybys czytał Helpa do Bascom ....
For the XMEGA, if you set the priority with CONFIG PRIORITY, you must enable the MED priority.
Czy to Tobie coś mówi? :D
grafii1
Posty: 58
Rejestracja: 23 wrz 2018, 11:28

Re: ATXMEGa32A4AU problem z uart

Post autor: grafii1 » 06 gru 2021, 13:23

Przyznaje się do błędu , nie doczytałem ... , po wyłączeniu tej że linii i serialin2 = COM3 normalny odczyt z bufora ...
Dzięki za podpowiedź :D
ODPOWIEDZ