Software uarts mit µC realisieren?

hallo,

hab ne grundlegende frage zu microcontroller: ich möchte gern ein gerät
entwickeln, welches midi In/Out, zwei DMX-Inputs,
Ethernet-Schnittstelle, Schnittstelle zum Computer, zwei weitere
USB-Schnittstellen und 16 DMX Outputs…

das problem bzw. frage die sich mir stellt ist, dass ein normaler µC ca.
4 UARTS besitzt… d.h. es müssten viele über software realisiert werden
(macht das überhaupt sinn, oder wird das anders gelöst?)… zudem muss
natürlich die realtime immer im auge gehalten werden…

ist das eine gute idee mit µC zu arbeiten oder gibt es andere
möglichkeiten die besser sind, um sowas zu realisieren?? z.b. mit
µProzessoren etc…

lg
patrick

Hardware
Hallo Patrick,

zum ersten wirst du sicher auch µC finden, die 16 serielle Schnittstellen bieten.

das problem bzw. frage die sich mir stellt ist, dass ein
normaler µC ca. 4 UARTS besitzt… d.h. es müssten viele über software

Was das Problem nicht löst, dass du ja die Schnittstelle auch physikalisch (Hardware) zur Verfügung stellen musst.

Zum anderen gibt es gerade für die etwas komplexeren Protokolle USB und Ethernet fertige Bausteine, die aus deiner Sicht einfacher zu handhaben sind und den physikalischen Datenversand autark abwickeln.

ist das eine gute idee mit µC zu arbeiten oder gibt es andere
möglichkeiten die besser sind, um sowas zu realisieren?? z.b.
mit µProzessoren etc.

Schwer zu sagen, man kann heutzutage z.B. sehr komplexe Software (mit Betriebssystem usw.) in feldprogrammierbare Hardware gießen.

Immerhin sind MIDI und DMX vergleichsweise langsame Schnittstellen.

Gruß

Stefan

Hallo Patrick,

zum ersten wirst du sicher auch µC finden, die 16 serielle
Schnittstellen bieten.

d.h. es müsste µC geben, mit hilfe derer ich keine uarts software-technisch umsetzen müsste? hmmm dann muss ich da noch mal genauer nachschauen… kennst du welche die soviele serielle schnittstellen besitzen? bei atmel hab ich keine gefunden (hab mir bis jetzt den atmega1280 ausgesucht, um die vielen I/0s auch zu haben, da ich für jeden DMX-Output ja eine extra leitung legen muss (wegen der universes).

mir gehts erstmal darum, den richtigen µC zu finden, um möglichst wenig aufwand betreiben zu müssen… vor allem software-uarts für ethernet und usb haben es in sich, da keine großen zeitdifferenzen auftreten dürfen (muss ja in realtime abgefertigt werden);

die anbindung der ethernet-schnittstelle und usb-schnittstelle an den µC gibt es auch im netz (wobei man natürlich den plan etwas an seine bedürfnisse abändern muss) - sollte aber nicht unmöglich sein.

Schwer zu sagen, man kann heutzutage z.B. sehr komplexe
Software (mit Betriebssystem usw.) in feldprogrammierbare
Hardware gießen.

Immerhin sind MIDI und DMX vergleichsweise langsame
Schnittstellen.

das stimmt… 250kBaud und Midi weiß ich grad nicht by heart… Midi soll aber auch nur zur synchronisation dienen (MTC und vielleicht Midi show control, weiß ich aber noch nicht genau…)

lg
patrick

µCs mit vielen seriellen Schnittstellen gab es mal von Siemens, lt. meiner Erinnerung, bin ja kein Entwickler. Ich kann ja mal am Dienstag unsere Entwickler fragen, ob sie einen guten Tipp haben.

Oder schau mal da: http://de.wikipedia.org/wiki/Microcontroller

die anbindung der ethernet-schnittstelle und usb-schnittstelle
an den µC gibt es auch im netz (wobei man natürlich den plan
etwas an seine bedürfnisse abändern muss) - sollte aber nicht
unmöglich sein.

das stimmt… 250kBaud und Midi weiß ich grad nicht by
heart… Midi soll aber auch nur zur synchronisation dienen
(MTC und vielleicht Midi show control, weiß ich aber noch
nicht genau…)

Midi sind 32 kBaud, also wirklich langsam.

DMX ist RS485, d.h. ein wenig muss sich deine Software um das Busmastering kümmern.

Gruß

Stefan

Hallo,

entwickeln, welches midi In/Out, zwei DMX-Inputs,
Ethernet-Schnittstelle, Schnittstelle zum Computer, zwei
weitere USB-Schnittstellen und 16 DMX Outputs…
das problem bzw. frage die sich mir stellt ist, dass ein
normaler µC ca.
4 UARTS besitzt… d.h. es müssten viele über software
realisiert werden
(macht das überhaupt sinn, oder wird das anders gelöst?)…

jede techn. Problemstellung läßt sich meist mit vielen
Varianten lösen. Entwicklung ist genau der Vorgang, welcher
zu einer techn. Lösung führt, die unter Berücksichtigung aller
Randbedingungen zu einem tragbaen Kompromiss führt, der zeitlich
und aufwandsmäßig im gesetzten Rahmen liegt.

zudem muss
natürlich die realtime immer im auge gehalten werden…
ist das eine gute idee mit µC zu arbeiten oder gibt es andere
möglichkeiten die besser sind, um sowas zu realisieren?? z.b.
mit µProzessoren etc…

Kanst Du mal den Unterschied zwischen uC und uProzessor erklären?
Beides sind IMHO nur Synonyme bzw. subjektive Kategorien.

Zum Thema: Ich würde der Einfachheit halber mal über ein
Multiprozessorsystem nachdenken. z.B. die DMX-Kanäle kann
man so leicht aufbohren (oder spezielle controller/Prozessoren
für den jeweiligen Zweck einsetzen)

z.B. für USB passende USB-Chips
-> http://www.ftdichip.com/
für DMX
http://dmx4all.de/shopx/shop_content.php/coID/22/pro…

Für Ethernet gibt es auch fertige Module mit Interface zu einem
Hostprozessor
http://www.embeddedether.net/
http://www.hms-networks.de/products/anybus_product_i…
http://www.beckhoff.de/german/default.htm?embedded_p…

Dann brauchst Du nur noch einen zentralen Master zur Ansteuerung
des ganzen. Welche Prozessorfamilie da in Frage kommt, hängt
davon ab, welche Performance gebraucht wird, welches System Dir
gefällt und welche sonstigen Randbed. gelten.
Gruß Uwi

das wäre super

µCs mit vielen seriellen Schnittstellen gab es mal von
Siemens, lt. meiner Erinnerung, bin ja kein Entwickler. Ich
kann ja mal am Dienstag unsere Entwickler fragen, ob sie einen
guten Tipp haben.

das wäre super…

das einzige was mir sonst noch einfallen würde, wäre es extern irgendwie anzuschließen… hab da aber keinerlei erfahrungen was man da am besten wählt… und wieviele MHz man benötigt und wahrscheinlich mindestens 32Bit wenn nicht eh gleich 64Bit…

Oder schau mal da:
http://de.wikipedia.org/wiki/Microcontroller

das hab ich schon durchgestöbert… aber das bewegt sich alles in einem kleineren rahmen… nicht soviele anschlüsse etc.

das einzige was mir zur zeit noch nicht ganz klar ist die anbindung aller anschlüsse an den µC… wenn das mal safe ist, kommen die nächsten steps…

lg
patrick

Kanst Du mal den Unterschied zwischen uC und uProzessor
erklären?

bei einem µC ist alles mit dabei (I/Os, Speicher RAM, Flash, EEPROM, UARTS integriert etc… also im prinzip ein µProzessor + was man so noch braucht = µController

Beides sind IMHO nur Synonyme bzw. subjektive Kategorien.

Zum Thema: Ich würde der Einfachheit halber mal über ein
Multiprozessorsystem nachdenken. z.B. die DMX-Kanäle kann
man so leicht aufbohren (oder spezielle controller/Prozessoren
für den jeweiligen Zweck einsetzen)

hmm da fehlt mir nur das nötige knowhow wie die beiden prozessoren dann zusammenspielen… im prinzip werden per ethernet die daten herangeschaufelt und auf die verschiedenen dmx-kanäle aufgeteilt… die dmx-kanäle muss ich eh alle separat behandeln (geht nichts mit zusammenfassen, weil es unterschiedliche universes beim empfang der daten sein können)…

z.B. für USB passende USB-Chips
-> http://www.ftdichip.com/

genau, so einen würd ich auch einsetzen…

für DMX
http://dmx4all.de/shopx/shop_content.php/coID/22/pro…

die dmx-anbindung zum µC würde auch schon stehen… (hab ich auch glaub ich von dieser seite…)

Für Ethernet gibt es auch fertige Module mit Interface zu
einem
Hostprozessor
http://www.embeddedether.net/
http://www.hms-networks.de/products/anybus_product_i…
http://www.beckhoff.de/german/default.htm?embedded_p…

hmm ok werd ich mal anschauen…

Dann brauchst Du nur noch einen zentralen Master zur
Ansteuerung
des ganzen.

Ok, d.h. einer von den beiden Prozessoren wird im Master und der andere im Slave Modus betrieben… weist du zum Thema Multiprozessoren und Arbeitsaufteilung etc. noch ein paar gute links (werd gleich mal google aktivieren…) Über welchen Bus werden dann die einzelnen Daten ausgetauscht?

D.h. du würdest ein Mehrprozessorsystem dem vorzug gegenüber einem µC geben?

Welche Prozessorfamilie da in Frage kommt, hängt

davon ab, welche Performance gebraucht wird, welches System
Dir
gefällt und welche sonstigen Randbed. gelten.

Gruß
patrick

Hallo,

hmm da fehlt mir nur das nötige knowhow wie die beiden
prozessoren dann zusammenspielen…

Dazu muß man nicht soviel wissen. Wie die Prozessoren
zusammenarbeiten, kanst Du ja selbst bestimmen.

Ich empfehle einen Master, der alles organisiert und entsprechende
Slaves, die nur die E/A-Funktionen übernehmen.
Der Datenaustausche kann dann z.B. über einen Paralellport
oder auch über seriell Port mit hoher Datenrate (nur
durch die Taktrate der Prozessoren begrenzt) funktionieren.
Seriell bietet sich z.B. SPI-BUS an (kann auch ohne UART betrieben).

Sonstige Feinheiten, wie Polling oder Interruptbetrieb oder
Nutzung von DMA kannst Du selbst bestimmen
(je nach Prozessortypen, Anforderungen und persönl. Vorlieben)

im prinzip werden per
ethernet die daten herangeschaufelt und auf die verschiedenen
dmx-kanäle aufgeteilt… die dmx-kanäle muss ich eh alle
separat behandeln (geht nichts mit zusammenfassen, weil es
unterschiedliche universes beim empfang der daten sein
können)…

Ja, schon klar. Das Problem kann sein, das der Master zwar
die Daten schnell lesen und ausgeben kann, aber der DMX-Kanal
selbst langsam ist. Da können Slaveprozessoren den Master einfach
entlasten, indem die die Daten schnell übernehmen, puffern und
dann ausgeben oder einfach deshalb, weil so die UARTs
vervielfachen kann.

z.B. für USB passende USB-Chips
-> http://www.ftdichip.com/

genau, so einen würd ich auch einsetzen…

Ok, d.h. einer von den beiden Prozessoren wird im Master und
der andere im Slave Modus betrieben… weist du zum Thema
Multiprozessoren und Arbeitsaufteilung etc. noch ein paar gute
links (werd gleich mal google aktivieren…)

Nö, ich bin eher Hardwarespezi. Für Programmieren habe ich
extra Leute :smile:

Über welchen Bus werden dann die einzelnen Daten ausgetauscht?

Z.B. SPI
http://www.google.de/search?hl=de&q=SPI+Bus&btnG=Goo…

D.h. du würdest ein Mehrprozessorsystem dem vorzug gegenüber
einem µC geben?

Kommt drauf an. Wenn es ein Prozessor alleine nicht schafft
bzw. die Organisation von vielen E/A-Operationen in einem
Prozessor zu kompliziert wird oder spezielle E/A-Funktionen
im Master einfach nicht ausreichen, dann …

Gruß Uwi

Hallo patrick,

das einzige was mir sonst noch einfallen würde, wäre es extern
irgendwie anzuschließen… hab da aber keinerlei erfahrungen
was man da am besten wählt… und wieviele MHz man benötigt
und wahrscheinlich mindestens 32Bit wenn nicht eh gleich
64Bit…

Mehr Bits bringen herzlich wenig, wenn du eine serielle Schnittstelle per Software emulieren willst. Die Emulation ist hauptsächlich eine 1-bit-Geschichte !

Um eine asynchrones UART zu simulieren, musst du zuerst die Flanke des Startbits erkennen udn dann immer in der Mitte eine Bitzelle abtasten. Du solltest also mindestens mit der doppelten Baudrate abtasten. Normalerweise tasten UARTs das Eingangssignal mit der 16- bis 64-fachen Baudrate ab.

Mit diesen Informationen kannst du mal den Rechenaufwand für die Emulation abschätzen. Was du sonst noch alles berechnen willst, weiss ich nicht.

Praktisch, wirst du mehrer UARTs an deinen µP anschliessen müssen, oder mehrer µPs verwenden müssen.

MfG Peter(TOO)

Hallo Stefan,

DMX ist RS485, d.h. ein wenig muss sich deine Software um das
Busmastering kümmern.

Du bringst hier etwas durcheinander.

RS-485 ist nur eine Pegeldefinition und hat mit der Art der Datenübertragung, asynchron, synchron, HDLC usw. gar nichts zu tun. Busmastering ist dann nochmals eine Funktion, welche ein Schicht höher liegt.

MfG Peter(TOO)

Hallo Patrick,

Ethernet oder USB geht von vornherein nicht per Software wegen der Geschwindigkeit, aber dafür gibt es ja genügend fertige Bausteine. RS232C kann man per Software realisieren, wenn man nichts anderes hat, für PIC kann man die Software herunterladen, aber mehr als 2 dürften auch nicht sinnvoll sein. Immerhin könnte man PICs als Slaveprozessoren einsetzen.

Meiner Meinung nach bester Weg:

IPs besorgen für Prozessorkern, Speicher, V24, Ethernet, USB und sonsiges, ein FPGA geeigneter Grösse auskucken und da alles reinpacken. Ich habe gerade für einen Kunden ein Interface für u.a. Ethernet und CAN mit einem Altera-FPGA mit 484 Pins gezeichnet, da bringst du deine Sachen auch problemlos unter. Von Pegelumsetzern und Treibern abgesehen nimmt dann dein System etwa 25 x 25 mm ein.

Konventionelle Lösung: ein Prozessor mit herausgeführtem Bus und für die Peripherie Bausteine verwenden, für V24 gibt es z.B. systemunabhängig Z8530 oder die in PCs noch immer verwendeten 16550 o.ä. (die sind heute bloss integriert, gibts aber auch einzeln noch zu kaufen). Der Hauptnachteil ist der Platzbedarf, da ein IC mit 2x V24 typischerweise ein PLCC44 oder DIL40-Gehäuse hat (also soviel Platz braucht wie beim FPGA das ganze System). Der Strombedarf ist auch entsprechend hoch. Ein nicht zu unterschätzender Vorteil ist allerdings, dass man daran noch etwas messen kann.

Ob die Bausteine z.B. für USB reine Slave-Hardware sind oder eigene Prozessoren, spielt bloss eine untergeordnete Rolle. Ich habe z.B. kleine 8polige PICs schon einfach als Gatter-Ersatz eingesetzt.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]