Пропорциональное управление на МК (Знание=Сила)

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение uwrtey »

:beer:

а чем отличаются OCIE1A от OCIE1B? ( и почему их два?)
не зная броду не лезь к вольтмоду
Реклама
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение спящий »

Здравсвуйте,сделал программу RC5 приемник:Срабатывает по команде PCINTO ,пропускает первые 8 битов(они нах ненужны- хочу чтобы от любого пульта работал),остальные записывает и выводит в порт.

вроде в протеусе пашет.

Начал собирать,собрал - неработает. Пуль тPHILIPS RC-0764/70 ,приемник TSOP1736 - начал мерить осцилографом на выходе приемника 0,нечего( попробывал еще 2 всеравно 0( В чем причина,или сигнал маленький?
Вложения
Новая папка.rar
(17.9 КБ) 166 скачиваний
Реклама
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение ВитГо »

uwrtey писал(а)::beer:

а чем отличаются OCIE1A от OCIE1B? ( и почему их два?)
читай даташит !

их два потому что у таймера Т1 два регистра сравнения : OCR1A и OCR1B и они могут работать отдельно друг от друга, генеря свои прерывания по сравнению (которые разрешаются битами OCIE1A от OCIE1B регистра TIMSK) и каждый может управлять своими ногами OC1A или OC1B :-)

вообще микроконтроллеры во многом очень хорошо продуманы: чтобы не делать чтото руками, а переложить работу на них
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение ВитГо »

спящий писал(а):Здравсвуйте,сделал программу RC5 приемник:Срабатывает по команде PCINTO ,пропускает первые 8 битов(они нах ненужны- хочу чтобы от любого пульта работал),остальные записывает и выводит в порт.
извиняюсь что обрывочно отвечаю,
по программе, буквально вначале:

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

.org 0x000
rjmp init;

.org 0x0001
rjmp sydi;





ldi temp,255            ; !!!!!!!!!!!
out DDRB,temp;
ldi temp,0;
out DDRD,temp;

init:

ldi r16,high(RAMEND) ; 
out SPH,r16  ; 
ldi  r16,low(RAMEND) ;
out  SPL,r16 ;

в какой момент будет выполнен код отмеченный восклицательными знаками ?
в резет - уйдем на метку init
в прерывании уйдем на метку sydi
или у вас еще какое то прерывание которое вы не стали через rjmp реализовывать?

что за прерывание .org 0x0001 rjmp sydi; ? напишите лучше метку из даташита, так сразу будет понятно...

сейчас уезжаю за город, вернусь попробую глянуть подробно..

p.s. кстати а железную часть устройства проверили ?

p.p.s. и схему бы.. а то так тяжко гадать что к чему подключено и как должно выводиться
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение uwrtey »

ВитГо писал(а):и каждый может управлять своими ногами OC1A или OC1B
ну раз так, то этого должно быть достаточно

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

ldi Temp,(1<<OCIE1A)  ;разрешить прерывание компаратора
out TIMSK,Temp
не зная броду не лезь к вольтмоду
Реклама
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение спящий »

ВитГо извеняюсь чуть нето скинул.Прога была чуть редактирована.






.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.list



;
.def temp =r16;
.def delay =r17;
.def delay1 =r18;
.def temp2 =r19;
.def temp1=r20;

.org 0x000
rjmp init;

.org 0x0003
rjmp preriv; настраиваем прерывание PCINTo




zapoln:
ldi delay,0xB9;ПРОСТО ЗАДЕРЖКА
ldi delay1,0x01;
loop:
subi delay,1;
sbci delay1,0;
brcc loop;
ret



init:

ldi temp,0b11111110;
out DDRB,temp;
ldi temp,0;
out DDRD,temp;


ldi r16,high(RAMEND) ;
out SPH,r16 ;
ldi r16,low(RAMEND) ;
out SPL,r16 ;


ldi temp,0b00000001 ;устанавливаем контроль
sts pcicr,temp; ; прирывания на PCINT0-7


ldi temp,0b00000001
sts pcmsk0,temp;

sei;




start:
sei;
cpi r19,0; здесь просто программа на выводв ПОРТВ,написана для каждой ноги.
brne odin;
sbi portB,1;
rjmp start;

odin:
cpi r19,1;
brne dva;
sbi portB,2;
rjmp start;

dva:
cpi r19,2;
brne tri;
sbi portB,3;
rjmp start;

tri:
cpi r19,3;
brne chetiri;
sbi portB,4;
rjmp start;

chetiri:
cpi r19,4;
brne piat;
sbi portB,5;
rjmp start;

piat:
cpi r19,5;
brne shest;
sbi portB,6;
rjmp start;

shest:
sbi portB,7;
rjmp start;






preriv:
cli;

clr temp;
clr r19;

pol:
ldi delay,0x70;производим задержку в 1/4 импульса
ldi delay1,0x00;
polovina:
subi delay,1;
sbci delay1,0;
brcc polovina;


sudi2:
lsl r19;просто сдвиг
inc temp;
sbi portB,0;
rcall zapoln;
cbi portB,0;
cpi temp,8;нужны только последние 6 битов
brlo sudi2;

sbis pinB,0;проверяем портB,0 бит
rjmp nol;
sbr r19,1;если 1 то устанавливаем на R18 1
nol:


cpi temp,13;
brlo sudi2;
sei;
reti




Подкрепил проект



на счет апаратной части непойму:приемник вообще невидет пульт( может только чуть(этот сигнал через транзистор кидать? или он неправильно работает? Есть диаграмма с осцилографа. И схема подключения,как я понял TSOP инвертирован?
Вложения
Новая папка.rar
(18.25 КБ) 183 скачивания
диаграмма.GIF
(8.95 КБ) 353 скачивания
P8270007.GIF
(74.94 КБ) 343 скачивания
Реклама
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение спящий »

Нашел косяк:на выходе PortB 0 напряжение,вопрос,как его убрать ведь я его сделал как вход?
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение ВитГо »

спящий писал(а):Нашел косяк:на выходе PortB 0 напряжение,вопрос,как его убрать ведь я его сделал как вход?
когда пин порта является входом то записью в PortB управляем внутренним резистором подтяжки..
попробуй в этот пин записать ноль. должно помочь

на счет приемника - насколько я помню там важно чтобы частота передачи пульта равнялась частоте передачи приемника... приемники есть на 38 кгц, помоему на 16 кгц... какие еще есть не знаю..

может быть для приемника нужен какой нить усилитель еще ?

P.s осцилограмма совсем никакая у приемника :-(
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение ВитГо »

uwrtey писал(а):
ВитГо писал(а):и каждый может управлять своими ногами OC1A или OC1B
ну раз так, то этого должно быть достаточно

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

ldi Temp,(1<<OCIE1A)  ;разрешить прерывание компаратора
out TIMSK,Temp
этого достаточно...
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение uwrtey »

так?
Спойлер

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


;******************************************************************************
;старт
;******************************************************************************

reset:				; включение микроконтроллера

Sli				; глобальный запрет на прерывания


ldi Temp,low(RamEnd)		; инициализации стека	
out SPL,Temp			;



ldi Temp,0b00000100		;
out DDRB,Temp			; настроили порт "В" (0-ввод, 1-вывод)
				; 00000х00 - "вывод" на передатчик (PB3- 15 ножка)
				; хххх0000 - "ввод" для чтения клавиатуры


ldi Temp,0b00001111		;
out DDRD,Temp 			; настраиваем порт "D" на вывод (0-ввод, 1-вывод)
				; 0000хххх - на сканирование столбцов клавы


ldi Temp,(1<<OCIE1A)		; разрешить прерывание компаратора
out TIMSK,Temp


ldiTemp,(1<<COM1A0)		;переключать ножку "OC1A" по совпадению (PB3- 15 ножка)
out TCCR1A.Temp			;*1


ldiTemp,(1<<wgm12)|(1<<cs10)	;подключили режим "CTC" (вместе с *1) и установили тактовый сигнал = CK (1:1)
out TCCR1B.Temp

				; инициализация компаратора
ldi Temp,0xC			; 3кГц,  1/3000=0,00033сек=330мкс,   330/2=165мкс длительность импульса или паузы(время-Т)
out OCR1AH,Temp			; 0,05мкс*65535=3276,75    3276,75>165 --- по этому не будем делить тактовую частоту (СК)
ldi Temp,0xE4			; 165мкс/0,05мкс=3300 тиков таймера  3300=CE4(hex)   
out OCR1AL,Temp			;


ldi Temp,0			;обнуление таймера при включении
out TCNT1H,Temp
out TCNT1L,Temp


cei				;глобальное разрешение прерываний
        
;******************************************************************************
Режим CTC (сброс при совпадении)
Шестнадцатиразрядные таймеры T1/T3 имеют возможность самостоятельно сбрасывать счётный регистр сразу после его совпадения с регистром сравнения, после чего счёт автоматически продолжается с нулевого значения. Такой режим называется режимом сброса при совпадении (CTC) и может быть использован в частности для генерации сигналов фиксированной частоты.
Изменение состояния вывода OCnA при совпадении с регистром сравнения
Во всех микроконтроллерах ATmega имеется вывод с альтернативной функцией OC1A или OC3A. Настроенный на выход, он может изменять своё состояние в момент совпадения значений счётного регистра и регистра сравнения. Характер этих изменений пределяется комбинацией битов COMnA0 и COMnA1 в регистре TCCRnA, например:
COMnA1=0, COMnA0=0 - таймер отключен от вывода OCnA;
COMnA1=0, COMnA0=1 - состояние вывода меняется на противоположное;
COMnA1=1, COMnA0=0 - OCnA сбрасывается в ноль;
COMnA1=1, COMnA0=1 - OCnA устанавливается в единицу.
не зная броду не лезь к вольтмоду
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение ВитГо »

управление прерываниями это cli и sei

прерывания по сравнению лучше включать после настройки таймера и его режимов сравнения
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение uwrtey »

вот так?
Спойлер

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

;******************************************************************************
;старт
;******************************************************************************

reset:            ; включение микроконтроллера

Sli            ; глобальный запрет на прерывания


ldi Temp,low(RamEnd)      ; инициализации стека   
out SPL,Temp         ;



ldi Temp,0b00000100      ;
out DDRB,Temp         ; настроили порт "В" (0-ввод, 1-вывод)
            ; 00000х00 - "вывод" на передатчик (PB3- 15 ножка)
            ; хххх0000 - "ввод" для чтения клавиатуры


ldi Temp,0b00001111      ;
out DDRD,Temp               ; настраиваем порт "D" на вывод (0-ввод, 1-вывод)
                                           ; 0000хххх - на сканирование столбцов клавы

ldiTemp,(1<<COM1A0)      ;переключать ножку "OC1A" по совпадению (PB3- 15 ножка)
out TCCR1A.Temp              ;*1


ldiTemp,(1<<wgm12)|(1<<cs10)   ;подключили режим "CTC" (вместе с *1) и установили тактовый сигнал = CK (1:1)
out TCCR1B.Temp

                                          ; инициализация компаратора
ldi Temp,0xC                   ; 3кГц,  1/3000=0,00033сек=330мкс,   330/2=165мкс длительность импульса или паузы(время-Т)
out OCR1AH,Temp         ; 0,05мкс*65535=3276,75    3276,75>165 --- по этому не будем делить тактовую частоту (СК)
ldi Temp,0xE4                  ; 165мкс/0,05мкс=3300 тиков таймера  3300=CE4(hex)   
out OCR1AL,Temp         ;

ldi Temp,(1<<OCIE1A)      ; разрешить прерывание компаратора
out TIMSK,Temp


ldi Temp,0                       ;обнуление таймера при включении
out TCNT1H,Temp
out TCNT1L,Temp


cei            ;глобальное разрешение прерываний
        
;******************************************************************************
не зная броду не лезь к вольтмоду
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение ВитГо »

пора поставить avr studio и начать набирать программу, периодически нажимая F7 и проверяя правильность написанного :-)
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение uwrtey »

вечером поставлю......(сейчас на работе я)
Ты не мог бы объяснить немного теории, о том как будет формироваться сигнал на выходе мк ...
я так понял, что при совпадении счетчика с числом загруженным в OCR1A,
1) на выходе "OC1A" меняется сигнал (с нуля на еденицу или наоборот ) (тут какой то генератор получается : :dont_know: 010101010101010101 ?? это что то вроде "манчестера" что ли получится ??? http://en.wikipedia.org/wiki/File:Manch ... ntions.svg)
2) и начинает обрабатываться прерывание .....
Последний раз редактировалось uwrtey Пн авг 27, 2012 16:04:25, всего редактировалось 2 раза.
не зная броду не лезь к вольтмоду
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение спящий »

Чето я несовсем понял на счет манчестерского кода:
11000000000001
как я понял красным цветом это выставляется оборудовоние-ненужно,синим цветом это наш код на данном примере число 1 ,я так понял?соответственно 2
000010
000011 это 3?
ты кнул в осциллограф и нето(инвертированный?).
Короче я правильно понял?али нет?)
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение ВитГо »

неее, манчестер здесь ни при чем.. там фазовое кодирование... пока для нас это сложно :-)))

у нас передается импульс фиксированной ширины и пауза между импульсами кодирует сам бит передаваемых данных

где то выше есть картинка ! там все правильно..

поэтому и при передаче нуля и при передаче единицы - будет импульс и пауза после него

примерный алгоритм передачи

1 сбрасываем tcnt1 в ноль
2 ВКЛЮЧАЕМ СЧЕТЧИК Т1 (до этого должен быть выключен)
3 задаем в ocr1a длительность 3300 (или сколько мы там рассчитывали ?)
4 передается импульс,
5 после прерывания, передается пауза, для определения ее длительности в ocr1a - мы 6загружаем в ocr1a значение 3300 для передачи единицы, и 6600 для нуля..

7 опять ждем прерывания, после которого переходим к шагу 3

так передаются последовательно биты

заодно рассчитываем четность и передаем после нашей пачки бит данных - бит четности
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение uwrtey »

ну вот, теперь более-менее понятно.. :beer:
сейчас попробую установить avr-студию на этот пк
управление прерываниями это cli и sei
...дошло :oops: (сейчас в своем блокнотике исправлю)
не зная броду не лезь к вольтмоду
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение uwrtey »

установил АВР Студио 5 :)
не зная броду не лезь к вольтмоду
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение Sergi »

Немного не в тему. Вот сейчас запустил цифровой канал передачи. 2 пропорциональных команды и 16 дискретных. Пульт управления ATMega16 + MRF49, приемник ATMega88 + MRF49. Есть исходники на С. Дешифрация - побайтный разбор пакета. TC вроде бы не указал какими RF модулями он пользуется. Мне кажется с цифровой передачей канал надежнее будет. Завтра испытания "в поле".
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Пропорциональное управление на МК (Знание=Сила)

Сообщение uwrtey »

...круто
не зная броду не лезь к вольтмоду
Ответить

Вернуться в «Периферия»