Mikroncontroller über Programm mit intigrierter GUI steuern

Gast #3352270
Lesenswert?

Hi @ all,

folgendes Problem: Ich steuere ein Magnetventil mittels ATmega32 an.
Meine Schleife sieht aktuell so aus (nur zur Orientierung, wie Ablauf 
aussieht):

Do
   'PC2: Signal einschalten (HIGH)
   Portc.2 = 1

   'xx Sekunden Warten
   Waits 3

   'PC2: Signal ausschalten (LOW)
   Portc.2 = 0

   'xx Sekunden Warten
   Waits 60
Loop


Jetzt würde ich gerne die delay-Zeiten über eine GUI steuern können. 
Sprich zwei Textfelder die mittels Buttonklick die Zeiten in meinem 
Quellcode ändern. Desweiteren wäre es klasse, wenn man noch einen Button 
programmieren kann, der den Quellcode kompiliert und in den 
Mikrocontroller überträgt.

Würde mir gerne das übertragen von Steuersignalen an den USART ersparen, 
da ich lesen musste, dass das erlenen und erstellen einer GUI einen sehr 
langen Zeitraum (6 Monate für Anfänger?!) in Anspruch nimmt.

Ja ich weis, du fauler Hund, zu bequem um etwas Neues zu erlernen, nur 
leider ist für dieses Projekt der zeitliche Rahmen begrenzt. Könnte 
maximal zwei Monate investieren :-(!

Deshalb bin ich auf der Suche nach einem Programm, mit dem man die oben 
aufgeführten Anforderungen umsetzen kann.
Gibt es so etwas auf dem Markt?

Gehe auch gerne näher auf Details ein, falls es Fragen zum Projekt gibt.

Danke schon mal für die Hilfe
#3352278
Lesenswert?

>Jetzt würde ich gerne die delay-Zeiten über eine GUI steuern können.
>Sprich zwei Textfelder die mittels Buttonklick die Zeiten in meinem
>Quellcode ändern. Desweiteren wäre es klasse, wenn man noch einen Button
>programmieren kann, der den Quellcode kompiliert und in den
>Mikrocontroller überträgt.

Was soll den der Murks.... Das macht man so nicht.

>Würde mir gerne das übertragen von Steuersignalen an den USART ersparen

Da wirst du wohl nicht drum herum kommen.

Um was geht es denn genau?
Gast #3352282
Lesenswert?

Nimm die UART des Controllers und schließe da einen MAX232 an. Am PC 
nimmst du einen USB Seriellwandler mit virtuellem Comporttreiber. Als 
Frontend kannst ein Terminalprogramm wie z.B. Teraterm nehmen. Dann 
musste im Controller zeichenketten definieren, aus denen er weiß, welche 
Variable er auf welchen Wert setzten soll. Diese Zeichenketten kannst im 
Terminalprogramm senden.

Sei dir bewusst dass manche Terminalprogramme per default ein Carriage 
Return als letztes Zeichen senden und manche nicht. So währe es 
vielleicht sinnvoll, auch einen Loopback vom Controller zum PC zumachen. 
Dann siehst du im return, was dein Controller "sieht".
#3352285
Lesenswert?

GST schrieb:
> Nimm die UART des Controllers und schließe da einen MAX232 an. Am PC
> nimmst du einen USB Seriellwandler mit virtuellem Comporttreiber.

Lieber direkt einen USB-TTL Wandler und ohne MAX232 auf den Controller. 
Die Strecke zum Controller dann per USB zurücklegen. MAX232 ist heute 
bissle veraltet und überflüssig wenn man sowieso nen USB-Adapter 
braucht.

gruß cyblord
#3352313
Lesenswert?

Also wie schon gesagt wurde, nimm die serielle Schnittstelle und 
übertrage so die Parameter.

Mit einem UART-USB Converter (FTDI) ist das ein Kinderspiel, da du am uC 
die einfache UART Schnittstelle verwenden kannst und am PC ebenso.

Wenn du dann eine Programmiersprache am PC verwendest mit der du leicht 
eine GUI erstellen kansnt (.NET bspw. unter Windows), und vielleicht 
auch noch von der Sprache dir bekannt ist (vielleicht Visual Basic 
.NET), so ist das in unter einer Woche, ohne Vorkenntnisse 
(programmieren kannst du ja hoffentlich), zu schaffen, da du einfach ein 
fertiges Projekt umarbeiten musst:
http://www.lvr.com/serial_ports_dotnet.htm
http://www.youtube.com/watch?v=1YQM30r8Nuo
http://www.microsoft.com/visualstudio/deu/products/visual-studio-express-for-windows-8#product-express-windows
(Firma: Schweigstill IT) Persönliche Seite #3352315
Lesenswert?

Die angedachte Vorgehensweise ist äußerst suboptimal. Eine geringfügige 
Verbesserung wäre dadurch zu erzielen, die veränderlichen Wartezeiten im 
internen EEPROM des Microcontrollers zu speichern und nur die per ISP zu 
programmierende Hex-Datei für den EEPROM-Inhalt programmgesteuert neu zu 
erzeugen.

Der Programmieraufwand (GUI, Datei erzeugen/Schreiben, externe 
Programmierroutine (z.B. avrdude, myAVR)) ist jedoch vermutlich 
wesentlich höher als die Daten per UART zu übertragen.

Beim Neuerzeugen des gesamten Programms müssen zusätzlich noch Compiler 
und Linker aufgerufen werden.

Die ganze Fehlerbehandlung im GUI dürfte mindestens 80% des Aufwandes 
ausmachen.
Gast #3352427
Lesenswert?

Wow, erstmal thx @ all für die vielen Hinweise.

@Frank.M, hab mal kurz über die Links drüber geklickt, schauen recht 
vielversprechend aus.
Btw, gewisse Grundprogrammierkenntnisse sind da, hatte mal vor sehr, 
sehr, sehr langer Zeit ein Semester lang Ingenieurinformatik.

@leluno, schwirrte mir als optimale Endlösung durch den Kopf, wollte 
aber erst mal die Steuerung über den Laptop ausarbeiten. Kann aktuell 
auch noch nicht wirklich in diese Richtung argumentieren, da ich mich 
mit Touchpads noch nicht befasst habe.

Werd jetzt nochmals alle Antworten in Ruhe durchgehen, sollten weitere 
Fragen auftreten, werd ich euch natürlich nochmals kontaktieren ;-)
Gast #3352461
Lesenswert?

cyblord ---- schrieb:
> Lieber direkt einen USB-TTL Wandler und ohne MAX232 auf den Controller.
> Die Strecke zum Controller dann per USB zurücklegen. MAX232 ist heute
> bissle veraltet und überflüssig wenn man sowieso nen USB-Adapter
> braucht.

Oder gleich einen kleinen Arduino nehmen. Damit ist dann auch die 
Steuerung via Terminal trivial, dank der beiliegenden Bibliotheken. Ein 
winziger Sketch, fertig.

Fehlt nur noch das UI...
#3352493
Lesenswert?

Also wenn es dir nicht wichtig ist es über einen PC zu steuern, dann 
kannst du auch einfach zwei schöne Drehknöpfe nehmen mit denen du die 
Zeit direkt am uC einstellst. Das sollte die einfachste Lösung sein, da 
du nur zwei ADC-Eingänge dafür brauchst und programmiertechnisch 
minimalsten zusatzaufwand.

Alternativ, etwas aufwendiger, ein alphanumerisches display um die 
eingstellte Zeit anzuzeigen, und evtl. 4 Taster anstatt die zwei Potis 
um die zwei Zeiten digital einstellen zu können.

Für dich vermutlich vorerst unmöglich ist die Touchscreen-Lösung mit 
Grafikdisplay.
#3352557
Lesenswert?

Und nicht zu vergessen:

Dein AVR-Programm ist schon Murks.
Die Wait müssen da raus.

Wait ist etwas für den Anfang, damit man mal überhaupt irgendwas 
programmieren kann. Aber für ernsthafte Anwendungen ist das alles nicht 
zugebrauchen. Zeitsteuerungen bedeuten meistens: Timer.
Ganz speziell dann, wenn das Programm mehrere Dinge quasi gleichzeitig 
machen soll. Bei dir den Ausgang ansteuern UND die UART überwachen.

Besser du lernst jetzt gleich, wie sowas geht, denn auf lange Sicht 
kommst du sowieso nicht drum rum.
Gast #3353407
Lesenswert?

Karl Heinz Buchegger schrieb:
> Zeitsteuerungen bedeuten meistens: Timer.
> Ganz speziell dann, wenn das Programm mehrere Dinge quasi gleichzeitig
> machen soll. Bei dir den Ausgang ansteuern UND die UART überwachen.

Mit Arduino kein Problem. UART kommt per Callback rein, den Rest macht 
man in loop() als Statemachine, die ueber die Systemzeit die Zustaende 
wechselt. Kein Grund selbst mit Timern zu kaempfen.
Gast #3353810
Lesenswert?

Warum man sich für ein/pause/aus mit timern rumärgern soll ist mir 
rätselhaft. Letztlich würde ich einfach ein Mäuseklavier verbauen, das 
an ein paar IOs vom µC geht. Da kannste dann eben 2^n Sekunden 
einstellen wobei n die Anzahl der Taster ist -> bei 4 Tastern also z.B. 
zwischen 1 und 16 Sekunden (oder 0 und 15, aber 0 macht in meinen Augen 
wenig Sinn).

Sonst wie die Vorredner schon gesagt haben: nimm die serielle 
Schnittstelle. Das ist wirklich kein Drama die anzusteuern. Ein bisschen 
musst du dir eben Gedanken über das Protokoll machen. Theoretisch 
könntest du auch einfach direkt nur ein Byte schicken, das in der 
Pausen-Variable landet. Damit wären dann 255 Sekunden möglich.
#3353827
Lesenswert?

Moritz schrieb:
> Warum man sich für ein/pause/aus mit timern rumärgern

? rumärgern
Was bitte ist an einem simplen Timer 'rumärgern'.
Das ist so einfach wie einem Baby den Schnuller klauen.

> soll ist mir
> rätselhaft.

Dann rätsle weiter.

>  Theoretisch könntest du auch einfach direkt nur ein Byte schicken,
> das in der Pausen-Variable landet.

Er hat aber 2 Delay Zeiten, die er einstellen will. Und nu?

Aha! Wenn man dann mal auch ein wenig das Kleingedruckte beachtet, sind 
die Dinge dann gleich gar nicht mehr so einfach.

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