Часеги v.1.0 beta

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Пн май 27, 2013 17:02:32

Сообщение 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 скачивание
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

Потому что Протеус писали индусы за еду.

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

Советую вам для начала ознакомиться с уже созданными проектами, коих тут и на других сайтах уже полным полно набралось. Одни только проекты любителей часов на ГРИ чего стоят.
Изображение only pure true norwegian blackx Изображение
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Пн май 27, 2013 17:02:32

Сообщение BlYur »

blackx писал(а):Потому что Протеус писали индусы за еду.

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

С уже созданными проектами знакомился :)
Последний раз редактировалось BlYur Пт ноя 29, 2013 00:21:47, всего редактировалось 1 раз.
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

ЗЫ Код на строках 224-277 неимоверно доставил :)))
ЗЫ2. Не нарушайте 2.7, а то aen придет и будет ругаться.
Изображение only pure true norwegian blackx Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

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

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

p.s.2 Еще и проверка кнопок с точностью до наоборот, на входе получаю например 0b10111011, а соответственно проверка для этой кнопки 0b01000100, так конечно, никогда на нажатие не среагирует.
Реклама
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение 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. В реале это приведет к мырганиям индикации.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение 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	
...			; иначе переход к обработчику ошибки
или просто, без вставки, меняем в проверке все ноли на единицы, а единицы на ноли.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

blackx писал(а):5) так и не понял зачем там диоды в схеме кнопок. Что за извращения? :))) Лучше бы по конденсатору добавили.
Диоды стоят чтоб на одном INT0 прерывании четыре кнопки опросить!
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков

Сообщение Dr. Alex »

BlYur писал(а):Сразу вопрос:
Почему у меня в Протеусе 7.8 SP2 камень не реагирует на внешнее прерывание?
Видать где-то в коде накосячили с битами)))) У меня нормально Шпротеус реагирует на внешние прерывания!!!
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Пн май 27, 2013 17:02:32

Сообщение BlYur »

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

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

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

Сообщение akl »

BlYur писал(а):Результат работы одинаков. Так?
Попробуйте, для примера, мысленно нажать две кнопки "Hour+" и "Min+". Вся Ваша конструкция развалится. Кнопки нажаты, а результата нет.
Посмотрел обновленный код. Извините, но это по прежнему "Часеги". До часов этому коду ещё очень далеко. :)
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Пн май 27, 2013 17:02:32

Сообщение BlYur »

Что делать с незадействованными и "висящими в воздухе" ошмётками от портов?
От чего бы запитать устройство? Поглядываю в сторону подзарядки от мобилы.
Да и вообще помогите довести до ума принципиальную схему устройства (reset всякие и др.)
7seg.jpg
(84.97 КБ) 481 скачивание
Мудрый кот
Аватара пользователя
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57

Сообщение O-LED »

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

:) Паять нужно только то, что нельзя запрограммировать...
KIT
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Пн май 27, 2013 17:02:32

Сообщение BlYur »

O-LED писал(а):Хочу предложить следующее...
:) Паять нужно только то, что нельзя запрограммировать...
Хм...
Размытая формулировочка...
Дайте схемотехнический пример.
Мудрый кот
Аватара пользователя
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57

Сообщение O-LED »

Я же всё расписал.
Вложения
IMG_6923.JPG
(48.11 КБ) 582 скачивания
KIT
Контактная информация:
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

:shock: O-LED Так делать низзя. :) Почему-то считается, что пользователь не может нажать две и более кнопок одновременно. А вот когда пользователь нажимает две кнопки два выхода с заведомо разными уровнями соединяются. Я бы вообще сделал так.
СпойлерИзображение
Все равно опрос кнопок делается раз в полсекунды
часеги.GIF
09:20 Стартер решил уйти на другой форум, т.е. всё не актуально.
Мудрый кот
Аватара пользователя
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57

Сообщение O-LED »

akl писал(а)::shock: O-LED Так делать низзя. :)
Нельзя торопиться с выводами, коллега :) Неактивные разряды переводите в Z состояние(вход без подтяжки) и жмите хоть все кнопки сразу.
KIT
Контактная информация:
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

O-LED писал(а):А неиспользованные выводы главное не настроить на вход без подтяжки. :) Паять нужно только то, что нельзя запрограммировать...
Коллега. А какой ещё вывод можно сделать из первой фразы. :) Хотя я подозревал что это "очепатка". Вторая фраза мне очень даже понравилась, поэтому и предложил убрать всю обвязку с кнопок.
Мудрый кот
Аватара пользователя
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57

Сообщение O-LED »

akl
"Главное не настроить на вход без подтяжки" - это в ответ на вопрос BlYur что делать с неиспользуемыми выводами.
Вторая фраза мне очень даже понравилась, поэтому и предложил убрать всю обвязку с кнопок.
А я предложил пойти еще дальше - оставив только кнопки и один вывод МК.
KIT
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Пн май 27, 2013 17:02:32

Сообщение BlYur »

Господа, а как сконфигурировать неиспользуемый порт С?
Там на 6 и 7 выводах кварц сидит...
Ответить

Вернуться в «AVR»