Forum: Mikrocontroller und Digitale Elektronik Sinnvoll UART Zeiten ändern


von Alexander (Gast)


Lesenswert?

Hallo,
ich möchte folgendes machen.
Ich lese ein serielles Signal über die UART ein und möchte dies mit 
geänderten Zeiten wieder ausgeben.
(aus 2 Stoppbit -> 3 Stoppbit; Break länger machen; Mark länger 
machen...)

Wie macht man das sinnvoll?
Ich lese erstmal die Bytes ein, und lege sie im RAM ab.
Aber was dann? Setze ich die Pausen so wie hier im ASM Tutorial wirklich 
durch loops?
1
sync:
2
    ldi     r16,0
3
sync_1:
4
    ldi     r17,0
5
sync_loop:
6
    dec     r17
7
    brne    sync_loop
8
    dec     r16
9
    brne    sync_1  
10
    ret

So wird es ja im Tutorial gemacht.
Ist das die Lösung für das Problem?

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Du brauchst Flußkontrolle und Ringbuffer.

von Alexander (Gast)


Lesenswert?

Das sollte ohne Flusskontrole auskommen, da die Empfänger nichts 
zurücksenden.
Ich kenne allerdings von vornerein die neuen Timingwerte, diese sind 
fest!
D.h. ich muss nur die einkommenden Timing in andere FESTE Werte bringen.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Ich weiß dann nicht was dein Problem ist, wenn du alles weißt. Am einen 
UART rein, am anderen raus. Beide Baudraten gleich. Der sendende zu 
deinem System hin, macht eine extra 1 Bit Pause, damit du dein extra 
Stopbit frei hast im Timing.
Dann geht es ohne Ringbuffer und Flußkontrolle.

Was der AVR-Code soll, weiß ich allerdings nicht. Willst du Bitbanging 
machen?


Vielleicht siehst du es einfach falsch?? Sobald beide Baudraten oder die 
Framegrößen so unterschiedlich sind das am Ausgang weniger Zeit als am 
Eingang besteht, geht es nicht mehr ohne Flußkontrolle!

von Uwe .. (uwegw)


Lesenswert?

Alexander schrieb:
> Das sollte ohne Flusskontrole auskommen, da die Empfänger nichts
> zurücksenden.

Kritisch wird es, wenn der Sender seine Datenrate voll ausreizt. Denn 
dein modifiziertes Signal braucht ja immer etwas länger, wenn du die 
Pausen verlängerst. Von daher wirst du wohl nicht ohne einen Puffer 
hinkommen, wenn der Sender die Zeichen unmittelbar hintereinander 
absendet...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Uwe ... schrieb:
> Von daher wirst du wohl nicht ohne einen Puffer hinkommen
Das mit dem Pufffer hatt er schon erkannt.
Alexander schrieb:
> Ich lese erstmal die Bytes ein, und lege sie im RAM ab.
Allerdings würde ich da keinen "Empfange-Erst-Alles-Und-Sende-Es-Dann" 
Puffer machen, sondern einen Fifo. Und das Ganze geht auch ohne 
Interrupt nur mit Polling, wenn du sowieso nicht länger als 1 Bit 
wartest...

von Alexander (Gast)


Lesenswert?

Hey ich melde mich nochmal zu Wort.
Also die Timing müssen zeitlich doch etwas mehr verändert werden:
2 Stoppbit müssen zu 3 gemacht werden.
nach einer kompletten Übertragung von 513 bytes muss ein Break von 
1,13ms hinzugefügt werden.
Das könnte kritisch werden?
Weil ihr immer meint: Flußkontrolle.
Unter Flusskontrolle verstehe ich eigtl. das der Empfänger irgendwann 
meldet "Stop, lass mir zeit". Meine Empfänger machen das allerdings 
nicht.
Oder verstehe ich da noch was falsch?

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Du hast offensichlich absolut keinen Plan. Laß dir doch von deiner Frau 
mal endlos viele Kaffeetassen vorsetzen... Was passiert, wie verhaltet 
ihr euch? Genauso machen es MCUs.

von Alexander (Gast)


Lesenswert?

Ich weiß schon was du meinst.
Das Signal ist ein DMX-Signal. Und da gibt es nunmal keine Rückmeldungen 
:-/
Ich meine, einige Schaltungen können dass doch auch 
(Digital-Enlightenment Interface, teure Merger etc.)

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Man kann aus wenig Zeit nicht viel Zeit machen. Zumindest habe ich es so 
verstanden. Vielleicht fehlt mir eine Info in deinem Zusammenhang.
Was geht ist, ganz gezielt Toleranzen auszunutzen. Hatte ich ja bereits 
vorgerechnet. Achso, war ein anderer Thread. Hier wird meistens 
immerwieder der gleiche Käse bearbeitet. Hier:
Beitrag "Re: FTDI oder CP2102?"

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.