Proste łączenie PC z ATmega

Pisanie aplikacji na PC w Visual Studio
ODPOWIEDZ
Awatar użytkownika
tomaszdko
Posty: 81
Rejestracja: 06 gru 2018, 19:58

Proste łączenie PC z ATmega

Post autor: tomaszdko » 10 kwie 2025, 17:18

Wczoraj pobawiłem się VB.NET , programik typu włącz / wyłącz totalnie najprostsza wersja (szukam jakiś tutoriali) . Chodzi o to że mogę włączyć i wyłączyć diodę , czyli wysłać coś do procka i aby mi robił to co chce .
Interesuje mnie też odbiór danych z procka do PC (formie integer i string) . Jak to zrobić używając SerialPort.Read() ?

Kod atmega:
  1. $REGFILE = "M32DEF.DAT"
  2. $CRYSTAL = 16000000
  3. $BAUD = 115200
  4. $HWSTACK = 100
  5. $SWSTACK = 100
  6. $FRAMESIZE = 100
  7. ENABLE INTERRUPTS
  8. '*********************************************************************************************************************************
  9. '*** LCD ST7735R *****************************************************************************************************************
  10. '*********************************************************************************************************************************
  11. $LIB "GLCD-ST7735R_APRIL.LIB"
  12. CONFIG GRAPHLCD = COLOR ,CS1 = Portc.3   , SCLK = Portc.4 , SI = Portc.5 , A0 = Portc.6 , RST = Portc.7
  13. 'CS1=CS=C3 | SCLK=SCL=C.4 | SI=SDA=C.5 | A0=A0=C.6 | RST=RESET=C.7  (CS1 - PODPIAC POD MINUS ZAMIAST PORTC.3)
  14. CONST PORTRAIT = 0                                        '1=Portrait, 0=Landscape
  15. CONST ROTATE_180 = 0                                      '1=Rotated,  0=Not Rotated
  16. '---------------------------------------------------------------------------------------------------------------------------------
  17. CONST BLACK = &B00000000
  18. CONST WHITE = &B11111111
  19. INITLCD
  20. SETFONT COLOR8X8
  21. 'SETFONT COLOR16X16
  22. CLS
  23. BOXFILL(0 , 0) -(160 , 128) , BLACK   'TLO POZIOM
  24. 'BOXFILL(0 , 0) -(128 , 160) , BLACK   'TLO PION
  25. '*********************************************************************************************************************************
  26. '*** UART-COM1 *******************************************************************************************************************
  27. '*********************************************************************************************************************************
  28. CONFIG COM1 = 115200  , SYNCHRONE = 0 , PARITY = NONE , STOPBITS = 1 , DATABITS = 8 , CLOCKPOL = 0
  29. OPEN "COM1:" FOR BINARY AS #1
  30. CONFIG SERIALIN0 = BUFFERED , SIZE = 10 , BYTEMATCH = 13
  31. ENABLE URXC
  32. DIM RS232_1 AS STRING*20
  33. DIM COM1 AS  LONG
  34. '*********************************************************************************************************************************
  35. '*** ZMIENNE *********************************************************************************************************************
  36. '*********************************************************************************************************************************
  37. CONFIG SINGLE = SCIENTIFIC , DIGITS = 3
  38.  
  39. '*********************************************************************************************************************************
  40. '*** PROGRAM *********************************************************************************************************************
  41. '*********************************************************************************************************************************
  42. DIM KLIK AS DWORD
  43. DO
  44.  
  45. LCDAT 10 , 0 , "COM :"; COM1    ;"     ", WHITE , BLACK
  46. LCDAT 20 , 0 , "RS  :"; RS232_1 ;"     ", WHITE , BLACK
  47. LCDAT 60 , 0 , KLIK ;"     ", WHITE , BLACK
  48. PRINT #1 , KLIK
  49. INCR KLIK
  50.  
  51. WAITMS 100
  52.  
  53. LOOP
  54. END
  55. '---------------------------------------------------------------------------------------------------------------------------------
  56.  
  57. $INCLUDE "COLOR8x8.FONT"
  58. '$INCLUDE "COLOR16x16.FONT"
  59. '---------------------------------------------------------------------------------------------------------------------------------
  60. SERIAL0CHARMATCH:
  61. PUSHALL
  62. INPUT #1, RS232_1 NOECHO
  63. COM1 = VAL(RS232_1)
  64. POPALL
  65. RETURN
Kod dla PC:
  1. Public Class Form1
  2.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  3.         Label1.Text = "ON"
  4.         SerialPort1.Open()
  5.         SerialPort1.Write("ON" & Chr(13)) 'chodzi
  6.         'SerialPort1.Write(Str(licz) & Chr(13))
  7.         SerialPort1.Close()
  8.     End Sub
  9.  
  10.     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  11.         Label1.Text = "OFF"
  12.         SerialPort1.Open()
  13.         SerialPort1.Write("OFF" & Chr(13)) 'chodzi
  14.         'SerialPort1.Write(Str(licz) & Chr(13))
  15.         SerialPort1.Close()
  16.     End Sub
  17.  
  18.     Private Sub SerialPort1_ErrorReceived(sender As Object, e As IO.Ports.SerialErrorReceivedEventArgs) Handles SerialPort1.ErrorReceived
  19.         Dim comBuffer As String
  20.         comBuffer = SerialPort1.ReadLine()
  21.         Label2.Text = (comBuffer)
  22.     End Sub
  23.  
  24. End Class
Wszystko znajdziesz w załączniku
WindowsApplication6.rar
.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
niveasoft
Posty: 1270
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Proste łączenie PC z ATmega

Post autor: niveasoft » 10 kwie 2025, 17:34

Chyba za skromna ta Twoja aplikacja :D
Nie wiadomo do ktorego portu w PC nadaje a już w ogóle z ktorego ma cos odebrac.

Widzialeś ten mój krótki tutorial sprzed paru ładnych lat? -> https://bart-projects.pl/windows.html

Dodatkowo nieciekawie obsługujesz te wprowadzanie danych do Atmegi, ale jeżeli Tobie to działa :D

Jakby cos to jeszcze napisz to może wytnę z jakiegos programu jak ja odbieram dane w Atmegach. Moge też coś wyciąć z aplikacji które zrobiłem na PC.
Na mojej stronece ten tutorial to bardzo prymitywny był, stwierdzam po latach :D
Teraz dane z seriala lub CAN to odbieram w osobnym wątku.

[EDIT] Dołączam tę apkę z tutoriala. Akurat nie mogę jej podejrzeć bo moje Visual Studia się aktualizują :D
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
tomaszdko
Posty: 81
Rejestracja: 06 gru 2018, 19:58

Re: Proste łączenie PC z ATmega

Post autor: tomaszdko » 10 kwie 2025, 17:45

Ja robię dopiero pierwszy podjazd do VB.NET . Potrzeba mi prostej komunikacji nadać i odebrać string . Nadawanie do ATmega jakoś wychodzi i led robi to co chcę ale odbieranie i wyświetlanie na LABEL jakiejś zmiennej już nie wychodzi .
Te ustawienia można pominąć w programie bo z prawej strony można ustawić COMa w dziale "Propertis"
test2.jpg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
niveasoft
Posty: 1270
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Proste łączenie PC z ATmega

Post autor: niveasoft » 10 kwie 2025, 17:48

No i gitara. Przeczytaj tutoriala i podejrzyj moja apkę.
Awatar użytkownika
tomaszdko
Posty: 81
Rejestracja: 06 gru 2018, 19:58

Re: Proste łączenie PC z ATmega

Post autor: tomaszdko » 18 cze 2025, 13:44

Bartek weź mi ogarnij ten UART bo mnie szczyści jak kota po śliwkach .
Są dwa filmy i na pierwszym filmie masz że wszystko chodzi poprawnie ale z opóźnieniem w odbiorze wartości ADC (wiadomo że będzie bo wstawione jest opóźnienie w pętli "waitms 30" a dlaczego to zaraz w drugim filmie zobaczysz).
Wartość z TrackBar1 wysyłana do atmegi chodzi poprawnie.
W filmie drugim jest usunięte opóźnienie no i przy starcie odczyta ADC ale będzie tą wartość długo wyświetlać mimo zmiany na atmedze .
Wartość z TrackBar1 wysyłana do atmegi chodzi poprawnie.
Trzeba mi to tak zrobić odbieranie ADC na kompie bym mógł w czasie rzeczywistym (bez opóźnień wysyłać z atmegi dane ADC).
Jest jeszcze jeden problem z programem po windows , czasem jak zamykam to się wiesz (na razie odpuszczam ten problem bo ważniejszy jest UART).
  1. DO
  2. TOGGLE PORTB.0
  3. WAITMS 30   ' opóźnienie
  4.  
  5. IF RS232_1 <> RS232_1_OLD THEN
  6. RS232_1_OLD=RS232_1
  7. LCDAT  30 , 0 , "RS232_1: "; RS232_1 ;"  ", WHITE , BLACK
  8. END IF
  9.  
  10. ADC0=GETADC(0)
  11. ADC0_STRING = STR(ADC0)
  12. PRINT ADC0
  13.  
  14. LOOP
  15. END
Film z opóźnieniem


Film bez opóźnieniem

uart.rar
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
ODPOWIEDZ