Последвтельный таймер
|
|
VasylYE | Дата: Четверг, 26.06.2008, 17:43 | Сообщение # 16 |
Рядовой
Группа: Проверенные
Сообщений: 263
Статус: Offline
| установить VMlab в каталог по умолчанию (на диск С), после установки появится каталог c:\VMLAB\work , в него нужно разархивовать проект. Тогда запустить VMlab, меню - Project -> Open project, найти файл c:\VMLAB\work\timer\timer.prj также файлы можно просмотреть например в тотал командере (F3)
А нам своє робить!
|
|
| |
barbus | Дата: Четверг, 26.06.2008, 22:09 | Сообщение # 17 |
Лейтенант
Группа: Пользователи
Сообщений: 53
Статус: Offline
| Изучаю AVR Если не трудно давай вместе шаг за шагом будем просматривать програмку таймера.
|
|
| |
VasylYE | Дата: Пятница, 27.06.2008, 12:45 | Сообщение # 18 |
Рядовой
Группа: Проверенные
Сообщений: 263
Статус: Offline
| Будем рассматривать функционал для одного из таймеров, для других двох он организован так же. В начале программы определяются имена для используемых регистров, идет инициализация стека, портов. Code ; ****************************************************** ; BASIC .ASM template file for AVR ; ******************************************************
.include "C:\VMLAB\include\m16def.inc"
; Определяем наименования регистров ; .def temp =r16 ;временный регистр .def index =r17 ;регистр индекса (для разных отсчетов) .def whole =r18 ;целые секунды .def fract =r19 ;десятые секунды .def temp1 =r20 ;второй временный регистр .def data =r21 ;регистр обмена данными между подпрограммами .def flag =r22 ;регистр флагов
.equ up =0x03
; Определяем константы
; Вектор прерываний - после подачи питания или после сброса МК программа стартует с нулевого адреса ; .ORG 0x000 reset: rjmp start
.ORG OVF1addr ; - сюда попадает программа при переполнении таймера 1 .ORG OVF0addr ; - сюда попадает программа при переполнении таймера 0 jmp Disp_drive ; - переход к обработчику прерывания по переполнению таймера 0
.ORG 0x02A ; Программа стартует отсюда после сброса или подачи напряжения питания ; start: ;Инициализация указателя стека ldi temp, HIGH(RAMEND) out SPH, temp ldi temp, LOW(RAMEND) out SPL, temp ;Инициализация портов ;Порт А (индикация) ldi temp, 0x00 out PORTA, temp ldi temp, 0xFF out DDRA, temp ;Порт Б (нагрузка) ldi temp, 0x0F out PORTB, temp ldi temp, 0xFF out DDRB, temp ;Порт Д (кнопки) ldi temp, 0x00 out DDRD, temp ldi temp, 0xFF out PORTD, temp в самом низу листинга определены в памяти данных места под счетчики секунд для каждого таймера Code ;Переменные, которые находятся в оперативной памяти .DSEG T1_wh_s: .BYTE 1 ;Целые секунды (0-30) таймера 1 T1_fr_s: .BYTE 1 ;Доли секунды (0-0,9) таймера 1 T2_wh_s: .BYTE 1 ;Целые секунды (0-30) таймера 2 T2_fr_s: .BYTE 1 ;Доли секунды (0-0,9) таймера 2 T3_wh_s: .BYTE 1 ;Целые секунды (0-30) таймера 3 T3_fr_s: .BYTE 1 ;Доли секунды (0-0,9) таймера 3
Current_timer: .BYTE 1 ;Текущий таймер Current_cycle: .BYTE 1 ;Текущий индикатор (для организации динамической индикации)
.CSEG следующим шагом идет заполнение етих переменных нулями
А нам своє робить!
|
|
| |
VasylYE | Дата: Пятница, 27.06.2008, 12:48 | Сообщение # 19 |
Рядовой
Группа: Проверенные
Сообщений: 263
Статус: Offline
| Code ;Инициализация счетчиков таймеров (при старте равны 0) ldi temp, 0x00 ldi XH, HIGH(T1_wh_s) ldi XL, LOW(T1_wh_s) st X, temp
ldi XH, HIGH(T1_fr_s) ldi XL, LOW(T1_fr_s) st X, temp здесь T1_wh_s - целые секунды первого счетчика T1_fr_s - десятые секунды для 2 и 3 аналогично. Далее инициализация таймера 0 и регистра флагов Code ;Инициализация Таймера 0, период срабатывания ~4 мс для обеспечения коммутации ; семисегментных индикаторов с частотой ~250 Гц (динамическая индикация) ; частота тактирования 1 МГц 0x82 -> 0xFF ldi temp, 0x82 out TCNT0, temp ldi temp, (1<<TOIE0) out TIMSK, temp ;Разрешаем прерывание от таймера 0 ldi temp, (1<<CS01) out TCCR0, temp ;Запускаем таймер 0 sei Какие вопросы по этой части программы? (несколько постов выше обновлен архив. добавлена функция чтения кнопок)
А нам своє робить!
|
|
| |
barbus | Дата: Пятница, 27.06.2008, 20:45 | Сообщение # 20 |
Лейтенант
Группа: Пользователи
Сообщений: 53
Статус: Offline
| Все это еще для меня сложно. Извини Алгоритм понятен с команадами проблема.
|
|
| |
VasylYE | Дата: Суббота, 28.06.2008, 10:32 | Сообщение # 21 |
Рядовой
Группа: Проверенные
Сообщений: 263
Статус: Offline
| в общем, ничего страшного. Если алгоритм понятен, то это уже хорошо. со временем освоиш и команды. Их лучше учить на каком то маленьком примере. Но также нужно учить и железо, потому что команды с ним очень тесно связаны. Здесь - http://asm-avr.narod.ru/ находится описание асемблерных команд на руском языке. Очень советую почитать, что-нибудь попробовать написать (например сложить 2 числа), задавать вопросы. Успехов!
А нам своє робить!
|
|
| |
barbus | Дата: Суббота, 28.06.2008, 18:05 | Сообщение # 22 |
Лейтенант
Группа: Пользователи
Сообщений: 53
Статус: Offline
| Я уже читаю об а всем. Как дела с программой и измененной схемой. Данная программа оканчательная? Спосибо
Сообщение отредактировал barbus - Понедельник, 30.06.2008, 04:04 |
|
| |
VasylYE | Дата: Вторник, 01.07.2008, 16:38 | Сообщение # 23 |
Рядовой
Группа: Проверенные
Сообщений: 263
Статус: Offline
| Вот окончательный вариант программы (на симуляторе работает, может со временем соберу на макетке, тогда скажу точно) Также окончательный вариант схемы + файл для Протеуса ------------------------ В общем, учиться нужно на чем то прощем... Если постараться, можно было написать и лучше, посидеть, пооптимизировать и т.п., но... -------------------- 22:56 - посл. правка
А нам своє робить!
|
|
| |
barbus | Дата: Четверг, 10.07.2008, 20:55 | Сообщение # 24 |
Лейтенант
Группа: Пользователи
Сообщений: 53
Статус: Offline
| Спосибо запомощ. В ближайшее время я собиру схему. Добавлено (10.07.2008, 20:55) --------------------------------------------- VasylYE, Сакжите а трудно сделать модификацию программы дла ЖКИ с обшим катодом,
|
|
| |
VasylYE | Дата: Четверг, 10.07.2008, 21:15 | Сообщение # 25 |
Рядовой
Группа: Проверенные
Сообщений: 263
Статус: Offline
| ЖКИ (жидкокристаллический индикатор) или семисегментный светодиодный? Если светодиодный, то в схеме нужно, чтобы транзисторы соединяли катоды с землей, а в программе изменяем Code ;Перекодировки для семисегментных индикаторов с общим анодом Digits: .DB 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 на Code ;Перекодировки для семисегментных индикаторов с общим катодом Digits: .DB 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F То есть по просту инвертируем числа
А нам своє робить!
|
|
| |
barbus | Дата: Вторник, 15.07.2008, 20:48 | Сообщение # 26 |
Лейтенант
Группа: Пользователи
Сообщений: 53
Статус: Offline
| Quote (barbus) ЖКИ (жидкокристаллический индикатор) или семисегментный светодиодный? На даный момент достал семисегментный светодиодный потом может быт и ЖКИ дастану. Как я знаю для ЖКИ нужен 60Гц сигнал. Если понадобится возможно сделать так чтобы таймери начинали считать от внешного сигнала или герконов, кнопки? Добавлено (15.07.2008, 20:48) --------------------------------------------- Скажи а чем можно скампилировать *.asm файл на *.hex
Сообщение отредактировал barbus - Суббота, 12.07.2008, 20:28 |
|
| |
VasylYE | Дата: Вторник, 15.07.2008, 22:14 | Сообщение # 27 |
Рядовой
Группа: Проверенные
Сообщений: 263
Статус: Offline
| включается все нажатием кнопки старт (подачей низкого уровня на соотв. порт) вместо кнопки может быть что угодно по идее. с жки наподобие как в наручных ел. часах я никогда не работал, только с знакосинтезирующими (например, как в GPS приемнике, см. форум). Весь проект сделан в VMlab -е, в нем происходит и редактирование текста программы, и компиляция (там есть кнопка Build)
А нам своє робить!
|
|
| |
barbus | Дата: Суббота, 26.07.2008, 17:19 | Сообщение # 28 |
Лейтенант
Группа: Пользователи
Сообщений: 53
Статус: Offline
| Извини что только спрашиваю. В эмуляторе Протеус думаю есть ошибка после установки трех времен таймеров и нажатия старт идет отсчет времени это правильно и после оканчания отсчета остановка. После остановки требуется поставить еше раз таймеры, почему то не сохраняются параметры таймеров? По логике программы должно сохранятся.
|
|
| |
VasylYE | Дата: Суббота, 26.07.2008, 23:24 | Сообщение # 29 |
Рядовой
Группа: Проверенные
Сообщений: 263
Статус: Offline
| Это не ошибка, это скорее недоработка программы. Доработать не сложно, нужно копировать регистры в которых знаходятся значения таймеров а после отработки программы загружать их с этих копий. Если будут трудности, сделаю доработку программы. Интересно было бы узнать, как дела с постройкой прибора?
А нам своє робить!
|
|
| |
barbus | Дата: Воскресенье, 27.07.2008, 09:56 | Сообщение # 30 |
Лейтенант
Группа: Пользователи
Сообщений: 53
Статус: Offline
| Очен трудно но приобрел детальки, табло с обшим катодом, сейчас дарабатываю силовую часть, есть проблеми с кнопкой старт, у меня о держится нажатой это проблема надо решить, еше делаю инжвртор третего таймера. Если не трудно прошу програмку дороботать. Спосибо за помощ. Будут новости напишу.
Сообщение отредактировал barbus - Воскресенье, 27.07.2008, 09:59 |
|
| |
|