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 :)
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.
:
Bearbeitet durch User
Ganz einfache Sachen wie z.B 2+2. Nichts kompliziertes. Hauptaugenmerk liegt auf der Verbindung C# zum ATMEGA8. Quasi als Fernsteuerung.
Kevin Antonow schrieb: > Ganz einfache Sachen wie z.B 2+2. Nichts kompliziertes. Dann würde ich
1 | "<Zahl1>+<Zahl2>\n" |
an den µC senden, den String dort parsen und die Operation dann ausführen und ausgeben
:
Bearbeitet durch User
Max H. schrieb: > Dann würde ich >
1 | "<Zahl1>+<Zahl2>\n" |
> an den µC senden,
Das war ja die Frage. Wie ich genau das mache. Da habe ich nicht so den
Durchblick. Ich habe mir auf Google einiges angeschaut, aber eine
richtige Antwort habe ich nicht gefunden und natürlich auch noch wie ich
es an C# wieder zurücksende.
:
Bearbeitet durch User
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.
Kevin Antonow schrieb: > Das war ja die Frage. Wie ich genau das mache.
1 | int zahl_1; |
2 | int zahl_2; |
3 | |
4 | // Read user input
|
5 | |
6 | string tx_str = zahl_1.ToString(); |
7 | tx_str += "+"; |
8 | tx_str += zahl_2.ToString(); |
9 | tx_str += "\n"; |
10 | |
11 | // Now send tx_str via serial
|
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?
:
Bearbeitet durch User
Kevin A, schrieb: > Aber wie schicke ich einen ASCII Code an den Mikrocontroller? einfach mal die Doku lesen? https://msdn.microsoft.com/de-de/library/system.io.ports.serialport(v=vs.110).aspx welche Funktion könnte denn da in frage kommen?
Tip: Steht unter Funktionen bzw Methoden und beginnt mit W... "\n" nennt man auch "Newline".
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.
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.
sorry, das letzte muss natürlich heissen. if operator = "/" then ergebnis = a / b Und für die Umwandlung z und y in a und b wären flotingPoint Variablen nützlich
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
Kevin A, schrieb: > Ich muss für ein Schuldprojekt einen Mikrocontroller (ATMEGA8) per > Serieller Mini USB Schnittstelle verbinden.... Da sieht man wieder: Schulden machen bringt manch Einen in Zwangslage... MfG Paul
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.