Forum: Mikrocontroller und Digitale Elektronik uP Starten von Delphi aus


von Matthias J. (xc866)


Lesenswert?

Hallo zusammen

Wir haben hier ein kleines Projekt und möchten gerne ein Programm vom
PC aus starten. Das Programm soll in Delphi geschrieben sein. Wenn man
den Start Button drückt soll das Programm auf dem uP anfangen zu
laufen. Ich habe im Moment noch keine wirklich gute Idee wie ds gehen
soll,da ich noch nie wirklich Delphi programmiert habe.
Für gute Ideen dnake ich euch

Gruss
Matthias

von Manos (Gast)


Lesenswert?

Möglichkeiten gäbe es da mehrer...

- Ihr könntet den Start über die serielle-Schnittstelle veranlassen

- Ihr könntet einen Pin der Parallel-Schnittstelle verändern der
wiederum an einem Eingang des uC's hängt

- Ihr könntet - sofern die angeschlossene Hardware dies von der
Stromaufnahme (also wenige mA) zuläßt - über die Parallel-Schnittstelle
die Schaltung mit Strom versorgen

von Markus (Gast)


Lesenswert?

Hmmmm,
das kommt mir irgendwie Spanisch vor ?
Soll ein Delphi Programm vom PC aus einen µC starten ?
Oder soll ein Delphi Programm auf dem µC laufen ?
Bei ersterem hat schon Manos einige Möglichkeiten genannt.
Jeder Output des PCs ist dazu geeignet mit entsprechender Gluelogic
einen µC "anzustoßen" ;)
Am aller einfachsten wäre es, die Stromversorgung des µC Boards via PC
ein-/auszuschalten ;)
Wenn das zu viel des Guten ist, läßt sich via IRQ Wakeup ein µC aus dem
Tiefschlaf holen.
Wenn in Delphi Programm auf dem C laufen soll, müßte dieser schon ein
OS wie Windows/Linux unterstützen, denn Delphi braucht ein OS für seine
Laufzeitumgebung ;)
Wäre sinnvoll mal GENAU zu spezifizieren, WAS eigentlich gesucht wird
;)
Bye,
Markus

von Matthias J. (xc866)


Lesenswert?

Hallo

Entschuldigung für die Verwirrung. Ich habe glaube ich etwas ungenau
geschrieben. Das Programm auf dem uP ist in Assembler geschrieben und
auf dem PC läuft ein Programm das in Delphi geschrieben ist. Nun soll
mit dem Start Button im Programm auf dem PC eigentlich ein Timer
gestartet werden auf dem uP.

Gruss
Matthias

von Manos (Gast)


Lesenswert?

Ist natürlich auch eine Frage wie zeitkritisch das "starten" der
Anwendung ist. Da Windows keine Echtzeitbetriebssystem ist kann die
Reaktionszeit auf das drücken des Buttons unterschiedlich lange dauern.
Soll allerdings sowohl "start" also auch "stop" von Hand ausgelöst
werden spielt die Reaktionszeit des OS nur noch eine untergeordnete
Rolle da der Mensch ein vielfaches ungenauer ist.

Am besten schaut man, ob man vom Druckerport irgendeine Leitung (Daten,
Steuerleitung) aus Delphi raus ändern kann und gibt diese dann (am
sichersten über einen Schutzwiderstand) auf einen IO-Port des uC der
über eine Änderung an diesem Port einen Interrupt auslösen kann...

von TheMason (Gast)


Lesenswert?

@matthias

ich würde einen pin der seriellen schnittstelle am pc nehmen um den uC
zu starten. (egal ob durch einschalten der vcc oder wake-up oder pollen
des pins)
die serielle schnittstelle hat 2 vorteile :

1. sehr robust (nicht so anfällig wie der parallelport)
2. die 2/3 steuerleitungen die man verwenden kann (rxd/txd kann man
nicht verwenden, da nur für serielle daten gedacht) lassen sich per
windows-api-funktion steuern, der parallelport NUR über eine externe
DLL (z.b. GiveIO.dll oder DLPortIo.dll).

gruß
rene

von Gast ein Anderer (Gast)


Lesenswert?

Das simpelste wird sein, wenn du deinen uC in einer Schleife entweder
einen Pin oder den USART nach eingegangenen Daten abfragen läst. Trift
der richtige Zustand ein wird das Unterprogramm (Timer) gestartet. Wie
schon von den anderen gesagt kannst du Pins  direkt mit dem Druckerport
ansteuern  (5V TTL Pegel). Für Delphi schau mal nach io.dll, damit
kannst du dann direkt auf  die Ports zugreifen (ist aber nicht ganz
harmlos).  TheMason hat ja eben auch noch andere DLL genannt.
Besser eigentlich ist wenn du einen serielle Schnittstelle verwendest.

Für USB könntest du z.B. einen FTDI Chip verwenden (das wäre mir für
den Anfang aber zu aufwendig). FTDI hat eine DLL und Beispiele in
Delphi auf Ihrer Seite.

Ich würde dir aber RS-232 (MAX 232 IC) empfehlen. Um die einfach unter
Delphi ansprechen zu können (wenn es den Delphi sein muss) würde ich
dir empfehlen dir eine geeignete Komponente zu suchen und zu
Installieren (geht sicher leichter als der Zugriff über die API). Ich
verwende TSeriel aus dem Toolbox – Magazin, die ist allerdings keine
Freeware.
Die seriellen Varianten haben den Vorteil, das du das später gut
ausbauen kannst. Z.B. Verschiedene Zeichen starten bestimmte Teil- oder
Unterprogramme. Andere Zeichen vordern den uC dazu auf gewisse
Registerinhalte zurückzugeben etc. und schon hast du eine brauchbares
kleines Werkzeug zum Debuggen deiner uC Programme. Hat mir schon viel
geholfen – zum Testen kann man auch meist ein Terminalprogramm
verwenden.
Es gibt sicher auch noch tausend andere mögliche Varianten das
umzusetzen.
Viel Spaß noch.

von Karl heinz B. (kbucheg)


Lesenswert?

Bei der parallelen musst du auch aufpassen, weil
Windows beim Hochfahren da irgendeinen Mambo-Zambo
damit aufführt. Die Pins sind definitiv nicht
einfach nur ruhig.

Ich würde daher auch zur seriellen tendieren, dort
aber ein richtiges Protokoll dafür aufsetzen
(bestimmtes zeichen zum starten senden, bestimmtes
zeichen für stoppen). Ansonsten wär mir das zu
heiss, dass da irgendwer reinpfuscht.

von Sven (Gast)


Lesenswert?

Hiermit kannst Du wunderbar die seriellen Schnittstellen bedienen.

http://sourceforge.net/projects/comport/

Wenn Du nur USB zur Verfügung hast kannst Du diese Komponente in
Delphi auch verwenden, da Dir der USB-Seriell Adapter eine serielle
Schnittstelle im Betriebssystem vorgaukelt.....

Dann auf bestimmte Zeichen auf der seriellen (UART) am µC warten und
dann reagieren....

Gruß Sven

von TheMason (Gast)


Lesenswert?

@matthias

das ansteuern der seriellen schnittstelle ist eigentlich mit einigen
wenigen befehlen erledigt :

CreateFile   // öffnen der seriellen
CloseHandle  // schließen
BuildCommDCB // konfiguration der schnittstelle
SetCommDCB // setzen der konfiguration (hier können auch die
"anderen" pins rts/cts/dtr usw) gesetzt/gelöscht werden
GetCommDCB // holen der konfiguration (zurücklesen der pins)
WriteFile // ausgabe über  txd
ReadFile // eingabe über rxd

Die serielle zu bedienen ist recht simpel (wenn man es mal verstanden
hat, und mit ein bischen experimentieren kommt man da recht schnell
hinter)
Du kannst natürlich auch Komponenten verwenden. Aber ich habe mit
Komponenten eher schlechte erfahrung gemacht, weswegen ich bei sowas
eigentlich nur die WinApi verwende (und mir dann selber eine komponente
baue :-)))

hoffe ich konnte dir helfen
gruß
rene

von Matthias J. (xc866)


Lesenswert?

Hallo

Danke euch allen für die Tipps. Ich werde sie mal testen und dann
hoffentlich erfolg haben.

Gruss und Danke

Matthias

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
Noch kein Account? Hier anmelden.