Strona 1 z 1

Komunikacja UART

: 08 gru 2017, 21:27
autor: Karlos128@nos
Witam.
Od kilku dni borykam się z wysyłaniem i odbieraniem danych na COM1 oraz COM2, no i wielka lipka.
Konfiguracja komunikacji mam taką:
  1. $regfile = "m2560def.dat"
  2. $crystal = 16000000
  3. $hwstack = 250
  4. $swstack = 250
  5. $framesize = 250
  6. Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  7. Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  8. Enable Interrupts
  9. Open "com1:" For Binary As #1
  10. Open "com2:" For Binary As #2

Jeden z tych portów wysyła dane z sterownika MPPT do komputera przy pomocy modułu radiowego HC-12,
a drugi COM ma za zadanie wysyłać dane do samego regulatora MPPT.
A więc moje pytanko brzmi? w jaki sposób wysłać taką komendę poniżej i co by trzeba było dopisać w programie, pewnie trzeba by użyć procedurki - serialin1 lub 2.
- częstotliwość: "S1F20.5T"
- Wypełnienie : "S1D075T"
Wysyłanie musi być w cudzysłowach.
Bardzo bym był wdzięczny za pomoc.

Re: Komunikacja UART

: 09 gru 2017, 3:13
autor: niveasoft
Trochę mało danych a i program to to nie jest tylko namiastka :D

Samo wysyłanie jest dość proste. Cudzysłów ma w ASCII wartość 34. Żeby coś wysłać w cudzysłowiu wystarczy dodać "{034}"
Kiedy otwierasz port Alias #1 to potem musisz tego używać.
Tak wiec na końcu komendy mogą wyglądać tak:
  1. Print #1, "{034}S1F20.5T{034}";
  2. 'albo
  3. Printbin #1, "{034}S1F20.5T{034}"

Re: Komunikacja UART

: 10 gru 2017, 17:31
autor: Karlos128@nos
Ta maleńka regułka powiodła. Pierwsza linijka kodu .
Print #3, "S1F45.5T";

A co z tym odbiorem danych? Czy dobrze tak będzie.
  1. Dim info As String * 16
  2. Config Serialin3 = Buffered , Size = 100 , Bytematch = All
  3. Enable Interrupts
  4.  
  5. do
  6.    If Ischarwaiting() = 1 Then
  7.       Input info
  8.       Locate 12 , 1 : Lcd Info    ' wyświetlanie informacji przychodzącej
  9.    End If
  10. Loop

Re: Komunikacja UART

: 10 gru 2017, 17:55
autor: niveasoft
Wsadź ten kod prawidlowo w znaczniki jak każdy mój inny tu na Forum.
To nie jest skomplikowane. Edytujesz wiadomość i zamiast "</>" wybierasz niżej "Select code" . Dalej z rozwijanej listy wybierasz Bascom AVR i kod będzie kolorowany i na dodatek nie trzeba go przewijać.

Ten kod odbioru ma ten sam błąd. Powinno się napisać:
  1. If Ischarwaiting(#3) = 1 Then                              
  2.     Input #3 , info  ' <<< WAŻNE gdzie spodziewasz się danych #3
  3.     Locate 12 , 1 : Lcd Info    ' wyświetlanie informacji przychodzącej                                        
  4. End If
Dodatkowo powinieneś sprawdzić jak się kończą te stringi wysyłane przez moduł bo to równie ważne. Jak Bascom będzie czekał na Enter a go nie będzie to będzie czekał w nieskończoność i program zawiśnie.
Do tego na co czeka w takim wypadku Bascom służy polecenie "Config Input"