Hi MC Forum,
ich habe mich bereit erklärt ein Spiel für eine Hochzeit umzusetzen. Ich
bin nun am planen, Material bestellen, Platinen designen usw.
Ich hab nunja Kenntnisse auf Anfänger ebene, etwa 20 Programme auf einem
AVR geschrieben, gut ein duzend Platinen hergestellt.
Also diese Baugruppen muss ich verwursten:
- Ein Schrittmotor mit L297/L298 (Clock und Direction) dazu
Gabellichtschranke als Referenznocken für den Motor
- Ein Display (wahrscheinlich IC2, dazu ein Drehimpulsgeber ->
Menüsteuerung)
- "Das Poti" Drehimpulsgeber mit 12 Leds als Rückmeldung
8x Handbedienungen a
- Zwei RGB LEDs (6x PWM)
- Drei status LEDs
- Zwei Standart-Taster
- Eine Lichtschranke mit Modulation (37Khz?)
--> etwa 36 Eingänge, 100 Ausgänge.
Bisheriger Lösungsansatz:
ATMega 128 als übergeordneter Controller.
-> Motorsteuerung + "Poti": HW angebunden
Display + Encoder ATmega 32
-> Kommunikation 4bit unidirektional (hier wird nur der Mode
übertragen). Protokoll in Software.
8x ATtiny für die Handbedienung.
-> Kommunikation über I2C.
Dort 6 Kanal Soft-PWM und 37Khz Signal über HW-PWM.
Jede Bedienung sollte < 10ms einmal daten gelesen und geschrieben haben.
Jede Bedienung wird über etwa 1,5m Leitung an das Hauptboard
angeschlossen
Bislang hab ich noch mit 3 Dingen bedenken:
- I2C Anbindung von 8 µC
- I2C Anbindung des Displays
- So ein großes Programm schreiben ohne das noch schnell genug arbeitet.
Aber eventuell bin ich ja auch schon mal wieder zu weit und das ganze
lässt sich noch mit nem Sack voll Schieberegistern bewältigen.. aber 16
SoftPWMs.. naja
Danke schonmal!
Deltal schrieb:> Aber eventuell bin ich ja auch schon mal wieder zu weit und das ganze> lässt sich noch mit nem Sack voll Schieberegistern bewältigen..
Schau mal ob du einen µC mit genügend IOs findest, dann kannst du dir
die Schieberegister sparen.
>aber 16> SoftPWMs.. naja
Schau dir mal WS2812LEDs an.
Deltal schrieb:> aber 16 SoftPWMs.. naja
Für PWM gibt es auch fertige IC, die seriell angebunden werden können,
z.B.
über I²C die ganze Ecke um PCA9530 .. 33, PCA9632 ..35, PCA9685 oder via
SPI die TLC5916, TLC5917 oder TLC5940, um nur einige zu nennen.
In wieviel Jahren soll denn die Hochzeit sein?
Eine Multiprozessorkomunikation ist für einen Anfänger ein richtig
harter Brocken. Du mußt erstmal ein Protokoll entwickeln, was Fehler
erkennt und wieder selber aus dem Fehlerzustand rauskommt.
Wenn es nicht geheim ist, beschreib dochmal ausführlich das Spiel. Dann
kann man sicher weit besser Tipps geben.
Und wenn es geheim ist, dann tue das nur für Dich. Das ist dann quasi
Dein Pflichtenheft, ohne das Du mit Sicherheit Schiffbruch erleiden
wirst.
Hi,
danke für die Antworten.
PWM ICs sind wohl praktisch, sind jedoch a) nicht so leicht erhältlich
(oder teuer) und b) fehlt mir die Erfahrung damit. Mein Hintergedanke
war "bleib erstmal bei dem, was du schoneinmal gemacht hast".
Die Idee hinter dem Multi-µC kram ist: ich kann es leicht testen und
entwickeln. Timings und Speicher sind erstmal kein Problem und ich
verteile den code etwas um. Ob ein serieller Bus da die beste Wahl für
ein Anfänger ist.. nun ja denke da mache ich mir mal über alternativen
gedanken.
Das Spiel wird wohl eine Mischung aus Reaktion und Wissensquiz. Dazu
eben Funktionen wie ein Buzzer, countdown usw. Die Spieler sollen über
bestimme Farben zugeordnet werden können, daher die RGB Geschichte. Der
Schrittmotor wird für den "Flaschendrehen" Modus benötigt. Da diese
natürlich nicht zufällig ablaufen soll, muss halt auch eine bestimmte
Position angefahren werden können.
Der genaue Ablauf wird noch ausgearbeitet, die Hardware ist jedoch
verbindlich festgelegt worden. Bedeutet ich sehe besser nochmal 10 I/O
reserve vor ;)
> Die Spieler sollen über> bestimme Farben zugeordnet werden können, daher die RGB Geschichte.
Dazu brauchst da aber nicht notwendigerweise PWM. Mit einer RGB Led,
deren 3 Farbanschluesse an 3 Pins haengen, kannst du aus dem Stand
heraus 8 Farben erzeugen: Rot, Gelb, Gruen, Cyan, Blau, Magenta, Weiss
und ähm 'Nichts'. Wuerde ich mir durch den Kopf gehen lassen und liebrr
die I2C Sache durch Schieberegister ersetzen, wenn ich mit den Pins
nicht auskomme. Vereinfacht die Programmierung enorm, wenn alles auf
einem uC lauft. Speedmaessig ist es anscheinend auf einem einzelnen AVR
sowieso kein Problem.
Deltal schrieb:> Die Idee hinter dem Multi-µC kram ist: ich kann es leicht testen und> entwickeln.
Na dann frag mal einen, der schon länger programmiert, der wird Dir
genau das Gegenteil sagen.
Kann man vom AVRStudio überhaupt mehrere Instanzen parallel ausführen
oder benutzt Du mehrere PCs?
Ich würde da wahnsinnig werden, mehrere Programme gleichzeitig
entwickeln zu müssen.
Wir haben auch einige Geräte mit mehreren MCs. Bevor überhaupt das
Programmieren anfängt, wird erstmal das Protokoll entwickelt und
dokumentiert. Dann hat einer den Bus-Treiber (CAN) und die
Protokollschicht entwickelt und getestet und ne Lib draus gemacht.
Und dann hat jeder die Software für seinen MC programmiert.
cyblord ---- schrieb:> Das bekommst in 2 Jahren nicht fertig. Wie lange hast du Zeit?
Ganz grobe Schätzung:
Software: 300 Mannstunden
Hardware: 300 Mannstunden
Kosten: 800 Euro mit Gehäuse und Kabel
Zum Thema I2C kommunikation:
Für ein Projekt benötige ich ebenfalls ATTinys als Slave.
Als Grundlage hat dieser Code auf anhieb funktioniert:
http://www.jtronics.de/avr-projekte/library-i2c-twi-slave.html
Die Routinen für den Master habe ich von Peter Dannegger, hier aus dem
Forum, genommen.
Da ich ebenfalls über 1-3m übertragen muss habe ich einen Bustreiber
(PCA9600) eingesetzt.
Das klassische Verfahren ...
1 Master pollt 8 Slaves über Serielle Schnittstelle mit dem 9 Bit
Protokoll, das fast alle MC beherrschen.
Master sendet Adresse (n)
Slave (n) wird aktiv
Master Sendet Daten (x Byte)
Slave (n) empfängt (x Byte)
Master wartet x ms auf Daten vom Slave
Slave aktiviert senden und schickt (y byte) über den Bus.
Slave(n deaktiviert sich und gibt den Bus wieder frei)
Nächster Slave ...
Im Fehlerfalle reicht es wahrscheinlich aus die Daten zu verwerfen und
auf den nächsten Zyklus zu warten ...
Deltal schrieb:> PWM ICs sind wohl praktisch, sind jedoch
a) nicht so leicht erhältlich
wie Butter oder wie ein µc
> (oder teuer)
Deine Zeit ist umsonst
b) fehlt mir die Erfahrung damit.
Sann mach Sie doch. Das ist immer noch einfacher als alles selber zu
entwickeln. Für RGB leds gibt es auch fertige ICs.
Mein Hintergedanke
> war "bleib erstmal bei dem, was du schoneinmal gemacht hast".
Das genze hast du schon mal gebaut?
Für so ein Projekt würde ich zu einem STM32 mit 144 Pins raten.
Der hat alles drin, bis zu 32 PWM's, jede Menge IOs und Pheriperie.
Es braucht somit nur 1 ųC.
Schaue Dir mal die Artikel zum STM32 an.
Hi,
danke für die rege Beteiligung ;)
@Karl Heinz
Daran hatte ich schon mal gedacht, jedoch mit schaltbaren Widerständen.
Denke aber, dass wird so nix. Und "keine" Farbe ist wohl nicht so
pralle.
Würde ja alles mit Schieberegistern machen, habe aber bedenken mit der
PWM.
@Peter
Ja.. I2C war auch nur meine erste Idee. Ich .. wünsche.. mir ein System,
welches einmal programmiert und getestet wird, dann einfach acht mal
kopieren. Das ganze muss natürlich so simpel sein, dass man es mit nem
Analyser noch loggen und debuggen kann.
Im Moment grübel ich darüber nach die Kommunikation wie mit einem
Schieberegister zu machen. Der Master gibt ein Taktsignal. Der Slave
speichert auf jeder Flanke 2 oder 4 oder 8 Bit weg. Nach x Takten eine
lange Pause, dann wieder von vorne. Die drei Eingangsbits möglicherweise
einfach direkt zum Master übertragen.
Selbst ein Takt von etwa 500Hz wäre ja noch schnell genug.
@cyblord und Urps
Im Herbst, ich hoffe aber mal, dass die Entwicklungszeit sich reduzieren
lässt, wenigstens hab ich Unterstützung beim bau der
nicht-elektronischen Hardware. Wenn, dann müssen später Abstriche bei
der Software gemacht werden.. im Moment geht es mir mehr um die Hardware
und die Auslegung.
@John Doe
sieht ja ziemlich gut aus. Wie viele µC hattest du als Slave
angeschlossen und welche Übertragungszeiten konntest du erreichen?
@Hans-Georg
Ja, OK ist die alternative zum I2C
@X4U
Im Grunde kosten sie etwas soviel wie ein Tiny + Treiber. Dazu kommt
halt mein Problem, dass ich mich ausführlich mit Protokollen
beschäftigen muss. Habe halt ein schlechtes Gefühl dabei, etwas zu
designen, wo ich später nicht weiss ob es so funktioniert. Das sind halt
schon komplexe Bauteile wo man erstmal Erfahrungen mit sammeln muss.
Ist halt ne alterative zum µC, dafür müsste ich wieder weitere
Funktionen woanders unterbringen.
Nein, gebaut habe ich soetwas noch nicht, sonst würde ich ja auch nicht
eure Zeit in Anspruch nehmen. Aber das Grundprinzip, µC, Bitschubsen,
PWM erzeugen und Treiber basteln. Das hab ich alles irgendwo schon mal
gemacht, hab code-fragmente verfügbar usw.
@Markus Müller
würdest du echt jemand raten, welcher mit einem etwas anspruchsvollerem
AVR Projekt schon überfordert ist, sich noch "mal eben" in einen neuen
Controller einzuarbeiten?
In dem Artikel:
STM32 CooCox Installation
Wird gezeigt wie man einen STM32 zum ersten mal programmiert und ein
paar LED's ansteuert.
Hier ein STM32 Tutorial: http://diller-technologies.de/stm32_wide.html
Ob Du jetzt lieber ein Multiprozessor-Projekt startest oder Dich ein
wenig mit einem STM32 auseinandersetzen und alles doch lieber mit
nur einem Prozessor erledigen willst kann ich nicht für Dich
entscheiden.
Mit der CooCox Umgebung könntest Du nicht nur einen STM32
programmieren, sondern auch ein LPC17xx oder einen anderen Atmel mit
Cortex-Mx Kern.
Für umfangreiche Projekte gibt es nun mal auch entsprechend passende
Prozessoren von vielen Herstellern. Siehe hier:
http://coocox.org/CooCox_CoIDE.htm >> "Supported Device:"
Auch würde ein STM32 (oder LPC1xxx) eine Multiprozessor-Umgebung
besser unterstützen, da man die mit CAN-Bus vernetzen könnte. (CAN =
Controller Area Network). Bei AVR ist der CAN leider nur in wenigen
Chips enthalten.
Ginge zwar auch seriell oder mit SPI, ist jedoch immer mehr
Programmier-Aufwand.
Viel Spaß mit Deinem Projekt.
Deltal schrieb:> PWM ICs sind wohl praktisch, sind jedoch a) nicht so leicht erhältlich> (oder teuer) und
Wenn du Reichelt und Preise um 1..2€ schon als schwierig empfindest ...
> b) fehlt mir die Erfahrung damit. Mein Hintergedanke> war "bleib erstmal bei dem, was du schoneinmal gemacht hast".
An Multiprozessorkommunikation und Soft-PWM wirst du mehr zu knacken
haben, als ein paar Register über I²C zu setzen, zumal du I²C sowieso
als Basisschnittstelle einsetzen möchtest.
Hans-Georg Lehnard schrieb:> 1 Master pollt 8 Slaves über Serielle Schnittstelle mit dem 9 Bit> Protokoll, das fast alle MC beherrschen.
Und wozu jetzt das 9bit-Protokoll?
Deltal schrieb:> Der genaue Ablauf wird noch ausgearbeitet
Davor hat es eh keinen Sinn, schon mit der Hardware anzufangen.
Glaub es mir, ohne eine konkrete Beschreibung (= Pflichtenheft) wird das
nie was.
Es wird wie jeder andere Versuch, die EiWoMiSa zu erschaffen, kläglich
scheitern.
Aber das Thema ist hier mal wieder typisch. Viel High Tec Aufwand wegen
fast nichts. Gerade so, also ob es in erster Linie darum geht, sich zu
profilieren, anstatt mit einer gesunden Portion Pragmatismus das Problem
zu lösen.
http://de.wikipedia.org/wiki/Pragmatismus
Falk Brunner schrieb:>>>Und wozu jetzt das 9bit-Protokoll?>>>Master-Slave-Mode mit Adressierung.>> Womit wir wieder beim Thema Hochzeit wären ;-9
:D :D :D
Deltal schrieb:> sieht ja ziemlich gut aus. Wie viele µC hattest du als Slave> angeschlossen und welche Übertragungszeiten konntest du erreichen?
Bisher habe ich es nur experimentell auf dem Steckboard aufgebaut.
Ich hatte zwei Slaves (2x ATtiny861) angeschlossen und den BUS auf Fast
Mode (400kHz) betrieben.
Weiter bin ich leider noch nicht gekommen. Beruf + Studium = 0 Freizeit
;-)
> ich habe mich bereit erklärt ein Spiel für eine Hochzeit umzusetzen. Ich> bin nun am planen, Material bestellen, Platinen designen usw.
Für eine Hochzeit würde ich auf keinen Fall soviel Mühe und Arbeit
investieren. Es lohnt sich einfach nicht. Mittlerweile wird ja fast
jede dritte Ehe in Deutschland geschieden.
Realistischer wäre es doch, dem Brautpaar zwei Beratungsgutscheine
für einen Scheidungsanwalt zu schenken! ;-)
PS Vor Jahren fungierte ich als Trauzeuge bei einem Bekannten
(Wirtschaftsinformatiker). Die Heirat erfolgte aus rein steuerlichen
Gründen und wurde vom Brautpaar als eher lästiger Termin wahrgenommen.
Dementsprechend erschienen wir allesamt im lässigen Freizeitlook im
Standesamt. So grinste der Standesbeamte dann auch freundlich, als ich
ihn fragte, wie hoch die Scheidungsrate aktuell in der Stadt sei. :-)
Deltal schrieb:> Hi,>> danke für die rege Beteiligung ;)>> @Karl Heinz> Daran hatte ich schon mal gedacht, jedoch mit schaltbaren Widerständen.> Denke aber, dass wird so nix. Und "keine" Farbe ist wohl nicht so> pralle.> Würde ja alles mit Schieberegistern machen, habe aber bedenken mit der> PWM.
Kann ich verstehen.
Aber wenn wir mal genauer darüber nachdenken, dann ist der Begriff PWM
da schon recht hoch gegriffen. Denn dir geht es nicht darum, dass du
jede beliebige Farbe durch Mischung von vielen Farbabstufungen erzeugen
kannst. Alles was du brauchst, sind 8 unterscheidbare Farben. 7 kriegst
du gratis und eine 8-te kannst du dir zb erzeugen, indem du nicht
irgendeine 'PWM' nimmmst, sondern eine 2 Bit PWM. d.h. anstelle von 7
Farben 'out of the Box' hast du dann 14 Farben und das mit moderat
anspruchsvollem Code. Eine derartige 'PWM' ist von der Ausgabefrequenz
auf den Schieberegistern moderat und noch problemlos so machbar, dass
für den Rest des Programmes genügend Rechenzeit übrig bleibt. Man könnte
sich zb auch überlegen, ob man eine LED nicht als ein Bauteil mit 3
Beinen ansieht, sondern als eines mit 4, wobei dann 1 Farbpin der LED
über 2 unterschiedliche Widerstände an jeweils 2 Pins vom
Schieberegister hängt.
Aber ist ok. Wenn du dir unbedingt durch den Mehr-µC Aufbau zusätzlichen
Ärger einholen willst, dann tu das. Ich weiß ja nicht, wie gut du
programmieren kannst. Aber wenn es für ein paar popelige LED an ein paar
Schieberegistern, die timergesteuert 100 mal in der Sekunde ihre neuen
Farbwerte kriegen nicht reicht, dann denk ich mir meinen Teil, wie gut
du ein Kommunikationsprotokoll implementieren kannst.
Falk Brunner schrieb:> Aber das Thema ist hier mal wieder typisch. Viel High Tec Aufwand wegen> fast nichts.
Genau so siehts aus.
Interessant, dass dieser Aufwand gerne von Leuten getrieben wird, die
sich selbst 'Anfänger' nennen, oder noch schlimmer "eigentlich hab ich
keine Ahnung", während die alten Hasen zur Einfach-Lösung greifen. Ich
frage mich warum das wohl so ist. Das sollte einem Anfänger ja
eigentlich zu denken geben, wenn das Bauchgefühl der alten Hasen von
etwas abrät. :-)
Karl Heinz schrieb:> Interessant, dass dieser Aufwand gerne von Leuten getrieben wird, die> sich selbst 'Anfänger' nennen, oder noch schlimmer "eigentlich hab ich> keine Ahnung", während die alten Hasen zur Einfach-Lösung greifen.
Ne, Karl Heinz. Das ist einfach die Angst, dass nachher etwas "verpennt"
wurde und es darum nicht geht.
Mit zunehmender Erfahrung hat man da einfach mehr Überblick was geht und
wo es schwierig wird.
/regards
Andreas
Pragmatiker schrieb:> So grinste der Standesbeamte dann auch freundlich, als ich> ihn fragte, wie hoch die Scheidungsrate aktuell in der Stadt sei. :-)
Wie geistreich eine solche Frage während einer Trauung....
Hallo,
erstmal kurz Update nach dem wir uns am WE mal wieder zusammengesetzt
haben.
Das ganze ist wie schon vorhergesehen, noch einmal zusammengestrichen
worden. Hauptsächlich wollte ich die Farben und Lampen weghaben, weil
diese am meisten Arbeit machen. Außerdem wurden Display und Menu auf
drei Schalter reduziert.
Beschreibung der drei Modi wurde erstellt. Im Prinzip ein "Quizzer", ein
Zufallsgenerator mit dem Schrittmotor und eine Geschicklichkeitsübung
mit Reedschalter und Pendel.
Durch den Wegfall der meisten Ausgänge reicht nun ein µC mit ein paar
Schieberegistern.
Die Platine(n) sind etwa zu 80% fertig, Teile bestellt. Mal schauen ob
ich mich weiter motivieren kann :)
>Für eine Hochzeit würde ich auf keinen Fall soviel Mühe und Arbeit>investieren.
Tjo, hier ist das halt schon gang und gebe, dass man eben nicht versucht
immer die selben 0815 Spiele durchzuzieren. Außerdem ist das ganze dann
ja auch noch Geschenk und wird wohl noch den einen oder anderen Abend
mal genutzt werden.
So und nun.. warum muss es eigentlich immer so negativ zugehen? Ich
komme hier herein und frage (betont als Anfänger) wie man so etwas lösen
kann und wie ihr so etwas lösen würdet. Dazu habe ich meine Ideen
geschrieben.
> Aber das Thema ist hier mal wieder typisch. Viel High Tec Aufwand wegen> fast nichts.
Ich hab nichts gegen einfache low-tec Lösungen. Die RGBs wollte ich z.B.
über 2x3 Bit mit je einem Select Bit ansteuern. Das wären dann zwar
viele Leitungen geworden, aber das Protokoll und die Umsetzung einfach.
Nur wie bitte soll jemand, der sich als Anfänger outet da den Überblick
habe? Genau in dem er andere Leute mit mehr Ahnung fragt.
Habe ja auch gute Ideen bekommen und bin dafür dankbar. Aber warum dann
noch gemeckert werden?