Hallo wie kann man mehrere ATtiny2313Vs (oder andere AVR µC) synchronisieren? Die 27 µC kommen zum Einsatz in einem LED-Propeller, der - sehr schnell gedreht - ein Nachbild erzeugt. Um das Bild still stehen zu lassen, haben wir einen Hall-Effekt Sensor verwendet. Über zwei Schleifringe wird der Strom 3.3V zu den µC und den LEDs übertragen. Das eigentliche Problem liegt darin, daß das Bild asynchron läuft (wenn auch nur sehr wenig, aber trotzdem störend). Im Moment sind bei einem µC als Master-Chip die Fuses für Clock-Output gesetzt. Alle anderen 26 µC sind mittels Fuses auf Clock-Input gesetzt. Wir mussten uns zunächst auf den Original-Programm-Code (siehe Anhang) von ladyada.net verlassen. Nach einigem Lesen über "Interrupt-Overflow": kann man darüber die Genauigkeit der Chips zueinander erhöhen? Danke für jeden Hinweis !!!!!
Wie wär's mit einem Quarzoszillator?
stef wrote: > Hallo > wie kann man mehrere ATtiny2313Vs (oder andere AVR µC) synchronisieren? Darunter verstehst Du was genau? > Die 27 µC kommen zum Einsatz in einem LED-Propeller, der - sehr schnell > gedreht - ein Nachbild erzeugt. OK dann wuerde ich sagen Du machst etwas falsch. Oder ist der Rotor 3 Meter gross? Stell mal einen Schaltplan ein und erklaere das Funktionsprinzip, dann kann Dir sicherlich auch jemand helfen.
Programmier in den MAster ein paat ops in die Startroutine,die nur einmal abläuft. Warscheinlich läuft der master shcon und dann kommen erst alle slaves
@stef (Gast) >wie kann man mehrere ATtiny2313Vs (oder andere AVR µC) synchronisieren? Z.B. über einen externen Interrupt oder über die ICP-Funktion. >Die 27 µC kommen zum Einsatz in einem LED-Propeller, der - sehr schnell Siebenundzwanzig? Obd das sinnvoll ist? So ein AVR hat schon ziemlich Rechenleistung, der kann EINIGE LEDs ansteurn, auch in ner Propelleruhr. MFg Falk
Davon würd ich auch gerne ein Bild sehen ... Aber alleine bei "27" klingeln bei mir die Alarmglocken und sagen mir:"Konzept-Fehler" ... Was macht ihr denn mit 27 AVRs?
Warum schreibt ihr eigentlich immer alle das Gleiche?
@Hive (Gast)
>Warum schreibt ihr eigentlich immer alle das Gleiche?
Werte das mal als starke Indikation, dass wir Recht haben.
MFG
Falk
>wie kann man mehrere ATtiny2313Vs (oder andere AVR µC) synchronisieren?
Das war die Frage.
Erst beantworten und dann weiter.
Es sind soviele µC, weil jeder nur 8 LEDs (zumindest mit dem Original-Code und ohne Shift-Register) schalten kann und der gesamte Aufbau zur Darstellung einer Grafik von 216 Punkten Breite (und 250 Punkten Länge, gespeichert im ROM) dient. Wir verwenden SMD-LEDs, der Rotor ist daher nicht länger als ein Blatt Papier A4. Im Moment sendet ein Master-Chip ClockOut (lfuse: 0xa4) und die anderen Chips empfangen ClockIn am Pin5 (lfuse: 0xe0). Ein noch zu verfolgender Ansatz aus dem ladyada.net Forum lautet, über einen externen Sensor einen Interupt zu erwirken. Ist das, liebe Forummitglieder denn exakter, als für die Synchronisation die Stromversorgung zu unterbrechen? Im Moment läuft die Synchronisation darüber, daß der Hall-Effect-Sensor die Stromversorgung unterbricht, was nur zwei Schleifringe nötig macht. Das Problem, was wir mit einem Interupt im Moment haben ist, daß ein zusätzlicher dritter Schleifring nötig wäre, der das Hall-Effekt-Sensor-Signal überträgt. Angehängt ist der Schaltplan und im nächsten Post der c-Code mit Interupt (hauptsächlich Zeilen 298-316)
hier ist der c-Code zu finden mit Interupt (hauptsächlich Zeilen 298-316)
@ stef (Gast) >Es sind soviele µC, weil jeder nur 8 LEDs (zumindest mit dem >Original-Code und ohne Shift-Register) schalten kann und der gesamte >Aufbau zur Darstellung einer Grafik von 216 Punkten Breite (und 250 >Punkten Länge, gespeichert im ROM) dient. OK, macht dennoch kein sonderlich schönes Konzept. Den Speicher kriegt man auch in einem etwas grösseren AVR, so MEGA16 oder so. Die haben auch mehr Pins. Die einfach per Register (74HC273 etc.) auf eine Bus aufbohren, und schwups, tonneweise AVRs und Synchronprobleme gespart. >Wir verwenden SMD-LEDs, der Rotor ist daher nicht länger als ein Blatt >Papier A4. Wenn der mit 25 U/s++ dreht geht da schon was los. Been there, done that (aber irgendwann gings nicht mehr :-0 >Im Moment sendet ein Master-Chip ClockOut (lfuse: 0xa4) und die anderen >Chips empfangen ClockIn am Pin5 (lfuse: 0xe0). Das reicht nicht. Man muss auch den Programmablauf synchronisieren, quasi die Phase abgeleichen >Ein noch zu verfolgender Ansatz aus dem ladyada.net Forum lautet, über >einen externen Sensor einen Interupt zu erwirken. Ist das, liebe >Forummitglieder denn exakter, als für die Synchronisation die >Stromversorgung zu unterbrechen? Das ist ja GANZ hart. Wie ich bereits sagte, das kann man über ICP oder einen exteren Interrupt lösen. Das Sync Signal vom Hallsensor einfach auf die 27 AVRs parallel geben, dann sind alle im Gleichtakt. GGf den hallsensor mit einem Gatter puffern, den 27 CMOS-Eingänge sind schon ein wenig viel. >Im Moment läuft die Synchronisation darüber, daß der Hall-Effect-Sensor >die Stromversorgung unterbricht, was nur zwei Schleifringe nötig macht. AUA! Und wirklich synchron wird das auch nicht, weil die AVRs nie alle die gleiche Startup-Zeit haben. (Toleranzen in der Power On Reset Schaltung sowie beim interen Oszillator, der sie Startverzögerung taktet.) >Das Problem, was wir mit einem Interupt im Moment haben ist, daß ein >zusätzlicher dritter Schleifring nötig wäre, der das >Hall-Effekt-Sensor-Signal überträgt. Häää? Der Hallsensor sitz auf dem ROTOR, der Magnet ist fest am Stator. MfG Falk
Vielen Dank, Falk! Nächster Schritt also: Hall-Effekt-Sensor-Signal an alle 27 ATtinys Pin6 verlöten. Dann schauen wir mal, ob das Signal auch ohne Gatter ausreichend stark ist. Der dritte Schleifring ist nötig, weil sich die Aufhängung des Rotors ebenfalls dreht; wir können leider den Hall-Effekt-Sensor nirgendwo statisch anbringen...
@ stef (Gast) >Nächster Schritt also: Hall-Effekt-Sensor-Signal an alle 27 ATtinys Pin6 >verlöten. Dann schauen wir mal, ob das Signal auch ohne Gatter >ausreichend stark ist. Naja, den Pull-Up entsprechend klein machen. So 330 Ohm oder so. >Der dritte Schleifring ist nötig, weil sich die Aufhängung des Rotors >ebenfalls dreht; ??? > wir können leider den Hall-Effekt-Sensor nirgendwo statisch anbringen... Kann ich mir schwer vorstellen. MFg Falk P.S. Und richtige Propelleruhren haben einen Rotationstrafo oder Energieübertragung per Motorwicklung.
>Naja, den Pull-Up entsprechend klein machen. So 330 Ohm oder so.
Ist der interne Pull-Up Resistor an Port D ok oder ist ein externer
notwendig?
Ist momentan im largeimage_sensor.c Zeile 323 gesetzt mit:
1 | PORTD = 0x04; |
Danke!
Wie groß die internen sind steht wahrscheinlich im Datenblatt.
@ stef (Gast)
>Ist der interne Pull-Up Resistor an Port D ok
NEIN! Die sind um die 50KOhm. Obwohl, da ja 27 parallel hängen, macht
das 2K ;-)
Mach mal lieber 330 Ohm extern.
MFg
Falk
aah, wenns hier mit posen losgeht, bin ich sofort dabei =) das is übrigens ein deckenventilator
Um den dritten Schleifring zu sparen: Vielleicht das Signal auf die Spannungsversorgung aufmodulieren?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.