Hallöchen!
Erstmal sorry für den langen Text. Ich hoffe, ihr lest ihn trotzdem...
;-)
Es geht mal wieder das allseits beliebte Thema "Speicherkarten". Ich
habe mich gerade ein etwas größeres Projekt herangewagt, welches wohl
mit mehreren AVRs realisiert werden wird.
(
Im Detail:
Es wird ein komplettes DMX-Lichtmischpult und Scannersteuerung zum
Einsatz in einer Discothek angestrebt. Ein AVR übernimmt lediglich die
DMX-Ausgabe, ein weiterer (oder mehrere) übernimmt die
Automatik-Steuerung, ein AVR wird wohl für die MMC-Kommunikation
gebraucht werden. Alles in einem einzigen AVR klappt nicht wegen der
Geschwindigkeit: Alle 44us muß ein Byte seriell per DMX ausgegeben
werden...
)
Momentan bin ich gerade dabei die Automatische Scenensteuerung zu
programmieren. Die Steuerung selber stellt kein großes Problem dar,
Überblungsberechnungen funktionieren schon. Jetzt muß ich "nur" noch das
Problem mit den gespeicherten Daten lösen. Da das DMX-Protokoll bis zu
512 Kanäle zuläßt, müssen pro Scene 512 Bytes (nicht Bits!) gespeichert
werden. Ein einziges einfaches Programm aus 8 Schritten besteht somit
schon alleine aus 4 KlioBYTE, zuzüglich diverser Steurungsinformationen.
Lange Rede, kurzer Sinn: ich benötige einen (austauschbaren) Speicher
mit massenhaft Kapazität. Jetzt habe ich mich umgeschaut und mir mal die
"MultiMediaCards" angeschaut. So ein Ding ist auch in meinem
DV-Camcorder, somit hätte ich schonmal ne 4MB-Karte zum experimentieren
mit mehr als genug Platz. Inzwischen gibts die Karten ja sogar schon mit
> 128MB.
Wie ich das sehe, können die MMC-Karten einfach per SPI gelesen und
geschrieben werden. Auf ein bestimmtes Dateiformat bin ich nicht
abgewisen, die Karten sollen später nicht (direkt) per PC
gelesen/beschrieben werden.
Hat schonmal jemand mit ner MMC experimentiert? Gibt es schon Projekte?
Oder besteht eventuell Interesse, gemeinsam die Probleme zu lösen? Im
Anhang habe ich mal die Spezifikationen für die MMC angehängt...
Da ich in Assembler Programmiere, wäre es Klasse, wenn irgendwo schon
nen Example-Code existieren würde. Dann bräuchte ich das Rad nicht neu
erfinden... :-)
Na dann, bin mal gespannt auf Eure kommentare! :-)
ciao,
Andi
Hallo,
folgendes gibt meine Meinung wieder - muss also nicht stimmen:
1. alle 44µs ein Byte zu senden ist doch nicht wirklich schlimm, oder???
Ich weiß nicht wie aufwändig das DMX Protokoll ist, aber ein Byte in den
Sendespeicher des UART zu senden dauert wirklich nicht lange......
2. Das mit den 4kb ist ja auch nicht so schlimm als das man gleich eine
MMX Karte ansteuern müsste - es gibt ja noch andere Mgl, die wesentlich
einfach sind:
-Der Mega128 hat glaub ich 4kbyte Ram und EEProm
-bei Maxim und so gibts jede Menge tolle nichtflüchtige Rambausteine.
Ich hab' mir mal einen mit 2Mbyte zugelegt - MMX karte ist kompakter,
aber das Teil ist schon super (Sample) und wir auch noch parallel
angesteuert ( = super simpel)- bei Verwendung eines Megas stellt auch
dies kein Problem da.
Verwendest du diesen Lösungsweg erübrigt sich auch eine Lösung für
deinen 2. Tread.....
Viel Erfolg
Christian
Hallo Christian!
Erstmal danke für Deine Antwort! Eventuell läßt sich per UART das
DMX-Protokoll senden. Das weiß ich aber nicht, da ich mit UART noch
nichts zu tun hatte. Zunächst hatte ich vor, DMX per Hand zu generieren,
und dann hab ich nit mehr die nötige Zeit, um aufwendige
Scenenberechnungen zu machen. Aber gut, das ist ja auch nicht mein
aktuelles problem, die reine DMX-Ausgabe kommt später.
Wegen dem Speicher... Eventuell hast Du "austauschbar" überlesen? Ich
will den Speicher natürlich austauschen können, damit z.B. jeder LJ
seine eigenen Scenen und Programme programmieren kann. Ein AVR mit noch
so viel internen Speicher reicht jedenfalls nicht aus. Alleine für
ein(!) Programm mit nur 8 Schritten benötige ich die genannten 4KB, der
Platz soll aber ausreichen für mehr als hundert Programme mit bis zu je
32 Schritten. 512 Byte für eine Scene, 32 Scenen für ein Programm, bei
128 Programmen sind das schon mal 2MB. Hinzu kommen dann noch die
Programm-Steuerungs-Informationen wie Überblend-dauer und Delay-Werte.
Alles in allem: Ein Austauschbarer, günstiger, handlicher und einfach
anzusprechender Speicher klingt irgendwie ganz nach MMC...
ciao,
Andi
Ich wäre für die CF, die sind zwar etwas größer, aber auch günstiger,
und sehr leicht anzusteuern - wenn du kein Dateisystem brauchst erst
recht.
Hab ein Projekt mir MMC hinter mir (MP3-Player), aber die ist um einiges
aufwendiger.
CF ist genau das richtige für PC-Programmier. Ist ja vom Interface eine
ATA-Festplatte. Benötigt aber unötig viele Ports. Die MMC läßt sich via
SPI auch superleicht ansteuern, ist ja im Prinzip auch nichts anderes
als ein serielles DATA-Flash. Für die Steuerung reicht DMX-Sender (auch
für 2 Kanäle je 512 Kanäle) und die MMC Ansteuerung reicht ein ATMega
161 im DIP40 Gehäuse erhältlich oder falls die TQFP nicht abschreckt ein
ATMega 128 dicke aus. Lediglich wenn mit den gespeicherten Daten
zusätzlich umfachreiche Berechnungen (inbesondere Divisionen) für viele
Kanäle gleichzeitig ausgeführt werden sollen, könntest du an die
Leistunggrenzen dieser Prozessor-Familie stossen.
Ein DMX Universe mit 512 Kanälen ist wenig problematisch, da hier 22,668
ms pro Frame zur Verfügung stehen. Nach dem alten Standard (DMX1990) ist
es ja auch möglich, nur 1 Kanal mit einer 176 µs
pro Frame zu senden, was natürlich für Verwaltungsoverhead wenig
Spielraum lässt. Dieses wurde im DMX2000 Entwurf (endlich) auf 1,1 ms
(was etwa 24 Kanälen entspricht) geändert. Wenn du allerdings
beabsichtigt immer 512 Kanäle zu übertragen, ist dieser Umstand
natürlichz ohne Bedeutung.
Erstmal besten Dank für Eure Beiträge. Den Code von der Seite, die
"Bernhard T" verlinkt hat, hab ich mir mal angesehen, könnte echt
hilfreich sein. Damit werd ichs mal probieren. Ne 16MB-MMC-Karte hab ich
gerade bei eBay für 9€ erworben, preislich ist das i.O. denke ich.
Liegt in meinem Budged. ;-) So wie ich das sehe, wird es kein großes
Problem werden, sie anzusteuern, sie haben mehr als genug Kapazität,
sind handlich... also genau das, was ich suche. :-) Daran werde ich
zunächst festhalten.
Da ich wohl leider doch recht viele Berechnungen in "Echtzeit" erledigen
muß, darunter auch 16Bit-Divisionen (z.B. Schrittweite =
(Startwert-Zielwert)/Delay), komme ich wohl um mehrere AVRs nicht
drumrum, aber das ist auch kein Problem. So teuer sind die Dinger auch
nicht. Wenn ich alles zuammen rechne und dabei auf gerade mal 100-200
Eur gesamt komme, ist das ne super günstige alternative zu kommerziellen
Projekten, die teilweise in die Tausende gehen... Und vor allem ist es
was EIGENES. :-)
Zum Thema DMX... Ich werde wohl nicht immer alle 512 Kanäle senden
müssen, aber ich will es können. Alleine im Anfangsstadium kommen
mindestens 4 Moving-Heads mit je 16 Kanäle, 4 Scanner mit je 16 Kanäle
und 2 Farbwechsler mit je 2 Kanäle zur Anwendung.
Gruß,
Andi