а чем отличаются OCIE1A от OCIE1B? ( и почему их два?)
Пропорциональное управление на МК (Знание=Сила)
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
а чем отличаются OCIE1A от OCIE1B? ( и почему их два?)
не зная броду не лезь к вольтмоду
- Реклама
Re: Пропорциональное управление на МК (Знание=Сила)
Здравсвуйте,сделал программу RC5 приемник:Срабатывает по команде PCINTO ,пропускает первые 8 битов(они нах ненужны- хочу чтобы от любого пульта работал),остальные записывает и выводит в порт.
вроде в протеусе пашет.
Начал собирать,собрал - неработает. Пуль тPHILIPS RC-0764/70 ,приемник TSOP1736 - начал мерить осцилографом на выходе приемника 0,нечего( попробывал еще 2 всеравно 0( В чем причина,или сигнал маленький?
вроде в протеусе пашет.
Начал собирать,собрал - неработает. Пуль тPHILIPS RC-0764/70 ,приемник TSOP1736 - начал мерить осцилографом на выходе приемника 0,нечего( попробывал еще 2 всеравно 0( В чем причина,или сигнал маленький?
- Вложения
-
- Новая папка.rar
- (17.9 КБ) 166 скачиваний
Re: Пропорциональное управление на МК (Знание=Сила)
читай даташит !uwrtey писал(а):
а чем отличаются OCIE1A от OCIE1B? ( и почему их два?)
их два потому что у таймера Т1 два регистра сравнения : OCR1A и OCR1B и они могут работать отдельно друг от друга, генеря свои прерывания по сравнению (которые разрешаются битами OCIE1A от OCIE1B регистра TIMSK) и каждый может управлять своими ногами OC1A или OC1B
вообще микроконтроллеры во многом очень хорошо продуманы: чтобы не делать чтото руками, а переложить работу на них
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: Пропорциональное управление на МК (Знание=Сила)
ну раз так, то этого должно быть достаточноВитГо писал(а):и каждый может управлять своими ногами OC1A или OC1B
Код: Выделить всё
ldi Temp,(1<<OCIE1A) ;разрешить прерывание компаратора
out TIMSK,Temp
не зная броду не лезь к вольтмоду
- Реклама
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 инвертирован?
.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 скачивания
Re: Пропорциональное управление на МК (Знание=Сила)
Нашел косяк:на выходе PortB 0 напряжение,вопрос,как его убрать ведь я его сделал как вход?
Re: Пропорциональное управление на МК (Знание=Сила)
когда пин порта является входом то записью в PortB управляем внутренним резистором подтяжки..спящий писал(а):Нашел косяк:на выходе PortB 0 напряжение,вопрос,как его убрать ведь я его сделал как вход?
попробуй в этот пин записать ноль. должно помочь
на счет приемника - насколько я помню там важно чтобы частота передачи пульта равнялась частоте передачи приемника... приемники есть на 38 кгц, помоему на 16 кгц... какие еще есть не знаю..
может быть для приемника нужен какой нить усилитель еще ?
P.s осцилограмма совсем никакая у приемника
Re: Пропорциональное управление на МК (Знание=Сила)
этого достаточно...uwrtey писал(а):ну раз так, то этого должно быть достаточноВитГо писал(а):и каждый может управлять своими ногами OC1A или OC1BКод: Выделить всё
ldi Temp,(1<<OCIE1A) ;разрешить прерывание компаратора out TIMSK,Temp
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
так?
Спойлер
Код: Выделить всё
;******************************************************************************
;старт
;******************************************************************************
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 устанавливается в единицу.
не зная броду не лезь к вольтмоду
Re: Пропорциональное управление на МК (Знание=Сила)
управление прерываниями это cli и sei
прерывания по сравнению лучше включать после настройки таймера и его режимов сравнения
прерывания по сравнению лучше включать после настройки таймера и его режимов сравнения
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
вот так?
Спойлер
Код: Выделить всё
;******************************************************************************
;старт
;******************************************************************************
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 ;глобальное разрешение прерываний
;******************************************************************************не зная броду не лезь к вольтмоду
Re: Пропорциональное управление на МК (Знание=Сила)
пора поставить avr studio и начать набирать программу, периодически нажимая F7 и проверяя правильность написанного 
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
вечером поставлю......(сейчас на работе я)
Ты не мог бы объяснить немного теории, о том как будет формироваться сигнал на выходе мк ...
я так понял, что при совпадении счетчика с числом загруженным в OCR1A,
1) на выходе "OC1A" меняется сигнал (с нуля на еденицу или наоборот ) (тут какой то генератор получается :
010101010101010101 ?? это что то вроде "манчестера" что ли получится ??? http://en.wikipedia.org/wiki/File:Manch ... ntions.svg)
2) и начинает обрабатываться прерывание .....
Ты не мог бы объяснить немного теории, о том как будет формироваться сигнал на выходе мк ...
я так понял, что при совпадении счетчика с числом загруженным в OCR1A,
1) на выходе "OC1A" меняется сигнал (с нуля на еденицу или наоборот ) (тут какой то генератор получается :
2) и начинает обрабатываться прерывание .....
Последний раз редактировалось uwrtey Пн авг 27, 2012 16:04:25, всего редактировалось 2 раза.
не зная броду не лезь к вольтмоду
Re: Пропорциональное управление на МК (Знание=Сила)
Чето я несовсем понял на счет манчестерского кода:
11000000000001
как я понял красным цветом это выставляется оборудовоние-ненужно,синим цветом это наш код на данном примере число 1 ,я так понял?соответственно 2
000010
000011 это 3?
ты кнул в осциллограф и нето(инвертированный?).
Короче я правильно понял?али нет?)
11000000000001
как я понял красным цветом это выставляется оборудовоние-ненужно,синим цветом это наш код на данном примере число 1 ,я так понял?соответственно 2
000010
000011 это 3?
ты кнул в осциллограф и нето(инвертированный?).
Короче я правильно понял?али нет?)
Re: Пропорциональное управление на МК (Знание=Сила)
неее, манчестер здесь ни при чем.. там фазовое кодирование... пока для нас это сложно
))
у нас передается импульс фиксированной ширины и пауза между импульсами кодирует сам бит передаваемых данных
где то выше есть картинка ! там все правильно..
поэтому и при передаче нуля и при передаче единицы - будет импульс и пауза после него
примерный алгоритм передачи
1 сбрасываем tcnt1 в ноль
2 ВКЛЮЧАЕМ СЧЕТЧИК Т1 (до этого должен быть выключен)
3 задаем в ocr1a длительность 3300 (или сколько мы там рассчитывали ?)
4 передается импульс,
5 после прерывания, передается пауза, для определения ее длительности в ocr1a - мы 6загружаем в ocr1a значение 3300 для передачи единицы, и 6600 для нуля..
7 опять ждем прерывания, после которого переходим к шагу 3
так передаются последовательно биты
заодно рассчитываем четность и передаем после нашей пачки бит данных - бит четности
у нас передается импульс фиксированной ширины и пауза между импульсами кодирует сам бит передаваемых данных
где то выше есть картинка ! там все правильно..
поэтому и при передаче нуля и при передаче единицы - будет импульс и пауза после него
примерный алгоритм передачи
1 сбрасываем tcnt1 в ноль
2 ВКЛЮЧАЕМ СЧЕТЧИК Т1 (до этого должен быть выключен)
3 задаем в ocr1a длительность 3300 (или сколько мы там рассчитывали ?)
4 передается импульс,
5 после прерывания, передается пауза, для определения ее длительности в ocr1a - мы 6загружаем в ocr1a значение 3300 для передачи единицы, и 6600 для нуля..
7 опять ждем прерывания, после которого переходим к шагу 3
так передаются последовательно биты
заодно рассчитываем четность и передаем после нашей пачки бит данных - бит четности
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
ну вот, теперь более-менее понятно..
сейчас попробую установить avr-студию на этот пк
(сейчас в своем блокнотике исправлю)
сейчас попробую установить avr-студию на этот пк
...дошлоуправление прерываниями это cli и sei
не зная броду не лезь к вольтмоду
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Пропорциональное управление на МК (Знание=Сила)
установил АВР Студио 5 
не зная броду не лезь к вольтмоду
Re: Пропорциональное управление на МК (Знание=Сила)
Немного не в тему. Вот сейчас запустил цифровой канал передачи. 2 пропорциональных команды и 16 дискретных. Пульт управления ATMega16 + MRF49, приемник ATMega88 + MRF49. Есть исходники на С. Дешифрация - побайтный разбор пакета. TC вроде бы не указал какими RF модулями он пользуется. Мне кажется с цифровой передачей канал надежнее будет. Завтра испытания "в поле".


