www.mikrocontroller.net

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


Autor: stef (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 !!!!!

Autor: Sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wär's mit einem Quarzoszillator?

Autor: 123 (Gast)
Datum:

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

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hive (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum schreibt ihr eigentlich immer alle das Gleiche?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hive (Gast)

>Warum schreibt ihr eigentlich immer alle das Gleiche?

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

MFG
Falk

Autor: DerAlte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wie kann man mehrere ATtiny2313Vs (oder andere AVR µC) synchronisieren?

Das war die Frage.

Erst beantworten und dann weiter.

Autor: stef (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

Autor: stef (Gast)
Datum:
Angehängte Dateien:

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: stef (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: stef (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
PORTD = 0x04;

Danke!

Autor: Hive (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie groß die internen sind steht wahrscheinlich im Datenblatt.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Michael H* (Gast)
Datum:
Angehängte Dateien:

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

Autor: mfgkw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um den dritten Schleifring zu sparen:
Vielleicht das Signal auf die Spannungsversorgung aufmodulieren?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.