Страница 1 из 2

Часеги v.1.0 beta

Добавлено: Чт ноя 28, 2013 23:40:40
BlYur
Приветствую всех.
Думаю, пора делиться с миром мыслями.
Делаю свой первый блин.
Часики на ATMega16 (в перспективе на ATMega8).

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

Сразу вопрос:
Почему у меня в Протеусе 7.8 SP2 камень не реагирует на внешнее прерывание?
В AVR studio 4, если ткнуть нужный бит, прерывание срабатывает.
WTF?
Критика принимается.

Изображение

Ну и исходники со схемой в Протеусе
Часеги v. 1.0 beta.rar
(26.44 КБ) 201 скачивание

Re: Часеги v.1.0 beta

Добавлено: Чт ноя 28, 2013 23:53:21
blackx
Потому что Протеус писали индусы за еду.

Критика:
1) повесьте по резистору на каждый сегмент и каждый общий вывод индикатора. В железе ваше устройство работать не будет, или сгорят порты или сегменты.
2) через общие выводы будет течь большой ток если захотите сделать сегменты поярче. На каждый лучше поставить по транзистору для управления.
3) на кварц не повесили конденсаторы, как это рекомендуется в даташите. ладно, часовой кварц - ок
4) reset висит в воздухе и хватает все помехи с него. В железе ваше устройство будет самопроизвольно перезагружаться.
5) так и не понял зачем там диоды в схеме кнопок. Что за извращения? :))) Лучше бы по конденсатору добавили.
6) AVCC нужно подключать к +питания. На каждый вход питания хорошо бы повесить по конденсатору на 100 нанофарад. И на AREF в том числе. Ну это так, уже придирки.

Советую вам для начала ознакомиться с уже созданными проектами, коих тут и на других сайтах уже полным полно набралось. Одни только проекты любителей часов на ГРИ чего стоят.

Re: Часеги v.1.0 beta

Добавлено: Пт ноя 29, 2013 00:11:11
BlYur
blackx писал(а):Потому что Протеус писали индусы за еду.

Критика:
1) Естественно в реалии на каждом сегменте по резистору 270Ом.
2) Читал, что такой 7-сегментник тянет и без транзисторов.
3) Читал, что для кварца такой частоты кондёры не нужны.
4) Reset естественно будет подтянут через резюк 10К к плюсу.
5) Диоды отделят кнопки друг от друга, так как они подключены не только к порту, но и на внешнее прерывание INT0.

С уже созданными проектами знакомился :)

Re: Часеги v.1.0 beta

Добавлено: Пт ноя 29, 2013 00:19:26
blackx
ЗЫ Код на строках 224-277 неимоверно доставил :)))
ЗЫ2. Не нарушайте 2.7, а то aen придет и будет ругаться.

Re: Часеги v.1.0 beta

Добавлено: Пт ноя 29, 2013 08:07:32
zero648
BlYur писал(а):Почему у меня в Протеусе 7.8 SP2 камень не реагирует на внешнее прерывание?
Прерывание настроено както не правильно, срабатывать то срабатывает, но на входе в прерывание PIND всегда равно 0xff.

p.s. А, ну правильно, у тебя прерывания настроены по нарастающему фронту, а нужно сделать по спадающему.

p.s.2 Еще и проверка кнопок с точностью до наоборот, на входе получаю например 0b10111011, а соответственно проверка для этой кнопки 0b01000100, так конечно, никогда на нажатие не среагирует.

Re: Часеги v.1.0 beta

Добавлено: Пт ноя 29, 2013 08:29:33
akl
BlYur Для начала, неплохо. Но
-обработчик кнопок настроен по фронту, т.е. будет срабатывать при отпускании кнопки
Спойлер

Код: Выделить всё

	LDI temp, 0b00000010
   out MCUCR, temp	; Прерывание INT0 генерится по спаду
   
;   ldi temp, 0b00000011
;   out MCUCR, temp	; Прерывание INT0 генерится по нарастающему фронту
-условие определения нажатой кнопки неправильное
Спойлер

Код: Выделить всё

	SBIS	PIND,4
	RJMP	MinMinus

	SBIS	PIND,5
	RJMP	MinPlus

	SBIS	PIND,6
	RJMP	HourMinus

	SBIC	PIND,7
	RJMP	Err

		
;	in temp, PinD	; Получаем уровни на порте D
	
;	cpi temp, 0b10000100	; если нажата кнопка Hour+
;	breq HourPlus			; переход на увеличение часа
;	cpi temp, 0b01000100	; если нажата кнопка Hour-
;	breq HourMinus			; переход на уменьшение часа
;	cpi temp, 0b00100100	; если нажата кнопка Min+
;	breq MinPlus			; переход на увеличение минуты
;	cpi temp, 0b00010100	; если нажата кнопка Min-
;	breq MinMinus			; переход на уменьшение минуты
;	rjmp Err				; иначе переход к обработчику ошибки

	HourPlus:
-обработчики прерываний неимоверно длинные
-дисплей мотается очень быстро при частоте клока 1МГц полный период составляет 140мкс и несинхронен с клоками Т2. В реале это приведет к мырганиям индикации.

Re: Часеги v.1.0 beta

Добавлено: Пт ноя 29, 2013 10:09:32
zero648
Да можно просто сделать небольшую вставочку, не нарушая общего стиля, так сказать:

Код: Выделить всё

...
; Вычисляем, какая именно кнопка нажата
	
	in temp, PinD	; Получаем уровни на порте D

    ser r23
    eor temp,r23   ; Преобразуем в нужный формат, т.с.
	
	cpi temp, 0b10000100	; если нажата кнопка Hour+
	breq HourPlus			; переход на увеличение часа
	cpi temp, 0b01000100	; если нажата кнопка Hour-
	breq HourMinus			; переход на уменьшение часа
	cpi temp, 0b00100100	; если нажата кнопка Min+
	breq MinPlus			; переход на увеличение минуты
	cpi temp, 0b00010100	; если нажата кнопка Min-
	breq MinMinus			; переход на уменьшение минуты
	rjmp Err	
...			; иначе переход к обработчику ошибки
или просто, без вставки, меняем в проверке все ноли на единицы, а единицы на ноли.

Re: Часеги v.1.0 beta

Добавлено: Пт ноя 29, 2013 10:37:38
Dr. Alex
blackx писал(а):5) так и не понял зачем там диоды в схеме кнопок. Что за извращения? :))) Лучше бы по конденсатору добавили.
Диоды стоят чтоб на одном INT0 прерывании четыре кнопки опросить!

Re: Часеги v.1.0 beta

Добавлено: Пт ноя 29, 2013 10:40:09
Dr. Alex
BlYur писал(а):Сразу вопрос:
Почему у меня в Протеусе 7.8 SP2 камень не реагирует на внешнее прерывание?
Видать где-то в коде накосячили с битами)))) У меня нормально Шпротеус реагирует на внешние прерывания!!!

Re: Часеги v.1.0 beta

Добавлено: Вс дек 01, 2013 13:16:44
BlYur
Аааа, так вот, где вкралась ошибка!
Я внял всем советам, подправил код, теперь всё работает!
Выкладываю обновлённые исходники для бекапа
Clock v. 1.0 beta.rar
(44.08 КБ) 195 скачиваний
Большое спасибо советчикам :) P.S. - знаете, почему на Красной площади нельзя выкладывать исходники? ))

Попробую теперь всё это реализовать для начала на макетной плате.

2akl
SBIS PIND,4
RJMP MinMinus
; cpi temp, 0b11101011 ; если нажата кнопка Min-
; breq MinMinus ; переход на уменьшение минуты
Результат работы одинаков. Так?
Разве выигрываем в количестве циклов?
Или это мне в копилку альтернативный вариант реализации?
-обработчики прерываний неимоверно длинные
разве можно в моём случае укоротить?
-дисплей мотается очень быстро при частоте клока 1МГц полный период составляет 140мкс и несинхронен с клоками Т2. В реале это приведет к мырганиям индикации.
Обязательно проверю Вашу версию внатуре :)

Re: Часеги v.1.0 beta

Добавлено: Вс дек 01, 2013 16:59:34
akl
BlYur писал(а):Результат работы одинаков. Так?
Попробуйте, для примера, мысленно нажать две кнопки "Hour+" и "Min+". Вся Ваша конструкция развалится. Кнопки нажаты, а результата нет.
Посмотрел обновленный код. Извините, но это по прежнему "Часеги". До часов этому коду ещё очень далеко. :)

Re: Часеги v.1.0 beta

Добавлено: Пт дек 13, 2013 18:53:06
BlYur
Что делать с незадействованными и "висящими в воздухе" ошмётками от портов?
От чего бы запитать устройство? Поглядываю в сторону подзарядки от мобилы.
Да и вообще помогите довести до ума принципиальную схему устройства (reset всякие и др.)
7seg.jpg
(84.97 КБ) 481 скачивание

Re: Часеги v.1.0 beta

Добавлено: Пт дек 13, 2013 20:26:54
O-LED
Хочу предложить следующее.
Выкидываем диоды и резисторы R2-R5, и освобождаем порты D4-D7 от кнопок. Кнопки одним концом соединяем вместе и вешаем на порт D2 (в принципе можно на любой другой порт, но раз ты выбрал его....). Вторыми концами кнопки сажаем на выводы управляющие разрядами(у тебя как раз 4 кнопки и 4 разряда).
Дальше всё программно. Как зафиксировал нажатие кнопки - смотришь какой разряд у тебя сейчас активен. Та кнопка которая соединена с этим разрядом - нажата.
А неиспользованные выводы главное не настроить на вход без подтяжки. На время отладки лучше сделай их входом с подтяжкой, и если нечаянно коротнеш их с чем нибудь - ничего не по палишь.

:) Паять нужно только то, что нельзя запрограммировать...

Re: Часеги v.1.0 beta

Добавлено: Сб дек 14, 2013 01:15:46
BlYur
O-LED писал(а):Хочу предложить следующее...
:) Паять нужно только то, что нельзя запрограммировать...
Хм...
Размытая формулировочка...
Дайте схемотехнический пример.

Re: Часеги v.1.0 beta

Добавлено: Сб дек 14, 2013 01:32:06
O-LED
Я же всё расписал.

Re: Часеги v.1.0 beta

Добавлено: Сб дек 14, 2013 04:58:12
akl
:shock: O-LED Так делать низзя. :) Почему-то считается, что пользователь не может нажать две и более кнопок одновременно. А вот когда пользователь нажимает две кнопки два выхода с заведомо разными уровнями соединяются. Я бы вообще сделал так.
СпойлерИзображение
Все равно опрос кнопок делается раз в полсекунды
часеги.GIF
09:20 Стартер решил уйти на другой форум, т.е. всё не актуально.

Re: Часеги v.1.0 beta

Добавлено: Сб дек 14, 2013 13:23:19
O-LED
akl писал(а)::shock: O-LED Так делать низзя. :)
Нельзя торопиться с выводами, коллега :) Неактивные разряды переводите в Z состояние(вход без подтяжки) и жмите хоть все кнопки сразу.

Re: Часеги v.1.0 beta

Добавлено: Сб дек 14, 2013 16:05:35
akl
O-LED писал(а):А неиспользованные выводы главное не настроить на вход без подтяжки. :) Паять нужно только то, что нельзя запрограммировать...
Коллега. А какой ещё вывод можно сделать из первой фразы. :) Хотя я подозревал что это "очепатка". Вторая фраза мне очень даже понравилась, поэтому и предложил убрать всю обвязку с кнопок.

Re: Часеги v.1.0 beta

Добавлено: Сб дек 14, 2013 16:22:05
O-LED
akl
"Главное не настроить на вход без подтяжки" - это в ответ на вопрос BlYur что делать с неиспользуемыми выводами.
Вторая фраза мне очень даже понравилась, поэтому и предложил убрать всю обвязку с кнопок.
А я предложил пойти еще дальше - оставив только кнопки и один вывод МК.

Re: Часеги v.1.0 beta

Добавлено: Сб дек 14, 2013 19:35:39
BlYur
Господа, а как сконфигурировать неиспользуемый порт С?
Там на 6 и 7 выводах кварц сидит...