Forum: Mikrocontroller und Digitale Elektronik Für LED-Propeller-Projekt: wie kann man mehrere ATtiny2313Vs AVR synchronisieren?


von stef (Gast)


Angehängte Dateien:

Lesenswert?

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 !!!!!

von Sam (Gast)


Lesenswert?

Wie wär's mit einem Quarzoszillator?

von 123 (Gast)


Lesenswert?

27! µC für ein LED Propeller Projekt? Wieso denn so viele?

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

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.

von Jens (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@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

von Gast (Gast)


Lesenswert?

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?

von Hive (Gast)


Lesenswert?

Warum schreibt ihr eigentlich immer alle das Gleiche?

von Falk B. (falk)


Lesenswert?

@Hive (Gast)

>Warum schreibt ihr eigentlich immer alle das Gleiche?

Werte das mal als starke Indikation, dass wir Recht haben.

MFG
Falk

von DerAlte (Gast)


Lesenswert?

>wie kann man mehrere ATtiny2313Vs (oder andere AVR µC) synchronisieren?

Das war die Frage.

Erst beantworten und dann weiter.

von stef (Gast)


Angehängte Dateien:

Lesenswert?

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)

von stef (Gast)


Angehängte Dateien:

Lesenswert?

hier ist der c-Code zu finden mit Interupt (hauptsächlich Zeilen 
298-316)

von Falk B. (falk)


Lesenswert?

@ 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

von stef (Gast)


Lesenswert?

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...

von Falk B. (falk)


Lesenswert?

@ 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.

von stef (Gast)


Lesenswert?

>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!

von Hive (Gast)


Lesenswert?

Wie groß die internen sind steht wahrscheinlich im Datenblatt.

von Falk B. (falk)


Lesenswert?

@ 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

von Matthias L. (Gast)


Lesenswert?


von Michael H* (Gast)


Angehängte Dateien:

Lesenswert?

aah, wenns hier mit posen losgeht, bin ich sofort dabei =)
das is übrigens ein deckenventilator

von mfgkw (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.