Sinnvoll UART Zeiten ändern

Gast #2219434
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?
Gast #2219450
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.
Persönliche Seite #2220100
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!
#2220127
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...
Moderator (Firma: Titel) Persönliche Seite #2220216
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...
Gast #2234859
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?
Gast #2235756
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.)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren