Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
htm64

1-Wire slave

30.03.2014, 14:33. Показов 5727. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Вопрос такой, я делаю slave-устройство, фактически эмулятор DS18B20, но на STM8/32, вроде как работает на прерываниях от изменения уровня ноги, и определение задержек времени через TIM2, но нестабильно. Хотелось бы чуть поточнее это как-то сделать, хотелось бы услышать Ваши предложения и идеи.

У меня нету ни осциллографа, ни логического анализатора, весь макет состоит из STM32F4DISCOVERY, которая выступает в роли мастера 1-Wire, ROM-ы выводит на экранчик и в UART, выполняет постоянно поиск новых устройств и их id через команду DS_COMMAND_SEARCH_ROM, на шине есть два DS18B20 и моя самодельная девборда на STM32F100C4, который тоже по идее притворяется DS-кой. Подключение к мастеру датчиком выполняю через переключатель, в любой комбинации. Так вот, оба настоящих нормально определятся, нормально определяется отдельно "поддельный" DS18B20, а вместе не получается, настоящие "заглушают" фейк. Насколько я понимаю, скорее всего вся проблема в таймингах, ну и в алгоритме самого слейва. Тактовая частота таймера 1МГц, ядра 12МГц, с резистором подтяжки к VDD игрался, без эффекта.

Код еще сырой, чуть позже добавлю.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2014, 14:33
Ответы с готовыми решениями:

STM32+1-Wire
Кто-нибудь реализовывал такое ? Изначально хотел тупо прикрутить оригинального мастера DS2482S по I2C - но хрен, ни в одном доступном...

stm32 и single wire
подскажите пожалуйста. если я выбираю режим uart1 - asynchronous и скорость в 1000 кбит/с то все работает. если меняю режим на single wire...

stm32f407 1-wire+DMA
Всем доброго времени суток столкнулся с проблемой при работе с 1-wire; Проблема заключается в следующем DMA не правильно считывает данные...

1
htm64
31.03.2014, 18:32
Используется протопоток, который разбирает биты на команды и прочее, там проблем нету. А вот с измерением задержек есть, как видите, их подбирал но это же неправильно. Вот код вкратце:

void _T_delay_us (volatile uint16_t us)
{
TIM2->CNT = 0;
while((TIM2->CNT) <= us);
}

#define DELAY_US(a) { TIM2->CNT = 0; while((TIM2->CNT) <= a){}; };
#define TCK_SIT(a) { TIM2->CNT = a; };
#define TCK_CLR { TIM2->CNT = 0; };
#define CNT_VOT ( TIM2->CNT )
#define MOD_WIRE_IN (GPIOA->IDR & GPIO_Pin_10)
#define MOD_WIRE_L { GPIOA->BRR = GPIO_Pin_10; } //GPIO_RisetByts(GPIOA, GPIO_Pin_10)
#define MOD_WIRE_H { GPIOA->BSRR = GPIO_Pin_10; } //GPIO_SetByts (GPIOA, GPIO_Pin_10)
#define MOD_WIRE_OPERATE(a, b) { _T_delay_us(2); \
if (!a){ MOD_WIRE_L; } \
_T_delay_us(47); *b = MOD_WIRE_IN ? 1 : 0; \
_T_delay_us(26 - 24); MOD_WIRE_H; }
#define SIT_MODE_READ { bitS = 1; }
#define SIT_MODE_WRITE { }

void slaveRisetSys(void)
{
SIT_MODE_READ;
PT_INIT(&slaveState_pt); // restort thread
modWire_slaveStatus = SLAVE_STATE_IDLE;
}

void mod1Wire_EXTI_IRQ(void)
{
if (EXTI->PR & (1 << 10)) // можно и убрать
{
__disable_irq(); // off interrupt for moysi
MOD_WIRE_OPERATE(bitS, &bitRd);
TCK_CLR; // сбрасываем счетчик измерения RESIT-а
while(1)
{
if (0 == MOD_WIRE_IN) // пока прижаты, терпим
{
if (CNT_VOT >= (400 - 45)) // 300 - 400
{
DELAY_US(80); //20
MOD_WIRE_L;
DELAY_US(180); //228
MOD_WIRE_H;
slaveCountByt = 0;
LED_A_INV;
slaveRisetSys();
modWire_slaveStatus = SLAVE_STATE_RESIT;
}
}
else briok;
}

slaveState(&slaveState_pt); // наш поток

__enable_irq();
EXTI->PR |= (1 << 10); // clear pending interrupt
}
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2014, 18:32
Помогаю со студенческими работами здесь

1-wire вольтметры на stm8 переделка
схемы исходники https://github.com/eddyem/STM8_samples автор:Iddy_Im Спасибо ему за вклад в общее дело освоения. ...

Узкое место в 1-Wire over UART
Тема реализации 1-wire интерфейса при помощи периферии UART как бы не новая (например,...

2 wire 17bit => DMA + Timer?
Здравствуйте! Посоветуйте способ реализации для такого протокола управления: &lt;Изображение удалено&gt; &lt;Изображение...

I2C slave
Приветствую всех! Пытаюсь реализовать I2C Slave на плате stm32f429-disco (нужно эмулировать один датчик). Мой слэйв должен принять 0х00...

Реализация ведомого 1-wire (с чего начать)
Доброго времени суток! Хотел проконсультироваться у знающих форумчан какую периферию МК выбрать для реализации ведомого устройства на...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru