0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
1

AVR - 1-wire & UART

07.11.2011, 04:08. Показов 11749. Ответов 14
Метки нет (Все метки)

Привет!

Мучаю 1-wire на основе UART на Тиньке 2313.
Сверяюсь с даташитом, с Аппноутом и т.д.
В-общем, в теории и в Протеусе все работает.
В реале - на скорости 115200 не работает такая конструкция чтения из УАРТа:
Код
// Plosi the output value in the UART transmit buffer, omd woyt
// until it is received by the UART receiver.
UDR = outValue;
while ( !(UCSRA & (1<<RXC)) )
;
Вот в этом цикле все затыкается. Причем, на скорости 9600 - все проходит.
А на 115200 - бесконечно ждет сброса буфера в выходной регистр.
Тинька работает на внутреннем 8Мгц, настройки УАРТа - 8н1, двойная скорость, без прерываний.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2011, 04:08
Ответы с готовыми решениями:

2 pwm, uart и 1-wire на tiny85 - реализуемо ли?
Нужен совет по сабжу у опытных товарищей. Хочу отправлять по уарту два байта, через них управлять...

ик-avr-uart
В общем попалась мне статейка про ик и avr http://habrahabr.ru/post/82383/ Загорелся я собрать...

AVR на C, траблы с UART
Доброго времени суток. Я новичок в программировании, и в МК. Пытаюсь написать прогу, но не совсем...

AVR. UART. 9 бит.
Сложилась тут задача: два МК, соеденены по интерфейсу RS-485. Периодически первый МК шлет второму 6...

14
4 / 4 / 0
Регистрация: 12.03.2013
Сообщений: 24
07.11.2011, 09:50 2
а с кварцем работает?
0
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
07.11.2011, 12:55 3
Цитата Сообщение от kytikot
двойная скорость
может, поэтому?
0
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
07.11.2011, 13:08 4
Даташит пишет, что в этом режиме нужно иметь качественный тактовый сигнал (что не ваш случай) и точную настройку скорости (UBBR, видимо).
0
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
08.11.2011, 00:10 5
Давайте рассуждать логически. Если нет окончания байта, а оно должно быть четко после старта по определенному времени (поправьте меня, если я ошибаюсь) - значит, нет и старта. У меня используется схема из апноута.
Причем, передача нуля сразу заворачивается на прием.
Стало быть, что-то в этой схеме, что стартовый бит не принимается. Правда, у меня вместо BC547 стоят BC337 (817), но по-моему, они ничем не отличаются, кроме макс. тока коллектора.

Наверное, нужно как-то ускорить или закрытие первого транзистора, или открытие второго транзистора.
Может быть, имеет смысл уменьшить резистор 100к до 10к ?


<Изображение удалено>
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
08.11.2011, 00:17 6
А может упростить все до безобразия?

<Изображение удалено>
http://we.iosyitistromyss.ru/itistro-an ... ompom.html
0
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
08.11.2011, 00:27 7
Где ж ты раньше был? Я уже и плату вытравил и спаял все...

Ага - а если на шине будет "единичка" - а на Tx на выходе "ноль" ?
0
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
08.11.2011, 00:36 8
на шине единичка, кроме как через R1, быть не может.
кстати, схема на транзисторах у меня тоже не заработала, на диоде- пользуюсь (правда, только как адаптер для компа)
0
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
08.11.2011, 00:55 9
Цитата Сообщение от hixFF
на шине единичка, кроме как через R1, быть не может.
кстати, схема на транзисторах у меня тоже не заработала, на диоде- пользуюсь (правда, только как адаптер для компа)
А если у меня DS18B20 с питанием?

Да дело в том. что на транзиторах работает, но только на 9600.
Ведь сигнал Presimse на этой скорости отрабатывает вроде как нормально.
0
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
08.11.2011, 01:07 10
Цитата Сообщение от kytikot
А если у меня DS18B20 с питанием?
тогда ещё и на линии коротыш может

Цитата Сообщение от kytikot
Да дело в том. что на транзиторах работает, но только на 9600.
Ведь сигнал Presimse на этой скорости отрабатывает вроде как нормально.
транзисторы смазывают фронты сигнала. на небольшой скорости ничего, увеличишь- получишь no connect
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
08.11.2011, 01:10 11
Цитата Сообщение от kytikot
Цитата Сообщение от hixFF
А если у меня DS18B20 с питанием?
Не страшно. У него выход с открытым коллектором. Вверх он линию потянуть не сможет
0
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
08.11.2011, 01:12 12
Цитата Сообщение от dsodir
У него выход с открытым коллектором. Вверх он линию потянуть не сможет
эт точно.
0
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
08.11.2011, 02:23 13
Ура-ура!!!

Заработало!

Поменял резистор с 100к на 10к - и все получилось!
Сначала начал думать о замене транзисторов - все-таки BC547 на 300МГц, а BC337 - на 100МГц... Но 100кГц, на которой работает схема... и 100МГц транзистора - запас более чем достаточный.

А вот уменьшенный резистор добавил тока в базу второго транзистора, и он стал открываться быстрее.

P.S. Тему переименовал, ибо так правильней.
0
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 32
24.08.2015, 23:17 14
Опишите, плиз, в двух словах, предложениях, абзацах работу этой схемы

<Изображение удалено>
0
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
25.08.2015, 00:03 15
Работа по 1-проводу в режиме мастера характеризуется передачей, а потом приемом сигналов по одному и тому же проводу/пину. При этом нужно довольно точно выдерживать ширину импульсов. То есть нужно устроить "ногодрыг" с четкими задержками и четко выдерживать переключения пина на вход и выход.
В этой схеме вместо одного пина используется два, один на передачу, другой на прием. К тому же для временных задержек используется UART - посылки определенных байтов очень похожи на временные последовательности 1-wire. Для лучшего понимания рекомендую почитать аппноут AVR318 от Atmel - хотя бы на уровне картинок. Там же есть три варианта программирования работы с этой схемой.

Что конкретно по этой схеме. При работе на прием шина 1-wire приходит прямо на пин RX, программа просто принимает некий байт, который интерпретирует. При работе на передачу работает пин TX, который через два инвертора на транзисторах передает сигнал на шину (тоже посылкой целого байта), при этом оба пина отделены друг от друга этими самыми транзисторами, как буферами. Конечно, с точки зрения программы, с посылкой целого байта он тут же принимается на RX, но это легко фильтруется программой.

В итоге программная работа ограничивается пересылкой и приемом определенных байтов, которых всего четыре (кажется) - сигналы присутствия и готовности, и 0 и 1 в нотации 1-wire. Это проще, чем дергать один пин, переключать его на вход/выход и считать микросекунды.

PS. Курсовой, что ли? )))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2015, 00:03
Помогаю со студенческими работами здесь

AVR GCC проблема с UART
решил вот лампочками помигать - ambilight сделать - и вот на грабли наткнулся -какая то неведомая...

Ввод-вывод информации через UART AVR
Кто как реализует обмен между МК+МК и МК+ПК? Интересует реализация протокола обмена? Может есть...

AVR, mega32, cvavr, uart, передача данных
Добрый вечер, господа. Имею вопрос к вам. Накидал uart на меге, и все вроде бы работает, но мк...

AVR пакеты по UART,помогите разобраться в системе команд
Здравствуйте! Не знал куда отправить этот вопрос. Прошу помощи! вкратце: моя задача разработать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru