Digital писал(а):
Отдохните, до тех пор, пока снова не появится желание продолжать проект. И так круто стартанули для начала ИМХО.
Да уж, надо, недавно вот ЖКИ подпалил, + и - не соблюл
210 руб. однако
А желание продолжать есть, идет изучение и освоение СИ и регистров МК, другого пути не вижу, а разбирая на косточки проект лучше всего воспринимается
Вот почти работающий в железе вариант программы. На 10 минутах ошибка меньше 1 мс. Всё бы хорошо, но обозначился глюк. Если пытаться запустить секундомер с временем выдержки, равном нулю, то прогоамма зависает, или делает что-то не то...
Отличия от предыдушего варианта:
1. Добавлен опрос кнопок с защитой от дребезга и автоповтором, если кнопку удерживать нажатой.
2. Добавлена индикация (Ваш вариант, как Вы написали) Тока исправил слово "Taimer" на "Timer".
3. Последнее значение выдержки (то, что установили кнопками), после нажатия кнопки "старт" запоминается в энергонезависимой памяти.
4. Ну и так, по мелочам.
как и обещал выставляю фото на обозрение
Немного че добавил, в плане информативности на ЖКИ (информация о последней нажатой кнопке).
Если есть еще варианты девайса, программно или еще как, я думаю стоит выложить, многим будет интересно.
Да можно и десять, все зависит от электромагнита, пока испытания прошли на одном, дальше немного облагорожу исполнительное устройство.
Тактирование осуществляется у меня от внешнего кварца, сегодня измерял период примерно 1,999712 мкс, пока не устраивает буду калибровать на днях, если будут проблемы попробую от генератора с "претензиями", наверно Г4-158.
Я немного внес своё в прогу представляю прикрепленный файл.
Попробовал в протеусе вариант, предложенный в файле secmeter+. Работает, но есть проблема с зависанием программы при показаниях на дисплее 00:00:00 (и не только сразу если такие цифры, но и после окончания выдержки времени). Это видимо то о чём Барсик упоминал выше. Если закомментировать все строки работы с EEPROM, то проблема уходит, хотя в самом начале, при нулях, если на "Пуск" нажать, остаётся. Скорее всего дело здесь в особенностях симуляции протеуса, если в железе нормально.
Юрий Климчук писал(а):...в плане информативности на ЖКИ (информация о последней нажатой кнопке).
ИМХО конечно, но, если о последней, то "Last key: START", к примеру однозначнее понимается. Надпись же "Press key START" так и приглашает, по смыслу, нажать на эту кнопку (и не раз) . А "Pressed key: ..." уже не вместится.
Digital писал(а):Попробовал в протеусе вариант, предложенный в файле secmeter+. Работает, но есть проблема с зависанием программы при показаниях на дисплее 00:00:00 (и не только сразу если такие цифры, но и после окончания выдержки времени). Это видимо то о чём Барсик упоминал выше. Если закомментировать все строки работы с EEPROM, то проблема уходит, хотя в самом начале, при нулях, если на "Пуск" нажать, остаётся. Скорее всего дело здесь в особенностях симуляции протеуса, если в железе нормально.
Зависание в железе происходит только тогда когда при 00:00:00 нажимаеш на пуск, хотя логически оно и не нужно так делать поэтому можно оставить
Digital писал(а):...Скорее всего дело здесь в особенностях симуляции протеуса, если в железе нормально.
Как раз в железе и зависает. Я с Протеусом вообще не умею работать. Я так и не разобрался в чём дело.
Нельзя ли глянуть в том же Протеусе, в каком месте вылетает программа и куда заруливает ?
Барсик писал(а): Нельзя ли глянуть в том же Протеусе, в каком месте вылетает программа и куда заруливает ?
В каком смысле заглянуть и зарулить? Протеус по сути эквивалент собранной схемы, как глючит она в Протеусе при 00:00:00 если нажать на ПУСК, так же и в железе (А смысл нажимать на пуск при нулях?). Но в остальном ничего замечено не было, все одинаково как в Протеусе так и в железе
Барсик писал(а): Я с Протеусом вообще не умею работать.
А чего там работать в протеусе собрал схему, указал для МК папку с HEX файлом, и если все правильно наблюдаеш, нажимаеш на кнопочки, читаеш информацию с виртуального ЖКИ и т.п.
Подводил кварц до нормы емкости поставил 120 и 150 пф работает МК!, хотя по моему мах 33 пф.
получилось 1999935 мкс, завтра проведу испытания с Г4-158
После запуска симуляции, если нажать паузу и, в меню Debug, отметить пункт "7.AVR Source Code - CPU", то откроется окно с исходником программы и можно будет "шагать" по нему и смотреть в каком же порядке отрабатывается программа и на ЖКИ смотреть заодно можно будет изменения (типа как на рисунке в аттаче). Если окно "AVR Source Code - CPU" будет пустым, то вверху есть выпадающий список, в нём выбрать файл с расширением .С. Вообще обычно достаточно было указать в меню "Source"-"Add/Remove Source Code files" файл-исходник и окно "AVR Source Code - CPU" не очищалось после start/pause, но поставил на пробу win7rc1, а под ней уже как-то не так работает.
Следить за изменением переменных можно будет, если активировать пункт 8 меню Debug - "8.AVR Variables -CPU. По правой кнопке мыши можно выбрать формат отображения этих переменных (по отдельности или сразу все интересующие выбрать).
Так, для отладки, лучше расставить "бряки" в нужных местах и запустить программу. Как дойдёт до установленной точки/точек останова, то выполнение прервётся, откроется окно с кодом и можно будет дальше "шагать".
---
Наверное для отладки лучше (но не обязательно конечно) кнопки отключить (упростить программу), т.к. с ними заморочней отлаживать.
Да век живи, век учись, даже и не подозревал, что в протеусе можно отлаживать прогу. Спасибо за ценный совет.
А по поводу обвязки, сделал ровно как в даташите стр 25. между 9 и 10 кварц и каждая нога через емкость на землю, ну а ёмкости как и писал 120 и 150 пф. Отлаживал с частотомером Ч3-54 с емкостями 22 пф, наблюдал длительность и период сигнала и старался подвести его ровненько к секунде ну и дошел до такой величины емкости, но это край чуть больше МК начинает глючить. Но мне чего то так уже не нравится, я притащил домой Г4-158 буду пробывать его вместо кварца, правда почемуто при перепрограмировании фузов на внешний сиграл (CKSEL3..0 0000) МК приказала долго жить. (МК вставлена в програматор). Правда последнее я один раз случайно нажал стереть, может из за этого (код 24)?
Юрий Климчук писал(а):...правда почемуто при перепрограмировании фузов на внешний сиграл (CKSEL3..0 0000) МК приказала долго жить. (МК вставлена в програматор)...
Дык и подайте тот самый внешний сигнал от генератора на микроконтроллер. Прямо в программатор... Я же Вас предупреждал: http://radiokot.ru/forum/viewtopic.php?p=211446#211446
"Как только Вы запрограммируете работу микроконтроллера от внешнего тактового генератора, то без этого самого генератора уже нельзя будет его программировать обычным программатором." Вот и суньте сигнал с внешнего генератора на вход XTAL1 (разумеется с резисторами смещения и конденсатором, как я нарисовал), и программируйте его наздоровье...
Вот, в аттаче, посмотрите - статья "О подборе кварцевых резонаторов". Там как раз есть советы для применения в точных системах, причины ухода частоты и способ подключения подстроечного элемента в реальной схеме.
Товарищ Барсик, что бы я без Вас делал, Вы как всегда правы, вообщем сделал как сказали, подкинул генератор Г4-158 на 9 ногу в соответствии с выше указанной обвязкой и все пошло, хорошо, что еще мегу не выбросил.
Вот сегодня уже испытывал, и даже экспериментировал с частотой, МК стабильно работает до 28 МГц, 29 все предел, видно как быстро секунды побежали ну это и понятно. Кстати регулировка осущестлялось довольно бысто и МК не вис.
Теперь мне осталось все это дело "поверить", методика наверно одна измерить период сигнала OC1A (нога номер 15), с погрешностью вот такой +/-(20*10-^6*Т+1*10-^2), где Т измеряемый интервал времени в секунду (взято из ГОСТ 8.423-81), т.е допустимая погрешность 1 сек = 0,01002 сек., а например за 60 мин = 0,082 сек., а за сутки = 1,738 секунды, т.е это мах допустимая погрешность эталонного прибора (СТЩ-1), но желательно погрешность иметь <=1 сек. в сутки.
Ну это я информацию даю для тех кому интересно самому поверить секундомер, правда без аккредитации ваша поверка будет не действительна.
Я по частотомеру (частотомерчег ещё тот - РЧ3-07-002) сначала устанавливал частоту внешнего генератора Г4-158, измеряя период на ноге 15. Потом измерял период тем же частотомерчегом непосредственно на выходе, куда подключён "соленоид". Получилась погрешность за 10 минут меньше миллисекунды, а за полтора часа - где-то миллисекунды две.