Управление моторчиком с помощью AVR ATmega8
|
|
erra | Дата: Четверг, 25.06.2015, 01:45 | Сообщение # 1 |
 Рядовой
Группа: Администраторы
Сообщений: 14
Статус: Offline
| В прошлой теме я показывал, как я реализовал управление моторчикам с помощью МК-51. Сейчас же я дорвался до Atmega8 и покажу, как я выполнил тот же самый проект но средствами нового контроллера AVR линейки mega.
|
|
| |
erra | Дата: Четверг, 25.06.2015, 01:48 | Сообщение # 2 |
 Рядовой
Группа: Администраторы
Сообщений: 14
Статус: Offline
| Принципиальная схема мало чем отличается от предыдущей (за исключением того, что мне было лень добавлять 3 кнопки скорости, и я сделал 2 ). Ах да, светодиоды-индикаторы физически подключены к пинам, и не программировались, потому что я опять поленился сэкономил время).
|
|
| |
erra | Дата: Четверг, 25.06.2015, 01:55 | Сообщение # 3 |
 Рядовой
Группа: Администраторы
Сообщений: 14
Статус: Offline
| В этот раз, при написании программы, я не пользовался ветвлением и переходом на метки, а реализовал весь механизм внутри основного цикла LOOP и при помощи игнорирования некоторых команд, если выполняется определённое условие. Т.е, например, как в случае:
Код sbis PINB, 1 ; Если на 1 пине порта В установлена 1, т.е кнопка STOP не нажата, то cbi PORTD, 0 ; игнорировать эту команду (т.е пропустить обнуление пина, к которому подключен мотор)
|
|
| |
erra | Дата: Четверг, 25.06.2015, 01:56 | Сообщение # 4 |
 Рядовой
Группа: Администраторы
Сообщений: 14
Статус: 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
Статус: 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
Статус: Offline
| Светодиоды подключены к первым 3-м пинам порта С. Тактовые кнопки подтянуты к земле резисторами для минимизации эффекта дребезга контактов.
|
|
| |