Low1 веригуд.
то Steel. Я сначала припаял, потом увидел что зря))
Использование комплекта мастер-кит NM8036 для автоматизации
SerjNSK
Научный сотрудник
Новосибирск
2.5K 939
![](https://cdn.homedistil.ru/th/1712/15/523.167956.png)
Отв.200 28 Февр. 09, 21:51
SerjNSK
Научный сотрудник
Новосибирск
2.5K 939
![](https://cdn.homedistil.ru/th/1712/15/523.167956.png)
Отв.201 28 Февр. 09, 21:57, через 6 мин
Rudy? а ты в чем сейчас компилишь? Давай я себе тоже скачаю.
Rudy
Академик
Питер
5.8K 1K
![](https://cdn.homedistil.ru/th/1304/21/673.169553.gif)
Отв.202 28 Февр. 09, 21:59, через 2 мин
Лови. Погоняй входы А2 и А3, проверь, что все нормально.
А с задержкой реакции на кнопки пока не понял. Должно быть гораздо быстрее. Но еще спокойно помотрю.
Я в IAR 4.12A/W32 (4.12.1.5)
А с задержкой реакции на кнопки пока не понял. Должно быть гораздо быстрее. Но еще спокойно помотрю.
Я в IAR 4.12A/W32 (4.12.1.5)
SerjNSK
Научный сотрудник
Новосибирск
2.5K 939
![](https://cdn.homedistil.ru/th/1712/15/523.167956.png)
Отв.203 28 Февр. 09, 22:10, через 11 мин
А задержки бипера нету больше. Я забыл сказать ((.
Rudy
Академик
Питер
5.8K 1K
![](https://cdn.homedistil.ru/th/1304/21/673.169553.gif)
Отв.204 28 Февр. 09, 22:13, через 4 мин
Стил, а ты свой алгоритм сканирования проверял на железе? На первый взгляд он не очень похож на тот, который приводит Даллас.
steel.ne
Научный сотрудник
Киев
541 75
![](https://cdn.homedistil.ru/th/1304/21/1090.161070.jpg)
Отв.205 28 Февр. 09, 22:25, через 12 мин
Работал. Я если выкладываю непроверенное, то обязательно об этом предупреждаю. Причем делал исключительно по даташиту ![Улыбающийся](https://forum.homedistiller.ru/Smileys/default/smiley.gif)
Там же на самом деле все просто. Запрашиваем первый бит. Если ответили 01, то он ноль, если 10 - то он 1. Едем дальше. Если коллизия (00), то значит что нашли еще один датчик. В текущий датчик пишем 1, в новый 0 (или наоборот, пофиг), доопределяем первый датчик.
Потом отрабатываем уже определенный префикс второго датчика и едем по накатанной. Если что, могу на примере рассказать.
![Улыбающийся](https://forum.homedistiller.ru/Smileys/default/smiley.gif)
Там же на самом деле все просто. Запрашиваем первый бит. Если ответили 01, то он ноль, если 10 - то он 1. Едем дальше. Если коллизия (00), то значит что нашли еще один датчик. В текущий датчик пишем 1, в новый 0 (или наоборот, пофиг), доопределяем первый датчик.
Потом отрабатываем уже определенный префикс второго датчика и едем по накатанной. Если что, могу на примере рассказать.
steel.ne
Научный сотрудник
Киев
541 75
![](https://cdn.homedistil.ru/th/1304/21/1090.161070.jpg)
Отв.206 28 Февр. 09, 22:32, через 8 мин
Сразу вдогонку пример ![Улыбающийся](https://forum.homedistiller.ru/Smileys/default/smiley.gif)
три датчика
11001010
11101000
11110111
Поехали определять.
Запрос на первый бит. Ответ - 10, значит как минимум есть один датчик с 1 в первом бите (буду с единицы нумеровать).
таблица найденных датчиков выглядит так:
1: 1
2:
3:
4:
Второй запрос аналогично, в третьем коллизия. После третьего запроса таблица выглядит так (копируем уже найденный префикс и проставляем третий бит):
1: 111
2: 110
3:
Посылаем бит идентификации 1 (то есть мы выбираем датчик, с 1 в третьем бите, остальные затыкаются).
Четвертый запрос - опять коллизия.
1: 1111
2: 110
3: 1110
продолжаем с единичкой и очень просто доопределяем первый датчик без коллизий.
1: 11110111
2: 110
3: 1110
Переходим ко второму. Идентифицируем первые три бита, не обращая внимания на ответы. После этого второй датчик доопределяется без коллизий. Аналогично и с третьим
![Улыбающийся](https://forum.homedistiller.ru/Smileys/default/smiley.gif)
три датчика
11001010
11101000
11110111
Поехали определять.
Запрос на первый бит. Ответ - 10, значит как минимум есть один датчик с 1 в первом бите (буду с единицы нумеровать).
таблица найденных датчиков выглядит так:
1: 1
2:
3:
4:
Второй запрос аналогично, в третьем коллизия. После третьего запроса таблица выглядит так (копируем уже найденный префикс и проставляем третий бит):
1: 111
2: 110
3:
Посылаем бит идентификации 1 (то есть мы выбираем датчик, с 1 в третьем бите, остальные затыкаются).
Четвертый запрос - опять коллизия.
1: 1111
2: 110
3: 1110
продолжаем с единичкой и очень просто доопределяем первый датчик без коллизий.
1: 11110111
2: 110
3: 1110
Переходим ко второму. Идентифицируем первые три бита, не обращая внимания на ответы. После этого второй датчик доопределяется без коллизий. Аналогично и с третьим
SerjNSK
Научный сотрудник
Новосибирск
2.5K 939
![](https://cdn.homedistil.ru/th/1712/15/523.167956.png)
Отв.207 28 Февр. 09, 22:36, через 4 мин
АЦП А2 и А3 покрутил, работают. Пределы определяют как им и положенно от 0 до 1023.
Kotische
Академик
Саратов
8.1K 2.5K
![](https://cdn.homedistil.ru/th/1304/21/685.169635.png)
Отв.208 28 Февр. 09, 22:46, через 11 мин
Да уж, намудрил ты со структурами. Смотри, что получилось после чистки.Rudy, 28 Февр. 09, 16:51Руди, на сколько я помню, структуры были сделаны для того чтобы "развязать" обмен параметрами с компьютером, от real-time алгоритма работающего с оптотиристором.
Вроде я не успел доделать алгоритм до конца... То что я бросил в форум - это то с чем я эксперементировал, попутно обучаясь программить микроконтроллер, как ты помнишь я за это благое дело взялся совсем не давно (уже несколько лет не держал в руках микроконтроллеров, причем последний раз это был советский 80с51), а первый блин обычно сам знаешь чем...
![Подмигивающий](https://forum.homedistiller.ru/Smileys/default/wink.gif)
Rudy
Академик
Питер
5.8K 1K
![](https://cdn.homedistil.ru/th/1304/21/673.169553.gif)
Отв.209 28 Февр. 09, 22:49, через 4 мин
Да нет вроде разобрался. Вот только у тебя правильная операция есть _BV(), а я у себя такой не нашел. Прийдется ручками сделать.
Rudy
Академик
Питер
5.8K 1K
![](https://cdn.homedistil.ru/th/1304/21/673.169553.gif)
Отв.210 28 Февр. 09, 22:54, через 5 мин
Вроде я не успел доделать алгоритм до конца...Kotische, 28 Февр. 09, 22:46Да нет, все отлично работает я проверил. А структуры я специально разбомбил, чтобы за длинными текстами суть не пряталась. Без них все сразу четко видно.
Kotische
Академик
Саратов
8.1K 2.5K
![](https://cdn.homedistil.ru/th/1304/21/685.169635.png)
Отв.211 28 Февр. 09, 23:06, через 12 мин
Руди, вот чем мне особенно нравится Брезенхем,
что когда тебе нужно изменить мощность ТЕНа, ты подаешь в контроллер команду "установить новое заполнение" при этом нужно перезапустить окно (начать переод с начала). Так вот брезинхем, выдвая в ТЕН среднюю мощность, при произвольной перестартовке окна, даст очень маленькую погрешность в реально отдаваемой в нагрузку мощности.
Любой другой ШИМ алгоритм, потребует синхронизации команды изменения мощности с началом окна, иначе будет очень большая погрешность - реально отдаваемая мощность будет очень сильно отличаться от задаваемой.
Ты кстати смотрел, я там мудрил с длительностью и фазой подаваемого на оптотиристор поджигающего импульса?
Если твоя схема детектора перехода напряжения через нуль отличается от моей, может потребоваться подбор констант загружаемых в таймер-счётчик.
что когда тебе нужно изменить мощность ТЕНа, ты подаешь в контроллер команду "установить новое заполнение" при этом нужно перезапустить окно (начать переод с начала). Так вот брезинхем, выдвая в ТЕН среднюю мощность, при произвольной перестартовке окна, даст очень маленькую погрешность в реально отдаваемой в нагрузку мощности.
Любой другой ШИМ алгоритм, потребует синхронизации команды изменения мощности с началом окна, иначе будет очень большая погрешность - реально отдаваемая мощность будет очень сильно отличаться от задаваемой.
Ты кстати смотрел, я там мудрил с длительностью и фазой подаваемого на оптотиристор поджигающего импульса?
Если твоя схема детектора перехода напряжения через нуль отличается от моей, может потребоваться подбор констант загружаемых в таймер-счётчик.
Rudy
Академик
Питер
5.8K 1K
![](https://cdn.homedistil.ru/th/1304/21/673.169553.gif)
Отв.212 28 Февр. 09, 23:51, через 46 мин
Если использовать ту схемку присинхронизации к сети, которую я рисовал, и использовать zero-crossing, то ничего синхронизировать не нужно. Эта схема даст прерывание в момент максимума (а не перехода через ноль) и небольшое запаздывание реакции (до, примерно, 5 мсек) не повлияет на результат. Т.е. по инту спокойно и не торопясь устанавливаешь значение для следующего полупериода. Оно автоматически сработает при переходе через ноль.
Для zero-crossing не нужен импульс. Ты просто ставишь напряжение в 0 или 1 до следующей смены значений. Реальное переключение симистора произойдет только при переходе через ноль.
Для zero-crossing не нужен импульс. Ты просто ставишь напряжение в 0 или 1 до следующей смены значений. Реальное переключение симистора произойдет только при переходе через ноль.
ion
Научный сотрудник
Odessa
391 35
![](https://cdn.homedistil.ru/th/1304/21/191.162086.jpg)
Отв.213 01 Марта 09, 02:06
Оно автоматически сработает при переходе через ноль.+1
Rudy, 28 Февр. 09, 23:51
Если в момент перехода через "0" на входе МОС будет "1".
Rudy
Академик
Питер
5.8K 1K
![](https://cdn.homedistil.ru/th/1304/21/673.169553.gif)
Отв.214 01 Марта 09, 17:55
Стил, разреши мои сомнения. После считывания данных с одного термометра ОБЯЗАТЕЛЬНО нужно выдать Reset, перед тем, как связываться с другим. Просто выдать MATCH_ROM для связи с другой DS18 нельзя. Т.е. я могу опрашивать только одно устройство в секунду, не чаще. Это так?
И еще. Я запустил конверсию в одной детали. Потом, через Reset хожу к другой детали. Reset не должен влиять на конверсию в первой и, спустя некоторое время, я смогу считать температуру с первой. Это так?
И еще. Я запустил конверсию в одной детали. Потом, через Reset хожу к другой детали. Reset не должен влиять на конверсию в первой и, спустя некоторое время, я смогу считать температуру с первой. Это так?
steel.ne
Научный сотрудник
Киев
541 75
![](https://cdn.homedistil.ru/th/1304/21/1090.161070.jpg)
Отв.215 01 Марта 09, 21:02
Стил, разреши мои сомнения. После считывания данных с одного термометра ОБЯЗАТЕЛЬНО нужно выдать Reset, перед тем, как связываться с другим. Просто выдать MATCH_ROM для связи с другой DS18 нельзя. Т.е. я могу опрашивать только одно устройство в секунду, не чаще. Это так?Конечно резет нужен. Цитирую из даташита:
Rudy, 01 Марта 09, 17:55
The transaction sequence for accessing the DS18B20 is as follows:
Step 1. Initialization
Step 2. ROM Command (followed by any required data exchange)
Step 3. DS18B20 Function Command (followed by any required data exchange)
The initialization sequence consists of a reset pulse transmitted by the bus master followed by presence pulse(s) transmitted by the slave(s).
Но откуда взялось раз в секунду? Reset pulse 450 микросекунд. И все задержки там меряются микросекундами.
И еще. Я запустил конверсию в одной детали. Потом, через Reset хожу к другой детали. Reset не должен влиять на конверсию в первой и, спустя некоторое время, я смогу считать температуру с первой. Это так?Конечно, если нет паразитного питания.
Я у себя пользовался такой схемой опроса - всем датчикам даю команду SKIP ROM [CCh], потом CONVERT T [44h]. При этом все одновременно начинают мерять. Ожидаю 750 миллисекунд, потом считываю скретч нужных мне датчиков. При этом раз в секунду я успеваю опросить все датчики. А не по одному, как это делает, например, термкипер.
Я тебе на всякий случай прицеплю полезный даташит. В нем в таблице 3 (страница 9) указаны задержки, которые надо использовать. А на следующих страницах подробненько нарисован весь обмен.
Rudy
Академик
Питер
5.8K 1K
![](https://cdn.homedistil.ru/th/1304/21/673.169553.gif)
Отв.216 01 Марта 09, 21:35, через 33 мин
Ага, спасибо. Я задержки проверил по Далласу, практически совпали с твоими. А мысль со SKIP ROM - отличная. Так и сделаю.
Но откуда взялось раз в секунду? Reset pulse 450 микросекунд.450 - это только первая фаза, всего под 1000. Но это у меня заскок, спасибо, что дернул. Я, по невнимательности, микросекунды с миллисекундами попутал, так бы в них и считал.
Rudy
Академик
Питер
5.8K 1K
![](https://cdn.homedistil.ru/th/1304/21/673.169553.gif)
Отв.217 02 Марта 09, 18:41
Ну вот, добавил опрос DS18. При запуске должна показать сколько их найдено. Потом по 5 секунд показывать данные 4 АЦП (с номером кнопки в конце первой строки, как и раньше) и температуру с найденных DS18.
SerjNSK
Научный сотрудник
Новосибирск
2.5K 939
![](https://cdn.homedistil.ru/th/1712/15/523.167956.png)
Отв.218 02 Марта 09, 19:27, через 46 мин
Датчик нашелся, температуру не кажет. Опрос Кнопок происходит только в момент перехода от дисплея с температурами к дисплею АЦП. Т.е. в этот момент нужно держать кнопку нажатой, иначе код ее не появится на дисплее. Артефакты еще какието, на фото видно.
Rudy
Академик
Питер
5.8K 1K
![](https://cdn.homedistil.ru/th/1304/21/673.169553.gif)
Отв.219 02 Марта 09, 19:35, через 9 мин
С кнопками все нормально, я их оставил только для контроля. А ты одну DS18 прицепил? Если есть еще, подоткни для проверки.
Такое ощущение, что считывает, но что-то не то, посмотрю.
И в конце строки странная кракозябра.
Такое ощущение, что считывает, но что-то не то, посмотрю.
И в конце строки странная кракозябра.