Постійний новачок: чому я не можу просто підключити дроти?


14

Я намагаюся передати з ATtiny85 на ПК, використовуючи код Arduino-esque через USB-послідовний перетворювач, не розуміючи нічого дуже нічого. Я був шокований і здивований, що це не працює.

Я підтвердив, що крихітний мерехтить напругу на одному зі своїх штифтів, але коли я підключаю цей контакт для передачі або прийому по USB-послідовному кабелю і намагаюся слухати за допомогою термінальної програми, я нічого не отримую.

Я не впевнений, як сказати, яка частина зламана.

Чи потрібно мені більше, ніж VCC, GND і TXD для передачі серіалу?


Деталі:

Код для крихітних написаний у середовищі Arduino, і подібний код успішно блимає усіма 4 "PORTB" штифтами, принаймні відповідно до світлодіодів. Я використовую код HLT і Saporetti, щоб дозволити використовувати ардуїнський діалект 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 МГц, але, на щастя, у мого підручника є фабричні запобіжники за замовчуванням і працює на частоті 1 МГц. У будь-якому випадку штифт 6 мерехтить своєю напругою відповідно до світлодіода.

Тому я використовую маленькі дроти, щоб підключити "ftdi" кінець FTDI USB-послідовного перетворювача до крихітного: чорний до GND, червоний до VCC, оранжевий до 6. Відкриваю програму "minicom" на ПК, встановлюю бод ставка до 4800 і чекати, дарма. Розмовляючи з моїм Боардуїно , це не має проблем.

Кабель перетворювача FTDI має такий розріз: чорний - GND, коричневий - CTS, червоний - VCC (+ 4,98 В), помаранчевий - «TXD», жовтий - «RXD», зелений - «RTS».

Якщо я хочу передати з крихітного на ПК, чи слід мерехтіти напругою на "TXD" або "RXD"? Іншими словами, чи є передавальний провід для передачі від раба до господаря, або господар для раба?

Я насправді намагався і те, і інше, і не працювало. Поки що я смажив обладнання на суму, ніж долар, і я стаю зухвалим, тому просто підключаю дроти до кабелю. Можливо, я не повинен ігнорувати провід "CTS" і "RTS"?

Чи потрібно використовувати якісь інші дроти? РТС та КТС чимось роблять?

Апаратне забезпечення - це ATTiny85-PU (пакет DIP-8, працює на частоті 1 МГц, номінальним рівнем 20 МГц), що працює на USB 4,88 В. Хост-ПК - це MacBook, і він успішно виконує всі речі arduino, включаючи використання ArduinoISP для програмування ATtiny, щоб моргати своїм маленьким серцем.

Відповіді:


9

Ви точно можете передавати дані, використовуючи лише TX & GND.

По-перше, ви хочете підключити лінію ATtiny85 TX до лінії FTDI RX (жовта на TTL-232R). Переконайтеся, що USB-адаптер може працювати з 5 В - я впевнений, що навіть 3,3 В TTL-232R має 5В.

Відповідно до сторінки прикладу для SoftwareSerial , вам потрібно встановити напрямок ліній TX & RX у вашій функції настройки:

// include the SoftwareSerial library so you can use its functions:
#include <SoftwareSerial.h>

#define rxPin 2
#define txPin 3
#define ledPin 13

// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
byte pinState = 0;

void setup()  {
  // define pin modes for tx, rx, led pins:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
}

У вашому випадку бодрат буде 4800. Схоже, бібліотека SoftwareSerial не підтримує CTS та RTS, тому просто переконайтеся, що ви не використовуєте їх на хост-програмі.

Перегляньте довідкову сторінку, щоб отримати докладнішу інформацію, де вони розповідають про деякі потенційні проблеми з тимчасовим порушенням, які можуть бути загострені, якщо ви працюєте на частоті 1 МГц, використовуючи внутрішній генератор на крихітному.


Спасибі! На довідковій сторінці було зрозуміло, що 4800 занадто швидкий, тому я впав до 300 бод і все "краще". PinMode не впливає на передачу, але я все-таки додав його, щоб зробити речі зрозумілішими. Зараз я намагаюся уповільнити зміни затримки між бітами, поки щось не буде отримано. Minicom тільки показує? марок прямо зараз. Найгірший випадок, мої генератори 16 МГц та 20 МГц прибувають у п’ятницю.
Джек Шмідт

Як ви думаєте, це може бути проблема напруги? Регулювання часу все ще не спрацювало, і я отримую багато питань, тому щось передається. Чи можу я це виправити лише знизивши Vcc до крихітного до 3В, тобто чи можу я просто підключити його до деяких акумуляторів замість USB? Чи потрібно підключати заземлення до USB-заземлення та заземлення акумулятора?
Джек Шмідт

О, також дякую, що вказали, що жовтий провід є для мого крихітного передачі. Помаранчевий провід, здається, багато мерехтить (підключений до світлодіода з ПК). Передаває ПК чи більшість часу він залишається "увімкненим"?
Джек Шмідт

Так, повинен залишатися HI, коли в режимі очікування та мерехтіння при передачі - я не впевнений, чи FTDI здатний подавати достатній струм для управління світлодіодом. AVR буде добре, але я б зняв світлодіод із лінії FTDI-TX. Crystal повинен вирішити проблеми з тимчасовим терміном (але вам потрібно встановити запобіжники для переходу з внутрішнього генератора).
Пітер Гібсон

Я все ще працюю над цим, але я переконаний, що це проблема часу або жахлива проблема програмного забезпечення Arduino-on-ATTiny. Отримується кілька середніх 2-3 байтів (але не відображається), а решта розміщується у вигляді 0x80. Я напишу власну (тривіальну) функцію м'якої послідовної передачі AVR, поки чекаю кристала. Чи є якийсь простий / дешевий спосіб побачити, що надсилається? 300 бод все ще досить швидко для моїх старих очей.
Джек Шмідт

7

Отже, відповідь виглядає так: ви можете просто підключити дроти, насправді просто 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В, але вважаю, що це абсолютно не має значення.

У будь-якому випадку передача серіалу є простою, але отримати термін "ідеальним" видається досить важливим. Для мене це було лише питанням кодування передачі в зборі, щоб я міг рахувати цикли.


2
+1 для 1 є більш аеродинамічним :) FTDI TTL232R виводить сигнали uart рівня логічного рівня (0-5V), якщо ви з'єднувалися безпосередньо зі стандартним послідовним портом, вам знадобиться інтерфейс IC, такий як MAX232, який перетворює напругу рівні в обох напрямках.
Пітер Гібсон

Вітаємо вас за роботу. Дякую за ваш детальний пост, я сподіваюся, що це допомагає багатьом іншим людям у своїх проектах ATtiny.
davidcary
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.