Ich versuche, etwas von einem Atmega an meinen PC zu senden.
Das Setup ist: Ubuntu 14.04, atmega644P-20PU, USBASP v2, TTL-to-USB pl2303
Zuerst habe ich versucht, den Code in C zu schreiben und diesen Code verwendet und dann diesen und ich habe das gleiche Ergebnis erhalten: '�' oder zufällige Zeichen (in Minicom oder Bildschirm)
Dann habe ich C aufgegeben und ein einfaches Arduino-Programm hochgeladen:
void setup()
{
Serial.begin(9600);
}
void loop()
{
delay(500);
Serial.write('t');
}
(Beim Ausführen von Arduino habe ich einen 16-MHz-Kristall eingesetzt. In anderen Fällen habe ich einen 20-MHz-Quarz verwendet. Außerdem habe ich F_CPU im Code entsprechend eingestellt.)
In allen Fällen blinkt die R(receive) LED des pl2303 im richtigen Moment (abhängig von der im Code eingestellten Verzögerung).
Außerdem habe ich CuteCom verwendet, um anzuzeigen, was ich von der seriellen Schnittstelle bekomme, und anstelle von '�', je nach verwendetem Code, den ich bekomme "\0x00\0x80\0x80"
(für Arduino-Code) oder in anderen Fällen "\0x80\0x00\0x80"
.
Ich verwende RX0 und TX0 (Pin 14 und 15). RX0 verbunden mit TX von pl2303 und RX von pl2303 mit TX0 der mcu.
Ich habe auch RX und TX von pl2303 kurzgeschlossen und versucht, Daten darüber zu senden, und ich erhalte zurück, was ich sende.
Baudrate von pl2303 ist 9600
$stty -F /dev/ttyUSB1
Geschwindigkeit 9600 Baud; Zeile = 0;
mind. = 60; Zeit = 1;
ignbrk -brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
In allen Fällen habe ich 8N1 verwendet.
Ich hoffe, ich war spezifisch genug und kohärent.
(Normalerweise versuche ich, selbst Antworten und Lösungen zu finden, aber jetzt bin ich verloren)
't' sieht 000101110
auf der Zeile wie 0x80 000000001
und 0x00 000000000
aus (einschließlich des Startbits und des Ignorierens des Stoppbits), mit ziemlicher Sicherheit haben Sie die Baudrate am Empfängerende zu schnell.
Angesichts der Tatsache, dass Sie 0 Nullen und eine 1 sehen, ist es wahrscheinlich 8-mal zu schnell eingestellt. Versuchen Sie es also mit 1200 Baud in Cutecom und suchen Sie nach einer möglichen Ursache dafür, dass der Baudratenteiler im Arduino 8-mal zu hoch eingestellt ist.
Wie oben erwähnt, haben Sie CKDIV8-Fuse noch in Fuses programmiert.
Sie können es vorübergehend beseitigen, indem Sie in der Software die Einstellung 1x Prascaler festlegen
CLKPR = (1 << CLKPCE); // Enable change of CLKPS bits
CLKPR = 0x00; // Set prescaler to 1
Oder setzen Sie einfach die richtigen Sicherungen mit deaktivierter CKDIV8- und full swing crystal oscillator
CKSEL-Einstellung.
Das ist mein Setup für mega 328p:
Apalopohapa
Jasen
0001011101
auf der Zeile wie 0x800000000011
und 0x00 aus,0000000001
fast sicher haben Sie die Baudrate am Empfängerende zu schnell.Vergil Litan
Vergil Litan
Jasen
Vergil Litan
Vergil Litan
Jasen
Vergil Litan
Vergil Litan
Jasen