Hi,
ich bin gerade am Experimentieren mit dem ATMega8 und möchte dass dieser
mit einem selbst geschriebenen C# Programm kommuniziert.
Als Hardware nutze ich zur Zeit noch das Pollin Board, d.h.
hardwaremäßig sollten keine Probleme auftreten.
Mittlerweile habe ich es hinbekommen, über eine Terminalsoftware (von
Bascom) einen Text an den µC zu schicken und ich bekomme auch eine
Antwort. Wenn ich den Text "Hallo" schicke, leuchtet eine LED für 2
Sekunden auf.
Das Bascom Programm ist recht einfach:
1 | $regfile = "M8def.dat"
|
2 | $crystal = 1000000
|
3 | $hwstack = 100
|
4 | $swstack = 100
|
5 | $framesize = 100
|
6 | $baud = 4800
|
7 |
|
8 | Portd.6 = 1 'eine LED
|
9 |
|
10 | Dim Empfangen As String * 20
|
11 |
|
12 | Print "Bitte sende mir etwas"
|
13 |
|
14 | Do
|
15 | Empfangen = ""
|
16 | Input Empfangen
|
17 | If Empfangen = "Hallo" Then
|
18 | Portd.5 = 1 'eine andere LED
|
19 | Waitms 2000
|
20 | Portd.5 = 0
|
21 | End If
|
22 |
|
23 | Print "Antwort: " ; Empfangen 'Antwort des µC
|
24 | Loop
|
25 | End
|
Wenn ich allerdings mit einem C# Programm versuche, einen Text aus einer
Textbox an den µC zu senden, leuchtet keine LED auf wenn ich "Hallo"
sende, von einer Antwort gar nicht zu reden.
Angenommen ich sende zuerst "Hallo" und kurz darauf "Mikrocontroller",
scheint sich nichts zu tun. Dann habe ich mein C#-Programm mal
geschlossen und über den Bascom-Terminal "WieGehts" gesendet. Die
unerwartete Antwort des Mikrocontrollers war:
"HalloMikrocontrollerWieGehts". Seinbar scheint der Mikrocontroller also
in der Inputanweisung stecken zu bleiben.
Mein C#-Programm sieht wie folgt aus:
1 | using System;
|
2 | using System.Collections.Generic;
|
3 | using System.Drawing;
|
4 | using System.Windows.Forms;
|
5 | using System.IO.Ports;
|
6 |
|
7 | namespace Seriell1
|
8 | {
|
9 | public partial class MainForm : Form
|
10 | {
|
11 | SerialPort serialPort1;
|
12 | public MainForm()
|
13 | {
|
14 | InitializeComponent();
|
15 | serialPort1 = new SerialPort("COM1",4800,Parity.None,8,StopBits.One);
|
16 | serialPort1.Handshake=Handshake.None;
|
17 | serialPort1.RtsEnable=false;
|
18 | serialPort1.Open();
|
19 | }
|
20 |
|
21 | void BtnSendClick(object sender, EventArgs e)
|
22 | {
|
23 | serialPort1.Write(TBText.Text); // Senden des Textboxinhaltes an den µC
|
24 | }
|
25 |
|
26 | private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
|
27 | {
|
28 | string inputData = serialPort1.ReadExisting(); // Empfangen des zurückgesendeten Inhalts und Anzeigen in einer Messagebox
|
29 | MessageBox.Show(inputData);
|
30 | }
|
31 |
|
32 | void MainFormFormClosed(object sender, FormClosedEventArgs e)
|
33 | {
|
34 | serialPort1.Close();
|
35 | }
|
36 | }
|
37 | }
|
Weiß jemand was falsch ist? Vermutlich liegt der Fehler im C#-Programm,
aber ich finde ihn nicht.
Danke für eure Hilfe ;)
MfG feuerfuchs