Задачи по программированию на AVR

Обсуждаем контроллеры компании Atmel.
Ответить
drac0Sha
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вт окт 09, 2012 14:09:39

Задачи по программированию на AVR

Сообщение drac0Sha »

Здравствуйте, столкнулся с такой проблемой
Как необходимость решить работу для микроконтроллеров AVR
Первым делом написать программу на Ассемблере
Но чтобы не изобретать велосипед хотел сначала посоветоваться со знающими людьми по поводу шаблонных вариантов
Я уверен, почти наверняка, что такие задачи уже есть в Интернете, наподобие
Так вот, прошу их реализацию мне скинуть
Если не трудно
Заранее благодарю

Вот пример:
Разработать программу, реализующую генератор изменяемой частоты. Начальная частота 0.5 Гц, т.е. жёлтый индикатор горит 1 с, и 1 с не горит. Нажатие кнопки 1 приводит к увеличению частоты на 40%, нажатие кнопки 2 уменьшает частоту на 40%. Для облегчения замера частот использовать красный и зелёный индикаторы: красный должен мигать с частотой в 10 раз большей основной частоты (желтого индикаторы), а зелёный должен мигать с частотой в 10 раз меньше основной. Одновременное нажатие обеих кнопок должно возвращать генератор в исходное состояние – 0.5 Гц.
Реклама
Аватара пользователя
conler
Это не хвост, это антенна
Сообщения: 1327
Зарегистрирован: Вс дек 11, 2011 05:43:30
Откуда: Екатеринодар

Re: Задачи по программированию на AVR

Сообщение conler »

Скидывать никто ничего не будет, существует поиск. Кому нужно - тот и ищет.
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Задачи по программированию на AVR

Сообщение urry »

Курсовые пошли ?
Еще и на асме проценты считать... :) Ну-ну...
petrenko
Друг Кота
Сообщения: 5327
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Задачи по программированию на AVR

Сообщение petrenko »

Админы ! Доброе утро, как Вы полагаете, надо ли тему переносить в "Сделайте за меня задание." ?
Это вроде как сезонное явление, да ?
Извините, если невнимательно прочёл, может всё же задача серьёзная.. :dont_know:
Последний раз редактировалось petrenko Ср окт 10, 2012 13:48:49, всего редактировалось 1 раз.
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Реклама
Эиком - электронные компоненты и радиодетали
drac0Sha
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вт окт 09, 2012 14:09:39

Re: Задачи по программированию на AVR

Сообщение drac0Sha »

Про сделать за меня задание я не слово не написал! Я написал про то, что "скиньте пожалуйста примеры выполненных задач наподобие той, что я скинул".
Надеюсь, на этот раз ВСЕ ВСЁ ПРАВИЛЬНО прочитали!?
Реклама
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Задачи по программированию на AVR

Сообщение ploop »

Админы ! Доброе утро, не тормозите, пожалуйста, видимо скоро надо будет не только эту тему переносить в "Сделайте за меня задание."
Не кричите. Тема будет там, где положено, в зависимости от поворота событий :)
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Задачи по программированию на AVR

Сообщение Engineer_Keen »

Видите ли drac0Sha, программирование на ассемблере - штука специфическая. Даже изменение одного из чисел в задании может довольно сильно поменять программу. Не говоря уже о различиях в алгоритме ее работы. Для языков высокого уровня принцип копипасты различных кусков кода для решения своей задачи может быть еще бы и прокатил (и то можно потом долго отлавливать глюки в полученном быдлокоде), с ассемблером это так просто не выйдет, нужен некоторый опыт и знание, а судя по заданному вопросу этого как раз нет, так что проще написать программу с нуля. Единственный шанс - если найдется человек, который действительно решал именно такую задачу. В противном случае - вперед, в обучалку.
Аватара пользователя
korsaj
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Чт июн 23, 2011 07:55:51

Re: Задачи по программированию на AVR

Сообщение korsaj »

Вот вам пример генератора 0,5 Гц

Код: Выделить всё

.include	"tn13def.inc"

.equ	j	= 10	;

;---------------------------------------------
;         Биты портов
;---------------------------------------------
.equ	b0	= 0
.equ	b1	= 1
.equ	b2	= 2
.equ	b3	= 3
.equ	b4	= 4
.equ	b5	= 5
.equ	b6	= 6
.equ	b7	= 7


;---------------------------------------

	.org	0x0000
	rjmp	start

;=====================
;	ПП задержки
;=====================
Delay:
	ldi	r17,j
Loop2:
	ldi	r18,0x2A
Loop1:
	dec	r18
	brne	Loop1
	dec	r17
	brne	Loop2
	dec	r22
	brne	Delay
	ret

;=====================
;	Основная программа
;=====================
start:
	ldi	r20,0b11111111	
	out	DDRB,r20
	cli		
start1:
	ldi	r22,100
	rcall	Delay
	sbi		PORTB,b0
	ldi	r22,100
	rcall	Delay
	cbi		PORTB,b0
	rjmp	start1
drac0Sha
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вт окт 09, 2012 14:09:39

Re: Задачи по программированию на AVR

Сообщение drac0Sha »

Спасибо большое, что-то попробовал) помогите переделать немного)


Разработать программу, реализующую генератор изменяемой частоты. Начальная частота 0.5 Гц, т.е. жёлтый индикатор горит 1 с, и 1 с не горит.
Нажатие кнопки 1 приводит к тому, что красный индикатор должен мигать каждую секунду,а при нажатии кнопки 2 зелёный индикатор должен мигать каждые 5 секунд
Одновременное нажатие обеих кнопок должно возвращать генератор в исходное состояние – 0.5 Гц.
Спойлер

Код: Выделить всё

.include "m128def.inc"//включение заголовочного файла
.device ATmega128//назначение модели процессора

.equ j = 10 ;

;---------------------------------------------
; Биты портов
;---------------------------------------------
.equ b0 = 0
.equ b1 = 1
.equ b2 = 2
.equ b3 = 3
.equ b4 = 4
.equ b5 = 5
.equ b6 = 6
.equ b7 = 7

;---------------------------------------

.org 0x0000
rjmp start

;=====================
; ПП задержки
;=====================
Delay:
ldi r17,j
Loop2:
ldi r18,0x2A
Loop1:
dec r18
brne Loop1
dec r17
brne Loop2
dec r22
brne Delay
ret

;=====================
; Основная программа
;=====================
start:
ldi r20,0b11111111 
out DDRB,r20
cli 
start1:
ldi r22,100
rcall Delay
sbi PORTB,b0 ;включаем СИД (желтый)
sbis PinD ;Проверяем нажата ли кнопка уменьшения частоты
rjmp UpSpeed ;Не нажата - переходим в UpSpeed

UpSpeed:
sbic PinD,1 ;проверяем кнопку увеличения частоты
rjmp start1 ;Не нажата - возвращаемся в start1
ldi Counter,2 ;Инициализируем регистр Counter
sbi PORTB,b1 ;Включаем СИД (Красный)
Second: ;секунда задержка
rcall Delay
dec Counter
brne Second
cbi PORTB,b1 ;выключаем СИД (красный)
brne ReleaseUp 
ReleaseUp:
sbis PinD,0 ;ждем отпускания кнопки
rjmp ReleaseUp 


rjmp DownSpeed ;Нажата - переходим в DownSpeed

DownSpeed:
sbic PinD,1 ;проверяем кнопку увеличения частоты
rjmp DownSpeedOne ;Не нажата 
rjmp UpSpeed ;нажата
DownSpeedOne:

ldi Counter,10 ;Инициализируем регистр Counter
sbi PORTB,b2 ;Включаем СИД (зеленый)
FiveSecond: ;5 секунд задержка
rcall Delay
dec Counter
brne FiveSecond
cbi PORTB,b1 ;выключаем СИД (зеленый)
brne ReleaseDown 
ReleaseDown:
sbis PinD,0 ;ждем отпускания кнопки
rjmp ReleaseDown 

ldi r22,100
rcall Delay
cbi PORTB,b0 ;Выключаем СИД 
rjmp start1
korsaj писал(а):Вот вам пример генератора 0,5 Гц

Код: Выделить всё

.include	"tn13def.inc"

.equ	j	= 10	;

;---------------------------------------------
;         Биты портов
;---------------------------------------------
.equ	b0	= 0
.equ	b1	= 1
.equ	b2	= 2
.equ	b3	= 3
.equ	b4	= 4
.equ	b5	= 5
.equ	b6	= 6
.equ	b7	= 7


;---------------------------------------

	.org	0x0000
	rjmp	start

;=====================
;	ПП задержки
;=====================
Delay:
	ldi	r17,j
Loop2:
	ldi	r18,0x2A
Loop1:
	dec	r18
	brne	Loop1
	dec	r17
	brne	Loop2
	dec	r22
	brne	Delay
	ret

;=====================
;	Основная программа
;=====================
start:
	ldi	r20,0b11111111	
	out	DDRB,r20
	cli		
start1:
	ldi	r22,100
	rcall	Delay
	sbi		PORTB,b0
	ldi	r22,100
	rcall	Delay
	cbi		PORTB,b0
	rjmp	start1
Аватара пользователя
korsaj
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Чт июн 23, 2011 07:55:51

Re: Задачи по программированию на AVR

Сообщение korsaj »

Вот это уже другое дело! :)
Аватара пользователя
korsaj
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Чт июн 23, 2011 07:55:51

Re: Задачи по программированию на AVR

Сообщение korsaj »

Вот исходник моргания 3-х светодиодов. Зеленый - основная частота, Желтый - в 10 раз быстрее, Красный - в десять раз медленнее.

Все что вам остается сделать опрос кнопок, и в зависимости от их состояния менять значение записанное в r22, заменив строку ldi r22,10 на команду загрузки из регистра, в который будет записыватся число на 40% меньше/больше или равное 100%.
Спойлер;

Код: Выделить всё

 created by KornilovAF
; at 2012/09/15 - 12:33:21
;---------------------------------------
; AVR_TYPE=<Attyne13>
;---------------------------------------
;---------------------------------------
; constants:

.include	"tn13def.inc"

.equ	j	= 10	;

;---------------------------------------------
; Биты портов и регистров
;---------------------------------------------
.equ	b0	= 0x00
.equ	b1	= 0x01
.equ	b2	= 0x02
.equ	b3	= 0x03
.equ	b4	= 0x04
.equ	b5	= 0x05
.equ	b6	= 0x06
.equ	b7	= 0x07


;---------------------------------------

	.org	0x0000
	rjmp	start

;=====================
;	ПП задержки
;=====================
Delay:
	ldi	r17,j
Loop2:
	ldi	r18,0x2A
Loop1:
	dec	r18
	brne	Loop1
	dec	r17
	brne	Loop2
	dec	r22
	brne	Delay
	ret

;=====================
;	Настройка
;=====================
start:
	ldi	r20,0b11111111	
	out	DDRB,r20
	cli					;Запрещаем прерывания
	ldi	r19,10
	ldi	r20,100

;=====================
;	Основная программа
;=====================

start1:
	ldi	r22,10
	rcall	Delay		;задержка на 100мС
	dec	r19				;Усменьшаем счетчик 10 импульсов
	breq	GreenLed	;Если равно нулю переходим к обработке зеленого светодиода
St2:
						;Иначе поподаем сюда
	sbic	PINB,b1		;Светолдиод горит?
	rjmp	YelLedOff	;Да! Переходим к его гашению
	sbi		PORTB,b1	;Нет! Зажигаем его
	rjmp	St3			;Переходим к следующиму условию
YelLedOff:
	cbi		PORTB,b1	;Гасим светодиод

St3:
	dec	r20				;Уменьшаем счетчик 100 импульсов
	brne	start1		;Если неравно нулю переходим к началу нашего цикла
	ldi	r20,100			;Иначе обновляем счетчик 100 импульсов

	sbic	PINB,b2		;Светолдиод горит?		
	rjmp	RedLedOff	;Да! Переходим к его гашению
	sbi		PORTB,b2	;Нет! Зажигаем его
	rjmp	start1		;Переходим к началу нашего цикла
RedLedOff:
	cbi		PORTB,b2	;Гасим светодиод	
	rjmp	start1		;Переходим к началу нашего цикла		

GreenLed:
	ldi	r19,10			;Обновляем счетчик 100 импульсов
	sbic	PINB,b0		;Светолдиод горит?
	rjmp	GreenLedOff	;Да! Переходим к его гашению
	sbi		PORTB,b0	;Нет! Зажигаем его
	rjmp	St2			;Переходим к следующиму условию
GreenLedOff:
	cbi		PORTB,b0	;Гасим светодиод
	rjmp	St2			;Переходим к следующиму условию
Ну а вот архив с проектом в АврСтудио и Протеус.
Вложения
Gen05Hz.zip
(58.88 КБ) 180 скачиваний
drac0Sha
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вт окт 09, 2012 14:09:39

Re: Задачи по программированию на AVR

Сообщение drac0Sha »

korsaj, спасибо, что помогаете!

Вот у меня появился вопрос.
Пользуюсь AVR Studio 6.0. Создаю проект - AVR Assembler project - выбираю device (ATmega128). Дальше пишу туда код и делаю debug. Как я могу посмотреть, что у меня загорается желтый, красный, зеленый. Не могу найти где это находится.. Подскажите, пожалуйста.
Аватара пользователя
korsaj
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Чт июн 23, 2011 07:55:51

Re: Задачи по программированию на AVR

Сообщение korsaj »

Поставте себе Proteus. В архиве, который я в вас кинул есть проект (схема) для протеуса. В ней все видно )

http://eldigi.ru/site/prog/1.php
drac0Sha
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вт окт 09, 2012 14:09:39

Re: Задачи по программированию на AVR

Сообщение drac0Sha »

Поставил, удобная программа) Но вот я никак не могу понять: как создать кнопки. В коде писал строчку :
sbic PinD ;проверяем кнопку - сразу ругается.. Как создать подскажите, пожалуйста.
И я еще не много не понял про
korsaj писал(а):в зависимости от их состояния менять значение записанное в r22, заменив строку ldi r22,10 на команду загрузки из регистра, в который будет записыватся число на 40% меньше/больше или равное 100%.
Аватара пользователя
korsaj
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Чт июн 23, 2011 07:55:51

Re: Задачи по программированию на AVR

Сообщение korsaj »

sbic PIND,0
где 0 - это номер порта к которому подключена кнопка.
drac0Sha
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Вт окт 09, 2012 14:09:39

Re: Задачи по программированию на AVR

Сообщение drac0Sha »

Ну вот я написал:

Код: Выделить всё

start1:
	ldi	r22,10
	rcall	Delay		
	sbic PIND,3	
        dec	r19				
	breq	GreenLed	
По этой картинке порты 3 и 4 свободны ( я так понимаю это PB3 и PB4), но он выдает ошибку при компиляции.
Undefined symbol:PIND
Аватара пользователя
korsaj
Потрогал лапой паяльник
Сообщения: 330
Зарегистрирован: Чт июн 23, 2011 07:55:51

Re: Задачи по программированию на AVR

Сообщение korsaj »

))
Чудите вы! )

У Attiny 13 есть только один порт - PORTB, соответственно и регистр входов - PINB.
А компилятор вам кричит, что слово PIND не описано.

В архиве реализовано две кнопки, вам остается реализовать одновременное нажатие.
Вложения
Gen05Hz.zip
(60.19 КБ) 175 скачиваний
Ответить

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