Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Управление моторчиком с помощью AVR ATmega8
erraДата: Четверг, 25.06.2015, 01:45 | Сообщение # 1
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
В прошлой теме я показывал, как я реализовал управление моторчикам с помощью МК-51. Сейчас же я дорвался до Atmega8 и покажу, как я выполнил тот же самый проект но средствами нового контроллера AVR линейки mega.
 
erraДата: Четверг, 25.06.2015, 01:48 | Сообщение # 2
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
Принципиальная схема мало чем отличается от предыдущей (за исключением того, что мне было лень добавлять 3 кнопки скорости, и я сделал 2 smile ). Ах да, светодиоды-индикаторы физически подключены к пинам, и не программировались, потому что я опять поленился сэкономил время).

 
erraДата: Четверг, 25.06.2015, 01:55 | Сообщение # 3
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
В этот раз, при написании программы, я не пользовался ветвлением и переходом на метки, а реализовал весь механизм внутри основного цикла LOOP и при помощи игнорирования некоторых команд, если выполняется определённое условие. Т.е, например, как в случае:


Код
sbis PINB,  1      ; Если на 1 пине порта В установлена 1, т.е кнопка STOP не нажата, то
cbi PORTD, 0    ; игнорировать эту команду (т.е пропустить обнуление пина, к которому подключен мотор)
 
erraДата: Четверг, 25.06.2015, 01:56 | Сообщение # 4
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
Листинг всей программы:


Код
.include "m8def.inc"; подключим файл с описаниями регистров

LOOP:; основной цикл программы

;-------------------------Инициализация портов------------------------------
sbi DDRD,  0     ;РВ4 - выход (моторчик)
sbi DDRD,  1     ;РВ4 - выход (моторчик)
sbi DDRD,  2     ;РВ4 - выход (моторчик)
sbi PORTB, 0    ;Включение подтягивающего резистора на РВ0 (кнопка START)
sbi PORTB, 1   ;Включение подтягивающего резистора на РВ1 (кнопка STOP)
sbi PORTB, 2   ;Включение подтягивающего резистора на РВ2 (кнопка SPEED1)
sbi PORTB, 3   ;Включение подтягивающего резистора на РВ3 (кнопка SPEED2)
;----------------------------------------------------------------------------
sbis PINB,  0    ;Если РВ0=1 (кнопка не нажата), пропустить след. строку
sbi PORTD, 0    ;Установка РD0 в 1 (зажигание)

;------------При нажатии на СТОП проверка выкл. всех пинов порта D-----------

sbis PINB,  1   
cbi PORTD, 0
sbis PINB,  1   
cbi PORTD, 1
sbis PINB,  1   
cbi PORTD, 2
;----------------------------------------------------------------------------

sbis PINB, 2    
sbi PORTD, 1    ;Установка РD0 в 1 (зажигание)
sbis PINB, 3
sbi PORTD, 2    ;Установка РD0 в 1 (зажигание)

rjmp LOOP
 
erraДата: Четверг, 25.06.2015, 11:05 | Сообщение # 5
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
Ну и, наконец с программной реализацией индикаторов


Код
.include "m8def.inc"; подключим файл с описаниями регистров

LOOP:; основной цикл программы

;-------------------------Инициализация портов------------------------------
sbi DDRD,  0     ;РВ4 - выход (моторчик)
sbi DDRD,  1     ;РВ4 - выход (моторчик)
sbi DDRD,  2     ;РВ4 - выход (моторчик)
sbi DDRC,  0     ;РC0 - выход (Диод)
sbi DDRC,  1     ;РC1 - выход (Диод)
sbi DDRC,  2     ;РC2 - выход (Диод)
sbi PORTB, 0    ;Включение подтягивающего резистора на РВ0 (кнопка START)
sbi PORTB, 1   ;Включение подтягивающего резистора на РВ1 (кнопка STOP)
sbi PORTB, 2   ;Включение подтягивающего резистора на РВ2 (кнопка SPEED1)
sbi PORTB, 3   ;Включение подтягивающего резистора на РВ3 (кнопка SPEED2)
;----------------------------------------------------------------------------
sbis PINB,  0    ;Если РВ0=1 (кнопка не нажата), пропустить след. строку
sbi PORTD, 0    ;Установка РD0 в 1 (зажигание)
sbis PINB,  0    ;Если РВ0=1 (кнопка не нажата), пропустить след. строку
sbi PORTC, 0    ;Установка РD0 в 1 (зажигание)

;------------При нажатии на СТОП проверка выкл. всех пинов порта D-----------

sbis PINB,  1   
cbi PORTD, 0
sbis PINB,  1   
cbi PORTD, 1
sbis PINB,  1   
cbi PORTD, 2

sbis PINB,  1   
cbi PORTC, 0
sbis PINB,  1   
cbi PORTC, 1
sbis PINB,  1   
cbi PORTC, 2
;----------------------------------------------------------------------------

sbis PINB, 2    
sbi PORTD, 1    ;Установка РD0 в 1 (зажигание)
sbis PINB,  2    ;Если РВ0=1 (кнопка не нажата), пропустить след. строку
sbi PORTC, 1    ;Установка РD0 в 1 (зажигание)
sbis PINB, 3
sbi PORTD, 2    ;Установка РD0 в 1 (зажигание)
sbis PINB,  3    ;Если РВ0=1 (кнопка не нажата), пропустить след. строку
sbi PORTC, 2    ;Установка РD0 в 1 (зажигание)

rjmp LOOP
 
erraДата: Четверг, 25.06.2015, 11:07 | Сообщение # 6
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline

Светодиоды подключены к первым 3-м пинам порта С. Тактовые кнопки подтянуты к земле резисторами для минимизации эффекта дребезга контактов.
 
  • Страница 1 из 1
  • 1
Поиск: