Low1 веригуд.
то Steel. Я сначала припаял, потом увидел что зря))
Использование комплекта мастер-кит NM8036 для автоматизации
SerjNSK
Научный сотрудник
Новосибирск
2.5K 939
Отв.200 28 Февр. 09, 21:51
SerjNSK
Научный сотрудник
Новосибирск
2.5K 939
Отв.201 28 Февр. 09, 21:57, через 6 мин
Rudy? а ты в чем сейчас компилишь? Давай я себе тоже скачаю.
Rudy
Академик
Питер
5.8K 1K
Отв.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
Отв.203 28 Февр. 09, 22:10, через 11 мин
А задержки бипера нету больше. Я забыл сказать ((.
Rudy
Академик
Питер
5.8K 1K
Отв.204 28 Февр. 09, 22:13, через 4 мин
Стил, а ты свой алгоритм сканирования проверял на железе? На первый взгляд он не очень похож на тот, который приводит Даллас.
steel.ne
Научный сотрудник
Киев
541 75
Отв.205 28 Февр. 09, 22:25, через 12 мин
Работал. Я если выкладываю непроверенное, то обязательно об этом предупреждаю. Причем делал исключительно по даташиту
Там же на самом деле все просто. Запрашиваем первый бит. Если ответили 01, то он ноль, если 10 - то он 1. Едем дальше. Если коллизия (00), то значит что нашли еще один датчик. В текущий датчик пишем 1, в новый 0 (или наоборот, пофиг), доопределяем первый датчик.
Потом отрабатываем уже определенный префикс второго датчика и едем по накатанной. Если что, могу на примере рассказать.
Там же на самом деле все просто. Запрашиваем первый бит. Если ответили 01, то он ноль, если 10 - то он 1. Едем дальше. Если коллизия (00), то значит что нашли еще один датчик. В текущий датчик пишем 1, в новый 0 (или наоборот, пофиг), доопределяем первый датчик.
Потом отрабатываем уже определенный префикс второго датчика и едем по накатанной. Если что, могу на примере рассказать.
steel.ne
Научный сотрудник
Киев
541 75
Отв.206 28 Февр. 09, 22:32, через 8 мин
Сразу вдогонку пример
три датчика
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
Переходим ко второму. Идентифицируем первые три бита, не обращая внимания на ответы. После этого второй датчик доопределяется без коллизий. Аналогично и с третьим
три датчика
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
Отв.207 28 Февр. 09, 22:36, через 4 мин
АЦП А2 и А3 покрутил, работают. Пределы определяют как им и положенно от 0 до 1023.
Kotische
Академик
Саратов
8.1K 2.5K
Отв.208 28 Февр. 09, 22:46, через 11 мин
Да уж, намудрил ты со структурами. Смотри, что получилось после чистки.Rudy, 28 Февр. 09, 16:51Руди, на сколько я помню, структуры были сделаны для того чтобы "развязать" обмен параметрами с компьютером, от real-time алгоритма работающего с оптотиристором.
Вроде я не успел доделать алгоритм до конца... То что я бросил в форум - это то с чем я эксперементировал, попутно обучаясь программить микроконтроллер, как ты помнишь я за это благое дело взялся совсем не давно (уже несколько лет не держал в руках микроконтроллеров, причем последний раз это был советский 80с51), а первый блин обычно сам знаешь чем...
Rudy
Академик
Питер
5.8K 1K
Отв.209 28 Февр. 09, 22:49, через 4 мин
Да нет вроде разобрался. Вот только у тебя правильная операция есть _BV(), а я у себя такой не нашел. Прийдется ручками сделать.
Rudy
Академик
Питер
5.8K 1K
Отв.210 28 Февр. 09, 22:54, через 5 мин
Вроде я не успел доделать алгоритм до конца...Kotische, 28 Февр. 09, 22:46Да нет, все отлично работает я проверил. А структуры я специально разбомбил, чтобы за длинными текстами суть не пряталась. Без них все сразу четко видно.
Kotische
Академик
Саратов
8.1K 2.5K
Отв.211 28 Февр. 09, 23:06, через 12 мин
Руди, вот чем мне особенно нравится Брезенхем,
что когда тебе нужно изменить мощность ТЕНа, ты подаешь в контроллер команду "установить новое заполнение" при этом нужно перезапустить окно (начать переод с начала). Так вот брезинхем, выдвая в ТЕН среднюю мощность, при произвольной перестартовке окна, даст очень маленькую погрешность в реально отдаваемой в нагрузку мощности.
Любой другой ШИМ алгоритм, потребует синхронизации команды изменения мощности с началом окна, иначе будет очень большая погрешность - реально отдаваемая мощность будет очень сильно отличаться от задаваемой.
Ты кстати смотрел, я там мудрил с длительностью и фазой подаваемого на оптотиристор поджигающего импульса?
Если твоя схема детектора перехода напряжения через нуль отличается от моей, может потребоваться подбор констант загружаемых в таймер-счётчик.
что когда тебе нужно изменить мощность ТЕНа, ты подаешь в контроллер команду "установить новое заполнение" при этом нужно перезапустить окно (начать переод с начала). Так вот брезинхем, выдвая в ТЕН среднюю мощность, при произвольной перестартовке окна, даст очень маленькую погрешность в реально отдаваемой в нагрузку мощности.
Любой другой ШИМ алгоритм, потребует синхронизации команды изменения мощности с началом окна, иначе будет очень большая погрешность - реально отдаваемая мощность будет очень сильно отличаться от задаваемой.
Ты кстати смотрел, я там мудрил с длительностью и фазой подаваемого на оптотиристор поджигающего импульса?
Если твоя схема детектора перехода напряжения через нуль отличается от моей, может потребоваться подбор констант загружаемых в таймер-счётчик.
Rudy
Академик
Питер
5.8K 1K
Отв.212 28 Февр. 09, 23:51, через 46 мин
Если использовать ту схемку присинхронизации к сети, которую я рисовал, и использовать zero-crossing, то ничего синхронизировать не нужно. Эта схема даст прерывание в момент максимума (а не перехода через ноль) и небольшое запаздывание реакции (до, примерно, 5 мсек) не повлияет на результат. Т.е. по инту спокойно и не торопясь устанавливаешь значение для следующего полупериода. Оно автоматически сработает при переходе через ноль.
Для zero-crossing не нужен импульс. Ты просто ставишь напряжение в 0 или 1 до следующей смены значений. Реальное переключение симистора произойдет только при переходе через ноль.
Для zero-crossing не нужен импульс. Ты просто ставишь напряжение в 0 или 1 до следующей смены значений. Реальное переключение симистора произойдет только при переходе через ноль.
ion
Научный сотрудник
Odessa
391 35
Отв.213 01 Марта 09, 02:06
Оно автоматически сработает при переходе через ноль.+1
Rudy, 28 Февр. 09, 23:51
Если в момент перехода через "0" на входе МОС будет "1".
Rudy
Академик
Питер
5.8K 1K
Отв.214 01 Марта 09, 17:55
Стил, разреши мои сомнения. После считывания данных с одного термометра ОБЯЗАТЕЛЬНО нужно выдать Reset, перед тем, как связываться с другим. Просто выдать MATCH_ROM для связи с другой DS18 нельзя. Т.е. я могу опрашивать только одно устройство в секунду, не чаще. Это так?
И еще. Я запустил конверсию в одной детали. Потом, через Reset хожу к другой детали. Reset не должен влиять на конверсию в первой и, спустя некоторое время, я смогу считать температуру с первой. Это так?
И еще. Я запустил конверсию в одной детали. Потом, через Reset хожу к другой детали. Reset не должен влиять на конверсию в первой и, спустя некоторое время, я смогу считать температуру с первой. Это так?
steel.ne
Научный сотрудник
Киев
541 75
Отв.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
Отв.216 01 Марта 09, 21:35, через 33 мин
Ага, спасибо. Я задержки проверил по Далласу, практически совпали с твоими. А мысль со SKIP ROM - отличная. Так и сделаю.
Но откуда взялось раз в секунду? Reset pulse 450 микросекунд.450 - это только первая фаза, всего под 1000. Но это у меня заскок, спасибо, что дернул. Я, по невнимательности, микросекунды с миллисекундами попутал, так бы в них и считал.
Rudy
Академик
Питер
5.8K 1K
Отв.217 02 Марта 09, 18:41
Ну вот, добавил опрос DS18. При запуске должна показать сколько их найдено. Потом по 5 секунд показывать данные 4 АЦП (с номером кнопки в конце первой строки, как и раньше) и температуру с найденных DS18.
SerjNSK
Научный сотрудник
Новосибирск
2.5K 939
Отв.218 02 Марта 09, 19:27, через 46 мин
Датчик нашелся, температуру не кажет. Опрос Кнопок происходит только в момент перехода от дисплея с температурами к дисплею АЦП. Т.е. в этот момент нужно держать кнопку нажатой, иначе код ее не появится на дисплее. Артефакты еще какието, на фото видно.
Rudy
Академик
Питер
5.8K 1K
Отв.219 02 Марта 09, 19:35, через 9 мин
С кнопками все нормально, я их оставил только для контроля. А ты одну DS18 прицепил? Если есть еще, подоткни для проверки.
Такое ощущение, что считывает, но что-то не то, посмотрю.
И в конце строки странная кракозябра.
Такое ощущение, что считывает, но что-то не то, посмотрю.
И в конце строки странная кракозябра.