ADC_Werte_einlesen_und_am_PC_ausgeben
(armin77, 02.01.2013, 15:23:02)Zeige hier eine Möglichkeit ADC Werte mit einem AVR einzulesen und
am PC mit einem Visual Basic Programm auszugeben
Hier das AVR Programm:
$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 16
$framesize = 32
$baud = 2400
Dim Wert1 As Word
Dim Wert2 As Word
Dim Wert3 As Word
Dim Wert4 As Word
Dim Senden As String * 255
Config Portc = Input
Config Timer1 = Timer , Prescale = 64
On Timer1 Anzeigen
Enable Timer1
Enable Interrupts
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Do
Wert1 = Getadc(0)
Wert2 = Getadc(1)
Wert3 = Getadc(2)
Wert4 = Getadc(3)
Senden = Str(wert1) + ":" + Str(wert2) + ":" + Str(wert3) + ":" + Str(wert4)
Loop
Anzeigen:
Print Senden
Return
End
Wir lesen die ADC-Werte mit einem ATMEGA 8 ein und speichern sie in den Variablen Wert1 bis Wert4.
Daraus bauen wir einen String und trennen die Werte durch einen Doppelpunkt, damit
Visual Basic den String später wieder splitten kann.
Wir stellen Timer1 so ein, daß ca. alle 4 Sekunden der String über die serielle Schnittstelle
Uart des AVR gesendet wird.
Wir schließen nun den AVR über einen Pegelwandler (z.b. Max232) an den PC an und starten
Visual Basic.
Hier das VB Programm:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
SerialPort1.PortName = TextBox6.Text
SerialPort1.BaudRate = TextBox7.Text
SerialPort1.Open()
Catch ex As Exception
MsgBox("Fehler")
End Try
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SerialPort1.Close()
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Me.Invoke(Sub() Anzeigen())
End Sub
Private Sub Anzeigen()
Dim ausgabe As String = SerialPort1.ReadTo(vbCrLf)
TextBox1.Text = Ausgabe
Dim befehl() As String = ausgabe.Split(":")
TextBox2.Text = befehl(0)
TextBox3.Text = befehl(1)
TextBox4.Text = befehl(2)
TextBox5.Text = befehl(3)
ProgressBar1.Value = befehl(0)
ProgressBar2.Value = befehl(1)
ProgressBar3.Value = befehl(2)
ProgressBar4.Value = befehl(3)
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
If SerialPort1.IsOpen Then
SerialPort1.Close()
End If
End Sub
End Class
Hier ein Bild von dem Programm in Action:
In den Textboxen oben links wird die Schnittstelle und die Baudrate eingestellt.
Dann klicken wir auf Verbinden und der String und die gesplitteten Werte werden in
den entsprechenden Textboxen angezeigt.
Zusätzlich zu den Werten gibt es noch eine Balkenanzeige darunter.
Mit "Trennen" wird die Schnittstelle geschlossen.
Viel Spaß beim ausprobieren..