Gast
#3102194
Hallo zusammen! Ich beschäftige mich gerade mit der Kommunikation AVR-PC und habe dazu ein paar Fragen. Zum grundsätzlichen Aufbau: Ich nutze ein Arduino-Mega-2560-Board mit ATmega2560 (16 MHz), der einen ATmega8U2 als USB-COM-Konverter nutzt und entsprechend über USB an meinem PC (Windows 7 x64) hängt. Dort läuft ein Java-Programm mit jssc (https://code.google.com/p/java-simple-serial-connector/) als Empfänger. Auf dem Arduino läuft dieser Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
Er sendet also fortlaufend die Ziffern 0-7; auf dem PC prüfe ich dann, ob was verloren ging. Ich beziehe mich auf S. 231 im Datenblatt (http://www.atmel.com/Images/doc2549.pdf). Hier nun meine Fragen: 1.) Bei meinen Test verwende ich immer Datenraten wie 250 K, 500 K, ..., die gut zu den 16 MHz passen (0% Error). Wenn man sich auf dem PC mit COM-Ports beschäftigt, findet man allerdings oft nur krumme Raten wie 115,2 K usw. Ich würde jetzt vermuten, dass das nur für reale RS-232-Schnittstellen von Bedeutung ist und ich bei der emulierten über USB keine Rücksicht auf den PC nehmen muss. Stimmt das? 2.) Bei 250 K benötigt ein Byte etwa 40 µs und auch bei einem einstündigen Test ist keins verloren gegangen - so weit, so gut. Bei 500 K sind es entsprechend nur 20 µs und es gibt einen Verlust von rund 3 ppm - damit könnte ich gut leben. Trotzdem interessiert mich natürlich: Wodurch treten diese Verluste auf? Läuft da irgendein Puffer über, den man vielleicht noch optimieren könnte, oder sind das halt Verluste "in der Leitung", die man einfach hinnehmen muss? 3.) Laut Datenblatt gehen auch 1 M - und da wird es interessant: Die Übertragung funktioniert nach wie vor (Fehlerrate jetzt um die 5 ppm), wird aber geringfügig langsamer: ca. 23 µs / Byte. Was bremst die Verbindung hier aus? Bei der Gelegenheit: Mir ist klar, dass Java in punkto Performanz und Timing nicht die erste Wahl ist. Kennt jemand ein kleines Programm, dass einen COM-Port (auch via USB und bei beliebiger Baudrate) abhorcht und das Empfangene in einer Textdatei loggt? Ich habe sicher schon zehn verschiedene ausprobiert, aber davon hat nichts so recht geklappt. Ich habe auch mal versucht, mit Codeschnipseln aus dem Web was in C++ zu schreiben, aber dafür sind meine Kenntnisse in C++ wohl doch zu gering... Vielen Dank schon mal für eure Hilfe! Jan