Rodzina procesorów bogatszych w wiele nowych rozwiązań i dlatego warto po nie sięgnąć.
-
grafii1
- Posty: 58
- Rejestracja: 23 wrz 2018, 11:28
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 ...
$regfile = "xm32a4udef.dat"
$crystal = 32000000
$hwstack = 32
$swstack = 32
$framesize = 32
Debug Off
Config Submode = New
Config Eeprom = Quick
$lib "xmega.lib"
$external _xmegafix_clear
$external _xmegafix_rol_r1014
Config Osc = Disabled , 32mhzosc = Enabled , 32khzosc = Enabled 'We use internal 32MHz
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 'Internal 32MHz, no prescaler
Config Priority = Static , Vector = Application , Lo = Enabled 'Init Interrupts
Config Com3 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
Config Serialin3 = Buffered , Size = 32 , Bytematch = None
Open "COM3:" For Binary As #3
Enable Interrupts
Config Lcd = 16 * 2 , Chipset = Dogm162v5
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Portb.0
Cursor Off
Cls
Dim L1 As Byte
Dim Comm As String * 8
Dim Buf As Byte
Dim Znak As Byte
Do
If Ischarwaiting(#3) > 0 Then
Do
Znak = Inkey(#3)
Select Case Znak
Case 10 :
Case 13 :
Case Else
Comm = Comm + Chr(znak)
End Select
Buf = Ischarwaiting(#3)
Loop Until Buf = 0
End If
Incr L1
Cls
Locate 1 , 1 : Lcd Comm
Locate 2 , 1 : Lcd L1
Comm = ""
Wait 1
Loop
-
niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
-
Kontakt:
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
Post
autor: grafii1 » 06 gru 2021, 12:43
Witam , na elektrodzie taka sama odpowiedź ... ale ciekawa rzecz , nie ma różnicy jak wytnę linie
'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.
-
niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
-
Kontakt:
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
Post
autor: grafii1 » 06 gru 2021, 12:55
przetestowałem od seliain1 do serialin4 i tylko na serialin2 brak jakichkolwiek znaków
-
niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
-
Kontakt:
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?
-
grafii1
- Posty: 58
- Rejestracja: 23 wrz 2018, 11:28
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ź