Forum: Mikrocontroller und Digitale Elektronik ATMegas vernetzen ?


von TobyTetzi (Gast)


Lesenswert?

Hallo,

mich würde mal intressieren, wie ich 2 oder mehr AVRs dazu bekomme,
das diese zeitgleich das selbe ausführen.

Statt einer Porterweiterung per Schieberegister stelle ich mir eine
"Vernetzung" mehrerer AVRs vor.

Ich habe, sagen wir mal 4 Mega16, mit je 8-32 LEDs.
Nun bekommt der erste AVR einen ExtInt, und lässt seine LEDs in einem
bestimmten Bitmuster leuchten.
Die anderen haben nun auch je 8-32 LEDs, und sollen zur gleichen Zeit
"Ihr" Bitmuster auf den LEDs ausgeben.

Würde es reichen, alle ExtInt zu verbinden?
Oder muß ich den Int "weiterleiten"?

Ein anderes Beispiel:

Nur der erste AVR hat die Bitmuster für alle anderen AVRs.
Wie kann ich am Besten die Daten an die anderen AVRs weitergeben.
Ich denke, es wird am einfachsten per SPI gehen,
nur leider brauche ich diese Pinne für die LEDs.
Wie könnte so ein SPI Protokoll aussehen.
Ich stelle es mir eigentlich nicht so schwer vor, da die "hinteren"
AVRs nur empfangen sollen.

Wüde so eine Übertragung auch per TX/RX funktionieren, also per UART.


Ich wäre über jeden Vorschlag dankbar.

Danke im voraus...

...Gruß Toby

von Thomas O. (Gast)


Lesenswert?

Hallo,

wieso sollen die Bitmuster nur im ersten AVR sein? Um nicht alle
Programmieren zu müssen? Du könntest auch die Programmierpins
zusammenschaltung um alle gleichzeitig zu Programmieren. Ich würde das
aufjedenfall so machen mit dem Zusamenschalten des ext.
Interuppteingangs.

von Alex (Gast)


Lesenswert?

Hallo,

mach es doch ueber das 2-Wire interface. Da kannst Du so weit ich weiss
auch mehrere AVR zusammenklemmen. Ist ja auch ein BUS. Diese
moeglichkeit geht aber nur im Master oder im Slave Betrieb. Kannst ja
mal schauen im DatenBlatt unter "Two-wire serial interface"

Mit einem "normalen" UART duerfte es nicht gehen, da kein Bus. Du
kannst natuerlich zwei miteinander verbinden. Oder aber auch ueber
Umsetzer auch z.B. RS485 oder CAN oder...

Alex

von Rahul D. (rahul)


Lesenswert?

Wo liegt denn der Sinn darin, mit ATMega16 8-32 LEDs leuchten zu lassen,
und diese von einem Master zu steuern?
Naja, egal... (vielleicht überträgt der Master eine Leuchtabfolge an
den Slaves, die dann bei einem gemeinsamen Startsignal ausgegeben
wird...)

Alex hat schon eine Möglichkeit aufgezeigt: TWI.
Man könnte auch den 9-Bit-UART-Mode benutzen. Das ist sogar ziemlich
einfach, wenn man nur einen Master auf dem Bus hat.
Soll es mehrere geben, dann werden Sachen wie RS485 und CAN
interessant.
Zu dem Thema gibt es aber schon ne Menge Material...

So, Post noch mal gelesen:
TWI oder 9-Bit-UART kommt wohl nur in Frage. SPI wäre zwar sehr
schnell, aber auch leitungsintensiver.

Übrigens könnte man im 9-Bit-UART-Modus dann auch das Startsignal sehr
einfach verteilen, indem man einen Broadcast über die Leitung schickt.

von Thomas O. (Gast)


Lesenswert?

stimmt eigentlich könnste das mit Schieberegistern oder Latches machen
ist um einiges billiger als dafür soviele AVRs zu kaufen. Dann würde
auch ein ganz einfacher Tiny reichen der etwas mehr wie 8 I/Os hat.

von TobyTetzi (Gast)


Lesenswert?

Hallo,

ich wollte es eben nicht mit der Porterweiterung wie z.B. HC595
machen.
Da ein HC nur 8 LEDs ansteuern kann.
Für 8 RGB LEDs müsste ich schon 3 HCs haben, und müsste immer alle
24 Bit rausschieben.

Nehme ich nur einen Mega16, könnte ich direkt über Transistoren
8 RGB LEDs, also 24 einzel LEDs, anschließen.

Will ich nun mehr als 8 RGB LEDs treiben, dachte ich, nehme ich mehrere
dieser "Module".

Der erste AVR sollte, wenn überhaupt, alle Bitmuster haben, um bei
Musteränderung nur einen "umzuprogrammieren" zu müssen.

Danke shoneinmal !

Gruß Toby

von Thomas O. (Gast)


Lesenswert?

mit den Latches funktioniert da so: die hängen alle parallel an einem
Port nun gibst du z.b. 01010101 aus und gibst über eine Steuerleitung
dem Latch1 ein Signal, dieser speichert dann die Bitfolge und gibt sie
selbstständig an die Leds weiter auch wenn du an den Port wieder andere
Daten anlegst. Jetzt gibts du die Bitfolge für das nächste Latch an den
Port z.b. 10101010 und gibst im Wieder das Signal das zu übernehmen
usw.

Du brauchst im Prinzip nur einen Port und einige Pins um das
entsprechende Latch anzusprechen. Könntest auch nen 3bit Baustein
nehmen der dann 8 Ausgänge aufweist so könntest du 8 Latches also 64
Leds mit 13 Leitungen versorgen. Hier musst du auch nicht alles
durchschieben wie bei einem Schieberegister.

Ein weiterer Vorteil das das Latchs die Leds direkt betreiben kann ohne
weitere Transistoren usw.

von Karl H. (kbuchegg)


Lesenswert?

@Topy

Denk mal nach.
Wenn nur einer der Megas das Bitmuster hat, muessen die
doch auch irgendwie zu den anderen kommen. D.h. am Master
hast Du auf jeden Fall den Aufwand alle Bits rumzuschieben,
egel ob das Ergebnis nun im Schieberegister landet oder
in einem anderen Mega. Zusaetzliche Megas machen das Ganze
nur noch komplizierter, weil dann die Kommunikation zwischen
ihnen auch noch klappen muss und die Dinger synchron laufen muessen.
Und komplizierter heist meist auch: fehleranfaelliger.

Eine Lektion die die Amerikaner irgendwann auch noch lernen werden.

von Olaf (Gast)


Lesenswert?

Geht es um den platz den die latches benötigen?

Ein '595 kosted 0,30 €, ein mega16 (in smd die günstigste variante)
4€.

1,20€ zu 4€ ist schon ein argument oder?

Zu dem 'mehr' an zeit das benötigt wird um die daten zu shiften:
Irrelevant für 'displays'.

Augen sind SOOOO träge, das man nur 25 bilder pro sekunde benötigt um
einen flüssige bewegung vorzugaukeln

Die HC595 sind für 30MHz spezifiziert, und schon ein SPI takt von
200kHz sollte reichen die cascadierten 595 ausreichend schnell zu
füttern.
Außerdem besitzen die '595 eine separate latch leitung, so daß während
des shiftens der zustand der ausgänge nicht geändert wird.

Wenn das argument nichtplatz ist, dann stünde bei mir die entscheidung
fest...

  Olaf

von Freak5 (Gast)


Lesenswert?

Wo ist der Unterschied zwischen SPI und TWI? Ich dachte TWI wäre
sozusagen der integrierte SPI von den ATMEGAS?

von Olaf (Gast)


Lesenswert?

@Freak5

TWI ist mit I²C gleich (in den meisten fällen) (Two Wire Interface)

SPI ist ein 'bidirektionales' drei draht interface. Eigentlich als
shift-register über zwei chips verteilt, daher auch MISO, MOSI, SCK.
Man kann es aber auch unidirektional betreiben. (MISO+SCK oder
MOSI+SCK)

  Olaf

von TobyTetzi (Gast)


Lesenswert?

Hallo,

Thomas, du meinst wohl parallel anzusteuernde HCs.
Die HC595 werden ja per SPI angesteuert.
Da die SPI beim Mega Hardwaremäßig vorhanden ist,
kann man dort alles im Hintergrund rausschieben.
Mit Sicherheit eine feinere Lösung, als alles Parallel zu machen.

Olaf, klar war es der Platz Grund.
Aber recht hast Du, der "eine" müsste auch alle Daten zu den
"anderen" schicken.
Also nicht weniger Aufwand, wie mit einer Schiberegister Lösung.
Das hatte ich garnicht bedacht.

Also, ich nehme einen AVR, und für 8 RGB LEDs 3 HC595.
Für jede Farbe einen. ( Habe auch noch 50 Stk. in SMD )

Thomas, die 74HC595 können laut "Hagen, aus einem anderem Thread"
keine 20mAh pro Pin treiben.
Das können widerum nur die 74VHC595, die gibts aber nicht da, wo ich
die "normalen" her hab.

Müssen an den "normalen" nun Transistoren, oder nicht ?

Gruß Toby

von Thomas O. (Gast)


Lesenswert?

ich meine HC573 suche mal nach einen EEPROM Beitrag von mir da habe ich
das gleiche System verwenden um die Adressleitungen eines EEPROM zu
beschalten ist mit kompletten Schaltplan im Forum einfach mal suchen
glaube das war ein 28C64

von Olaf (Gast)


Lesenswert?

@TobyTetzi

ULN2803 o.ä. nach dem 595 schalten, ist ein achtfach open collector
darlington array. Damit kann man dann auch nicht 5V schalten z.B. 12V.

Oder halt transistoren...

  Olaf

von Freak5 (Gast)


Lesenswert?

I²C das habe ich wohl verwechselt. Wie viele Controller kann man mit SPI
eigentlich vernetzen? Wenn es wie ein Shiftregister funktioniert doch
nur 2?

von Olaf (Gast)


Lesenswert?

@Freak5

Soviele wie man pins 'spenden' möchte für jeden slave eine Select
leitung. MISO,MOSI,SCK werden einfach an alle slaves angeschlossen.

Man kann auch mit 74*138 o.ä. die select leitungen multiplexen.

  Olaf

von Stefan Kleinwort (Gast)


Lesenswert?

Nimm einen TPIC6B595. Der entspricht dem 74HC595 mit integrierten
Power-Ausgängen. Gibt es z.B. bei Segor für 0,96€. Dasselbe Pin-
und funktionskompatibel auch z.B. von ST.

Es gibt noch viel besseres für Deine Anwendung, z.B. STP16C/L596 (für
16 Leds, jeweils mit Konstant-Strom-Ausgang, d.h. keine
LED-Vorwiderstände). Problem: die bekommst Du wohl nicht ...

Gruß, Stefan

P.S.:
Den ATmega als Multi-LED-Treiber zu benutzen, ist nicht die beste Idee.
Wenn Du es doch machst: beachte die absolut-maximum-ratings für die
Versorgungspins (200mA -> die dürfen alle LED-Ströme gemeinsam nicht
erreichen).

von Ulrich (Gast)


Lesenswert?

Es gibt doch auch Ics welche 64 LEDs ansteuern können und auch per spi
angebunden werden. Warum schlägt die keiner vor? Oder sind die nicht
geeignet...

von Freak5 (Gast)


Lesenswert?

@STefan: Ich habe soetwas auch mit einem AVR aufgebaut um zu testen, ob
alle Ports noch funktionieren. Dadurch konnte ich den Effekt beobachen,
den ein Krümel Lötzinn unter dem Sockel hervorrufen kann...

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.