Технический Портал Левши Вторник, 19.12.2017, 01:20
| RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 4«1234»
ТЕХНИЧЕСКИЙ ФОРУМ » ЭЛЕКТРОНИКА » АВТОМАТИКА » Последвтельный таймер (Помогите начинающему)
Последвтельный таймер
VasylYEДата: Четверг, 26.06.2008, 17:43 | Сообщение # 16
Рядовой
Группа: Проверенные
Сообщений: 263
Награды: 1
Статус: Offline
установить VMlab в каталог по умолчанию (на диск С), после установки появится каталог c:\VMLAB\work , в него нужно разархивовать проект. Тогда запустить VMlab, меню - Project -> Open project, найти файл c:\VMLAB\work\timer\timer.prj

также файлы можно просмотреть например в тотал командере (F3)


А нам своє робить!
 
barbusДата: Четверг, 26.06.2008, 22:09 | Сообщение # 17
Лейтенант
Группа: Пользователи
Сообщений: 53
Награды: 0
Статус: Offline
Изучаю AVR

Если не трудно давай вместе шаг за шагом будем просматривать програмку таймера.

 
VasylYEДата: Пятница, 27.06.2008, 12:45 | Сообщение # 18
Рядовой
Группа: Проверенные
Сообщений: 263
Награды: 1
Статус: 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
Награды: 1
Статус: 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
Награды: 0
Статус: Offline
Все это еще для меня сложно. Извини
Алгоритм понятен с команадами проблема.
 
VasylYEДата: Суббота, 28.06.2008, 10:32 | Сообщение # 21
Рядовой
Группа: Проверенные
Сообщений: 263
Награды: 1
Статус: Offline
в общем, ничего страшного. Если алгоритм понятен, то это уже хорошо. со временем освоиш и команды. Их лучше учить на каком то маленьком примере. Но также нужно учить и железо, потому что команды с ним очень тесно связаны.
Здесь - http://asm-avr.narod.ru/ находится описание асемблерных команд на руском языке. Очень советую почитать, что-нибудь попробовать написать (например сложить 2 числа), задавать вопросы. Успехов!


А нам своє робить!
 
barbusДата: Суббота, 28.06.2008, 18:05 | Сообщение # 22
Лейтенант
Группа: Пользователи
Сообщений: 53
Награды: 0
Статус: Offline
Я уже читаю об а всем. cry

Как дела с программой и измененной схемой. Данная программа оканчательная?

Спосибо

Сообщение отредактировал barbus - Понедельник, 30.06.2008, 04:04
 
VasylYEДата: Вторник, 01.07.2008, 16:38 | Сообщение # 23
Рядовой
Группа: Проверенные
Сообщений: 263
Награды: 1
Статус: Offline
Вот окончательный вариант программы (на симуляторе работает, может со временем соберу на макетке, тогда скажу точно)
Также окончательный вариант схемы + файл для Протеуса
------------------------
В общем, учиться нужно на чем то прощем... Если постараться, можно было написать и лучше, посидеть, пооптимизировать и т.п., но...
--------------------
22:56 - посл. правка
Прикрепления: 7748378.rar(21Kb) · 0384052.rar(33Kb) · prot_timer.rar(16Kb)


А нам своє робить!
 
barbusДата: Четверг, 10.07.2008, 20:55 | Сообщение # 24
Лейтенант
Группа: Пользователи
Сообщений: 53
Награды: 0
Статус: Offline
Спосибо запомощ.

В ближайшее время я собиру схему.

Добавлено (10.07.2008, 20:55)
---------------------------------------------
VasylYE, Сакжите а трудно сделать модификацию программы дла ЖКИ с обшим катодом,

 
VasylYEДата: Четверг, 10.07.2008, 21:15 | Сообщение # 25
Рядовой
Группа: Проверенные
Сообщений: 263
Награды: 1
Статус: 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
Награды: 0
Статус: 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
Награды: 1
Статус: Offline
включается все нажатием кнопки старт (подачей низкого уровня на соотв. порт) вместо кнопки может быть что угодно по идее. с жки наподобие как в наручных ел. часах я никогда не работал, только с знакосинтезирующими (например, как в GPS приемнике, см. форум).
Весь проект сделан в VMlab -е, в нем происходит и редактирование текста программы, и компиляция (там есть кнопка Build)


А нам своє робить!
 
barbusДата: Суббота, 26.07.2008, 17:19 | Сообщение # 28
Лейтенант
Группа: Пользователи
Сообщений: 53
Награды: 0
Статус: Offline
Извини что только спрашиваю.
В эмуляторе Протеус думаю есть ошибка после установки трех времен таймеров и нажатия старт идет отсчет времени это правильно и после оканчания отсчета остановка.
После остановки требуется поставить еше раз таймеры, почему то не сохраняются параметры таймеров?
По логике программы должно сохранятся.
 
VasylYEДата: Суббота, 26.07.2008, 23:24 | Сообщение # 29
Рядовой
Группа: Проверенные
Сообщений: 263
Награды: 1
Статус: Offline
Это не ошибка, это скорее недоработка программы. Доработать не сложно, нужно копировать регистры в которых знаходятся значения таймеров а после отработки программы загружать их с этих копий. Если будут трудности, сделаю доработку программы. Интересно было бы узнать, как дела с постройкой прибора?

А нам своє робить!
 
barbusДата: Воскресенье, 27.07.2008, 09:56 | Сообщение # 30
Лейтенант
Группа: Пользователи
Сообщений: 53
Награды: 0
Статус: Offline
Очен трудно но приобрел детальки, табло с обшим катодом, сейчас дарабатываю силовую часть, есть проблеми с кнопкой старт, у меня о держится нажатой это проблема надо решить, еше делаю инжвртор третего таймера.

Если не трудно прошу програмку дороботать.

Спосибо за помощ.

Будут новости напишу.

Сообщение отредактировал barbus - Воскресенье, 27.07.2008, 09:59
 
ТЕХНИЧЕСКИЙ ФОРУМ » ЭЛЕКТРОНИКА » АВТОМАТИКА » Последвтельный таймер (Помогите начинающему)
Страница 2 из 4«1234»
Поиск:

Copyright MyCorp © 2017