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 !!!!!
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?
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)
@ 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:
@ 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