Forum: Mikrocontroller und Digitale Elektronik AVR: UART Routen


von Paul C (Gast)


Lesenswert?

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

von Testfall (Gast)


Lesenswert?

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.

von ... .. (docean) Benutzerseite


Lesenswert?

UART + UND Gatter sollte gehen, auf den Speed achten

es gibt noch die Möglichkeit einer Soft-UART

von Hc Z. (mizch)


Lesenswert?

Da der Ruhepegel am µC-TxD-Ausgang „high“ ist, solltest Du mit einem 
Oder-Gatter multiplexen.  Sonst empfängt der lahmgelegte Zweig Breaks.

von Paul C (Gast)


Lesenswert?

@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

von Hc Z. (mizch)


Lesenswert?

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.

von Paul C (Gast)


Lesenswert?

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

von Artur H. (hohoho)


Lesenswert?

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.

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.