Forum: Mikrocontroller und Digitale Elektronik Ausgänge zeigesteuert schalten/Tipps zu Porterweiterung,


von Michael S. (kruschty)


Lesenswert?

Hallo,

mal wieder ein Newbie + Anfänger, aber...
..mir geht es nicht darum von euch fertige Lösungen präsentiert zu 
bekommen! Was ich brauche sind Tipps nach was ich suchen kann. Seit 
Tagen lese ich mich hier durch die sehr gute Seite/Forum und habe dabei 
auch schon viel nützliches für mich gefunden. Trotzdem ist eine Suche 
sehr schwer wenn man die entsprechenden (Such-)Begriffe nicht weiß.

Zu meinem Problem oder besser Projekt (klingt positiver):

Ich möchte mit einem ATmega32 eine Anlage steuern die (unter anderem) 32 
3-Weg-Ventile (12V) ansteuern soll. Das ganze soll von einem PC-Programm 
(in C#) über RS232 angesteuert werden.

Voraussichtlich sollen bis zu 8 Ventile gleichzeitig geöffnet und zu 
unterschiedlichen Zeiten geschlossen werden

Da ich ja nicht genügend Ports habe brauche ich natürlich etwas zur 
Porterweiterung. Gefunden habe ich hier im Board z. B.

- 74HC595 (Schieberegister) (per SPI)
- PCF8574AP (Porterweiterung) (per I2C)

Was ist einfach umzusetzen bzw. gibt es wichtige Nach- oder Vorteile?

Den Atmega32 möchte ich mit C programmieren.

Was mir überhaupt nicht klar ist die Sache mit den Zeiten.
Über die Zeit wird die Menge an dosierter Flüssigkeit festgelegt.
Was ist da das richtige Vorgehen?

Muß das PC-Programm sich um die Zeiten kümmern d. h. ich sende etwas um 
die entsprechenden Ventile zu öffnen, wenn die Zeit rumm ist für ein 
bestimmtes Ventil sende ich wieder etwas um dieses zu schließen usw. bis 
alle zu sind.

oder...

Gebe ich dem µC die entsprechenden Werte (welche Ausgänge + wie lange) 
und der Rest wird dann vom µC übernommen?

Gibt es für so etwas ein sinnvolles Protokoll zwischen PC und µC?
Ich habe z. B. das IBRT short message protocol 
(http://www.ibrtses.com/embedded/shortmsgprotocol.html) gefunden.

Hoffe ich habe mich verständlich ausgedrückt.

Danke für eure Tipps!

von spess53 (Gast)


Lesenswert?

Hi

Hilfreich wäre mal eine Angabe über die zu überbrückenden Distanzen.

MfG Spess

von Michael S. (kruschty)


Lesenswert?

Zwischen PC und µC-Steuerung sind es max. 2m per serielles Kabel (Hoffe 
das war deine Frage).

Grüße

kruschty

von spess53 (Gast)


Lesenswert?

Hi

Und zwischen µC und den Ventilen?

MfG Spess

von Michael S. (kruschty)


Lesenswert?

Hi,

zwischen den Ventilen und µC werden es max. 1m sein.

Grüße

kruschty

von Karl H. (kbuchegg)


Lesenswert?

> Da ich ja nicht genügend Ports habe brauche ich natürlich etwas zur
> Porterweiterung. Gefunden habe ich hier im Board z. B.
>
> - 74HC595 (Schieberegister) (per SPI)
> - PCF8574AP (Porterweiterung) (per I2C)
>
> Was ist einfach umzusetzen bzw. gibt es wichtige Nach- oder Vorteile?

Wenn das die einzige I2C Hardware im System ist, dann würde ich
einen 595, also ein stink normales Schieberegister, dafür nehmen.
Hauptsächlich deshalb, weil das supersimpel in der Programmierung
ist.

> Was mir überhaupt nicht klar ist die Sache mit den Zeiten.
> Über die Zeit wird die Menge an dosierter Flüssigkeit festgelegt.
> Was ist da das richtige Vorgehen?

Das richtige Vorgehen ist das, welches du als richtig definierst.
Du bist gleichzeitig dein Kunde und definierst welche Eigenschaften
dein Gerät haben soll.

> Muß das PC-Programm sich um die Zeiten kümmern d. h. ich sende etwas
> um die entsprechenden Ventile zu öffnen, wenn die Zeit rumm ist für
> ein bestimmtes Ventil sende ich wieder etwas um dieses zu schließen
> usw. bis alle zu sind.

Kann man so machen.

> Gebe ich dem µC die entsprechenden Werte (welche Ausgänge + wie
> lange) und der Rest wird dann vom µC übernommen?

Kann man so machen.

Überleg dir mal, welche Vor und Nachteile die jeweilige Vorgehensweise
hat. Zieh in deine Überlegungen auch den Fall, daß der PC abstürzt
mit hinzu.

> Gibt es für so etwas ein sinnvolles Protokoll zwischen PC und
> µC? Ich habe z. B. das IBRT short message protocol
> (http://www.ibrtses.com/embedded/shortmsgprotocol.html) gefunden.

Ganz ehrlich: Erscheint mir mächtiger Overkill zu sein.

ein Kommando ist eine Zeile
#15,08;

#   ... Kommando: Behandle Ventil
15  ... Nummer des Ventils. Ventilnummer ist immer 2-stellig
08  ... Zeitdauer in Sekunden. Immer 2-stellig
;   ... Jedes Kommando endet mit einem ;

Obiges Kommando heist also: Öffne Ventil Nr 15 für 8 Sekunden.

Das Ganze wird ohne sonstige Sync Character oder CRC oder sonstigen
Schnickschnack übertragen:
Vorteil: Kommandos können mit jedem Terminalprogramm erzeugt werden,
was zunächst mal entwickeln und testen der µC Komponente ohne
PC-Frontend ermöglicht.

von Michael S. (kruschty)


Lesenswert?

Vielen Dank für deine sehr hilfreiche Antwort!

Da hast du mir schon etwas auf die Sprünge geholfen.

So wie es momentan aussieht wäre es dann einfacher mit dem 
Schieberegister.

Es stimm schon das ich alle Freiheiten bei der Umsetzung habe aber genau 
so habe ich leider mit der Planung/Umsetzung eines solchen Projektes 
keine Erfahrung.

OK über die Vorgehensweise habe ich auch noch einmal nachgedacht.

Das Hauptproblem bei der erste Möglichkeit (PC gibt Befehl zum 
Ventil-Schließen)wäre natürlich bei einem Absturz dass Ventile unendlich 
geöffnet wären.

Mit der Protokoll-Sache hast du natürlich auch Recht. Ich habe hier im 
Forum zu diesem Thema gesucht und überlegt wie ich sowas sinnvoll machen 
könnte. Dein Vorschlag mit den kurzen Befehlen ist natürlich genial 
einfach.

Spricht eigentlich etwas dagegen bei solchen Kommandos Buchstaben zu 
nutzen also z.B. anstatt # ein V für Ventil?
Ansonsten könnte ich es so fast schon wirklich übernehmen -nur die 
Zeitdauer müßte 3 stellig sein um alle benötigten Zeiten abzudecken.

von Karl H. (kbuchegg)


Lesenswert?

Michael S. wrote:

> Das Hauptproblem bei der erste Möglichkeit (PC gibt Befehl zum
> Ventil-Schließen)wäre natürlich bei einem Absturz dass Ventile unendlich
> geöffnet wären.

Genau.
Dein µC kann zwar auch abschmieren, nur ist das im Vergleich
sehr unwahrscheinlich, solange die Progammierung stimmt.
Und selbst wenn: In so einem Fall holt dann der Watchdog den
µC wieder auf die Füsse und 1 Sekunde später ist der µC
wieder hoch und stellt erst mal alle Ventile auf gesperrt.

> Spricht eigentlich etwas dagegen bei solchen Kommandos Buchstaben zu
> nutzen also z.B. anstatt # ein V für Ventil?

Nein. Nicht wirklich.
Du kannst nehmen was du willst.
Sinnvollerweise wirst du dir natürlich irgendein Schema
überlegen, dass du möglichst einfach
 * auf PC Seite erzeugen
 * auf µC Seite dekodieren kannst

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.