Mit UART mehrere bytes im paket senden?

Gast #127126
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.
Gast
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
Gast
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.
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.