mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART-Zeichen auf 8 LEDs ausgeben


Autor: Daniel Pfefferkorn (seraphim) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Moin!

Ich bastele gerade an einer Multi-Schnittstellen Schritt- und 
DC-Motor-Steuerung.

Den unvollständigen Schaltplan habe ich angehängt.

Ich will eigentlich versuchen das über UART übertragene Bit auf einem 
LED-Cluster aus 8 LEDs wiederzugeben, damit man auch sieht, was 
übertragen worden ist bzw. dass etwas übertragen worden ist.

Ich kann kein Schieberegister verwenden, da ich ja keinen Takt habe. Wie 
kann ich sonst die 8Bit in irgendein externes Register stecken?

Kommentare zu dem Schaltplan sind übrigens erwünscht ;) Auch 
konstruktive Kritik.

Es sei angemerkt, dass dies meine erste vollständig selbst entwickelte 
Schaltung ist und das noch 470µF Kondensatoren zur Stabilisierung an die 
Vs aller Motortreiber kommen. Ebenso werde ich natürlich die Busse noch 
mit dem AVR verbinden und das Reset-Netzwerk verwollständigen.

In diesem Sinne vielen Dank!

Daniel

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

Bewertung
0 lesenswert
nicht lesenswert
Hast du eine Schachtel von MAX3221 geschenkt bekommen und versuchts sie 
nun schnellstmöglich alle zu verbauen, egal ob's einen Sinn ergibt oder 
nicht?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Per SPI an IC17

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

Bewertung
0 lesenswert
nicht lesenswert
Konkret: Das Bündel MAX3221er ist so verschaltet komplett falsch, 
mitsamt des Multiplexers.

Warum willst du auf der Platine intern mit aller Gewalt mit RS232-Pegeln 
arbeiten? Der einzige der MAXe, der tatsächlich Sinn ergibt, ist IC3. 
Alle anderen MAXe sind nicht nur überflüssig, sondern regelrecht falsch 
bis schädlich.

Und wenn das mal repariert ist, dann wird aus Analogmux IC6 und 2-fach 
DIP-Switch ein 4-fach DIP-Switch für den Rx-Anschluss vom Controller.

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

Bewertung
0 lesenswert
nicht lesenswert
Der MAX3221 benötigt min. 100nF Kondensatoren. Mehr schadet nicht, 
weniger schon, d.h. 47nF sind zu wenig.

Autor: Daniel Pfefferkorn (seraphim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Kaiser wrote:
> Konkret: Das Bündel MAX3221er ist so verschaltet komplett falsch,
> mitsamt des Multiplexers.
>
> Warum willst du auf der Platine intern mit aller Gewalt mit RS232-Pegeln
> arbeiten? Der einzige der MAXe, der tatsächlich Sinn ergibt, ist IC3.
> Alle anderen MAXe sind nicht nur überflüssig, sondern regelrecht falsch
> bis schädlich.
>

Ich habe mich was das angeht nach dieser|diesem Application Note 
gerichtet:

http://www.maxim-ic.com/appnotes.cfm/an_pk/588

Die Beschaltung mit den kleineren Kondensatoren entstammt den 
Mindestanforderungen aus dem Datenblatt des MAX3221 für 5V Vcc. Die 
könnte ich aber noch vergrößern, dass stimmt.

Ich möchte ja eigentlich nur die Signal weiterleiten. Brauche ich denn 
für den FTDI und den XT-Nano (3,3V mit Pegelkonverter) überhaupt 
irgendeinen MAXXXX?

> Und wenn das mal repariert ist, dann wird aus Analogmux IC6 und 2-fach
> DIP-Switch ein 4-fach DIP-Switch für den Rx-Anschluss vom Controller.

Der Multiplexer als solcher ist aber schon richtig, denke ich. Warum 
4-fach?

Bin wie immer dankbar für die Hilfe!

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

Bewertung
0 lesenswert
nicht lesenswert
> Die Beschaltung mit den kleineren Kondensatoren entstammt den
> Mindestanforderungen aus dem Datenblatt des MAX3221 für 5V Vcc.

Ok, stimmt tatsächlich. Wobei ein MAX3xxx bei 5V freilich etwas fehl am 
Platz ist, da nimmt man meist erheblich (MAX232, 1µF) oder immer noch 
etwas (MAX232/202E 100nF) billigere Typen.

> Ich möchte ja eigentlich nur die Signal weiterleiten. Brauche ich denn
> für den FTDI und den XT-Nano (3,3V mit Pegelkonverter) überhaupt
> irgendeinen MAXXXX?

Wie geschrieben - einzig für die 9pol-Seriell zum PC brauchst du 
wirklich einen MAXe. Sonst nirgends.

Und was den XT-Nano angeht (sofern er das Ethernet-Dings ist was Google 
darunter auswirft): Der mag offenbar auch andere Schnittstellen leiden. 
I2C beispielsweise. Denkbar wäre hier auch, den Mega mit 3,3V betreiben 
(bis 8MHz), was einerseits die Pegelkonverter einspart, andererseits 
wieder den teureren MAXx braucht.

> Der Multiplexer als solcher ist aber schon richtig, denke ich. Warum
> 4-fach?

Wenn's dich unbedingt danach gelüstet, kannst du den auch drinlassen. 
Aber dieser Doppel-4fach Mux plus 2fach DIP-Switch für Umschaltung 
zwischen 3 seriellen Interfaces leistet auch nicht mehr als ein 3fach 
DIP-Switch für direkte Umschaltung zwischen 3 Rx-Leitungen. Die 
Tx-Leitung kannst du nämlich auch ohne Umschalter direkt an alle Kunden 
dranhängen.

Und wenn du den Nano mit I2C oder SPI betreibst, sind es nur noch 2 
serielle Schnittstellen, FTDI und 9pol COM. Dann reduziert sich das auf 
ein 3-pol Stiftleiste zum Umschalten per Jumper.

Autor: Daniel Pfefferkorn (seraphim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Kaiser wrote:
>> Die Beschaltung mit den kleineren Kondensatoren entstammt den
>> Mindestanforderungen aus dem Datenblatt des MAX3221 für 5V Vcc.
>
> Ok, stimmt tatsächlich. Wobei ein MAX3xxx bei 5V freilich etwas fehl am
> Platz ist, da nimmt man meist erheblich (MAX232, 1µF) oder immer noch
> etwas (MAX232/202E 100nF) billigere Typen.
>

Ja, das sehe ich jetzt auch ein. Ist ja keine Ultra-Low-Power-Schaltung 
;)

>> Ich möchte ja eigentlich nur die Signal weiterleiten. Brauche ich denn
>> für den FTDI und den XT-Nano (3,3V mit Pegelkonverter) überhaupt
>> irgendeinen MAXXXX?
>
> Wie geschrieben - einzig für die 9pol-Seriell zum PC brauchst du
> wirklich einen MAXe. Sonst nirgends.

Ja, ich bin ein Idiot. Ich bin angeregt durch Deinen Post auch zum 
gleichen  Ergebnis gekommen und es freut mich sehr.
>
> Und was den XT-Nano angeht (sofern er das Ethernet-Dings ist was Google
> darunter auswirft):
Ja, ist er.

> Der mag offenbar auch andere Schnittstellen leiden.
> I2C beispielsweise. Denkbar wäre hier auch, den Mega mit 3,3V betreiben
> (bis 8MHz), was einerseits die Pegelkonverter einspart, andererseits
> wieder den teureren MAXx braucht.

Nee, das lassen wir mal lieber ;) Ich will eigentlich so früh wie 
möglich die BOM fertig bekommen, weil die Bauteile bei uns (in der Uni) 
zentral bestellt werden müssen und ich für meine Bachelor-Arbeit nur 2 
Monate Zeit habe (Board-Design, Bestellung, Zusammenbau, Software, 
TESTEN, Dokumentieren und Arbeit schreiben)


>> Der Multiplexer als solcher ist aber schon richtig, denke ich. Warum
>> 4-fach?
>
> Wenn's dich unbedingt danach gelüstet, kannst du den auch drinlassen.
> Aber dieser Doppel-4fach Mux plus 2fach DIP-Switch für Umschaltung
> zwischen 3 seriellen Interfaces leistet auch nicht mehr als ein 3fach
> DIP-Switch für direkte Umschaltung zwischen 3 Rx-Leitungen. Die
> Tx-Leitungen kannst du nämlich auch ohne Umschalter direkt an alle
> Kunden dranhängen.
>
> Und wenn du den Nano mit I2C oder SPI betreibst, sind es nur noch 2
> serielle Schnittstellen, FTDI und 9pol COM. Dann reduziert sich das auf
> ein 3-pol Stiftleiste zum Umschalten per Jumper.

Ich hatte gerade die Idee, dass man diese Schaltung dann auch als eine 
Art universellen Schnittstellenkonverter nutzen kann. Dazu müsste ich 
dann ja nur einen 6-fach DIP-Switch nutzen und so jeweils eine Rx- und 
eine Tx-Leitung schalten, richtig?

Das heißt zum Beispiel seriell rein, aber über Ethernet raus z.B.. Habe 
ich da etwas übersehen? Ich frage mich, weil mir die Idee gerade sehr 
gut gefällt.

Tausend Dank!

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

Bewertung
0 lesenswert
nicht lesenswert
Wenn du in der Lage sein willst, auf 2 Interfaces gleichermassen zu 
arbeiten, dass muss der Controller das auch können, dann reicht eine 
Muxer-Umschaltung nicht aus. Musst du also beide USARTs vom Mega162 
verwenden.

Das kannst du nun dadurch lösen, indem du mit einer recht komplexen 
Mux-Konstruktion die 2 USARTs auf die 3 asynchronen Kandidaten (9pol, 
FTDI, XT-Nano) umschaltest.

Oder, wesentlich einfacher, indem du den Mega162 mit 3,3V fährst, die 
9pol-Serielle via MAXe an UART0, den FTDI direkt an UART1, und den 
XT-Nano direkt an die I2C-Pins vom Controller anschliesst. Dann geht 
jeder mit jedem ohne Umschaltung, bei geringstem Hardware-Aufwand

Wenn dir das softwareseitig zu kompliziert erscheint (ist es nicht, den 
I2C-Code gibt's in einer AN) und du doch wieder umschalten willst: Wenn 
es nur darum geht, eine der Schnittstellen 9pol/USB/Ethernet verwenden 
zu können, und nicht mehrere davon, dann musst du nur den Rx-Pin 
umschalten. Der Tx-Pin kann mit allen dieser Kandidaten gleichzeitig 
verbunden sein. Wenn da soweiso nix drinsteckt, stört das auch 
niemanden.

Autor: Daniel Pfefferkorn (seraphim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich nicht auch einfach die empfangenen Daten vom µC gleich wieder 
in das Ausgabe-Register schreiben, von mir aus auch mit Zeitverzögerung?

Dann hätte ich doch den µC quasi als Nullmodem implementiert. Ich wollte 
nicht von zwei Schnittstellen gleichzeitig Duplex durchführen können, 
sondern  immer nur eindirektionalen Verkehr erreichen. Sonst müsste man 
ja wie Du beschrieben hast immer Umschalten.

Eigentlich ist das ja auch nicht so wichtig. Aufgabe ist und bleibt es 
ja die Motoren zu steuern und dazu werden die Rückmeldungen des µC ja 
höchstwahrscheinlich immer an die Schnittstelle zurückgesendet, welche 
auch die Befehle gegeben hat.

Allerdings könnte ich natürlich auch den von Dir angeregten 
"Hardware-Broadcast" durchführen. Gefällt mir und hilft auch beim 
Debuggen, denke ich.

Wenn ich das ganze jetzt auf Hardware-Handshake umstellen wollte, müsste 
ich doch nur noch die CTS- und RTS-Signale über einen Max232 an die 
serielle und direkt an die anderen beiden Umsetzer senden, oder?

Die Signale würden dann natürlich per Software im µC gesetzt.

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

Bewertung
0 lesenswert
nicht lesenswert
> Kann ich nicht auch einfach die empfangenen Daten vom µC gleich wieder
> in das Ausgabe-Register schreiben, von mir aus auch mit Zeitverzögerung?

Blöd nur, wenn du Daten empfängst, während der Muxer grad auf die 
Ausgangsschnitstelle geschaltet hat. Die sind dann weg, oder kommen 
halbiert als Schrott an.

Ergo: Nein, das geht üblicherweise nicht. Jedenfalls nicht wenn du Tx/Rx 
gemeinsam umschaltest. Mit getrennten Muxern für Rx und Tx geht es, aber 
das erhöht wieder den Aufwand.

Warum nimmst du einen Mega162 der sowieso schon ungewöhnliche zwei UARTs 
hat und weigerst dich standhaft, die zweite zu verwenden?

> Wenn ich das ganze jetzt auf Hardware-Handshake umstellen wollte, müsste
> ich doch nur noch die CTS- und RTS-Signale über einen Max232 an die
> serielle und direkt an die anderen beiden Umsetzer senden, oder?

Wenn die Motorsteuerung da auch mitmischen soll - nein.

Autor: Daniel Pfefferkorn (seraphim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Kaiser wrote:
>> Kann ich nicht auch einfach die empfangenen Daten vom µC gleich wieder
>> in das Ausgabe-Register schreiben, von mir aus auch mit Zeitverzögerung?
>
> Blöd nur, wenn du Daten empfängst, während der Muxer grad auf die
> Ausgangsschnitstelle geschaltet hat. Die sind dann weg, oder kommen
> halbiert als Schrott an.

Hätte vielleicht erwähnen sollen, dass ich entweder das 6-fach 
DIP-Switch-Modell (jeweils Rx und Tx schaltbar) oder das Rx schaltbar 
und Tx Broadcast an alle Schnittstellen zu Grunde lege.

> Warum nimmst du einen Mega162 der sowieso schon ungewöhnliche zwei UARTs
> hat und weigerst dich standhaft, die zweite zu verwenden?

Weil ich einerseits ohnehin schon 22 der 35 maximal verfügbaren IO-Pins 
nutze und eventuell noch ein einen 8LED-Status-Cluster anschließen 
wollte und andererseits keinen Notwendigkeit dafür sehe. Wozu sollte ich 
es denn nutzen. Alles was ich eigentlich machen will, funktioniert gut 
über 1 UART.

Die Kette sollte eigentlich so laufen:

Daten rein -> Steuerbefehle und -parameter entnehmen -> entsprechende 
Ausgangspins setzen -> Rückmeldung generieren -> Rückmeldung über UART 
raus

>> Wenn ich das ganze jetzt auf Hardware-Handshake umstellen wollte, müsste
>> ich doch nur noch die CTS- und RTS-Signale über einen Max232 an die
>> serielle und direkt an die anderen beiden Umsetzer senden, oder?
>
> Wenn die Motorsteuerung da auch mitmischen soll - nein.

Wie meinst Du das?
Die Motorsteuerung besteht nur aus einem entsprechenden Programm im 
Controller und den 6 Motortreibern. Ich wollte den Hardware-Handshake 
zwischen µC und Gegenstelle ausführen, also entweder ein PC am RS-232 
oder der FTDI (der diese Signale ohnehin benötigt) und der XT-Nano (der 
diese Signale ebenso benötigt).

D.h. ich muss RTS und CTS ohnehin generieren/auswerten, dann kann ich 
sie auch gleich für RS-232 nutzen.

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.