Forum: Mikrocontroller und Digitale Elektronik frage zur uart!!!


von Ralph (Gast)


Lesenswert?

hallo!
habe schon wieder eine frage.
wie kann ich denn bei der datenübertragung eine pause von 4bit
erzeugen?
mit einem atmega8!

kann mir da jemand helfen?
dachte an eine schleife oder so, aber wie bekomm ich da die zeit von
4bit hin?

von Frank Linde (Gast)


Lesenswert?

Die Bitzeit kannst Du aus der Baudrate errechnen und die Pause für 4 Bit
kannst Du entweder mit einem Timer oder mit einer Schleife realisieren.
In Assembler ist die Zeitbestimmung mit der Schleife einfach, weil Du
die Zeit für jeden einzelnen Befehl anhand der Befehlsliste ermitteln
kannst. Einfaches Beispiel:

nop
nop
nop
nop

Damit vertrödelt der Prozessor 4 Taktzyklen (was nicht identisch mit
Deiner 4-Bit-Pause ist).

Gruß, Frank

von Oliver (Gast)


Lesenswert?

Hallo Ralph,
aus welchem Grund brauchst du denn die Verzögerung und soll die
Verzögerung zwischen den einzelnen Bytes sein?

Gruß Oliver

von Ralph (Gast)


Lesenswert?

hi oliver!

ja, die pause soll immer zwischen jedem byte entstehen und is 4 bit
lang. also in meinem fall ca 400microsecunden.

hast du eine idee?

von Steffen Burr (Gast)


Lesenswert?

Hallo!

Ich denke mit dem Hardware UART geht das nicht. Da hilft nur, das UART
selber per Software zu erzeugen ...

Dann ist es einfach!

von Ralph (Gast)


Lesenswert?

ja, das mag sein. aber ich bin noch ein anfänger und kann es leider
nicht. habe es jetzt geschafft, dass das signal ausgegeben wird. fehlen
eben nur noch die pausen und das antriggern des signals.

von Ralph (Gast)


Lesenswert?

gibt es da eine möglichkeit ein beispielprogramm irgendwo
herzubekommen??? damit ich mir das anschauen kann???

von Hubi (Gast)


Lesenswert?

@Ralph
Hi,
bei den Links findest du einen Verweis auf den AVR delay loop
genearator, ein kleines Windows-Programm, das dir nach Vorgabe der Zeit
ein Stück Assembler-Code generiert. Den kannst du dann in dein Programm
mittels Drag/Drop importieren.

von Steffen Burr (Gast)


Lesenswert?

@Ralph:

Tut mir leid, vergiss das mit dem Software UART!
Ich habe etwas überlesen. ich dachte, du willst nach jedem BIT 4 bit
Pause machen. Du hast aber Byte geschrieben.

Das geht natürlich auch mit dem Hardware UART, einfach mittels nops
nach dem Senden eines Bytes das Senden des nächsten verzögern. Eben wie
oben beschriben.

Ich werd die Beiträge nächstes Mal genauer lesen!

Grüße
Steffen

von Peter D. (peda)


Lesenswert?

Du setzt einfach einen Timerinterrupt mit der Länge von 14 Bitzeiten auf
und in diesem startest Du dann immer das Senden des nächsten Bytes.

Alternativ könntest Du, wenn schon 2 Bitzeiten Pause reichen würden,
die UART auf 9 Bit + 2 Stopbits setzen.


Peter

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.