Forum: Mikrocontroller und Digitale Elektronik Mit UART mehrere bytes im paket senden?


von Malte Struebert (Gast)


Lesenswert?

Hallo,

ist es möglich mit einem AVR ein Datenpaket von sagen wir 15 Byte länge
gleichzeitig zu übertragen?

Ich verwende im moment CodeVision AVR als C Compiler und die dort
verwendete Funktion putchar() kann ja immer nur ein byte übertragen,
wenn ich also mein ganzes Datenpaket senden will muss ich das 15 mal
aufrufen... ich denke wenn man es als ein paket schicken könnte würde
es sicher nen geschwindigkeitsvorteil geben und da meine Anwendung zum
Dataloggen ist kommt es da gerade auf Geschwindigkeit an.

bei bedarf poste ich gern mal die Routinen für das Put und get.

Gruß
Malte.

von Andreas HOH (Gast)


Lesenswert?

Hallo!

Häää? Ich glaub ich versteh das jetzt was nicht... Wie willst Du über
eine serielle Schnittstelle mehrere Datenpakete gleichzeitig senden?
Das geht gar nicht, da "gleichzeitig" immer nur ein einziges BIT
gesendet wird, also noch nicht mal ein Byte!

Stell es Dir mal so vor: Eine serielle Datenübertragung ist nichts
anderes als ein lichtschalter (=sender) und eine lampe (=empfänger).
Willst Du als Schalter der Lampe was mitteilen, muß Du sozusagen
"morsen": Licht an, an, aus, an, an, aus, an, aus. Damit hast Du der
Lampe das Byte (binär=)11011010 mitgeteilt, das entspricht den Hex-Wert
$DA, oder halt der ganz normalen dezimalen Zahl 218.

Soweit alles klar? (Wenn nicht, dann solltest Du Dich erstmal etwas
mehr mit den Grundlagen beschäftigen)

Da also Dein AVR anhand der Grundlagen einer seriellen Schnittstelle
immer nur ein Bit nach dem nächsten senden kann, verstehe ich nicht,
wie Du 15 Bytes(!) (=120Bits) als "ein paket" schicken willst...

Einen Geschwindigkeitsvorteil bekommst Du nur dann, wenn Du die
Datenrate (=BAUD) anhebst. Das ist die eizige Möglichkeit, mit einer
seriellen Schnittstelle schneller zu senden.

ciao,
Andi

von Malte Struebert (Gast)


Lesenswert?

Ich glaub ich hab mich da etwas missverständlich ausgedrück, natürlich
ist es klar das man Seriell immer nur eins nach dem anderen übertragen
kann.
Nur wenn ich immer nur ein Byte sende anstelle eines ganzen Bytestroms
an einem Stück, muss ich für jedes Byte einen Funktionsaufruf im AVR
machen der mich wiederrum ein paar Tacktzyklen kostet.

Es geht einfach darum ob es neben dem 1 Byte=1 Funktionsaufruf noch
eine andere elegantere bzw. schnellere möglichkeit gibt mehr als 1 Byte
zu übertragen.

Gruß
Malte.

von Josef (Gast)


Lesenswert?

Schreib dir eine Funktion die ein Array von zB 4 Bytes verschickt.


SG Josef

von Dirk (Gast)


Lesenswert?

Von den AVR Freaks gibt es ein Codebeispiel für rs485.
Dort geht es darum, nach dem Versenden eines Datenpaketes möglichst
schnell wieder auf Empfang zu gehen.
In dem ganzen Code sind Funktionen drin, die das Erstellen und
Versenden eines Paketes ermöglichen. Da der 485 Treiber an die UART
angeschlossen wird, funktioniert diese ganze Paketsache also auch für
dein Vorhaben.


Dirk

von Josef (Gast)


Lesenswert?

Versendung von zB 17 Bytes :

UDR = 'D';
UDR = 'a';
UDR = 's';
UDR = 'i';
UDR = 's';
UDR = 't';
UDR = 'a';
UDR = 'b';
UDR = 'e';
UDR = 'r';
UDR = 'e';
UDR = 'i';
UDR = 'n';
UDR = 'f';
UDR = 'a';
UDR = 'c';
UDR = 'h';

Josef

von Florian (Gast)


Lesenswert?


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.