Hallo zusammen,
ich möchte ein Projekt starten und frage mich wie ich Grundlegend
vorgehen soll. Ich möchte mehrere Verschiedene Funktionen mit einander
verbinden. Unter anderem soll Licht gesteuert werden und Ton
wiedergegeben.
Ich frage mich jetzt ob ich einen µC suchen soll mit dem alles zusammen
machbar ist oder ist es besser einzelne Aufgaben mit einem eigenen µC zu
realisieren und alles von einem Haupt Controller steuern lassen?
Kann man pauschal sagen diese oder jene Vorgehensweise ist besser? Wo
hat die eine Methode Vor- bzw. Nachteile, wo die andere?
Über eine anregende Diskussion würde ich mich sehr freuen.
Mit freundlichen Grüßen
Astro
Astro39 schrieb:> Kann man pauschal sagen diese oder jene Vorgehensweise ist besser? Wo> hat die eine Methode Vor- bzw. Nachteile, wo die andere?
das kommt auf die Anwendung an.
Würde es für dich sinn machen, wenn du zum anschauen von Video eine
Datenträger + Gerät fürs Bild und ein Datenträger + Gerät für den Ton
benutzen müsstest?
Wenn beide Geräte nichts gemeinsames haben, können sie getrennt werden.
Wenn sie miteinander arbeiten müssen, dann macht es sinn nur ein µC zu
verwenden.
Die Antwort ist ein entschiedenes "vielleicht".
Wenn du mehrere sehr zeitkritische Sachen machen musst, können getrennte
Controller sinnvoll sein. Aber unterschätze nicht den Aufwand für die
Steuerung und Kommunikation der Controller.
Mit den modernen Controllern (schnell und reichlich Speicher) wird es
meist besser sein, die Arbeit nicht zu splitten.
Der Aufwand für die zuverlässige Vernetzung mehrerer MCs wird gerne
völlig unterschätzt.
Für die Aufteilung von Aufgaben auf mehrere MCs sollte es daher triftige
Gründe geben, die den deutlich höheren Entwicklungsaufwand
rechtfertigen.
Ganz allgemein kann man sagen, dass ein Prozessor effektiver ist, als
mehrere.
Praktisch erwägt man eine Aufteilung nur in zwei oder drei Fällen:
Nämlich wenn einfach kein Prozessor käuflich erhältlich ist, der alles
nötige in der zur Verfügung stehenden Zeit erledigen kann, wenn
räumliche Anordnungen technisch erforderlich sind (z.B. EMV) oder wenn
wirtschaftliche Gesichtspunkte hinzu kommen.
Man muss beachten, dass die Kommunikation zwischen den Prozessoren auch
Zeit benötigt. Im allgemeinen ist die Kommunikation innerhalb eines
Prozessors schneller als zwischen zweien. (Wenn man das Speichern von
Daten und wieder lesen in bzw. aus dem Speicher oder Registern als
Kommunikation auffasst).
Abgesehen davon gibt es weitere Faktoren. Z.B. Vermehren sich die
"Fixkosten" an Strom, da gewisse Einheiten wie der Taktgenerator etc.
dann mehrfach vorhanden sein müssen.
Eine generelle Abschätzung würde ungefähr so aussehen, dass man die Zeit
für die Codeausführung (und elektr. Leistung, Kosten, Arbeitszeit) der
jeweiligen Aufteilungen gegenüberstellt. Für einen Anfänger eine gute
Übung aber schwierig.
Eine anregende Diskussion würde ich mir an Deiner Stelle nicht erwarten.
Dazu ist die Sau nun schon zu oft durchs Dorf getrieben worden.
Wenn Du das Problem von oben nach unten angehst, ergibt sich die Antwort
fast von selbst.
Falls nicht noch dieses und jenes hinzukommt, ist top die
Musikwiedergabe (meiste Rechenleistung). Ein µC der dies kann, kann
meist auch noch ein paar andere Sachen nebenher erledigen.
Parallax Propeller! Hat 8 Kerne an Bord, welche separat unterschiedliche
Aufgaben abarbeiten.
Obwohl ... mit einem Tiny13 lass ich eine LED blinken und einen
Lautsprecher piepsen.
Du wirst also Dein Problem etwas genauer beschreiben müssen ...
Gruß
Jobst
Ahh da gibt es noch einen Fall :)
Wenn du ASIL D erreichen willst solltest du auch 2 unterschiedliche
Prozessoren verwenden, die sich gegenseitige überwachen. Da nimmt man
auch mal drei dann erhält man ein 2 von 3 System....
Aber ich glaub hier ging es nicht um eine Sicherheitskritische Anwendung
:)
Licht und Ton sind langsame Geschichten. Das packt ein einzelner µC
vermutlich locker. Außer du redest von 200 Kanälen Licht und 6-Kanal
HiFi Ton. Selbst DAS ließe sich vermutlich realisieren.
Schreib doch mal ein paar Deteils!
Aber selbst trotz Audio-Wiedergabe mit passabler Qualität kann man noch
viel steuern. Hab z.B. eine Wav-Wiedergabe mit 16Bit, 2 Kanal und
44100Hz gebaut (I2S), der PIC32 der das tut langweilt sich nur. Trotz
Overhead wie GLCD, SD-Karte, USB und Inputs.
Mach dir ein Konzept, überlege dir, was braucht wieviel CPU/RAM/Flash
(probiers aus, wenn es sein muss!) und dann überlege:
Geht das bequem?
Wenn nein:
Gehts mit einem dickeren µC?
Erst wenn das auch nicht so ist, kann man mal über mehrere nachdenken.
Eine Software, die über mehrere µC synchronisiert ist, ist Mist. Alleine
das debuggen von mehreren µC gleichzeitig ist schon ein Argument
dagegen.
Jobst M. schrieb:> Parallax Propeller! Hat 8 Kerne an Bord, welche separat unterschiedliche> Aufgaben abarbeiten.MP3 abspielen kann er aber trotzdem nicht.
Ich habe mir ein Wecker vorgestellt der zum einen mit Licht weckt und
danach Musik oder Radio abspielt. Der Plan war ein Haupt µC der nur
Aufgaben verteilt. Also er bekommt von dem RTC Modul die Weckzeit und
schaltet dann einen Ausgang auf High, an dem der Controller für die
Lichtsteuerung hängt und die geht nur an wenn der Eingang ein High
liefert. Das gleiche dann für das Radio. Mit Tasten z.B: Schlummern kann
man dann das Licht wieder ausschalten in dem Der Ausgang wieder auf Low
gesetzt wird. Ich hab gedacht dann habe ich mehrere Übersichtliche
Programme.
Steinigt mich mich aber bis jetzt habe ich nur Arduino Erfahrung.
Wahrscheinlich hab ichs mir zu leicht gemacht. Dann werde ich mich
erstmal noch tiefer in die µC Materie einarbeiten.
Vielen Dank für die hilfreichen Antworten.
Mit freundlichen Grüßen
Astro
Wenn du Musik/Radio an ein fertiges Modul weitergibst (wozu ich dir
raten würde) dann kann ein Arduino den Rest alleine. Mit nem 32kHz
Uhrenquarz bekommst du ne brauchbare Uhr, LEDs lassen sich mit den GPIO
Pins ansteuern und ein Piepsgeräusch bekommt man mit nem kleinen
Lautsprecher und nem PWM Pin hin.
Ich schließ mich da Thor an.
Wie wärs mit nem klein µC der HW-Module steuert. Ich denk da
hauptsächlich an MP3 u. Flash in einem Modul. Licht etc. is ja
pillepalle (230V!).
Astro39 schrieb:> Steinigt mich mich aber bis jetzt habe ich nur Arduino Erfahrung.> Wahrscheinlich hab ichs mir zu leicht gemacht. Dann werde ich mich> erstmal noch tiefer in die µC Materie einarbeiten.
So haben wir alle mal angefangen. Also ich zumindest.
Willkommen an der Lernklippe, ich brauchte beim ersten PIC24 gleich 2
Tage, bis die PLL richtig lief :-)
Für deinen Wecker wird es sicher auch ein 8-Bitter tun, also ein AVR
oder PIC18 zum Beispiel, oder gleich ein kleiner STM32. Oder ein PIC24?
Nimm das, was du lernen willst!
Pieptöne kann jeder Timer (den sollten allg genannten haben), als
Rechteck. Oder du steuerst einen Piezopfeifer über einen Port.
Als Display würde ich z.B. eines von EA nehmen, also eines mit
Controller über I2C oder SPI.
Eine RTCC kann man extern dazutun, eine DS1337 oder so tut da ihren Job.
Wenn der Wecker genau sein soll, denke über ein fertiges Modul nach.
Als Spannungsquelle kann man ein Steckernetzteil nehmen (also eines, das
Schutzkleinspannung liefert).
Alternativ kann man auch einfach einen RaspberryPi mit
RTCC modul nehmen. Fürs Display oder die Bedienung nimmt
man entweder die GPIOs oder verlegt die über UART auf ein
kleines Controller Modul.
Max M. schrieb:> Hmm schrieb:>> . eines von EA nehmen, also eines mit Controller über I2C oder SPI.>> Haben die auch preiswerte Displays?
Ja, die sind alle preiswert! Finde ich zumindest. Begründung:
- Brauchbare Libs vorhanden
- Datenblätter vorhanden
- Sparsam
- Praktische Bauform
- Laufen mit 3V
Für Anfänger also keine schlechte Empfehlung, denn das spart Frust.
Wenn du billig meinst, dann vielleicht nicht. Ich finde sie nicht
übermässig teuer.
Ist halt eine Frage, was man will. Ich arbeite lieber 15 min für das
Display, statt viele Stunden in das debuggen einer (für das Projekt)
Nebensache zu investieren.
Die EA-Dinger laufen halt sofort und problemlos, und wenn nicht, dann
wird man hier im Forum sehr schnell fündig.
Astro39 schrieb:> Braucht man für die EA Displays denn dieses Testboard oder braucht> man> nur das Display der Wahl und macht den Rest über das Programm im µC?
Man braucht nur das Display seiner Wahl, das Testboard hatte ich nie.
Ich habe die sogar am Breadboard getestet, aber hier muss man vorsichtig
sein (mechanisch empfindlich).
Generell gibts zwei Varianten:
- Alphanumerisch
- grafisch (wie das DOGXL)
Anfängern würde ich zur alphanumerischen Variante raten, denn bei der
grafischen muss man sich um die Erzeugung der Pixelmuster selber
kümmern. Die Alphanumerischen füttert man nur mit Text. Deutlich
einfacher...
Der Vorteil der DOG... Serie ist halt, dass man sie auf die Platine mit
drauflöten kann, und sie auch mit 3V3 laufen, und mit oft nur <1mA
Stromverbrauch.
Eine kostengünstige Alternative wäre:
Beliebige HD44780-kompatibles Displays sind auch relativ
anfängerfreundlich, weil sie sehr verbreitet sind.
Die haben den Nachteil dass sie mehr Pins brauchen und 5V benötigen und
fallweise Pegelshifter.
Peter D. schrieb:> MP3 abspielen kann er aber trotzdem nicht.
Hmmm ... alle 8 COGs zusammen machen 160 Mips.
Hat das schon mal jemand probiert?
Dann eben ein 'langsamer' Controller, welcher die Daten von einer
SD-Card holt und sie dann an einen mp3 Decoder (z.B. VS 10xx, MAS3507,
STA013) weiter gibt, oder einen Prozessor mit Wumms, wie ein ARM oder
PIC32MZ, welcher das dann in SW macht.
Vielleicht bekommt er ja auch noch irgendwoher diesen 8051 mit
integriertem mp3 Decoder von Atmel. (AT89C51SND1C)
Gruß
Jobst
@ Jobst M. (jobstens-de)
>Dann eben ein 'langsamer' Controller, welcher die Daten von einer>SD-Card holt und sie dann an einen mp3 Decoder (z.B. VS 10xx, MAS3507,>STA013) weiter gibt,
Dafür gibt es auch schon fertige Shields für den Arduino, damit kann man
recht gut arbeiten, ohne den Heldentod zu sterben. Dann kann auch EIN
Arduino verdammt viele Sachen quasi paralle machen.
Wenn sich die Funktionalitäten räumlich voneinander getrennt befinden
(zB. übers Haus verteilt) dann macht die Aufteilung auf viele µC
desöfteren sehr viel Sinn.