Я пытаюсь передать данные с ATtiny85 на ПК, используя код Arduino-esque через USB-Serial конвертер, не разбираясь во многом. Я был шокирован и потрясен тем, что это не сработало.
Я подтвердил, что крошечный индикатор мигает напряжением на одном из его выводов, но когда я подключаю этот вывод для передачи или приема по кабелю USB-serial и пытаюсь прослушивать его с помощью программы терминала, я ничего не получаю.
Я не уверен, как сказать, какая часть сломана.
Нужно ли больше, чем VCC, GND и TXD для передачи последовательного?
Детали:
Код для крошечного написан в среде Arduino, и аналогичный код успешно мигает на всех 4 выводах «PORTB», по крайней мере, в соответствии со светодиодами. Я использую код из HLT и Saporetti, чтобы позволить мне использовать Arduino диалект C ++ для его программирования. Программа все еще входит под K.
#include <SoftwareSerial.h>
SoftwareSerial s(0,1); //receive on "0", and transmit on "1" aka "PB1" aka pin 6
void setup() { s.begin(4800); } // assuming 1Mhz, 4800 baud
void loop() { s.println(millis()); } // transmit something at every opportunity
Здесь много перевода, но код довольно простой. Код, который устанавливает скорость в бодах, кажется, принимает 1 МГц, но, к счастью, у моего attiny есть заводские предохранители по умолчанию и он работает на 1 МГц. Во всяком случае, контакт 6 мигает своим напряжением в соответствии со светодиодом.
Поэтому я использую маленькие провода, чтобы подключить конец «ftdi» преобразователя USB-последовательностей FTDI к крошечному: черный к GND, красный к VCC, оранжевый к 6. Я открываю программу «minicom» на ПК, устанавливаю скорость передачи данных Оцените 4800 и ждите, ничего. При разговоре с моим Boarduino , это не проблема.
Кабель преобразователя FTDI имеет следующую распиновку: черный - GND, коричневый - «CTS», красный - VCC (+ 4,98 В), оранжевый - «TXD», желтый - «RXD», зеленый - «RTS».
Если я хочу передать данные с крошечного на ПК, должен ли я мигать напряжением на «TXD» или «RXD»? Другими словами, является ли провод передачи для передачи от подчиненного устройства к хосту или от хоста к подчиненному устройству?
Я на самом деле пробовал оба, ни один не работал. Пока я поджарил оборудование на сумму менее одного доллара, и я становлюсь дерзким, поэтому просто подключаю провода к кабелю. Может быть, я не должен игнорировать провода "CTS" и "RTS"?
Нужно ли использовать какие-либо другие провода? RTS и CTS делают что-нибудь?
Аппаратное обеспечение представляет собой ATTiny85-PU (пакет DIP-8, работающий на частоте 1 МГц, рассчитанный на 20 МГц), работающий от USB при напряжении 4,98 В. Хост-компьютер - это MacBook, и он успешно выполняет все функции Arduino, в том числе использует ArduinoISP для программирования ATtiny на мгновение оцепенения.
Таким образом, ответ, по-видимому, таков: вы можете просто подключить провода, на самом деле просто GND (черный) и RXD (желтый), и все будет работать, пока программное обеспечение хорошее.
Вещи, которые не имели значения:
Внутренний генератор работает просто отлично. Это кажется относительно стабильным для моего ограничивающего тестирования. На скорости 9600 бод любые проблемы, которые у него есть, незначительны.
Использование питания USB на сигналах работает просто отлично. Вы можете использовать отдельный источник напряжения (с общим заземлением), но кабель FTDI отлично считывает сигналы как 3 В, так и 5 В. Я подключил батарейный блок - к GND как FTDI, так и крошечного, + к VCC крошечного, и это работало просто отлично. Однако просто использовать VCC (красный) FTDI (USB-питание 5 В) значительно проще и эффективнее.
То, что я сделал не так:
Желтая линия FTDI «RXD» получает биты от микроконтроллера, поэтому она подключается к входу на микроконтроллере. Я мог бы сам в этом разобраться, подключив передающую и приемную линии (оранжевую и желтую) к светодиодам или Arduino и проверив, какое напряжение мигало при передаче с ПК.
Ни SoftwareSerial, ни NewSoftSerial не работают из коробки с ATtiny. В то время как ATmega328p и ATtiny85 имеют много общего, есть достаточно различий, что просто получить старое программное обеспечение для компиляции для нового чипа недостаточно.
Более медленные скорости передачи данных не излечивают вещи. 300 бод требует более сложных процедур задержки, поскольку число циклов между битами значительно больше, чем у 8-битного счетчика. 9600 бод работает просто отлично, и более высокая скорость передачи данных возможна.
Будьте осторожны при написании критического по времени кода на C, особенно во встроенных функциях. Время выполнения зависит от того, как компилятор его оптимизирует. В частности, при калибровке задержки, просто изменяя ее вверх и вниз, вы получите другой ответ, чем при использовании (определяемой по времени компиляции) постоянной задержки, поскольку сгенерированная сборка может быть довольно разной. Дело не в том, что C «медленный», а в том, что он был слишком быстрым. В какой-то момент я отправил 1 с быстрее, чем 0 (предположительно, они более аэродинамические).
Чтобы начать передачу, вы устанавливаете линию НИЗКОЙ (начальный бит), а затем вам необходимо убедиться, что линия находится в нужном напряжении в каждой из следующих 8 точек выборки, а затем убедиться, что напряжение в ВЫСОКОМ напряжении на 9-й выборке , NewSoftSerial упоминает о половине задержки на стартовом бите, но это не сработало для меня. Я использовал задержку 75% в начале и задержку 125% в конце.
Реальное беспокойство по поводу напряжения может заключаться в том, что некоторое «последовательное» (особенно RS232) напряжение составляет ± 12 В, а не 0 В / 5 В. Я потратил много времени, пытаясь понять, как я могу отрегулировать напряжение от 5 В до 3,3 В, но я думаю, что это было совершенно неактуально.
Во всяком случае, передавать сериалы легко, но очень важно получить идеальное время. Для меня это был просто вопрос кодирования передачи в сборке, чтобы я мог считать циклы.
источник