Armins AVR-Buch - ADC_Werte_einlesen_und_am_PC_ausgeben

Zuletzt geändert am 09.12.2023, 17:23:37

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:

Bild ADC7.jpg


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..