Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прерывания + 1-Wire
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Veg@
На ATMega16 реализуются:
1. 3 прерывания (2 из которых внешние) и их обработки
2. сбор данных с 8 датчиков температуры (DS18B20) по интерфейсу 1-Wire

Интерфейс общения с датчиками реализован программно, поэтому в некоторых случаях прерывания прекращают реализацию интерфейсных задержек, в результате чего иногда приходят неверные значения температур. Для решения можно было бы запретить выполнение прерываний на время общения с датчиками, но их фиксирование является довольно важным. С другой стороны, прерывания возникают довольно часто и фильтрация неверных значений температур не спасет.
Возможно ли решение этой проблемы программно или же необходимо использовать контроллеры с аппаратной реализацией 1-Wire или доп. микросхемы, например SPI->1-Wire ? Спасибо.
HARMHARM
Уже тысячу раз обсуждалось, что можно использовать UART.
defunct
Цитата(HARMHARM @ Nov 19 2009, 12:22) *
Уже тысячу раз обсуждалось, что можно использовать UART.

UART жалко сливать на такую муру. Как по мне выгоднее рядом поставить какую-нить tiny13, пусть она обслуживает 1-wire, а основной контроллер решает свои задачи.
kolobok0
Цитата(Veg@ @ Nov 19 2009, 14:15) *
..Интерфейс общения с датчиками реализован программно..



Юзаю 1Wire всегда на основном кристале. На 51 ядре в основном цикле. Буквально недавно переносил под АВР в фоновую обработку - кварц на 16 позволяет без проблем. Собственно надо выдержать достаточно точно только интервал в 1 мкс - что выполнимо без запрета внешних прерываний в большинстве случаев.

Правда вот от 1820 пришлось отказаться (думал заюзать CRC - в силовой электронике актуально). Они хуже чем 1821 которые применял и раньше. Не та точность и дольше по общению на шине. Но это чиссо из практики. А контроль данных решаемо - снизошло озарение smile.gif

удачи Вам
(круглый)
ARV
для программного 1-wire достаточно запрещать прерывания в критические моменты приема одного БИТА - что-то около 15 микросекунд, ну 20 с запасом. промежутки между БИТАМИ могут быть любой длительности и вряд ли смогут помешать остальным процессам.

из всего обсуждения единственное, с чем могу безоговорочно согласиться: все уже обсуждалось великое множество раз!
Veg@
Цитата(ARV @ Nov 20 2009, 12:08) *
для программного 1-wire достаточно запрещать прерывания в критические моменты приема одного БИТА - что-то около 15 микросекунд, ну 20 с запасом.

По-мойму, во-первых, для сигнала RESET нужно удерживать линию в низком уровне ~480us. Во-вторых, отправка байт данных в интерфейсе происходит жесткоограниченными по времени тайм-слотами по ~120us; только между тайм-слотами возможна произвольная задержка.

Цитата(kolobok0 @ Nov 20 2009, 08:23) *
удачи Вам

Спасибо )

Цитата(HARMHARM @ Nov 19 2009, 13:22) *
Уже тысячу раз обсуждалось, что можно использовать UART.

Использование UART, с моей точки зрения, является довольно громоздким решением (с аппаратной и программной точек зрения), по крайней мере у меня сложилось такое впечатление после прочтения этой статьи. Видимо, гораздо более универсальным будет использование дополнительного контроллера.

Цитата(defunct @ Nov 20 2009, 02:45) *
UART жалко сливать на такую муру. Как по мне выгоднее рядом поставить какую-нить tiny13, пусть она обслуживает 1-wire, а основной контроллер решает свои задачи.

Возможно это и будет единственный выход. Можно поподробнее разъяснить, какие могут возникнуть проблемы в данном случае при связи контроллеров по SPI? Передача по этому интерфейсу также, кажется, требует реализации прерываний.
Андрей Лютько
Цитата(Veg@ @ Nov 20 2009, 21:54) *
По-мойму, во-первых, для сигнала RESET нужно удерживать линию в низком уровне ~480us. Во-вторых, отправка байт данных в интерфейсе происходит жесткоограниченными по времени тайм-слотами по ~120us;

Длительность удержания шины в низком уровне должна быть не менее 480uS (см. даташит) больше - можно.
xemul
Цитата(Андрей Лютько @ Nov 25 2009, 11:25) *
Длительность удержания шины в низком уровне должна быть не менее 480uS (см. даташит) больше - можно.

Удержание шины в низком уровне более 960 мкс ванварные слейвы воспринимают как hard-reset.
ILYAUL
Цитата(defunct @ Nov 20 2009, 02:45) *
UART жалко сливать на такую муру. Как по мне выгоднее рядом поставить какую-нить tiny13, пусть она обслуживает 1-wire, а основной контроллер решает свои задачи.

Поздно , конечно , но вдруг пригодится DS2482-100 или 101
defunct
Цитата(Veg@ @ Nov 20 2009, 19:54) *
Возможно это и будет единственный выход. Можно поподробнее разъяснить, какие могут возникнуть проблемы в данном случае при связи контроллеров по SPI? Передача по этому интерфейсу также, кажется, требует реализации прерываний.

На tiny13 реализовать SPI мастер (программный SPI) и прерываний непотребуется.
Основной контроллер сделать SPI слейвом, уже как Вам будет удобно, можно и с прерываниями. Проблема будет только одна - сообщить тиньке когда основной контроллер захочет что-то передать. Решения стандартные - или постноянный опрос со стороны тиньки, или отдельная сигнальная линия.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.