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.
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
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.
Schreib dir eine Funktion die ein Array von zB 4 Bytes verschickt. SG Josef
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.