0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 32
|
|
1 | |
Часики v. 1.0 beta12.12.2013, 20:02. Показов 47489. Ответов 31
Метки нет (Все метки)
Здравствуйте, уважаемые единомышленники.
Имея высшее гуманитарное образование, имею некоторый интерес к технике - программированию и электронике (нуб, короче )) Выбор пал на контроллеры AVR. Представляю на суд чести свои первые наработки, первый блин, так сказать. Часики на ATMiko16, написанные на ассме. В основном цикле крутится подпрограмма динамической индикации цифр и точки на 4-х разрядном 7-сегментном индикаторе. Таймер2 асинхронно тактируется от кварцевого резонатора 32768 гц. Раз в полсекунды выскакивает его прерывание, мигает точка, изменяются циферки. При нажатии на одну из 4-х кнопок выскакивает внешнее прерывание INT0, +/- часы/минуты. Никаких Delay (разве, что гасить дребезг кнопок понадобится маленькая). http://imglink.ru/thumbnails/13-12-13/9b74930aef236a8ae837235e27299bda.jpg Проект пока что на этапе проектирования, но на подходе реализация проекта в железе, ВОТ ТУТ ПОЯВЛЯЮТСЯ ВОПРОСЫ: Что делать с незадействованными и "висящими в воздухе" ошмётками от портов? От чего бы запитать устройство? Поглядываю в сторону подзарядки от мобилы. Да и вообще помогите довести до ума принципиальную схему устройства (risit всякие и др.) Выкладываю исходники со схемой в Протеусе, жду советов и критики. [102.43 Кб]
0
|
12.12.2013, 20:02 | |
Ответы с готовыми решениями:
31
Решить уравнение линейной алгебры вида : 2 X - ( A ) * ( alfa * X - beta * Y ) * B , где A ,B - матрицы , X , Y - вектора , alfa , beta - скаля В чем разница между Visual Studio .NET Beta 2 и .NET Framework SDK Beta 2? Часики Часики css |
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 32
|
|
23.05.2015, 22:22 | 21 |
Вопрос по кнопкам:
В схеме для обработки четырёх кнопок на одном прерывании я использую диоды 1N4148, чтобы с их помощью отделить кнопки друг от друга. Терзают сомнения относительно правильности выбора данного диода. В даташите сказано, что у этого диода максимальное прямое напряжение 1В... контроллер питается от 5В... Походу не подходят диоды? В Протеусе работают норм. http://img.rodyokot.ru/files/88191/thumbnail/7694tzz5m.jpg
0
|
0 / 0 / 0
Регистрация: 06.11.2012
Сообщений: 131
|
|
23.05.2015, 23:58 | 22 |
Сообщение от BtYur
Если есть сомнения -шотки какие-нибудь воткните. Мультиметром в режиме проверки диодов подобрать из хлама можно 500-600 обычные, 200-300 шотки.
0
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
|
|
24.05.2015, 12:37 | 23 |
Да нормально все с диодами.
И резисторы подтяжки спокойно внутренние можно использовать! Они для этого и предназначены. Резисторы в сегменты обязательно!!! Код не смотрел, против дребезга что-то сделано? Кстати, я делал подобные часы. http://we.iosyitistromyss.ru/omtomtubo/ ... a-avr.html
0
|
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 32
|
|
28.05.2015, 16:55 | 24 |
Ура!!! Ура!!! Ура!!!
Забилось сердце в недрах камня ATMiko8!!! Заработало в разработанном, собранном и запрограммированном впервые в жизни лично мной железе! Вам, технарям, не понять радость гуманитария от созерцания результата созидания пресловутых часиков. Но это была борьба. Борьба с пайкой платы, ассмо-быдлокодингом, ну и с самим собой, когда контроллер работал не так, как я хочу а так, как я ему написал. http://img.rodyokot.ru/files/88191/thumbnail/nvvqzladp.jpg http://img.rodyokot.ru/files/88191/thumbnail/nvvqtv86y.jpg http://img.rodyokot.ru/files/88191/thumbnail/nvvqvr2uh.jpg http://img.rodyokot.ru/files/88191/thumbnail/nvvqsht1k.jpg Пару слов о логике работы программы. Для каждого из четырёх сегментов предусмотрен регистр с нужным значением (R16-R19). В основном цикле эти значения из каждого регистра преобразовываются в соответствующие значения для портов вывода, от есть для каждого сегмента по очереди рассчитывается и выводится циферка, в зависимости от значений R16-R19. А в прерываниях по TCNT2 и INT0 изменяются значения R16-R19. Нужно решить теперь три момента: 1) Устранить дребезг контактов, хотя удаётся-таки поймать момент вручную. Пробовал задержку, вроде работает, но в момент нажатия все сегменты гаснут. 2) Разобраться со спящим режимом. Пробовал Power Save, но гаснут все сегменты, и камень не просыпается от прерываний. 3) Смоделировать для 3D-печати корпус что-ли? Или так оставить?.. Ну, и конечно же бекап для потомков: [11.54 Кб]
0
|
0 / 0 / 0
Регистрация: 30.06.2012
Сообщений: 177
|
|
28.05.2015, 19:15 | 25 |
Я думаю что сегменты гаснут по причине того, что обработка событий от кнопок происходит в обработчике INT0, да и вообще потому что кнопки подключены ко входу внешнего прерывания. Кнопки лучше опрашивать в главном цикле. Просмотрел бегло код
0
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
|
|
28.05.2015, 23:15 | 26 |
Пишите на C, это гораздо проще.
Резисторы подтяжки внутренние можно! использовать с кнопками. А вот блокировочными конденсаторами пренебрегать не стоит. По питанию контроллера, по входу и по выходу стабилизатора как минимум.
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
|
|
29.05.2015, 11:28 | 27 |
Сообщение от BtYur
Как быть в вашем случае? Прежде всего это модульность программ. Опрос кнопок - отдельный модуль. Динамическая индикация светодиодного индикатора - отдельный модуль. То есть, каждый отдельный модуль - отдельная задача. Теперь, как добиться псевдопараллельности процессов: 1 - Применить диспетчер, который будет переключать задачи. Но! Я против применения диспетчеров, потому что это может быть чревато в важных проектах. 2 - Есть другой способ. Уход от зацикливания, долгих циклов в задачах. Дробить задачи на подзадачи. Дробление задач можно реализовать условиями, флагами, применением конечных автоматов. Что такое конечный автомат? Любая программа - это автомат. Конечный автомат, это автомат, число возможных состояний которого конечно. Работа автомата состоит в том, что он анализирует состояния своих входов, и, в зависимости от значений входов и своего внутреннего состояния, изменяет значения выходов и внутреннее состояние. При таком подходе за одну итерацию основного каждая задача выполняет часть кода - подзадачи. Чем мы и добиваемся псевдопараллельности процессов. Основной цикл теперь выглядит примерно так: Код
//======================================================================== Main: wdr rcall Service_Timers rcall Drv_Lcd rcall KBD_DRV rcall Proc_Game rjmp Main //========================================================================
0
|
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 32
|
|
16.06.2015, 14:52 | 28 |
Блин, спешат, как на пожар...
Интересно это софтверная или хардверная проблема? Может ли таиться дьявол в отсутствии сглаживающих блокировочных конденсаторов по питанию? (по ним вопрос ниже) И батарейку сильно жрут... Надобно разобраться с режимом энергосбережения. Или запитать от сети. Кругом пишут, из прерываний нужно выходить, как можно быстрее, стараться не делать там расчётов, а лишь устанавливать флаги, а все расчёты производить в основном цикле... бла-бла-бла... Но вот моя ситуация с часиками: Все основные расчёты производятся как раз в прерываниях, в основном цикле крутится лишь только динамическая индикация. Почему я так сделал? Ну нахрена мне в основном цикле каждый раз производить расчёт, проверять флаги? Ведь я же знаю, что пока не переполнится таймер (раз в полсекунды) или пока не выскочит внешнее прерывание от кнопки (ещё реже) результаты расчётов остаются неизменными, и нет никакого смысла производить их на каждом витке основного цикла. Даже если свести всё просто к проверке флагов. Ну зачем каждый раз проверять "а не случилось ли?", ведь для этого же есть прерывания, которые без лишних отнимающих ресурсы команд однозначно скажут: "Случилось!"
Сообщение от omtomtubo
А по поводу конденсаторов по питанию: если пошарить по интернетам, то видно, что керамический кондёр ставят на 100 нФ, а вот с электролитическим сложнее - некоторые ставят электролит на 47мкФ, на других сайтах советуют ставить 100-1000 мкФ. Где правда, Брат? (В чём сила, Брат?(С) Почему выбраны кондёры именно этих номиналов? Это значит, что заранее известна паразитная частота (кстати, а сколько она в Герцах?), откуда она в моём случае возникает? Ведь у меня в схеме нет элементов, типа электродвигателей итд. Неужели внешняя наводка? Так она может быть какой угодно, а кондёры ставят с конкретными номиналами. Или может сам камень в ходе работы создаёт паразитные частоты? Есть такие, кто не за#бался слушать мои вопросы? :)
Сообщение от dymyurk1978
0
|
0 / 0 / 0
Регистрация: 28.12.2008
Сообщений: 5
|
|
17.06.2015, 20:26 | 29 |
батарейку жрут, это нормально.
Да, запитаться лучше от сети и вставить конденсаторы по питанию, 100 нФ керамику поближе к ногам контроллера, и параллельно электролит, 10 мкФ или 47 мкФ или 100 мкФ или 1000 мкФ особого значения в вашем случае не сыграют. Номиналы, если говорить в очень и очень общих чертах, 100 нФ конденсатор от высокочастотных помех, электролит от низкочастотных. Т.к. питались от батарейки, в спешке хода часов, отсутствие сглаживающих конденсаторов, не виновато, вероятнее всего дело в программе. Известная паразитная частота в Герцах = 50 это то, что в розетке, остальное по обстоятельствам, к примеру, частота импульсного блока питания, если он есть, - десятки килогерц, или наводки по сети от ваших соседей - непредсказуемое количество Герц.
0
|
0 / 0 / 0
Регистрация: 10.04.2014
Сообщений: 879
|
|
17.06.2015, 21:58 | 30 |
В прерывании выставите флаг, что оно сработало и быстро-быстро выходите. В основной программе флаг анализируйте и если он выставлен выполняйте рассчет. По окончании рассчета флаг сбрасываете.
Как то так
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
|
|
17.06.2015, 22:07 | 31 |
Сообщение от Sthuthu
0
|
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|
18.06.2015, 00:28 | 32 |
To BtYur
Немножко по коду: Вот так были сделаны сами часы http://rodyokot.ru/forum/viewtopys.php? ... 5&stort=60 Так перевод десятичных цифр в семисегментный код Код
;|Вычисляем код для вывода на дисплей соответсвующий коду цифры в BCD MET2: ldwi Z,Seven_DISP*2 ld temp,X+ add ZL,temp adc ZH,zero lpm temp,Z st Y+,temp dec count brne MET2 Seven_DISP: .db 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07 .db 0xFF,0x6F
0
|
18.06.2015, 00:28 | |
18.06.2015, 00:28 | |
Помогаю со студенческими работами здесь
32
Не переключаются часики!!! Часики на attiny2313 Часики с таймером Песочные часики Часики в ABC Сделать часики Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |