Я пытаюсь отправить что-то с atmega на свой компьютер.
Установка: Ubuntu 14.04, atmega644P-20PU, USBASP v2, TTL-to-USB pl2303
Сначала я попытался написать код на C и использовал этот код , а затем этот , и я получил тот же результат: '�' или случайные символы (в миникоме или на экране)
Затем я отказался от C и загрузил простую программу для Arduino:
void setup()
{
Serial.begin(9600);
}
void loop()
{
delay(500);
Serial.write('t');
}
(при запуске arduino я ставил кварц 16МГц. В остальных случаях ставил 20МГц. Так же устанавливал F_CPU соответственно в коде.)
Во всех случаях светодиод R (прием) pl2303 мигает в нужные моменты (в зависимости от установленной в коде задержки).
Также я использовал CuteCom для просмотра того, что я получаю от последовательного порта, и вместо «�», в зависимости от используемого кода, который я получаю "\0x00\0x80\0x80"
(для кода Arduino) или в других случаях "\0x80\0x00\0x80"
.
Я использую RX0 и TX0 (контакты 14 и 15). RX0 подключен к TX pl2303 и RX pl2303 к TX0 микроконтроллера.
Я также замкнул RX и TX на pl2303 и попытался отправить данные через него, и я получаю обратно то, что отправляю.
Скорость передачи данных pl2303 составляет 9600 бод.
$stty -F /dev/ttyUSB1
скорость 9600 бод; строка = 0;
мин = 60; время = 1;
ignbrk -brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
Во всех случаях я использовал 8N1.
Надеюсь, я был достаточно конкретным и последовательным.
(обычно я пытаюсь найти ответы и решения, но теперь я потерялся)
't' выглядит как 000101110
в строке 0x80 000000001
и 0x00 000000000
(включая начальный бит игнорирование стопового бита), почти наверняка у вас слишком высокая скорость передачи данных на принимающей стороне.
учитывая, что вы видите 0 нулей и 1, это, вероятно, установлено в 8 раз быстрее, поэтому попробуйте 1200 бод в cutecom и найдите возможную причину того, что делитель скорости передачи в arduino установлен в 8 раз выше.
Как упоминалось выше, у вас в фьюзах все еще запрограммирован фьюз CKDIV8.
Вы можете временно избавиться от этого, установив настройку 1x праскалера в программном обеспечении.
CLKPR = (1 << CLKPCE); // Enable change of CLKPS bits
CLKPR = 0x00; // Set prescaler to 1
Или просто установите правильные фьюзы с отключенной full swing crystal oscillator
настройкой CKDIV8 и CKSEL.
Это моя настройка для мега 328p:
апалопохапа
Джейсен
0001011101
на линии 0x80, как0000000011
и 0x00, как0000000001
почти наверняка, у вас слишком высокая скорость передачи данных на принимающей стороне.Вирджил Литан
Вирджил Литан
Джейсен
Вирджил Литан
Вирджил Литан
Джейсен
Вирджил Литан
Вирджил Литан
Джейсен