Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
juref Član
Pridružen-a: Tor 15 Dec 2009 11:45 Prispevkov: 226 Aktiv.: 1.29 Kraj: Črnomelj
|
Objavljeno: Ned Apr 22, 2012 10:51 pm Naslov sporočila: Atmega8 + Visual basic |
|
|
Pozdravljeni!
Za nalogo sem si zadal izdelati voltmeter, katerega bi vrednost odčitaval na računalniku. Program UART za Mega8 sem napisal in v terminalu deluje. Sedaj bi povezal to z Visual studio 2010 vendar mi nekako ne izpisuje ničesar (V tem sem še "vajenec "), povezavo pa vzpostavim. Prosil bi če ima kdo mogoče kakšen podoben primer narejen oz. kje bi lahko takšen primer našel.
Koda v VB:
Koda: |
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SerialPort1.PortName = ComboBox1.Text
SerialPort1.BaudRate = ComboBox2.Text
SerialPort1.Open()
If SerialPort1.IsOpen Then TextBox1.Text = "Povezava je vspostavljena"
TextBox1.BackColor = Color.PaleGreen
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SerialPort1.Close()
If SerialPort1.IsOpen = False Then TextBox1.Text = "Povezava je prekinjena"
TextBox1.BackColor = Color.PaleVioletRed
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim meritev As String = ""
meritev = SerialPort1.ReadLine
TextBox2.Text = meritev
End Sub
End Class
|
Najlepša hvala za odgovore ter lep dan! |
|
Nazaj na vrh |
|
|
matjazkariz Član
Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.60
|
Objavljeno: Pon Apr 23, 2012 12:39 am Naslov sporočila: |
|
|
V 7 ali 8 številki revije Elektronik.si je objavljen enostaven primer programa, ki komunicira preko serial porta v VB2008. Glej članek o CAN komunikaciji - II. del. _________________ LP, Matjaž |
|
Nazaj na vrh |
|
|
RGorazd Član
Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1713 Aktiv.: 7.68 Kraj: Ig
|
Objavljeno: Pon Apr 23, 2012 7:19 am Naslov sporočila: |
|
|
Tako ti ne bo delovalo, saj je :
Koda: |
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim meritev As String = ""
meritev = SerialPort1.ReadLine
TextBox2.Text = meritev
End Sub
|
svoj thread. Poglej si malo o crossthreading in pa delegatih. VB in Visual C# sta precej podobna. Jaz imam v C# tako rešeno, z malce iznajdljivosti boš hitro prenesel zadevo v VB. Rabiš eno globalno spremenljivko tipa string, Private void serialPort1_datarecieved je zgoraj omenjeni thread, ki teče ločeno, label1.text je pa ena labela, ki prikazuje rezultat.
Koda: |
globalno:
string RxString;
---------------------------------------------------------------------------------------------
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}
private void DisplayText(object sender, EventArgs e)
{
label1.Text = RxString;
}
---------------------------------------------------------------------------------------------
|
LP G _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
|
besoft Član
Pridružen-a: Ned 01 Apr 2012 10:22 Prispevkov: 585 Aktiv.: 3.98 Kraj: Žižki - Prekmurje
|
Objavljeno: Pon Apr 23, 2012 9:13 am Naslov sporočila: |
|
|
jaz za komunikacije uporabljam kar Office 2010 programe (Access, Excell) ...in pa komunikacijsko knjižnico Scomm32 ali Scom64. Je bistveno bolj enostano.. |
|
Nazaj na vrh |
|
|
juref Član
Pridružen-a: Tor 15 Dec 2009 11:45 Prispevkov: 226 Aktiv.: 1.29 Kraj: Črnomelj
|
Objavljeno: Pon Apr 23, 2012 6:28 pm Naslov sporočila: |
|
|
hvala vsem bom poizkusil vse. Office odpade ker bom moral za diplomo naredit podobno zahtevo ampak zdaj se bi rad vsaj osnovno naučil.
Hvala še enkrat ! |
|
Nazaj na vrh |
|
|
juref Član
Pridružen-a: Tor 15 Dec 2009 11:45 Prispevkov: 226 Aktiv.: 1.29 Kraj: Črnomelj
|
Objavljeno: Pon Apr 23, 2012 6:51 pm Naslov sporočila: |
|
|
RGorazd je napisal/a: |
Tako ti ne bo delovalo, saj je :
Koda: |
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim meritev As String = ""
meritev = SerialPort1.ReadLine
TextBox2.Text = meritev
End Sub
|
svoj thread. Poglej si malo o crossthreading in pa delegatih. VB in Visual C# sta precej podobna. Jaz imam v C# tako rešeno, z malce iznajdljivosti boš hitro prenesel zadevo v VB. Rabiš eno globalno spremenljivko tipa string, Private void serialPort1_datarecieved je zgoraj omenjeni thread, ki teče ločeno, label1.text je pa ena labela, ki prikazuje rezultat.
Koda: |
globalno:
string RxString;
---------------------------------------------------------------------------------------------
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}
private void DisplayText(object sender, EventArgs e)
{
label1.Text = RxString;
}
---------------------------------------------------------------------------------------------
|
LP G |
najlepša hvala! sem zadevo rešil do te mere da mi nekaj napiše hehe no rešil sem pa po vašem primeru in po veliko sreče
Koda: |
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
meritev = SerialPort1.ReadExisting
Invoke(New EventHandler(AddressOf displaytext))
End Sub
Private Sub displaytext(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click
Label3.Text = meritev
End Sub
|
|
|
Nazaj na vrh |
|
|
RGorazd Član
Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1713 Aktiv.: 7.68 Kraj: Ig
|
Objavljeno: Pon Apr 23, 2012 9:43 pm Naslov sporočila: |
|
|
Ni problema. Tudi sam sem šel čez to in se soočal z istimi problemi.
Sicer lahko narediš po češko, tako da nekaj pošlješ na uart, malce zakasniš in potem izvedeš polling, vendar to ni to. S tem si še bolj zakompliciraš življenje.
LP G _________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.44 Kraj: Vrhnika
|
Objavljeno: Tor Jun 02, 2015 9:12 pm Naslov sporočila: |
|
|
Zdravo
Imam neko čudno situacijo. Povezati želim PC in mega8. Naredil sem aplikacijo, v kateri imam textbox in njeno vsebino želim poslati preko com porta v mega8.
Koda: |
SerialPort1.Write("01" & TextBox1.Text & vbNewLine) |
Stvar pa ne deluje, kot da aplikacija nič ne pošlje v mega8. Če isti string napišem preko programa virtual terminal pa zadeva deluje Prav tako sem preko virtual terminala gledal kaj aplikacija napiše na com port in napiše pravilno.
Baud rate je nastavljen na 9600.
Koda: |
SerialPort1.BaudRate = 9600
SerialPort1.Parity = Parity.None
SerialPort1.StopBits = StopBits.One
SerialPort1.DataBits = 8 |
Sem pa skoraj 100% da ni težava v mega8 |
|
Nazaj na vrh |
|
|
airwolf Član
Pridružen-a: Sre 28 Maj 2008 17:17 Prispevkov: 2063 Aktiv.: 10.65
|
Objavljeno: Tor Jun 02, 2015 9:59 pm Naslov sporočila: |
|
|
Kaj pa če poskusiš celoten string najprej sestaviti in šele potem poslati v mego?
Koda: |
dim besedilo as string
besedilo = "01" & TextBox1.Text & vbNewLine
SerialPort1.Write(besedilo)
|
_________________ LP Gašper |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.44 Kraj: Vrhnika
|
Objavljeno: Pet Jun 05, 2015 8:32 pm Naslov sporočila: |
|
|
Brez uspeha |
|
Nazaj na vrh |
|
|
airwolf Član
Pridružen-a: Sre 28 Maj 2008 17:17 Prispevkov: 2063 Aktiv.: 10.65
|
Objavljeno: Sob Jun 06, 2015 6:59 pm Naslov sporočila: |
|
|
Daj namesto vbNewLine raje vbCrLf pa poglej če to naredi razliko.
Ker vbNewLine nisem čist 100% če dejansko simulira enter. _________________ LP Gašper |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.44 Kraj: Vrhnika
|
Objavljeno: Sob Jun 06, 2015 7:23 pm Naslov sporočila: |
|
|
Preizkušeno z vbNewLine in vbCrLf. |
|
Nazaj na vrh |
|
|
airwolf Član
Pridružen-a: Sre 28 Maj 2008 17:17 Prispevkov: 2063 Aktiv.: 10.65
|
Objavljeno: Sob Jun 06, 2015 7:37 pm Naslov sporočila: |
|
|
In obakrat ne deluje?
Pol sem pa počasi brez idej.
A če daš na drugo stran kabla drug računalnik podatke dobiš?
Ker serijski snifer ti pokaže samo podatke na žici, ne pa kaj dejansko na drugi strani pride ven. _________________ LP Gašper |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.44 Kraj: Vrhnika
|
Objavljeno: Sob Jun 06, 2015 7:43 pm Naslov sporočila: |
|
|
Da dobim podatke na drugi strani. Tudi če podatke simuliram z virtual terminalom se čip pravilno odziva.
PS: Zdaj sem probal samo z vbCr zdaj pa deluje
Hm čudno |
|
Nazaj na vrh |
|
|
Krampus Član
Pridružen-a: Pon 08 Sep 2008 13:07 Prispevkov: 1826 Aktiv.: 9.60
|
Objavljeno: Sob Jun 06, 2015 9:00 pm Naslov sporočila: |
|
|
Koda: |
Constant Equivalent Description
vbCrLf Chr(13) + Chr(10) Carriage return–linefeed combination
vbCr Chr(13) Carriage return character
vbLf Chr(10) Linefeed character
vbNewLine Chr(13) + Chr(10) Platform-specific new line character; whichever is appropriate for current platform |
_________________ Nisem ravno najbolj pameten na svetu, tu in tam pa imam kakšno idejo. |
|
Nazaj na vrh |
|
|
|