Например TDA7294

Форум РадиоКот • Просмотр темы - Пропорциональное управление на МК (Знание=Сила)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн дек 15, 2025 10:38:01

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 297 ]     ... , , , , 15
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Чт сен 27, 2012 22:05:03 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
вот схему накидал
Вложение:
2.jpg [169.2 KiB]
Скачиваний: 762

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Сб сен 29, 2012 23:18:00 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
для начала нужно все таки определиться что мы будем передавать (лог_1 или лог_0 )в то время, когда не нажата ни одна кнопка
и после этого поправить код передатчика
а уж потом определятся с алгоритмом декодирования
,,,
я все же склоняюсь к тому, что во время отсутствия команд передавать лог_0 - это очень экономично
,,,
теперь нужно определится как отличать команду от помехи...

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Вс сен 30, 2012 19:08:00 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
сегодня буду тестировать прошивку передатчика
вот схему переделал
добавил разъем для внутрисхемной прошивки.
И еще поставил выключатель, который будет замкнут на момент прошивки
Вложение:
с разъемом.GIF [56.36 KiB]
Скачиваний: 483

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


Последний раз редактировалось uwrtey Вс сен 30, 2012 21:15:36, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Вс сен 30, 2012 20:30:15 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
:oops: мда, не шьется мк по такой схеме! видимо сопротивление резисторов клавиатуры слишком мало ( 1 кило Ом). отпаял резисторы на момент прошивки, фьюзы не трогал - стоят заводские
........прошил
на выходе постоянно импульсы длительностью 5 милисек
пойду еще разок в код гляну......
вот кое что уже поправил
Вложение:
transmitt1.4.asm [10.43 KiB]
Скачиваний: 409

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


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср окт 03, 2012 13:27:21 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
ну вот очередное исправление
Вложение:
transmit1.5.rar [21.4 KiB]
Скачиваний: 188

теперь при нажатии одной из кнопок, появляются импульсы длительностью примерно 13 мили секунд и паузы длительностью 5 мили секунд :shock: :dont_know:
все исправления отмечены знаками вопроса
Спойлер
Код:

.def   Temp=R16
.def   Temp1=R17
.def   Temp2=R18
.def   Temp3=R19
.def   Temp4=R20
.def   Temp5=R21
.def   Temp6=R22
.def   Temp7=R23
.def   Temp8=R24
.def   Temp9=R25


.dseg         ;оперативка

key_buff: .byte 5   ; зарезервируем 5 байт в ОЗУ


;******************************************************************************

.EQU ImpLen=0xCE4          ; длина импульса
.EQU OneLen=0xCE4          ; длина паузы для единицы
.EQU NulLen=0x19C8         ; длина паузы для нуля

;******************************************************************************

.cseg

.org 0


rjmp RESET            ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset

.org   OC1Aaddr            ; (=0x0004) Timer/Counter1 Compare Match A

rjmp OCR1A_COMP

.org INT_VECTORS_SIZE


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

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

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


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

   
   ldi Temp,0b00001111      ; настроили порт "В" (0-ввод, 1-вывод)
   out DDRB,Temp         ; 0000х000 - "вывод" на передатчик (PB3- 15 ножка)
               ; хххх0000 - "ввод" для чтения строк клавиатуры
               ; 00000ххх - "вывод" для того что бы при чтении клавиатуры получить "0" ??????????????????
                                    
   ldi Temp,0b00001111      ; настраиваем порт "D" (0-ввод, 1-вывод)
   out DDRD,Temp          ; 0000хххх - на вывод столбцов клавы


   ldi Temp,0b00000000      ; выводим на передатчик лог_0 ????????????????????????????????????????????????
   out portB,Temp   
               
   ldi Temp,0b00000000      ; установили тактовый сигнал = CK 0
   out TCCR1B,Temp         ; таймер выключен!!!

   sei            ; глобальное разрешение прерываний
       



;*******************************************************************************
; главный цикл
;*******************************************************************************


Main_cicle:

   rcall keyboardread      ; вызов подпрограммы чтения клавиатуры

   rcall certain_buttons_keyboard   ; вызов подпрограммы проверки нажатия
   
   rjmp Main_cicle         ; циклимся



;*******************************************************************************
; цикл Чтения клавы и запись данных в ОЗУ
;*******************************************************************************

keyboardread:            ; метка - опрос клавиатуры

         
   ldi Temp,5         ; количество столбцов клавы = пять
         
   ldi Temp1,0b00000001      ; первый столбец

                      ; загружаем адрес метки массива (key_buff) находящейся в ОЗУ в регистровую пару X

   ldi XL,   low(key_buff)      ; младший байт адреса
   ldi XH,   high(key_buff)      ; старший байт адреса

keyboardread_loop:         ; цикл опроса

   out PortD,Temp1         ; выводим в порт "Д" значение "Temp1" для выбора столбца клавиатуры
   in Temp2,PinB         ; прочитали состояние столбца
         
   st X+,Temp2         ; сохраним в ОЗУ состояние столбца клавы,
                ; адрес в регстровой паре "X" автоматом увеличится на 1


   lsl Temp1         ; сдвинули единичку выбора столбца клавиатуры на 1
                ; позицию влево

   dec temp         ; уменьшим счетчик
   brne keyboardread_loop      ; если не все просканировали, то циклимся

   ret            ; возврат в главный цикл

       
;******************************************************************************************
; цикл проверки нажатия клавиатуры
;******************************************************************************************

certain_buttons_keyboard:
      

   ldi temp1,5         ; УСТАНОВИМ СЧЕТЧИК столбцов клавы   

                           ; загружаем адрес метки (key_buff) находящейся в ОЗУ в регистровую пару "Z"
   ldi ZL,low (key_buff)      ; младший байт адреса
   ldi ZH,high(key_buff)      ; старший байт адреса


Certain_button:

   ld Temp,Z+         ; загрузим данные в регистр из ОЗУ по адресу из регистровой пары "Z",
               ; и после этого адресс в регистровой паре автоматически увеличится на еденицу


   cpi Temp,0b00000000      ; проверяем, нажата ли какая ни будь кнопка?
   brne inform         ; если нажата то переходим на метку "inform"


   dec temp1         ; уменьшим счетчик
   brne Certain_button      ; если не все столбцы, то циклимся

metka:

   ret            ; возврат в главный цикл



;***********************************************************************************************
; вывод информации о состоянии клавиатуры в порт "Б"
;***********************************************************************************************

inform:               ; здесь мы включаем таймер


               

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


   LDI R19, 2         ; зададим фиксированную длительность импульса ( 0x200 видимо )
   OUT OCR1AH, R19         ; и выведем ее в порт сравнения
   LDI R19, 0   
   OUT OCR1AL ,R19       

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

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

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

   ldi R22, 0         ; фаза передачи

loop_wait_transmitt:         ; цикл ожидания завершения передачи

   cpi R22 , 7
   brne loop_wait_transmitt

   ldi temp1,0         ; обнулим "temp1", что бы точно выйти из цикла проверки нажатия клавиатуры ???????????????????

   ret            ; возврат в цикл проверки нажатия клавиатуры


;*******************************************************************************
;обработка прерывания
;*******************************************************************************

OCR1A_COMP:
               ; первоначальное значение R22 - 0
               ; таким образом сначала будет выполнена инициализации передачи

               ; проверяем фазу работы прерывания




   in temp,SREG         ; сохраняем "SREG"/////////////////////////////////////////////////////
   push temp


   CPI R22, 1
   BREQ transmitt_byte      ; фаза передачи байта

   CPI R22, 2
   BREQ transmitt_bite_imp      ; фаза передачи импульса бита в байте

   CPI R22, 3
   BREQ transmitt_bite_pause   ; фаза передачи паузы бита в байте

   CPI R22, 4
   BREQ transmitt_imp_chetn   ; фаза передачи импульса бита четности

   CPI R22, 5
   BREQ transmitt_pausa_chetn   ; фаза передачи паузы бита четности

   CPI R22, 6
   BREQ transmitt_complete      ; передача завершена, выключение прерываний


;****************************************************************************************************************

               ; инициализация передачи, (при R22=0)



   ldi R21,0         ; это будет счетчик единичек в передаче (четность)

   ldi yl,low(key_buff)      ; зададим адрес начала массива прочитанных кнопок в ргистровую пару "Y"
   ldi yh,high(key_buff)

   ldi R17,5         ; количество байт для передачи


transmitt_byte:            ; фаза начала передачи - передача байта

    ld temp,y+         ; прочитаем байт для передачи, увеличим на единицу адрес в "Y"

   ldi r18,8         ; количество бит в байте для передачи



   pop temp         ; извлекаем "SREG" ???????????????????????????????????????????????????????????
   out SREG, temp



transmitt_bite_imp:         ; фаза передачи импульса в передаваемом бите


   in temp,SREG         ; сохраняем "SREG" ???????????????????????????????????????????????????????????
   push temp



   LDI R19 ,high(ImpLen)      ; зададим фиксированную длительность импульса
   OUT OCR1AH, R19         ; и выведем ее в порт сравнения
   LDI R19,low(ImpLen)   
   OUT OCR1AL ,R19       

   LDI  R22, 3         ; в следующий раз передаем паузу




int_reti:            

   pop temp         ; извлекаем "SREG" ////////////////////////////////////////////////////////////
   out SREG, temp

   RETI            ; точка выхода из прерывания


;**********************************************************************************************************************

transmitt_bite_pause:         ; фаза передачи паузы в передаваемом бите

               ; здесь кодируем импульс для бита

   in temp,SREG         ; сохраняем "SREG" ????????????????????????????????????????????????????????????
   push temp


   LDI XL,low(Nullen)      ; длительность для передачи нуля
   LDI XH,high(Nullen)

   ROL temp         ; двигаем байт влево (циклический сдвиг влево)
   BRCC send_nullen      ; если "С"=0 то записываем нулевую длительность

   
   LDI XL,low(onelen)      ; длительность для передачи единицы
   LDI XH,high(onelen)

   INC R21            ; передаем единицу - увеличим счетчик единичек (четность)

send_nullen:

   OUT OCR1AH,XH         ; установим длительность
   OUT OCR1AH,XL         
               
   LDI R22,2         ; в следующий раз передадим импульс бита

   dec R18            ; уменьшим счетчик бит на передачу
   brne int_reti         ; если это непоследний бит в байте - то выход из прерывания

   LDI R22,1         ; в следующий раз передадим новый байт

   dec R17            ; уменьшим счетчик Байт для передачи
   brne int_reti         ; если это не последний байт в массиве - то выход из прерывания
                   
   LDI R22,4         ; в следующий раз передадим импульс бита четности

   RJMP int_reti         ; выход из прерывания

;*********************************************************************************************************************                   


transmitt_imp_chetn:         ; передача импульса бита четности




   in temp,SREG         ; сохраняем "SREG" ???????????????????????????????????????????????????????????
   push temp



   
   LDI R19 ,high(ImpLen)      ; зададим фиксированную длительность импульса
   OUT OCR1AH, R19         ; и выведем ее в порт сравнения
   LDI R19,low(ImpLen)   
   OUT OCR1AL,R19       


   LDI R22,5         ; в следующий раз передаем паузу бита четности

   rjmp int_reti         ; выход из прерывания

;**********************************************************************************************************************


transmitt_pausa_chetn:         ; передача паузы бита четности

               ; здесь кодируем длительность паузы для бита четности



   in temp,SREG         ; сохраняем "SREG" ???????????????????????????????????????????????????????????
   push temp




   LDI XL,low(Nullen)      ; длительность паузы для передачи нуля
   LDI XH,high(Nullen)

   COM R21            ; Побитная инверсия

   ROR R21            ; Циклический сдвиг вправо

   BRCC send_chetn       ; если "С"=0 то записываем нулевую длительность

   LDI XL,low(onelen)      ; длительность паузы для передачи единицы
   LDI XH,high(onelen)

send_chetn:

   OUT OCR1AH,XH         ; установим длительность
   OUT OCR1AH,XL         

   LDI R22,6         ; R22=6  ОТКЛЮЧЕНИЕ ПРЕРЫВАНИЯ
   rjmp int_reti         ; выход из прерывания

;*************************************************************************************************************************

transmitt_complete:         ; КОД ДЛЯ ОТКЛЮЧЕНИЯ ПРЕРЫВАНИЙ


   in temp,SREG         ; сохраняем "SREG" ???????????????????????????????????????????????????????????
   push temp


   ldi Temp,0b00000000      ; установили тактовый сигнал = CK 0 
   out TCCR1B,Temp         ; таймер выключен!!!


   ldi Temp,0b00000000      ; выводим на передатчик лог_0 ????????????????????????????????????????????????
   out portB,Temp   
   
   LDI R22, 7         ; Признак окончания передачи
   rjmp int_reti         ; выход из прерывания   

;*************************************************************************************************************************

сейчас попробую разобраться почему паузы короче чем импульсы......
(я, правда, толком не умею пользоваться осциллографом.....может смотрю что не так, как надо)

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Чт окт 04, 2012 11:39:00 
Поставщик валерьянки для Кота
Аватар пользователя

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср янв 30, 2013 11:23:52 
Родился

Зарегистрирован: Пт апр 20, 2007 12:22:27
Сообщений: 5
Рейтинг сообщения: 0
Sergi писал(а):
Немного не в тему. Вот сейчас запустил цифровой канал передачи. 2 пропорциональных команды и 16 дискретных. Пульт управления ATMega16 + MRF49, приемник ATMega88 + MRF49. Есть исходники на С. Дешифрация - побайтный разбор пакета. TC вроде бы не указал какими RF модулями он пользуется. Мне кажется с цифровой передачей канал надежнее будет. Завтра испытания "в поле".


А можно посмотреть исходник, схему ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср янв 30, 2013 20:08:04 
Мучитель микросхем

Карма: 5
Рейтинг сообщений: 50
Зарегистрирован: Ср янв 04, 2012 11:57:40
Сообщений: 411
Откуда: Алчевск
Рейтинг сообщения: 0
Исходник передачи здесь rfpult на mega16; приема на mega88 boat88
пока не могу организовать обратную передачу
внимание : это все черновики! Если необходимо, схему нарисую позже.
В поле связь не терялась на 150м при скорости 9600. Управлть объектом в 0,5м длиной с такого расстояния проблематично.
собственно схемы можно посмотреть на http://vg.ucoz.ru/forum/8-57-1


Вложения:
boat88.c [9.91 KiB]
Скачиваний: 356
RFpult3.c [20.07 KiB]
Скачиваний: 392
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Пропорциональное управление на AVR.
СообщениеДобавлено: Чт янв 31, 2013 13:46:52 
Открыл глаза

Зарегистрирован: Пт июн 15, 2012 13:11:36
Сообщений: 79
Рейтинг сообщения: 0
Помогите написать прошивку под atmega8,для создания 8-канального PPM кодера. В сети есть готовые PPM кодеры но сделанные на PIC контроллерах, а я учусь пока только на AVR ,и хочу понять как создавать PPM сигнал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Пт фев 22, 2013 15:57:15 
Открыл глаза

Зарегистрирован: Пт июн 15, 2012 13:11:36
Сообщений: 79
Рейтинг сообщения: 0
Ну помогите хоть кто-нибудь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Пт фев 22, 2013 19:01:11 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
учитесь создавать хотя бы какой-нибудь сигнал!
потом изучите PPM сигнал и реализуйте его на основе знаний полученных от создания любых сигналов.

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Сб фев 23, 2013 02:02:11 
Вымогатель припоя
Аватар пользователя

Карма: 15
Рейтинг сообщений: 87
Зарегистрирован: Вт янв 01, 2013 15:51:19
Сообщений: 513
Откуда: Vilnius
Рейтинг сообщения: 0
...может повторюсь ..поищите книгу "10 практических устройств на AVR-микроконтроллерах" КНИГА 3 А.В.Кравченко 2011, помоему там хорошо расписано пропорцианальное радиоуправление(234стр).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Сб фев 23, 2013 02:06:30 
Открыл глаза

Зарегистрирован: Пт июн 15, 2012 13:11:36
Сообщений: 79
Рейтинг сообщения: 0
Jurkin писал(а):
поищите книгу "10 практических устройств на AVR-микроконтроллерах" КНИГА 3 А.В.Кравченко 2011.

Спасибо почитаю!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Сб фев 23, 2013 03:26:54 
Открыл глаза

Зарегистрирован: Пт июн 15, 2012 13:11:36
Сообщений: 79
Рейтинг сообщения: 0
Прочитал! Посмотрел на пример программы но ничего не понял,язык программирования какой то другой . Я в CodeVisionAvr научился программки писать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Сб фев 23, 2013 12:56:45 
Вымогатель припоя
Аватар пользователя

Карма: 15
Рейтинг сообщений: 87
Зарегистрирован: Вт янв 01, 2013 15:51:19
Сообщений: 513
Откуда: Vilnius
Рейтинг сообщения: 0
...ну там родной avr-asm, а его желательно маломальски для начала изучить - лучше будете понимать работу мк. Ну даже не это главное, там расписан алгоритм по простому и на чём вы его реализуете это уже другое дело...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Вс фев 24, 2013 14:20:38 
Открыл глаза

Зарегистрирован: Пт июн 15, 2012 13:11:36
Сообщений: 79
Рейтинг сообщения: 0
Не могли бы вы помочь мне с написанием программы? Я думаю многим людям понадобится.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Пн фев 25, 2013 02:52:59 
Вымогатель припоя
Аватар пользователя

Карма: 15
Рейтинг сообщений: 87
Зарегистрирован: Вт янв 01, 2013 15:51:19
Сообщений: 513
Откуда: Vilnius
Рейтинг сообщения: 0
...ой, нет ..задач своих выше крыши ...а в данном случае лучше купить, благо рынок под завязку на любой вкус. Собственная разработка в этом ракурсе интересна разве что на побаловаться, какие идеи реализовать, что ни у кого нету - типа передовать/принимать телеметрию какую хитрую к примеру или ещё чего этакого... а так, лучше в магазин, а потом глядишь и дороботать готовое под свои хотелки ;)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 297 ]     ... , , , , 15

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y