Hi Leute,
ich habe folgendes Problem: Ich möchte mit zwei ATmegas einen
MIDI-Controller mit 16 controllern (jeweils 8 Schiebe- und 8 Drehpotis)
aufbauen. Der erste µC arbeitet dabei sozusagen als Host, sammelt die
Potistellungen und sendet entsprechende Daten per MIDI raus. µC 2 liest
lediglich die Werte von 8 der Potis aus und sendet diese nach Anfrage
des ersten µCs per UART an den ersten. Dabei soll die Anfrage vom ersten
aus möglichst auch per UART heraus gehen, allerdings benötige ich den
UART auch zum senden meines MIDI-Krams. Jetzt meine Konkrete Frage:
Ginge es, wenn ich den UART verzweige und dann einfach mit bestimmten
PINs verunde (mithilfe von ICs), die ich dann zum codieren des Routings
verwende? Wenn Pin 1 gesetzt ist, gehen die Daten an den anderen µC
raus, wenn Pin 2 gesetzt ist, dann an die MIDI Devices?
Geht das so überhaupt, oder bekomme ich mit den UND-Gattern irgendwelche
Probleme, die ich so nicht absehen kann? Wäre ein weicher UART oder eine
Anfrage über parallele Datenleitungen vielleicht die bessere Lösung?
Ich würde mich freuen, wenn jemand eine kompetente Antwort darauf hätte
und auch bereit wäre, diese mit mir zu teilen :)
Cheers,
Paul
Grundsatzfrage:
Warum zwei Controller? Mindestens einer langweilt sich zu Tode.
Idee:
Nimm doch SPI zum Daten übertragen zwischen den beiden Controllern. Oder
I²C.
Natürlich nur, wenn die Software-UART so zuwider ist, dass du es nicht
verwenden kannst.
Alternative:
Mik mit zwei UARTs. Gibt's.
@docean:
Das ist doch mal ein Wort :) Kann man denn davon ausgehen, dass ein
Standard-IC mit den Raten, mit denen man normalerweise so sendet
(wahrscheinlich 31250 Baud, damit ich die BR nicht dauern umschalten
muss) dafür fix genug ist?
@mizsch:
D.h. ich sollte dann, solange auf dem Port nichts kommt, den UART mit 1
verodern und dann, wenn was kommt mit 0!? Klingt gut soweit.
Vielen Dank für eure Hilfe, das hat mir sehr weitergeholfen :)
Cheers
Geschwindigkeit des Gatters: Ja natürlich, das reicht.
Worauf Du aber achten solltest: Du darfst den Sender erst von einer
Leitung wegschalten (und ggfs. auf die nächste drauf), wenn das letzte
Zeichen komplett gesendet ist. Das ist nicht der gleiche Zeitpunkt wie
der, zu dem der UART meldet, dass er bereit fürs nächste Zeichen ist.
Letzteres wäre beim AVR beispielsweise das Bit UDRE. Das Bit, das
anzeigt, dass komplett gesendet wurde, ist ein anderes und heißt dort
aber TXC.
Edit: Und, ja, wenn Du über ein Oder-Gatter multiplexst, wird mit 0
durchgeschaltet.
Okay, vielen Dank für den Hinweis. Unterschied hatte ich schonmal
gelesen, ich weiß aber nicht, ob mir das so präsent gewesen wäre ;)
Hätte mir ganz schön Kopfschmerzen bereiten können :)
Ja, hatt ich mir gedacht, dass die Geschwindigkeit des Gatters reichen
würde, ich wollte aber sicher gehen.
Vielen Dank nochmal
Ich frage mich aber echt, warum du 2 Controller verwenden willst ...
Ich habe vorgestern erst einen MIDI-Controller auf Basis eines ATmega128
( kleiner geht auch noch ;) ) fertiggestellt ... 32 Taster und 16 Potis
( 16x Oversampling ), trotzdem langweilt sich der Mega128 noch.
Die AD-Kanäle kann man wunderbar multiplexen ( habe dafür 4052er
verwendet ), sodass man dafür keinen extra uC braucht.