www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Einige Fragen zu Schieberegistern


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend.

Ich möchte gerne 24 bis 40 RGB Leds ansteuern (Bin noch nicht ganz 
sicher). Das alles macht der Atmega 8.

Die Software ist bereits geschrieben und funktioniert auch wunderbar. 
Nun zu meinen Problemen:

Ich möchte pro RGB Led ein Schieberegister einbauen. Eine RGB Led 
benötigt 3 Bits, doch z.B. der 4094'er schiebt 8 Bits durch, wobei dann 
5 Bits nichts tun und damit wertvolle Rechenzeit verloren geht... 
Reinschieben muß ich sie ja doch :-) Kennt jemand ein 4 Bit 
Schieberegister, was die gleichen eigenschaften wie z.B. der 4094 hat? 
Ich bräuchte nämlich so einen Store eingang, damit die Bits erst zu den 
Ausgängen geschoben werden, wenn der Store Eingang auf high geht. Wenn 
ich das nicht habe, dann leuchten die Leds immer beim durchschieben, 
obwohl sie nicht leuchten sollen.

Über Multiplexen hab ich mir auch schon gedanken gemacht, aber da ist 
mir erstens der Kabelaufwand zu groß und zweitens, wenn ich nur 24 RGB 
Leds mache will ich doch die Möglichkeit haben, irgendwann 40 RGB Leds 
anzusteuern. Ich finde da bin ich dann mit den Schieberegistern am 
flexibelsten, weil ich ja bei der letzten RGB Led einfach dazuhängen 
muß.

Der Abstand von RGB zu RGB Led beträgt dann in meinem Fall ca. 50cm. 
Also ca. 12m bei 24 RGB Leds. Da mach ich mir natürlich auch sorgen, ob 
beim letzten Schieberegister die Daten noch korrekt ankommen. Wäre das 
möglich, bei jeden Schieberegister nach der Clock und nach den Data 
Ausgängen immer einen kleinen Transistor dranzuhängen? z.B. BC549...? 
Oder ist das totaler Schwachsinn? Würde das auch ohne funktionieren?

Ich hoffe, ich habe es nicht zu kompliziert erklärt und es kann mir 
jemand weiterhelfen.

Gruß Stefan

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei der Distanz stellt sich als erstes die frage nach der frequenz, mit 
welchem du die schieberegister betreiben willst. Bei einigen kHz wirds 
kein problem sein. Bei grössen frequenzen wäre z.b. interessant zu 
wissen wie die verbindung, etc aussieht...
Das mit den Transistoren wäre möglich, hab mal was gemacht, wo ich auf 
verschiedenen prints schieberegister plaziert hab, und die signale auf 
jedem mit einem schmitt-trigger aufgefrischt habe, die idee war, das von 
den flankenanstiegszeiten/verzögerungszeiten immer die gleichen 
voraussetzungen herschen. Achte aber darauf, dass Flankenanstiegs- 
Abfals-zeiten unterschiedlich sind...

Autor: Thomas O. (kosmos)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es denn mit 74HC573N da gibts du die Daten parallel aus und 
sagst welcher Baustein das Speichern soll, danach das gleiche mit dem 
nächsten Baustein, überträgst also erstmal alle Daten in mehrere 
Latches, wo das ganze gespeichert wird, dann schaltest du dei Eingänge 
der Latches hochohmig womit dein Port wieder voll zur Verfügung steht. 
Und gibts dann ein Signal aus damit sie alle gleichzeitig ihr Signal an 
die LEDs geben. Langwierige Schiebearbeit sparst du dir dadurch und 
kannst auch ziemlich schnell einzelne Leds ansprechen ohen alles 
komplett neu durchzuschieben.

Habe mal ein Beispiel mit diesen Latches angehängt, wobei hier einige 
Funktionen des Bausteins garnicht erläutert werden. z.B. Transparent 
schalten, Eingänge Hochohmig schalten usw...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi. Klingt gut, ist aber wieder viel kabel aufwand. 3 kabel für rgb, 24 
kabel für jeden latch, einmal 5v und einmal gnd sind dann 29 kabel. Mit 
den schieberegistern brauch ich da nur 5 kabel. Ist also ein großer 
unterschied. Gruß stefan.

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein du brauchst nur einen Port für die Daten(alle Latcheingänge hängen 
parallel)wären also 8 und ein paar Steuerleitungen um das richtige Latch 
auszuwählen, der Port ist danach wieder frei zur Verfügung. Mehr Pins 
wirste also nicht benötigen wäre halt nur etwas mehr Aufwand des 
Verkabelns aber du hättest halt den Vorteil das du jedes Bit einzeln 
ändern kannst ohne alles komplett durchzuschieben.

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas.

Hab im Anhang ein Bild drangehängt, so wie du es beschreibst. Ist nur 
ganz schnell gezeichnet ohne Vorwiderstände an den Leds. Nur zum 
erklären..

Hab das jetzt mit 3 RGB Leds gezeichnet. dazu brauch ich 3 Kabel zum 
Latch (RGB) und 3 Kabel, um auszuwählen, welches Latch gerade aktiv ist. 
Das macht 6 Kabel für 3 RGB Leds. Ich will aber mal 40 RGB Leds 
anschliesen... Dann rechne das mal aus:-)

Also wie gesagt, jede RGB Led soll ihr eigenes Schieberegister bekommen, 
da ja zwischen den RGB Leds ca. 50cm Abstand sind.

Kennt da sonst niemand eine Lösung?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stefan (Gast)

>Dateianhang: Schaltung.png (69,3 KB, 0 Downloads)

Gings nicht noch grösser? 150 dpi reichen.

>Hab das jetzt mit 3 RGB Leds gezeichnet. dazu brauch ich 3 Kabel zum
>Latch (RGB) und 3 Kabel, um auszuwählen, welches Latch gerade aktiv ist.

Nein. Es reichen 3 (DREI) Signale, um eine nahezu beliegbig grosse 
Anzahl LEDs zu steuern.
Siehe

AVR-Tutorial: Schieberegister

>Das macht 6 Kabel für 3 RGB Leds. Ich will aber mal 40 RGB Leds
>anschliesen... Dann rechne das mal aus:-)

[ ] Du hast das Prinzip von Schieberegistern verstanden.

>Also wie gesagt, jede RGB Led soll ihr eigenes Schieberegister bekommen,
>da ja zwischen den RGB Leds ca. 50cm Abstand sind.

Kein Thema, dann sind eben nur 3 von 8 Ausgängen genutzt.

MfG
Falk

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Falk, wie es mit Schieberegistern funktioniert, weiß ich auch.

Wenn du weiter oben liest, was Thomas geschrieben hat, dann handelt es 
sich bei seinem Vorschlag aber nicht um Schieberegister, sondern um so 
einen Latch. Wenn jede RGB Led einen eignenen Lach hat, dann brauch ich 
alleine für jeden Latch ein Kabel... das mal 24 RGB Leds sind dann schon 
24 Kabel. Darum will ich es ja mit Schieberegistern machen, da ich dann 
nur 5 Kabel brauche...


Ich suche ein Schieberegister mit 4bit, damit nicht so viele Bits ohne 
Benutzung durchgeschoben werden.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:
>
>>Also wie gesagt, jede RGB Led soll ihr eigenes Schieberegister bekommen,
>>da ja zwischen den RGB Leds ca. 50cm Abstand sind.
>
> Kein Thema, dann sind eben nur 3 von 8 Ausgängen genutzt.

In dem Fall würde ich jeweils 2 RGB Led an 1 Schieberegister
anschalten.

Die 'Backbone' (4-Draht Bus) verbindet alle Schieberegister
miteinander. Von jedem Schieberegisterbaustein, gehen jeweils
2 Stück 4-Draht Leitungen zu den RGB-Leds.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist die sinnvollste Lösung, die   Karl heinz Buchegger gerade 
vorgeschlagen hat!

Solltest aber auf den sogenannten Fan-In aufpassen.
Wenn du zuviele Module hast (also viele SCK parallel) dann wird das dem 
Treibenden Ausgang nicht gefallen ;-/

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Matthias.

Darum habe ich am Anfang gefragt, ob ich die Clock und die Daten 
jedesmal über einen Transistor schalten soll.

Gruß Stefan

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:
> Hallo Matthias.
>
> Darum habe ich am Anfang gefragt, ob ich die Clock und die Daten
> jedesmal über einen Transistor schalten soll.
>

Ich sach mal so:
Ich hab eine Schieberegisterkette aus 8 Stück 595 ohne
irgendwelche Treiber dazwischen aufgebaut und sie funzt
einwandfrei.

Nach jeder Stufe einen Verstärker für CLK einzubauen ist
sicherlich nicht notwendig. Bei den Daten braucht es sowas
ja sowieso nicht, weil jeder 595 als Treiber für den nächsten
fungiert.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Karl Heinz, endlich mal eine nützliche Information.

Hab im Internet gelesen, das man sich aus Flip Flops auch ein 
Schieberegister basteln kann. Hat da schon jemand Erfahrungen gemacht, 
wie Zuverlässig das ist? Kann man die dann schnell takten? Würde gerne 
mit mindestens 4MhZ takten.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hör auf! Oder fällst du einen Baum, um Streichhölzer selbst 
herzustellen??



>h jeder Stufe einen Verstärker ..
Ja, acht sind ok. Aber ab so 16 sollte man sich das überlegen..

Autor: Chrisi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
12 Meter ist eine ordentliche Länge. Da treten echte Laufzeiten auf. 
Evtl. solltest Du die drei Datenleitungen am Ende mit eine RC-Glied 
gegen Ground abschliessen, sagen wir mal 10nF/220 Ohm. Ist nur so ein 
Gedanke für den Fall, dass es Probleme geben sollte. Ahso, und evtl. 
musst Du noch acht geben auf die Setup/Hold-Time der Latches wg. der 
gleichen Laufzeit.

Autor: Chrisi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um maximale Geschwindigkeit zu erzielen, also maximalen Clock, noch ein 
Gedanke: Du willst ja nur drei Bits pro 4094 ausgeben. Es gibt also pro 
LED/4094 nur acht verschiedene Zustände, somit schreibst Du acht 
Routinen, wobei jede nur einen möglichen Zustand rausschiebt, ganz ohne 
Schleife. Somit kannst Du 24 LEDs mit AVR@16MHz in ca. 24 x 2us also 
48us ansteuern.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stefan (Gast)

>Danke Falk, wie es mit Schieberegistern funktioniert, weiß ich auch.

Das bezweifle ich. Wenn du den Link mal verfolgt, gelesen UND verstanden 
hättest, würdest du nicht so rumjammern und Unsinn erzählen. Aber lesen 
tut ja weh . . .

>Wenn du weiter oben liest, was Thomas geschrieben hat, dann handelt es
>sich bei seinem Vorschlag aber nicht um Schieberegister, sondern um so
>einen Latch. Wenn jede RGB Led einen eignenen Lach hat, dann brauch ich
>alleine für jeden Latch ein Kabel... das mal 24 RGB Leds sind dann schon

QUARK! Link lesen und verstehen! Es reichen DREI Signale!

Ein 74HC595 ist Schieberegister + Latch!

@ Karl heinz Buchegger (kbuchegg)

>Die 'Backbone' (4-Draht Bus) verbindet alle Schieberegister

Warum 4? Drei reichen, plus VCC/GND!

@ Stefan (Gast)

>wie Zuverlässig das ist? Kann man die dann schnell takten? Würde gerne
>mit mindestens 4MhZ takten.

LESEN. MEIN LINK!

@ Chrisi (Gast)

>12 Meter ist eine ordentliche Länge. Da treten echte Laufzeiten auf.
>Evtl. solltest Du die drei Datenleitungen am Ende mit eine RC-Glied
>gegen Ground abschliessen, sagen wir mal 10nF/220 Ohm. Ist nur so ein

Die 10nF Sind viel zu viel! maximal 1nF, eher vielleicht 470pF.

>musst Du noch acht geben auf die Setup/Hold-Time der Latches wg. der
>gleichen Laufzeit.

Ein AVR ist trotz 20 MHz Takt immer noch langsam im Verhältnis zum 
Schieberegister. Erst recht bei Soft-SPI.

MfG
Falk

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Falk.

Will jetzt auf keinen Fall mit Dir hier herumstreiten, aber Thomas O. 
hat nicht ein Schieberegister 74HC595 gemeint sondern einen 74HC573N. 
Glaube kaum, das der 74HC573N ein Schieberegister ist, den man mit 5 
Leitungen steuern kann... Deshalb hab ich auch geschrieben:

>Hi. Klingt gut, ist aber wieder viel kabel aufwand. 3 kabel für rgb, 24
>kabel für jeden latch, einmal 5v und einmal gnd sind dann 29 kabel. Mit
>den schieberegistern brauch ich da nur 5 kabel. Ist also ein großer
>unterschied.


Ich will es ja mit Schieberegistern machen (5 Leitungen). Warum drehst 
du mir das Wort im Mund um? :-)

Eigentlich wollte ich ja nur wissen, ob jemand ein 4bit Schieberegister 
kennt, das die gleichen eigenschaften wie eine 74HC595 oder ein 4094'er 
hat.  Der 40195 ist zwar ein 4bit Schieberegister, jedoch gibt er die 
Daten schon beim schieben aus, da er keinen Latch besitzt. Sehe ich das 
richtig? Allerdings ist auch der Datenausgang (zum kaskadieren von 
mehreren Schieberegistern) bei dem 40195 immer invertiert, was auch 
wieder ein kleines Problem darstellt.

Ich hoffe es gibt keine Mißverständnisse mehr und jemand kann mir 
weiterhelfen.

Danke

Autor: Thomas O. (kosmos)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ich habe es so gemeint, um so länger deine Schieberegisterkette wird 
desto länger dauert es halt auch alles durchzuschieben, mit den Latches 
kannst du halt direkt z.B. das 5te Latch ansprechen und dem die Daten 
übermitteln. Man könnte auch ein Latch hernehmen womit man die ganzen 
Steuersignale an die anderen Latches übermittelt.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ihr das schon so aufbaut (wie im bild von  Thomas O. (kosmos), 
07.08.2007 06:22) dann könnt ihr gleich die Latches in den RAM 
einblenden!
Da spart ihr euch dann den Trödel mit dem Latcheingang. Schreiben in 
einem (asm)Befehl..

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Matthias L. (lippy)

>Wenn ihr das schon so aufbaut (wie im bild von  Thomas O. (kosmos),
>07.08.2007 06:22) dann könnt ihr gleich die Latches in den RAM
>einblenden!
>Da spart ihr euch dann den Trödel mit dem Latcheingang. Schreiben in
>einem (asm)Befehl..

Da gibt es nur ein "kleines" Problem. Die latches sind bis zu 12m 
auseinander. Und glaubst du wirklih, dass du über diese Kabellängen 
einen AVR mit voller Geschwindigkeit zugreifen lassen kannst?

Mfg
Falk

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas O. wrote:
> ich habe es so gemeint, um so länger deine Schieberegisterkette wird
> desto länger dauert es halt auch alles durchzuschieben, mit den Latches
> kannst du halt direkt z.B. das 5te Latch ansprechen und dem die Daten
> übermitteln. Man könnte auch ein Latch hernehmen womit man die ganzen
> Steuersignale an die anderen Latches übermittelt.

Den interessanten Teil, nämlich die Adressierung über die EN-Eingänge,
hast du unter den Tisch fallen lassen :-)

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

Bewertung
0 lesenswert
nicht lesenswert
Hi

Hab mir da heut ein paar Gendanken gemacht, und dann hatte ich eine 
Idee. Ich könnte einen 4015'er als 3bit Schieberegister nehmen. Einfach 
beim Dritten Ausgang direkt zum nächsten Dateneingang. Dadurch würde ich 
nichteinmal ein bit verlieren. Natürlich kommt dann noch zwischen den 
Leds und den Schieberegistern ein Latch zum Einsatz, damit die Leds beim 
durschieben nicht blinken.

Könnte das so funktionieren, oder hab ich da einen Denkfehler drin? Bild 
im Anhang.

Vielen Dank

Autor: Thomas O. (kosmos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das könnte man mit einem 4 to 16 (74HC4514/4515)(oder kleiner z.B. 3 to 
8) Decoder machen dann wären bis zu 16 Latches möglich. Bei nur 40 Leds 
wird man aber mit den Schieberegistern besser dran sein, wenn die 
Anwendung den µC sonst nicht auslastet.

Matthias L: Man sollte sowieso für jedes Latch ein Byte im SRAM 
reservieren oder besser ein Register wenn man nicht alles benötigt. Dann 
ändert man nur die entsprechenden Bits und schickt es zum entsprechenden 
Latch.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas.

Nur ganz kurz. Bedenke, das 40 RGB Leds insgesammt 120 Leds sind.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anderer Lösungsweg:

Häng pro LED einen ATTiny dran. Der kostet auch nur nen Euro, ist also 
nicht viel teurer als Schieberegister+Latch, kann die LEDs direkt 
treiben, und die PWM "vor Ort" machen.

Die Einzelmodule wären dann Platinchen mit LED, 3 Widerständen, dem 
Tiny, und nem Kondensator.

Du kommst mit drei Leitungen in deinem Bussystem aus (GND,VCC,Data), 
kannst ein langsames serielles Protokoll fahren, und hast keinen 4MHz 
Antennendraht quer durch dein Zimmer verlegt.
Dein Haupt-Atmega spart sich jede Menge Rechenzeit (72 Soft-PWM-Kanäle 
über Schieberegister sind kein Pappenstiel) und du kannst die 
PWM-Auflösung viel höher drehen => Schönere Farbübergänge.

Als Protokoll würden warscheinlich Packets aus 4 Bytes reichen,
<modulnummer> <red> <green> <blue>
Einfach über den UART Ausgeben, evtl Treiber dahinter, und bei jedem 
Modul über den UART wieder einlesen. Parity-Bit kannst du "kostenlos" 
mit dazuschalten.

Und je nach Gusto kannst du auch noch mehr Intelligenz in die Module 
verpacken, z.B. eine HSV->RGB Umrechnung, automatisches Anfahren eines 
Ziel-Farbwerts etc.

/Ernst

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ernst.

Danke für Deine Antwort. Klingt sehr interessant. Nur denke ich, das es 
zu langsam ist. Laut AVR Studio braucht ein byte 1 ms zum senden. Und 
dann mal 4
<modulnummer> <red> <green> <blue> und mal 24 leds. Das sind dann 96 ms 
wenn ich an alle leds neue daten schicke. Wenn ich jetzt z.B. alle Leds 
auf den Wert 255 eindimmen will, dann dauert das 25 Sekunden. Lieg ich 
da richtig?

Ach ja, was ist ein Parity-Bit?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Laut AVR Studio braucht ein byte 1 ms zum senden.

Wie kommst du jetzt darauf?

Übrigens ist das auch eine Frage des Protokolls. Kannst ja auch mit 
Broadcasts arbeiten, d.h. "an Alle: eine Stufe heller bitte!".

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Kaiser wrote:
>> Laut AVR Studio braucht ein byte 1 ms zum senden.
>
> Wie kommst du jetzt darauf?

Ja, diese Aussage ist so, wie sie da steht Mist!

Meinst du mit dem UART? Das kann man auch etwas höher drehen. Mit 1MHz 
(1MBaud) hast du zwar auch wieder ein Antennenkabel, aber nur 10µs pro 
Byte.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Meinst du mit dem UART? Das kann man auch etwas höher drehen. Mit 1MHz
> (1MBaud) hast du zwar auch wieder ein Antennenkabel, aber nur 10µs pro
> Byte.

Mit 1Mbps UART bringst du jetzt aber den armen Tiny etwas in Bedrängnis. 
SPI-Slave (USI) kann er besser, jedenfalls neuere Versionen.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So schnell kann man den UART nicht machen, die kleinen 8pin Tinies 
bräuchten sonst nen Quarz-Oszillator.
Ansonsten könnten die ihren internen RC regelmässig nachjustieren, der 
Master schickt eine dummy-Sequenz (z.B. 0x55 0x55...) und die Tinies 
drehen an ihrem OSCAL.

Hast du eigentlich schon ausprobiert ob dein ATMega8 dir 72PWM-Kanäle 
berechnen und über SPI ausgeben kann, ohne daß das ganze zu nem 
24-Lampen-Stroboskop wird?

/Ernst

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auwe, ich dache das man eine baudrate von 9600 nehmen muß, weil das so 
im tutorial steht. Also geht das doch schneller.

Kann vielleicht noch jemand sagen, ob die Schaltung mit dem 4015 
generell funktionieren könnte?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja Ernst. Die Software steht und ich habe sie auch schon mit SPI auf 
einen 4094 ausgegeben. Mit 100 Hz. Das einzige was ich reduziert habe, 
sind die Farben. Ich habe halt nur 128 Helligkeiten. Aber sonst geht 
sich zeitlich alles schön aus.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:

> Kann vielleicht noch jemand sagen, ob die Schaltung mit dem 4015
> generell funktionieren könnte?

Generell schon, aber du hast keine Latches vor den LEDs, deswegen kannst 
du an denen schön den Datentransfer beobachten. Und nachdem du 
warscheinlich ununterbrochen am Datenübertragen bist, werden nachher 
alle LEDs mehr oder weniger gleichhell leuchten, egal was du überträgst.
Wenn du aber nur einmalig eine Einstellung überträgst, und vor der 
nächsten Übertragung lange wartest gehts. PWM is dann aber nicht mehr, 
d.H. nur 7 mögliche Farben pro RGB-LED.

Edit: Ups, hätte den Text genauer lesen sollen. Wenn du da ein Latch mit 
einbaust, klappts.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ja bei dem Schaltbild dazugeschrieben, das der dazugehörige 
latch nicht eingezeichnet ist, weil das ja nicht das Problem ist.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stefan (Gast):

Ja, die Schaltung funktioniert so.

>>ich dache das man eine baudrate von 9600 nehmen muß

Das ist ja genial. 9600Baud..

Bei 16MHz Quartztakt kannst du bis zu 2MEGAbaud realisieren...

Aber die Idee mit den vielen tinys (die ja alle dasselbe Programm 
haben-nur ne andere Knotenadresse) finde ich am besten.
Aber es ist vielleicht noch besser, die tinys mittels SPI zu verbinden:
So sparst du dir die Modulnummer im Protokoll, weil die anordnung in der 
daisy-chain entscheidet.
Die sendest immer nur drei bytes (RGB) für jedes Modul. Musst aber in 
diesem Fall immer alle senden...
Wäre mal zu überlegen...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend..

Ich hab mir jetzt mal ein par AVR Datenblätter durchgesehen und der 
einzige der dazu passen könnte, wäre der AT-Tiny 2313. Er hat Hardware 
USART(Ich hoffe, das ist auch UART) und 4 Hardware PWM Ausgänge, wo dann 
3 PWM im Programmhintergrund laufen. Wenn ich dann was mit dem M8 senden 
will, dann könnte ich es mit einem Interupt machen. Würde das so 
funktionieren?

Gruß Stefan

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort Falk.

Hätte aber jetzt noch eine Frage.

Ich habe mal gehört, das man spezielle Quarze nehmen sollte, damit das 
UART sauber funktioniert. Ist das richtig oder kann ich problemlos einen 
16 MhZ bei allen Tiny2313 verbauen?

Gruß Stefan

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiß da keiner was dazu?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Stefan (Gast)

>Ich habe mal gehört, das man spezielle Quarze nehmen sollte, damit das
>UART sauber funktioniert. Ist das richtig oder kann ich problemlos einen

Du meinst Baudratenquarze. Kann man nehmen, muss man aber nicht.

>16 MhZ bei allen Tiny2313 verbauen?

Kommt darauf an, welche Baudrate du haben willst. 115k2 gehen mit 16 MHz 
nicht!
Siehe Datenblatt sowie AVR-Tutorial: UART

MfG
Falk

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Falk. Danke für die Antwort. Ich werde mich dann wohl für den 
12.288 MhZ entscheiden.

Ernst Bachmann schrieb:

Als Protokoll würden warscheinlich Packets aus 4 Bytes reichen,
<modulnummer> <red> <green> <blue>


Dabei hab ich aber ein Problem.

Nehmen wir an, mein dritter Tiny hat die Adresse 0x03. Also gebe ich 
über das Uart 0b00000011 aus. Alle 24 Tinys lesen die Daten ein und 
vergleichen sie mit den mir vorgegebenen Modelnummern. Da nur der dritte 
0x03 hat, fühlt sich nur er angesprochen.

So....
Und jetzt möchte ich, daß beim dritten Tiny die rote Led mit der 
Helligkeit 0x04 bei 8 bit Auflösung leuchtet und schicke das über das 
Uart. Das Problem ist dann nur, das sich dann der vierte Tiny 
angesprochen fühlt. Wie kann ich dieses Problem lösen? Sollte ich da bei 
allen anderen den Uart Empfang für kurze Zeit ausschalten, wenn sie sich 
nicht angesprochen fühlen?

Ich dachte auch schon darüber nach, die Pwm auf max. 0x80 zu beschränken 
und die Modelnummern dann über 0x81..0x82...usw zu machen. Nur ist da 
das Problem, das die Hardware PWM aus 8 bit besteht und die Leds dann 
nicht so hell leuchten. Aber die Helligkeit könnte man dann wieder mit 
einem geringeren Widerstand ausgleichen.

Was würdet ihr mir vorschlagen?

Gruß Stefan

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Protokoll sieht das Versenden von VIER Bytes vor. Definiere doch 
danach eine Pause von etwas mehr als 1Byte Länge*. Somit hat deine 
Empfangsroutine die möglichkeit, ein Paketende in Form eines TimeOuts zu 
erkennen(und kann jetzt das Paket auswerten).

Zusätzlich, um die Prozessorlast zu senken, kannst du den "multi 
processor communication mode" (MPCM) dafür verwenden. Der ist für solche 
Sachen bestens geeignet. Hab ich auch schon für ähnliche Anwendungen 
verwendet. Weitere Hinweise zu MPCM:   siehe Datenblatt des Atmels unter 
UART.

* bevor ein neues Paket gesendet werden darf

EDIT:
Mit dem MPCM kannst du auch direkt nach drei Empfangenen Nutzdaten(RGB) 
wieder auf "Adresse empfangen" umschalten. Somit kann der TimeOut im 
Protokoll auch gegelassen werden. (In der Software würde ich ihn drin 
lassen, falls nach den ersten,zweiten Datenbyte die Übertragung 
abbricht, könnte man so das Paket verwerfen).

Dadurch käönntest du "ununterbrochen" Pakete herausballern...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stefan (Gast)

>Als Protokoll würden warscheinlich Packets aus 4 Bytes reichen,
><modulnummer> <red> <green> <blue>

>0x03 hat, fühlt sich nur er angesprochen.

Naja, es muss/sollte eben ein Datenpaket eindeutig abgrenzbar sein. Z.B. 
indem man ein konstantes Byte immer als Startsymbol sendet. Ausserdem 
müssen die Slaves nach relativ kurzer zeit einen Timeout erzeugen und 
wieder auf das Startzeichen warten.

>allen anderen den Uart Empfang für kurze Zeit ausschalten, wenn sie sich
>nicht angesprochen fühlen?

Nein, nicht dem Empfang ausschalten, aber ihre interen Programmlogik 
wieder auf das Suchen des Startzeichens setzen.

>Ich dachte auch schon darüber nach, die Pwm auf max. 0x80 zu beschränken
>und die Modelnummern dann über 0x81..0x82...usw zu machen. Nur ist da
>das Problem, das die Hardware PWM aus 8 bit besteht und die Leds dann
>nicht so hell leuchten. Aber die Helligkeit könnte man dann wieder mit

Du kannst doch einfach die PWM-Werte in den Slaves wieder mit 2 
multiplizieren, 1 mal links schieben und schon hast du wieder einen 
vollen 8 Bit Wert, nur eben mit halber Auflösung, das reicht aber immer 
noch.

>einem geringeren Widerstand ausgleichen.

Nein!

MFG
Falk

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank ihr 2.

Hab es jetzt mit rol gelöst, so wie es Falk gemeint hat. Und es klappt 
alles bestens. Vielen Dank für Eure Hilfe.

Gruß Stefan

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Stefan (Gast)

>Hab es jetzt mit rol gelöst, so wie es Falk gemeint hat. Und es klappt

Mach mal lieber lsr, mit rol "saugst" du dir das Carryflag ins LSB, das 
kann auch mal daneben gehen.
MFg
Falk

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meinst lsl.. ich muß ja linksschieben. Mit lsr dividiere ich ja durch 
2.

Gruß Stefan

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.