Форум программистов, компьютерный форум, киберфорум
Электроника и радиотехника
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/261: Рейтинг темы: голосов - 261, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 32
1

Часики v. 1.0 beta

12.12.2013, 20:02. Показов 47489. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые единомышленники.
Имея высшее гуманитарное образование, имею некоторый интерес к технике - программированию и электронике (нуб, короче ))
Выбор пал на контроллеры AVR.
Представляю на суд чести свои первые наработки, первый блин, так сказать.
Часики на ATMiko16, написанные на ассме.
В основном цикле крутится подпрограмма динамической индикации цифр и точки на 4-х разрядном 7-сегментном индикаторе.
Таймер2 асинхронно тактируется от кварцевого резонатора 32768 гц.
Раз в полсекунды выскакивает его прерывание, мигает точка, изменяются циферки.
При нажатии на одну из 4-х кнопок выскакивает внешнее прерывание INT0, +/- часы/минуты.
Никаких Delay (разве, что гасить дребезг кнопок понадобится маленькая).

http://imglink.ru/thumbnails/13-12-13/9b74930aef236a8ae837235e27299bda.jpg

Проект пока что на этапе проектирования, но на подходе реализация проекта в железе,
ВОТ ТУТ ПОЯВЛЯЮТСЯ ВОПРОСЫ:
Что делать с незадействованными и "висящими в воздухе" ошмётками от портов?
От чего бы запитать устройство? Поглядываю в сторону подзарядки от мобилы.
Да и вообще помогите довести до ума принципиальную схему устройства (risit всякие и др.)
Выкладываю исходники со схемой в Протеусе, жду советов и критики. [102.43 Кб]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2013, 20:02
Ответы с готовыми решениями:

Решить уравнение линейной алгебры вида : 2 X - ( A ) * ( alfa * X - beta * Y ) * B , где A ,B - матрицы , X , Y - вектора , alfa , beta - скаля
Решить уравнение линейной алгебры вида : 2X - ( A ) * ( alfa * X - beta * Y ) * B , где A...

В чем разница между Visual Studio .NET Beta 2 и .NET Framework SDK Beta 2?
в чем разница между Visual Studio .NET Beta 2 и .NET Framework SDK Beta 2 и еще... тут...

Часики
Напиал программу часы import java.util.*; import java.applet.*; import java.awt.*; /* <object...

Часики css
Здравствуйте. С анимацией в css некогда не работал, решил это подучить. Хочу сделать как бы часы,...

31
0 / 0 / 0
Регистрация: 09.12.2013
Сообщений: 32
23.05.2015, 22:22 21
Author24 — интернет-сервис помощи студентам
Вопрос по кнопкам:
В схеме для обработки четырёх кнопок на одном прерывании я использую диоды 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
В даташите сказано, что у этого диода максимальное прямое напряжение 1В... контроллер питается от 5В...
Походу не подходят диоды?
В Протеусе работают норм.

http://img.rodyokot.ru/files/88191/thumbnail/7694tzz5m.jpg
Ну, блин, для них этот 1V падения напряжения на переходе при 100mA в прямом включении :)
Если есть сомнения -шотки какие-нибудь воткните. Мультиметром в режиме проверки диодов подобрать из хлама можно 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
...
Нужна псевдопараллельность процессов. Грубое описание: операционная система Wymdows. Как все программы работают одновременно? Каждой программе выделяется какое-то время работы. Программа работает определенное ей время, по завершении этого времени диспетчер переключает задачу. Теперь работает другая программа. Это все происходит очень быстро. Для пользователя это выглядит как одновременное выполнение всех программ.

Как быть в вашем случае? Прежде всего это модульность программ. Опрос кнопок - отдельный модуль. Динамическая индикация светодиодного индикатора - отдельный модуль. То есть, каждый отдельный модуль - отдельная задача.

Теперь, как добиться псевдопараллельности процессов:
1 - Применить диспетчер, который будет переключать задачи. Но! Я против применения диспетчеров, потому что это может быть чревато в важных проектах.

2 - Есть другой способ. Уход от зацикливания, долгих циклов в задачах. Дробить задачи на подзадачи. Дробление задач можно реализовать условиями, флагами, применением конечных автоматов.
Что такое конечный автомат? Любая программа - это автомат. Конечный автомат, это автомат, число возможных состояний которого конечно. Работа автомата состоит в том, что он анализирует состояния своих входов, и, в зависимости от значений входов и своего внутреннего состояния, изменяет значения выходов и внутреннее состояние.

При таком подходе за одну итерацию основного каждая задача выполняет часть кода - подзадачи. Чем мы и добиваемся псевдопараллельности процессов.

Основной цикл теперь выглядит примерно так:
Код
//========================================================================
Main:
wdr
rcall   Service_Timers
rcall   Drv_Lcd
rcall   KBD_DRV
rcall   Proc_Game
rjmp   Main
//========================================================================
Также вам нужно знать про программные, или по другому, софтовые таймеры. Аппаратных таймеров у МК может быть несколько. Зависит от МК. 2,3 таймера. А нам, к примеру, нужно десять таймеров. Как быть? Реализаций тут тоже могут быть разные. К примеру такая реализация. Аппаратный таймер настраиваем на определенное время, скажем, 1 мс. В прерывании выставляем флаг. В основном цикле проверяем этот флаг. Очередь счетчиков. Структура счетчика - статус, счетчик. Если флаг сброшен, выход, если установлен перебор счетчиков. Если статус неактивный, следующий счетчик, если активный, декремент счетчика, следующий счетчик, пока не закончится очередь.
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2015, 00:28
Помогаю со студенческими работами здесь

Не переключаются часики!!!
Добрый день всем! Столкнулся с такой проблемой: Всем известно что с этого года мы больше не...

Часики на attiny2313
Здравствуйте, собрал часики http://licrym.org/index.php/Простые_часы Откомпилировал в CodeVision...

Часики с таймером
Здравствуйте уважаемые Программеры, Помогите пожалуйста реализовать следующую идею... Есть:...

Песочные часики
Вообщем, дело такое, у меня завтро зачет а я не могу уже второй день додуматься как написать...

Часики в ABC
Нарисуйте такие часы и чтобы механизм в них тоже работал)

Сделать часики
Читал справку но немного не понял Хотел сделать часики но выдает мне ошибку на DrawPicture(p, 0,...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru