Witam.
Od pewnego czasu uczę się pisać w VB.. Teraz, by wykorzystać potęgę wbudowanego w Atmegi UARTu, chcę sam stworzyć prosty terminal do odbioru i nadawania stringów. Zasada działania ma być bardzo prosta - wszystko co wyśle uC ma być wpisane do pola tekstowego, i analogicznie w drugą stronę (chodź tu zależy jaki program jest napisany na uC, ale nie ważne skupmy się na odbieraniu...). Czemu nie użyje gotowego, dobrze działającego terminala? Dlatego, że pisząc swój dużo się nauczę i będę mógł wykorzystać do przyszłych programów.
Nadawanie wychodzi mi bez problemu - piszę string, klikam wyślij i leci do uC. Wszystko pięknie..
Gorzej ma się sprawa z odbieraniem stringów zakończonych znakiem o kodzie 13 (zwykły enter, Chr(13)), używam do odbioru timera, oraz polecenia ReadLine. Niestety gdy uC wyśle cokolwiek zakończonego Chr(13) to cały program na PC łapie zawieszkę.
Poniżej wycinek odpowiedzialny za odbiór danych (a raczej za próbę odbioru...):
Oczywiście port został wcześniej skonfigurowany i otwarty...
Szukałem za pomocą Google jakiś informacji na temat sposobów odbierania danych, lecz nie ma ich za dużo...
Pozdrawiam i z góry dziękuję za pomoc, Wojtek
Od pewnego czasu uczę się pisać w VB.. Teraz, by wykorzystać potęgę wbudowanego w Atmegi UARTu, chcę sam stworzyć prosty terminal do odbioru i nadawania stringów. Zasada działania ma być bardzo prosta - wszystko co wyśle uC ma być wpisane do pola tekstowego, i analogicznie w drugą stronę (chodź tu zależy jaki program jest napisany na uC, ale nie ważne skupmy się na odbieraniu...). Czemu nie użyje gotowego, dobrze działającego terminala? Dlatego, że pisząc swój dużo się nauczę i będę mógł wykorzystać do przyszłych programów.
Nadawanie wychodzi mi bez problemu - piszę string, klikam wyślij i leci do uC. Wszystko pięknie..
Gorzej ma się sprawa z odbieraniem stringów zakończonych znakiem o kodzie 13 (zwykły enter, Chr(13)), używam do odbioru timera, oraz polecenia ReadLine. Niestety gdy uC wyśle cokolwiek zakończonego Chr(13) to cały program na PC łapie zawieszkę.
Poniżej wycinek odpowiedzialny za odbiór danych (a raczej za próbę odbioru...):
Oczywiście port został wcześniej skonfigurowany i otwarty...
Dim otrzymane As String
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim Send As Integer
Send = Form1.SerialPort1.BytesToRead
If Send > 0 Then
otrzymane = Form1.SerialPort1.ReadExisting
RichTextBox1.Text = RichTextBox1.Text + otrzymane
End If
End Sub
Szukałem za pomocą Google jakiś informacji na temat sposobów odbierania danych, lecz nie ma ich za dużo...
Pozdrawiam i z góry dziękuję za pomoc, Wojtek