C# - Mikrocontroller Brige

OP #4108822
Lesenswert?
• ▲
▼
Hi,

Ich muss für ein Schuldprojekt einen Mikrocontroller (ATMEGA8) per 
Serieller Mini USB Schnittstelle verbinden und einfache 
Rechenoperationen wie z.B "2+2" ausrechnen lassen und auf einem Display 
ausgeben lassen.
Problem ist dabei, dass das ganze dann über einen C# Programm laufen 
soll.
Also quasi soll ich ein C# Programm schreiben, wo ich 2 + 2 eingebe, es 
soll an den Controller geschickt werden, der Mikrocontroller soll es 
berechnnnen und am Ende soll die Rechnung vom Mikrocontroller auch 
wieder zum C# Programm zurückgeschickt werden.

Mein Programmierlehrer meinte, dass sei sehr einfach und ich weiß, dass 
ich die SerialPort Class nutzen muss, allerdings stehe ich beim genauen 
Ablauf etwas auf dem Schlauch. Muss ich die Rechenoperation in Binäre 
Zahlen umwandeln und das an ein Bascom Programm schicken oder wie mache 
ich das am besten?

Danke für jede Hilfe :)
#4108830
Lesenswert?
• ▲
▼
Kevin Antonow schrieb:
> Muss ich die Rechenoperation in Binäre
> Zahlen umwandeln und das an ein Bascom Programm schicken oder wie mache
> ich das am besten?
Zahlen sind im PC und µC schon binär. Ich würde sie ASCII Codieren.

Welche Rechenoperation sollen ausgeführt werden, wie lange? Sind es nur 
so Sachen wie A+B, A-B, A*B, A/B, nur A+B oder auch komplizierteres wie 
A+B*C-D.
Gast #4108861
Lesenswert?
• ▲
▼
Hängt mit von der Programmiersprache für den µC zusammen wie einfach das 
wird.

Auf dem µC die Serielle Schnittstelle (UART) konfigurieren und abfragen.
Wenn was kommt, warten bis die Zeile komplett empfangen wurde, dann in 
Zahl1,Operator,Zahl2 zerlegen, Anhand dem Operator berechnen und das 
Ergebnis wieder auf die serielle Schnittstelle schreiben.

Das kann man auch direkt mit einem Terminalprogramm auf dem PC testen 
bis es funktioniert.

Auf dem PC mit C# im Prinzip das selbe. Die Eingaben (Zahl1, Zahl2, 
Operator) über die serielle Schnittstelle an den µC schicken und die 
empfangenen Daten (das Ergebnis) wieder anzeigen.
OP #4108872
Lesenswert?
• ▲
▼
Blinky schrieb:

> Auf dem PC mit C# im Prinzip das selbe. Die Eingaben (Zahl1, Zahl2,
> Operator) über die serielle Schnittstelle an den µC schicken

Ja. Mit welchen Befehl mache ich das?

Ich kann mit der SerialPortKlasse, den Mikrocontroller über C# 
ansprechen:

private SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, 
StopBits.One);

Aber wie schicke ich einen ASCII Code an den Mikrocontroller?
Sagen wir mal ich habe eine ASCII Zeichenkette, die ich in C# schon 
konventiert habe, dann muss ich ja über die Serialport Schnittstelle 
IRGENDWIE C# sagen, dass er das jetzt zum Mikrocontroller senden soll.
Ich habe also eine Variable... Und dann ja. Keine Ahnung.

> // Now send tx_str via serial

Ja, nur wie?
OP #4108954
Lesenswert?
• ▲
▼
WOW. Danke. Ich habe jetzt einen Anfang. Hat mir super geholfen.
Jetzt bleibt nur noch eine Frage: Nämlich wenn ich die Strings zum uC 
geschickt habe: Wie frage ich diese in der IDE (In meinem Fall BASCOM) 
ab?
Quasi eine if Abfrage ala.

if data_recieved
z = string1
y = string 2
Rechenoperator = string3

Und vorallem wie ich in Bascom den Rechenoperator (+, - usw.) als 
Rechenoperator unwandle..

Sorry. Ich bin neu auf dem Gebiet. Ich denke sonst habe ich auch keine 
Fragen mehr.
Gast #4108970
Lesenswert?
• ▲
▼
Kevin A, schrieb:
> Quasi eine if Abfrage ala.
>
> if data_recieved
> z = string1
> y = string 2
> Rechenoperator = string3
>
> Und vorallem wie ich in Bascom den Rechenoperator (+, - usw.) als
> Rechenoperator unwandle..

In Bascom wandelst Du den Operator gar nicht um, sondern fragst den nur 
für die Entscheidung für die Rechenoperation ab. Zuerst wandelst Du aber 
z und y wieder in numerische Variablen (z.B. a und b) zurück:

if operator = "+" then
   ergebnis = a + b
if operator = "-" then
   ergebnis = a - b
if operator = "*" then
   ergebnis = a * b
if operator = "*" then
   ergebnis = a * b

sende ergebnis > PC

Damit hast Du gleich die Grundrechenarten erschlagen.
Gast #4108973
Lesenswert?
• ▲
▼
Mit Bascom kenn ich mich jetzt überhaupt nicht aus.
Schau mal was es bei Bascom in der Stringverabeitung gibt, was Du 
brauchst wäre "Suche ein Charakter in einem String" und "Zerlege den 
String an dieser Stelle".
Im Prinzip so was wie:

- Warte bis ein String von der seriellen Schnittstelle gekommen ist
- Suche den Operator (+,-,...)
- Kopiere den Operator in eine Variable (Operator)
- Kopiere den Teil vor dem Operator in eine Variable (Zahl 1)
- Kopiere den Teil nach dem Operator in eine Variable (Zahl 2)
- Erzeuge eine leere Variable für das Ergebnis
- Mache für jeden möglichen Operator eine "IF" Abfrage
  if(operator == "+") dann ergebnis = zahl1 + zahl2
  if(operator == "-") dann ergebnis = zahl1 - zahl2
  ...
- Schreibe die Ergebnis Variable zurück auf die serielle Schnittstelle
OP #4118289
Lesenswert?
• ▲
▼
So.


Danke schon mal für die viele Hilfe. Hat mich sehr gut weitergebracht.
Allerdings gibt es noch ein Problem: Der Mikrocontroller scheint nicht 
die Variablen zu empfangen.

Mein C# Code:

 try
                    {

                        port.Open();
                        port.Handshake = Handshake.XOnXOff;
                        int zahl_1 = Convert.ToInt32(textBox1.Text);
                        int zahl_2 = Convert.ToInt32(textBox2.Text);
                        string tx_str = Convert.ToString(zahl_1);
                        string tx_str2 = Convert.ToString(zahl_2);
                        port.Write(tx_str);


                    }
                    catch (Exception exc)
                    {
                        MessageBox.Show("Fehler beim Senden der Daten. 
Mikrocontroller nicht gefunden." + Environment.NewLine + 
Environment.NewLine + exc.ToString());
                    }




Und mein Bascom Code:
Do
Dim Empfangen As String * 255
 Input Empfangen
Cls
LCD Empfangen
Loop
End

Im C# Programm gibt es keine Fehler und der Code wird abgeschickt und 
alles wird erkannt, allerdings kommt im Controller gar nichts an und ich 
weiß nicht was ich sonst noch ausprobieren soll.

Hat jemand eine Idee? Danke.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren