Специальные цены   новые товары
Закрытая тема
Страница 5 из 6 ПерваяПервая ... 3 4 5 6 ПоследняяПоследняя
Показано с 161 по 200 из 204

Как принять сигнал с приемника в AVR (PWM|Digital)

Тема раздела Бортовая электроника в категории Cамолёты - Общий; Сообщение от Probelzaelo таймер 1 даже инициализируется, но как то ни пе при делах не. он используется для подсчета длительности ...

  1. #161
    Забанен
    Регистрация
    08.01.2012
    Адрес
    Казань
    Возраст
    31
    Сообщений
    771
    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    таймер 1 даже инициализируется, но как то ни пе при делах
    не. он используется для подсчета длительности импульсов ШИМ. комментарии заменил.
    вот подчистил мусор. добавил код для остальных каналов.

    Код:
    .device         ATmega88PA
    .include "C:\Program Files\Atmel\AVR Studio 5.0\avrassembler\include\m88PAdef.inc"
    
    .def Temp=r16
    .def Temp1=r17
    .def Temp2=r18
    .def Temp3=r19
    .def Temp4=r20
    .def Temp5=r21
    
    .def	RxChannel1StartL	=r0
    .def	RxChannel1StartH	=r1
    
    .def	RxChannel2StartL	=r2
    .def	RxChannel2StartH	=r3
    
    .def	RxChannel3StartL	=r4
    .def	RxChannel3StartH	=r5
    
    .def	RxChannel1L		=r8
    .def	RxChannel1H		=r9
    
    .def	RxChannel2L		=r10
    .def	RxChannel2H		=r11
    
    .def	RxChannel3L		=r12
    .def	RxChannel3H		=r13
    
    .def	tisp=r14
    
    
    .cseg    ;обозначает начало программного сегмента 
    
    .org 0 ;задает начальный адрес. В данном случае он = 0
    
    	rjmp reset
    	rjmp RxChannel2   ;INT0   PD2
    	rjmp RxChannel3   ;INT1   PD3
    	rjmp unused
    	rjmp unused
    	rjmp RxChannel1   ;PCINT17  PD1
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	rjmp unused
    	
    unused:	reti
             
    ;************************
    ;прерывания
    ;************************
    
    RxChannel1:
    	in tisp, sreg
    
    	sbis pind,1				;проверка состояния ножки
    	rjmp rx1m1
    
    	  
    	lds RxChannel1StartL, tcnt1l		;запись времени начала импульса
    	lds RxChannel1StartH, tcnt1h
    
    	
    	out sreg,tisp						
    	reti
    
    
    rx1m1:	
        lds RxChannel1L, tcnt1l			;запись времени конца импулса
    	lds RxChannel1H, tcnt1h
    
    	sub RxChannel1L, RxChannel1StartL  ;подсчет длительности
    	sbc RxChannel1H, RxChannel1StartH
    	
    	out sreg,tisp						
    	reti
    
    
    RxChannel2:
    
    	in tisp, sreg
    
    	sbis pind,2				;проверка состояния ножки
    	rjmp rx2m1
    
    
    	lds RxChannel2StartL, tcnt1l		;запись времени начала импульса
    	lds RxChannel2StartH, tcnt1h
    
    
    	out sreg,tisp				;выход сразу из прерывания		
    
    	reti
    
    
    rx2m1:	
        lds RxChannel2L, tcnt1l			;запись времени конца импулса
    	lds RxChannel2H, tcnt1h
    
    	sub RxChannel2L, RxChannel2StartL    ;подсчет длительности
    	sbc RxChannel2H, RxChannel2StartH
    
    
    	out sreg,tisp						
    
    	reti
    
    RxChannel3:
    
    
    	in tisp, sreg
    
    	sbis pind,3				;проверка состояния ножки
    	rjmp rx3m1
    
    
    	lds RxChannel3StartL, tcnt1l		;запись времени начала импульса
    	lds RxChannel3StartH, tcnt1h
    
    
    	out sreg,tisp						
    
    	reti
    
    
    rx3m1:	
        lds RxChannel3L, tcnt1l			;запись времени конца импулса
    	lds RxChannel3H, tcnt1h
    
    	sub RxChannel3L, RxChannel3StartL   ;подсчет длительности
    	sbc RxChannel3H, RxChannel3StartH
    
    	out sreg,tisp						
    
    	reti
    
    ;****************************************************
    ; ИНИЦИАЛИЗАЦИЯ
    ;****************************************************
    
    Reset:
              ldi Temp1,0   ;задержка запуска после сброса против всякой фигни
              ldi Temp2,0
    		  ldi Temp3,10
    	      
        l_res:
              dec Temp1
              brne l_res
    
              dec Temp2
              brne l_res
    
    		  dec Temp3
              brne l_res
    
    
    			ldi Temp,Low(ramend)	; Инициализация стека
    	        out spl,Temp		    
    			ldi Temp,High(ramend)
    	        out sph,Temp
    
    ;--- setup IO ---
             	;        76543210
    		  ldi Temp,0b11111111   ;настройка портов
    		  out DDRB,Temp          ;порт Б настроили на вывод
    		    ;        76543210
    		  ldi Temp,0b00000000 ;все вырубить
    		  out PortB,Temp
             	;        76543210
    		  ldi Temp,0b11110001  ;настройка портов
    		  out DDRD,Temp        ;1,2,3 ногу порта Д настроили на ввод
    		   	;        76543210
             ldi Temp,0b00001110  ;настройка портов в режиме чтения
    	     out PORTD,Temp       ;установили подтягивающий резистор однеркой.
    		                    ;нулем поставили 3 состояние с высоким сопротивлением.
    	
    ;--- Setup pin change interrupt on PD1, PD2, PD3, PB4
    			 ;установка разрешенных прерываний по ногам
    
    	   ;       76543210
    	ldi Temp,0b00000101	
    	sts pcicr,Temp
    		;      76543210
    	ldi Temp,0b00000010	
    	sts pcmsk2,Temp
    	
    	;          76543210
    	ldi Temp,0b00000101	
    	sts eicra,Temp
    	;       76543210
    	ldi Temp,0b00000011	
    	out eimsk,Temp		
    
    
    ;---- таймер 1 будет на 1MHz (8MHz/8) ----
    		;      76543210
    	ldi Temp,0b00000010
    	sts tccr1b,Temp
    	
    ;****************************************************
    ;прочие начальные установки
    ;****************************************************
    Load:	        
    
    	ldi xl,low(1500)		;загружаем константы
    	ldi xh,high(1500)
    
    	mov RxChannel1L,xl
    	mov RxChannel1H,xh
    	mov RxChannel2L,xl
    	mov RxChannel2H,xh
    	mov RxChannel3L,xl
    	mov RxChannel3H,xh
    	
    sei ;разрешить глобальные прерывания
    	
    		
    ;****************************************************
    ; ОСНОВНОЙ ЦИКЛ
    ;****************************************************
    
    Inf:     
               
    				ldi xl,low(1700)		;загружаем константы
    	            ldi xh,high(1700)       
    	
                    cp RxChannel1L,xl				
    	            cpc RxChannel1H,xh
    				BRSH da1
    
    				ldi xl,low(820)		;загружаем константы
    	            ldi xh,high(820)
    
    				cp RxChannel1L,xl				
    	            cpc RxChannel1H,xh
    				BRSH net1
    pinout1:
    				cbi PortB,1
    				cbi PortB,2
    
    timeflagon1:
     				ldi xl,low(1700)		;загружаем константы
    	            ldi xh,high(1700)       
    	
                    cp RxChannel2L,xl				
    	            cpc RxChannel2H,xh     ;проверка
    				BRSH da2
    
    				ldi xl,low(820)		;загружаем константы
    	            ldi xh,high(820)
    
    				cp RxChannel2L,xl		;проверка		 
    	            cpc RxChannel2H,xh
    				BRSH net2
    				
     pinout2:
                    cbi PortD,7
    				cbi PortB,0
    
    timeflagon2:
    				ldi xl,low(1700)		;загружаем константы
    	            ldi xh,high(1700)       
    	
                    cp RxChannel3L,xl			;проверка	
    	            cpc RxChannel3H,xh
    				BRSH da3
    
    				ldi xl,low(820)		;загружаем константы
    	            ldi xh,high(820)
    
    				cp RxChannel3L,xl			;проверка	
    	            cpc RxChannel3H,xh
    				BRSH net3
    
    pinout3:
                    cbi PortD,5
    				cbi PortD,6
    timeflagon3:
    		;rcall Delay ;вызов задержки
    
     rjmp Inf              ;бесконечный цикл           
     ;****************************************************
    
     da1:
         sbi PortB,1
        rjmp timeflagon1
    
    net1:
                    ldi xl,low(1350)		;загружаем константы
    	            ldi xh,high(1350)
    
    				cp RxChannel1L,xl		;проверка		
    	            cpc RxChannel1H,xh
    				BRSH pinout1
    	sbi PortB,2
    	rjmp timeflagon1
    
    
     da2:
         sbi PortB,0
        rjmp timeflagon2
    
    net2:
                    ldi xl,low(1350)		;загружаем константы
    	            ldi xh,high(1350)
    
    				cp RxChannel2L,xl		;проверка		
    	            cpc RxChannel2H,xh
    				BRSH pinout2
    	sbi PortD,7
    	rjmp timeflagon2
    
     da3:
         sbi PortD,5
        rjmp timeflagon3
    
    net3:
                    ldi xl,low(1350)		;загружаем константы
    	            ldi xh,high(1350)
    
    				cp RxChannel3L,xl		;проверка		
    	            cpc RxChannel3H,xh
    				BRSH pinout3
    	sbi PortD,6
    	rjmp timeflagon3
    все работает. входы ШИМ PD1,2,3. По прерываниям идет запись значений таймера и подсчет длины импульса. в основном коде идет анализ и вкл\выкл соответствующих ножек (PD5-7,PB0-2).

  2.  
  3. #162
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    lds RxChannel2StartL, tcnt1l ;запись времени начала импульса
    lds RxChannel2StartH, tcnt1h

    lds RxChannel2L, tcnt1l ;запись времени конца импулса
    lds RxChannel2H, tcnt1h

    sub RxChannel2L, RxChannel2StartL ;подсчет длительности
    sbc RxChannel2H, RxChannel2StartH

    а не проще в первых двух стороках в таймер заносить нули
    а вовторых двух строках уже считывать значение
    тогда третия пара строк уже не нужна!!!

    ща не помню точно работу таймера.. поэтому возник такой вопрос..
    таймер же вроде бежит по кругу без остановки... тоесть получается возможен такой вариант что первое значение считается..
    потом таймер переходит ноль.. и считывается второе значение.. каков будет результат работы устройства ???

    а ещё вопрос! этот вариант будет работать на приёмниках где канальные импульсы начинаются все вместе..??
    Последний раз редактировалось KGB; 12.01.2012 в 14:36.

  4. #163

    Регистрация
    02.03.2011
    Адрес
    Санкт-Петербург, Оренбург,
    Возраст
    50
    Сообщений
    3,023
    Цитата Сообщение от KGB Посмотреть сообщение
    у футабы в сбусе.. идёт инфа в 11 бит!!!! тоесть 2048!!! сам видел!!!!
    есть и 3072 те аж 12 бит(почему не 4096 не знаю), а кому нужны эти 11-12 бит? если даже 256 уровней различать на стиках и то избыточно для такой задачи как актИвное ручное управление, мягко говоря не менее 3 из этих бит можно смело выбросить, тем более что там у резисторов в стиках "шум" больше в разы чем точность установленного туда же АЦП, все эти "навороты" и "крутизна" лишь для того чтобы ну хоть как то оправдать утроенную цену для игрушки и "выпятить" ее по сравнению с конкурентами, не более того...
    Вот такое вот у меня есть ИМХО...

    Цитата Сообщение от Nesenin Посмотреть сообщение
    он используется для подсчета длительности импульсов ШИМ
    действительно используется, пропустил - не заметил ...

    Цитата Сообщение от KGB Посмотреть сообщение
    а ещё вопрос! этот вариант будет работать на приёмниках где канальные импульсы начинаются все вместе..??
    Если начинаются все вместе то по идее работать будет, но лишь по "случайному" стечению обстоятельств.

    Цитата Сообщение от KGB Посмотреть сообщение
    таймер же вроде бежит по кругу без остановки... тоесть получается возможен такой вариант что первое значение считается.. потом таймер переходит ноль.. и считывается второе значение..
    Так и есть. гдето 15 раз в секунду вроде должен ... 1М/65536=15.2587890625 самый верный способ уйти от этой ошибки это завести длинную переменную в которой считать время от старта и сделать еще и обработчик прерывания таймера с инкрементом системного времени.
    Второй вариант обнулять таймерпри старте импульса... тогда он до конца посчитать не должОн успеть в течении всей командной посылки... а если успеет то это уже повод для аудита, скорее всего сигнал потерялся.
    Последний раз редактировалось Probelzaelo; 12.01.2012 в 16:21.

  5. #164

    Регистрация
    28.07.2004
    Адрес
    Москва
    Возраст
    47
    Сообщений
    806
    Цитата Сообщение от KGB Посмотреть сообщение
    тоесть получается возможен такой вариант что первое значение считается.. потом таймер переходит ноль.. и считывается второе значение.. каков будет результат работы устройства ???
    Результат будет точно такой, как и без перехода через ноль. Это основы двоичной арифметики. К примеру, в 8-битном формате запись числа -236 ничем не отличается от записи числа 20.

    Цитата Сообщение от KGB Посмотреть сообщение
    а ещё вопрос! этот вариант будет работать на приёмниках где канальные импульсы начинаются все вместе..??
    Если вдруг удастся разыскать такой приёмник, то работать будет хреново. Успокаивает то, что производство таких приёмников на сегодняшний день крайне нецелесообразно.

  6.  
  7. #165

    Регистрация
    02.03.2011
    Адрес
    Санкт-Петербург, Оренбург,
    Возраст
    50
    Сообщений
    3,023
    Цитата Сообщение от Boroda Посмотреть сообщение
    К примеру, в 8-битном формате запись числа -236 ничем не отличается от записи числа 20.
    они еще как отличаются, а именно тем что в одном случае в 8 бит это диаппазон -127...+127 а в другом 0...255. в случае с таймером чтобы результат был один и тот же нужно таки своевременно отследить переполнение счетчика.

    Цитата Сообщение от Boroda Посмотреть сообщение
    Если вдруг удастся разыскать такой приёмник, то работать будет хреново.
    Встает естественный вопрос, как же все таки возникают канальные импульсы на выходах приемника. не далее как в в #83 посте этой же ветки было совсем если не обратное то слегка противоречащее утверждение...
    кто то имеет реальную временную диаграмму показывающую реальную картину кан.импульсов хотя бы для какой то одной модели их доступной кучи приемников?

    Пост #82
    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    Надеюсь что каналы ШИМят все же по очереди, и в том же порядке как это было принято из входящего PPM...
    Пост #83
    Цитата Сообщение от msv Посмотреть сообщение
    Не надейтесь.. Последовательно шимы появляются пожалуй только в простейших декодерах на сдвиговом регистре..
    Кто же видел правду?

    Вот обнаружил, кратенько, но доходчиво и с картинками описаны разные вариации генерации PWM сигналов на выходах мультиканальноого приемника и даже с алгоритмами. Я так понимаю что все эти варианты вполне живут в современных конструкциях. Хотя бы из тех соображений, что каждый из производителей пытается отличаться от других принятыми решениями, ради собственной "уникальности"
    Последний раз редактировалось Probelzaelo; 13.01.2012 в 01:47.

  8. #166
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    Цитата Сообщение от Boroda Посмотреть сообщение
    Если вдруг удастся разыскать такой приёмник, то работать будет хреново. Успокаивает то, что производство таких приёмников на сегодняшний день крайне нецелесообразно.
    чуш!!!! все приёмники 2.4гг от футабы так и работают!!!!
    все канальные импульсы начинаются в один момент!!!

    я вот просто тоже работал в аналогичной теме...над sbus шиной... поэтому и посмотрел осцилом как там что идёт!
    и у меня тоже возникла одна проблема которую я не решил!!!!
    а проблема такая!!! вот есть у нас 16каналов по 11бит и 2 канала по 8 бит.. тоесть в числовом виде!!!!
    как из этого сделать 18 каналов пвм импульсов!!!??? получается что нужен процик ч тактовой в мгц 100-150... либо специализированая МС..
    вот на логике это я могу сделать.. но будет куча корпусов
    а програмно смысл такой..что просто бежит счётчик...и на один его такт.. сравнивается с канальным значением.. тоесть это надо сделать 18 раз..
    а так как проц 8 бит. а оперируем в 16.. то код увеличивается ещё вдвое!!! кароче просто не успеваем...
    на меге8 с 16мгц можно успеть 1-2 канала всего
    а вот если канальные импульсы сдвигать один за одним.. то проблеммы появятся уже с их периодом!!!
    Последний раз редактировалось KGB; 13.01.2012 в 03:14.

  9. #167

    Регистрация
    02.03.2011
    Адрес
    Санкт-Петербург, Оренбург,
    Возраст
    50
    Сообщений
    3,023
    Цитата Сообщение от KGB Посмотреть сообщение
    чуш!!!! все приёмники 2.4гг от футабы так и работают!!!! все канальные импульсы начинаются в один момент!!!
    По логике такой вариант сам просится, алгоритм достаточно простой и быстрый выходит. сброс таймера в ноль и на все выходы подать активное напряжение, одновременно записью в регистр по 8 бит, после этого в цифровой компаратор таймера поместить длину самого короткого импульса, по срабатыванию снять активный бит и вписать следующее значение... и так пока не отработают все каналы... потом додерживается синхро пауза и все сначала...

    Цитата Сообщение от KGB Посмотреть сообщение
    а так как проц 8 бит. а оперируем в 16.. то код увеличивается ещё вдвое!!!
    так длинные каналы вроде как передаются в серии не целиком, а через раз "по половине", а 8-ми битные влезают целиком в каждую серию...

  10.  
  11. #168
    msv
    msv вне форума

    Регистрация
    05.03.2008
    Адрес
    Новокузнецк
    Возраст
    55
    Сообщений
    2,367
    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    алгоритм достаточно простой и быстрый выходит.
    Да, я сделал именно так. Сортировка по времени массива структуры (маска сброса (канал), время канала), установка уровня по всем каналам, сброс таймера и вперед.. в глухом цикле сравнение с очередным каналом и его сброс. Только прерывания должны быть на это время запрещены, что требует синхронизации с остальными процессами (получение значений итп.).

  12. #169

    Регистрация
    28.07.2004
    Адрес
    Москва
    Возраст
    47
    Сообщений
    806
    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    в случае с таймером чтобы результат был один и тот же нужно таки своевременно отследить переполнение счетчика.
    Нет, не нужно. Пусть 8-битный таймер меряет импульс шириной 20 тиков. Без переполнения 30-10=20, с переполнением 10-246=-236 Оба результата в 8-битном двоичном формате будут выглядеть как 10100

    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    кто то имеет реальную временную диаграмму
    Уже был пост #110 стараниями AndyBig. Вы хотите ещё таких-же картинок? Других мне пока получить не удалось.

    Цитата Сообщение от KGB Посмотреть сообщение
    чуш!!!! все приёмники 2.4гг от футабы так и работают!!!! все канальные импульсы начинаются в один момент!!!
    Большое спасибо за информацию! FASST никогда в руках не держал, надо срочно проверить эту не очень приятную новость!

    Цитата Сообщение от msv Посмотреть сообщение
    Да, я сделал именно так.
    Сергей, как боретесь с джиттером? Ведь чем больше каналов, и чем "одинаковее" их длительности, тем больше вероятность конфликта по времени спада импульсов?

  13. #170
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    Цитата Сообщение от Boroda Посмотреть сообщение
    Большое спасибо за информацию! FASST никогда в руках не держал, надо срочно проверить эту не очень приятную новость!
    а что её проверять то??? вот например приёмник 6014...
    тоесть 14 каналов.. период импульсов 14мс.. вот.. а если все 14к выстроить один за одним по фазе... и при максимальной длительности импульса получим
    14Х2=28мс... тоесть время в два раза больше времени периода

    Цитата Сообщение от Boroda Посмотреть сообщение
    Сергей, как боретесь с джиттером? Ведь чем больше каналов, и чем "одинаковее" их длительности, тем больше вероятность конфликта по времени спада импульсов?
    согласен! когда время не равно а очень близко и по цыклам ...лажа может получится.. не вариант..

    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    так длинные каналы вроде как передаются в серии не целиком, а через раз "по половине", а 8-ми битные влезают целиком в каждую серию...
    я говорю не про передаются а про обработку!!
    да и передаются не по половине а... 8+3_5+6_2+8+1 итд...
    Последний раз редактировалось KGB; 13.01.2012 в 13:31.

  14. #171

    Регистрация
    02.03.2011
    Адрес
    Санкт-Петербург, Оренбург,
    Возраст
    50
    Сообщений
    3,023
    Цитата Сообщение от KGB Посмотреть сообщение
    да и передаются не по половине а... 8+3_5+6_2+8+1 итд...
    я имел ввиду половина каналов сейчас, вторая потом )) чередуются, четные /нечетные.

  15. #172
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    я имел ввиду половина каналов сейчас, вторая потом )) чередуются, четные /нечетные.
    это где так каналы передаются???

    пс
    выше я описывал передачу по сбусу

  16. #173

    Регистрация
    02.03.2011
    Адрес
    Санкт-Петербург, Оренбург,
    Возраст
    50
    Сообщений
    3,023
    Цитата Сообщение от Boroda Посмотреть сообщение
    Уже был пост #110 стараниями AndyBig. Вы хотите ещё таких-же картинок?
    Спасибо, глянул, странно что я тот пост раньше пропустил, вроде стараюсь следить за темой.

    Пришла в голову мысль. (поздравлять не надо, поздно уже)
    А какая нам собственно разница, одновременно ли выходят канальные импульсы или поочередно? ведь если их выгонять одновременно, тогда приемнику надо каждый из них обработать, вычислить длину, сохранить, потом ее отработать на соответствующем канальном выходе, для этого придется задействовать таймер, но ведь во всем этом нет ни какого смысла, если только приемник не ужасно умный и сам знает что хочет. Но это уже, считай что это уже целый робот/автопилот с ручной корректировкой... Что то мне подсказывает что ни один приемник вообще не вычисляет эти длительности импульсов из приходящей серии. А тупо "сортирует" их по номеру и выставляют в канал один в один, точно так же как это бы сделал и сдвиговый регистр. В таком случае и погрешность в длину практически не будет внесена. Просто у импульса появятся красивые фронт и спад а сам импульс сдвинется по времени на несколько тактов CPU - на время реакции процессора, а она достаточно быстрая и главное одинакова в обоих случаях и при установке и при сбросе канала... зачем приемнику что то улучшать в сигнале или разбираться в нем?


    тогда перефразирую свой вопрос
    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    Кто же видел правду?
    Один из совершенно достоверных вариантов нам известен, но единственное ли это применение?
    Кто нибудь видел приемники работающие иначе? Очевидно Нужно посмотреть, проверить, как себя ведут приемники от разных производителей... хотя бы самых распространеных.

  17. #174
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    вот... это ..жолтая линия - 1й канал поданый в синхровнизацию
    а зелёная это 2й канал..345678 выглядят также!!!
    это приёмник Futaba R6208SB !
    также работают 4 6 7 8 и 14 каналов приёмники от футабы!
    Миниатюры Миниатюры Нажмите на изображение для увеличения
Название: 8.GIF‎
Просмотров: 43
Размер:	8.3 Кб
ID:	589777  

  18. #175
    msv
    msv вне форума

    Регистрация
    05.03.2008
    Адрес
    Новокузнецк
    Возраст
    55
    Сообщений
    2,367
    Цитата Сообщение от KGB Посмотреть сообщение
    когда время не равно а очень близко и по цыклам ...лажа может получится.. не вариант..
    Проц atmega88, тактовая 15мгц (от rfm22b), прога тупо на си (наверняка можно оптимизировать на асме). Измерял для 4-х каналов с одинаковым временем. Разница по длине импульса между 1-м и 4-м каналом <20мкс. Причем ошибка статическая, никакого життера нет.
    Код:
    //-----------------------------------------------------
    #define PPM_MIN_CH    1500   // 0.8ms*1875
    #define PPM_MAX_CH    4125   // 2.2ms*1875
    void OutPWM(void)
    {
    u_long l;
    u_char i, ff;
    union { u_int i; u_char ch[2]; } cnt;
    typedef struct { u_char mask; u_int val; } tagDataPWM;
    tagDataPWM DataPWM[6];
    u_char NumChPWM;
    tagDataPWM dp;
    const u_char mask[]={ 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe };
    
    for(i=0; i<6; i++) 
      { // scale
      DataPWM[i].mask=mask[i];
      l=gMainData.ChVal[i]; l*=(PPM_MAX_CH-PPM_MIN_CH); DataPWM[i].val=(u_int)(l/256);
      DataPWM[i].val+=PPM_MIN_CH;
      }
    ff=1;
    while(ff)
      { // sorting
      ff=0;
      for(i=0; i<(6-1); i++)
        if(DataPWM[i].val>DataPWM[i+1].val)
          {  dp=DataPWM[i]; DataPWM[i]=DataPWM[i+1]; DataPWM[i+1]=dp;  ff=1; }
      }
    NumChPWM=0;
    #asm("cli")
    PORTC=0x3f;
    TCNT1H=0x00;
    TCNT1L=0x00;
    while(NumChPWM<6)
      { // work
      cnt.ch[0]=TCNT1L; cnt.ch[1]=TCNT1H;
      if(cnt.i>=DataPWM[NumChPWM].val)
        {
        PORTC&=DataPWM[NumChPWM].mask;
        NumChPWM++;
        }
      }
    #asm("sei")  
    }
    //-----------------------------------------------------
    Написал на скорую руку для оценки работоспособности, но понравилось как работает.. и пока нет желания дальнейшей оптимизации..

  19. #176
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    я на си не понимаю... тока асм

  20. #177
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    появилась мысль!!! как быстро вывести паралельно канальные импульсы.
    вот время на обработку у нас гора!!! а вот время на вывод у нас строго ограничено!!!
    вот пример на 8ми каналах!!!
    11111111
    11111111
    10111111
    10111111
    10001111
    10001111
    00000011
    00000000
    00000000

    по горизонтали № канала
    по вертикали время!!!
    и всё это в озу!!!
    тоесть сперва подготавливаем типа маску.. а потом выводим её
    на 8 каналов в 2048 понадобится проц в 2к озу!!!

    а на 16 каналов вполне подойдёт ATmega644 4к озу!!!!

    4к маловато!!! по сбусу реально передаётся число больше чем 2048!!
    добавлено ещё 256!!! это поле тримера!
    + надо ещё гдето хранить сами данные считаные со сбуса!!! 36 байт!
    итого = 4096+512+32 это минимум для 16 каналов
    а каналы 17 и 18 так как они дискретные можно вывести со здвигом по фазе!!!.. и там всего дискретность 256
    тоесть ещё +256
    в 8к всё влазиет!!! итого процик ATmega1281
    Последний раз редактировалось KGB; 15.01.2012 в 02:59.

  21. #178

    Регистрация
    09.08.2003
    Адрес
    Москва
    Возраст
    54
    Сообщений
    8,119
    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    Кто же видел правду?
    Стандартный РРМ не позволяет организовать больше 8 нормальных каналов. Вариант пачки с общим передним фронтом содержит риски по питанию, связанные с одновременным стартом нескольких серв (см. тему про барабашек). Поэтому представляется логичным существование или появление промежуточного варианта (хотя-бы в качестве маркетингового хода), когда передние фронты канальных импульсов будут формироваться со смещением, скажем в 100 мкс.

  22. #179
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    Цитата Сообщение от V_Alex Посмотреть сообщение
    Вариант пачки с общим передним фронтом содержит риски по питанию, связанные с одновременным стартом нескольких серв (см. тему про барабашек).
    ну да!!! вся кантора футаба ацтой!! сидят там и нихрена не делают ?

  23. #180

    Регистрация
    09.08.2003
    Адрес
    Москва
    Возраст
    54
    Сообщений
    8,119
    И Спетрум - тоже . Щас все фирмы "отлаживают" технику непосредственно на покупателях. Патамушта все конкуренты так делают. А покупатели хавают и думают, что так и должно быть. Футаба серии "Голд" ходила 20 лет без ремонта, а щас все интересуются "где купить потенциометры". А вообще, когда к схеме добавился софт, жизнь стала гораздо интереснее. Но мир вокруг как-то быстро становится одноразовым.

  24. #181
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    V_Alex ... лет 5 назад ябы с вами согласился!

  25. #182

    Регистрация
    09.08.2003
    Адрес
    Москва
    Возраст
    54
    Сообщений
    8,119
    Да мне согласие как-бы и не требуется. Я в теме больше 20 лет и хорошо знаю, что глюки могут вызываться не только отдельными факторами, но также их комбинациями, которые невозможно воспроизвести на стенде. А в реале они возникают сами собой, порождая легенды о барабашках и киллсвичах, мешающих работе отличных фирменных приемников. Поэтому три главные детали в любом приемнике - хороший лоудроп и пара электролитов. Без этого ни один приемник работать нормально не будет.
    У меня щас есть конкретная задача - принять два канальных импульса с приемника с 16-битной разрядностью, обработать и выдать на выход в этом-же фрейме с разрядностью не хуже 10. Пока был единый РРМ стандарт, все было бело и пушисто, особенно, если при этом знаешь, какой приходит первым, а какой вторым. А вот если сценарий прохождения импульсов заранее неопределен, неизвестна последовательность и характер наложения импульсов друг на друга, все получается гораздо интереснее. Понимаю, что придется писать модуль распознавания сценариев, но душа жаждет халявы

    P.S. Теоретические рассуждения о том, что одного байта на канал на все про все - выше крыши, мне неинтересны.

  26. #183

    Регистрация
    02.03.2011
    Адрес
    Санкт-Петербург, Оренбург,
    Возраст
    50
    Сообщений
    3,023
    Цитата Сообщение от V_Alex Посмотреть сообщение
    У меня щас есть конкретная задача - принять два канальных импульса с приемника с 16-битной разрядностью, обработать и выдать на выход в этом-же фрейме с разрядностью не хуже 10.
    О! блин все с ног на голову. Но какой смысл получать хороший сигнал для "замены" его плохим? если удается оцифровать 16 бит, значит и дальше можно их же и передать. либо оцифровывать сразу с некоторой погрешностью допустим сразу проигнорить 2-4 бита и обрабатывать заведомо с 12-14 битной точностью.
    Единственное что приходит в голову в "оправдание" такой деятельности, это что тебе возможно хочется получить сигнализацию с пары лишних каналов, а потом их обработать совсем по своему закону? Сознавайся! И ставь задачу поточнее, возможно появятся и полезные идеи.

  27. #184

    Регистрация
    09.08.2003
    Адрес
    Москва
    Возраст
    54
    Сообщений
    8,119
    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    Сознавайся! И ставь задачу поточнее, возможно появятся и полезные идеи.
    Универсальный, нормально работающий V-tail смеситель, соответствующий требованию: "сделал, отдал, забыл"

  28. #185
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    Цитата Сообщение от V_Alex Посмотреть сообщение
    ...задача - принять два канальных импульса с приемника с 16-битной разрядностью, обработать и выдать на выход в этом-же фрейме с разрядностью не хуже 10.

    Пока был единый РРМ стандарт, все было бело и пушисто,

    Понимаю, что придется писать модуль распознавания сценариев, но душа жаждет халявы

    P.S. Теоретические рассуждения о том, что одного байта на канал на все про все - выше крыши, мне неинтересны.
    вот и я про то 16бит это уже довольно высокая точность но её всеравно не получить..азза не моментального срабатывания прерывания..
    проще получить эти данные с сбуса футабы!!! со 100% точностью

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

  29. #186

    Регистрация
    09.08.2003
    Адрес
    Москва
    Возраст
    54
    Сообщений
    8,119
    При аппаратном замере 16 бит получаются автоматически. Если мерять программно, хватит 12 бит. Серве нужно 10 бит. "PPM only" а-ля GWS делать не будем .

  30. #187
    msv
    msv вне форума

    Регистрация
    05.03.2008
    Адрес
    Новокузнецк
    Возраст
    55
    Сообщений
    2,367
    Для 16-бит один квант будет ~15ns...
    Цитата Сообщение от V_Alex Посмотреть сообщение
    Серве нужно 10 бит.
    Существуют сервы способные выдать точность <0.17град (даже для диапазона полного хода 180град)? И это реально необходимо для авиамодели?

  31. #188
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    проверил ещё раз!!!
    диапазон изменения числа в канале в сбус шине футабы
    0001 до 07FF

    первые 6 каналов идут в паралель!!! и только на них распространяется режим хайспид!!!
    а вот начиная с 7го!!! они отстают на 3мс от первых 6ти!!!

    тример работает от 2047 до 1680 = 367
    тоесть поле деятельности тримера 367
    а поле деятельности стика 1680
    Миниатюры Миниатюры Нажмите на изображение для увеличения
Название: 2.GIF‎
Просмотров: 29
Размер:	10.4 Кб
ID:	591345  

  32. #189

    Регистрация
    02.03.2011
    Адрес
    Санкт-Петербург, Оренбург,
    Возраст
    50
    Сообщений
    3,023
    Цитата Сообщение от KGB Посмотреть сообщение
    нафик разные стандарты??? делать под конкретный приймник!!! 8бит меня тоже не устраивает
    под конкретный приемник не интересно, тк не выполнится условие изготовления "сделал-отдал-забыл", ибо забыть не получится на долго, так и будут приходить и клянчить переделку под другой приемник, потом под третий.

    Крнстантин, поделись названием програмки-осциллера или это спец софтина от аппаратной приспособы?

  33. #190
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    ..это спец софтина от аппаратной приспособы
    это усб осцил... 1 канал.. мож у автора есть уже что и покруче..
    называется pv6501.. пользую уже лет 5.. про свой 1С-77 уже забыл

    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    под конкретный приемник не интересно, тк не выполнится условие изготовления "сделал-отдал-забыл"
    универсальная вещь она всегда хуже!!! в таком случае можно сделать устройство под каждое устройство! либо в одном переключать вариант работы!! либо сделать автомат распознающий вариант работы

    есть большой проект.. ил-76 3600см.. автор не я поэтому без подробностей..
    в одном крыле 14 машинок.. с использованием 7и каналов.
    моя задача помочь человеку с бортовой сетью!! вот и пришла такая мысль...
    поставить приёмник R6208SB ... всё что в фюзе и не отстёгивается запитать от первых 8и каналов..
    а всё что снимается.. и чтобы не парится в проводах.. решено подсоединится по сбусу!!!
    тоесть надо грамотно организовать декодер сбус в канальные импульсы!!!
    с самой шиной сбус я уже разобрался что там и где передаётся
    осталось только из числа 0001 до 07FF сделать 7-8 канальных импульсов!!!
    Последний раз редактировалось KGB; 16.01.2012 в 18:01.

  34. #191

    Регистрация
    09.08.2003
    Адрес
    Москва
    Возраст
    54
    Сообщений
    8,119
    Цитата Сообщение от KGB Посмотреть сообщение
    ... поле деятельности тримера 367
    а поле деятельности стика 1680
    Хоть с одним вопросом разобрались полностью, разрядности 10-11 бит серве достаточно

    Цитата Сообщение от Probelzaelo Посмотреть сообщение
    под конкретный приемник не интересно, тк не выполнится условие изготовления "сделал-отдал-забыл", ибо забыть не получится на долго, так и будут приходить и клянчить переделку под другой приемник, потом под третий.
    Именно так. И не просто клянчить

  35. #192

    Регистрация
    02.03.2011
    Адрес
    Санкт-Петербург, Оренбург,
    Возраст
    50
    Сообщений
    3,023
    Цитата Сообщение от V_Alex Посмотреть сообщение
    Именно так. И не просто клянчить
    Вот вот. Готовь схемку летом, а прошивку зимой... )))
    В том плане даже если сделаешь "полуфабрикат" то прежде чем успокоиться придется подготовить софтину версии 2 на все случаи жизни, или как минимум "подбить базу" чтоб быть готовым к модернизации устройства, ибо нет такого заказчика который бы сплющив человеку мозг, вот так легко успокоился бы на достигнутом )))

  36. #193

    Регистрация
    09.08.2003
    Адрес
    Москва
    Возраст
    54
    Сообщений
    8,119
    Цитата Сообщение от KGB Посмотреть сообщение
    первые 6 каналов идут в паралель!!! и только на них распространяется режим хайспид!!!
    а вот начиная с 7го!!! они отстают на 3мс от первых 6ти!!!
    В принципе, это тоже весьма ценная инфа
    Во-первых "сказка стала былью" - это по поводу смещения каналов на современных приемниках. А во-вторых, моя задача по части универсальности стала практически невыполнимой, попытка "универсально" смешать ФАСТ-канал с обычным ни к чему хорошему не приведет.

  37. #194

    Регистрация
    02.03.2011
    Адрес
    Санкт-Петербург, Оренбург,
    Возраст
    50
    Сообщений
    3,023
    Цитата Сообщение от V_Alex Посмотреть сообщение
    В принципе, это тоже весьма ценная инфа
    Во-первых "сказка стала былью" - это по поводу смещения каналов на современных приемниках. А во-вторых, моя задача по части универсальности стала практически невыполнимой, попытка "универсально" смешать ФАСТ-канал с обычным ни к чему хорошему не приведет.
    Почему не приведет? и чем твоя конструкцыя может оказаться хуже того что было? И почему задача становится ни универсальной не понятно, ведь ты собирался каждый канал отслеживать полностью а значит и обрабатывать должен в любое время независимо от порядка следования импульсов.

  38. #195

    Регистрация
    17.02.2008
    Адрес
    Москва
    Возраст
    38
    Сообщений
    293
    Цитата Сообщение от V_Alex Посмотреть сообщение
    Во-первых "сказка стала былью" - это по поводу смещения каналов на современных приемниках. А во-вторых, моя задача по части универсальности стала практически невыполнимой, попытка "универсально" смешать ФАСТ-канал с обычным ни к чему хорошему не приведет.
    Тот пример который я выкладывал,спокойно работает на fasst (у меня futaba была изначально). Цеплял серво-тестер на 3 канала сразу, тоже все ОК.

  39. #196

    Регистрация
    09.08.2003
    Адрес
    Москва
    Возраст
    54
    Сообщений
    8,119
    Если грубо переформулировать задачу, то совсем ОК будет соответствовать работе смесителя от двух разных сервотестеров, что-то вроде асинхронного режима. Второй момент - нужно определиться, какой из двух входных сигналов следует использовать для синхронизации выходного.
    В целом я готов согласиться с KGB - смысл делать есть только для конкретного приемника. Единый РРМ-стандарт уходит в историю и надо считаться с реалиями. Тем более, что во всех нонешних передатчиках эта функция есть.
    Со советы и понимание всем огромное СПАСИБО

  40. #197

    Регистрация
    02.03.2011
    Адрес
    Санкт-Петербург, Оренбург,
    Возраст
    50
    Сообщений
    3,023
    Цитата Сообщение от V_Alex Посмотреть сообщение
    определиться, какой из двух входных сигналов следует использовать для синхронизации выходного.
    Пожалуй вернее всего было бы синхронизироваться от 1 канала или входящего ППМ, но тк это излишне, просится в качестве синхро младший канал, ибо он по любому либо одновременно либо раньше... отсюда и вывод... с другой стороны как ни стартуй, а пока не получишь оба значения не замесишь, поэтому, по первому есть смысл сброситься в 0 а после получения последнего сгенерить и запускать замес в студию... как раз там времени достаточно много на то чтобы все отработало... а с каким из остальных каналов приемника окажешься в фазе или супротив оной, не очень то и волновать должно по идее.

  41. #198
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117
    никогда не пользовал в процах ШИМ! поэтому совсем вылетело из головы!!!
    вот что нашол.. читая про ШИМ
    Аппаратный ШИМ
    В случае ATMega16 проще всего сделать на его ШИМ генераторе, который встроен в таймеры. Причем в первом таймере у нас целых два канала. Так что без особого напряга ATmega16 может реализовать одновременно четыре канала ШИМ.

    Как это реализовано
    У таймера есть особый регистр сравнения OCR**. Когда значение в счётном регистре таймера достигнает значения находящегося в регистре сравнения, то могут возникнуть следующие аппаратные события:
    Прерывание по совпадению
    Изменение состояния внешнего выхода сравнения OC**.


    а в некоторых АВРках есть по 16 каналов шим ! но мне это не интересно изза большого корпуса таких процов!!!
    а вот ATmega48 например 6 каналов ШИМ что вполне достаточно для моих целей!!! тоесть реально можно получить 6Х3=18 каналов!!!
    сдвигая по 6к во времени!!!
    можно жаде хай спид организовать!!! если не ждать 3мс а только 2.2
    хотя нет.. 2.2*3=6.6 а хай 7... остсаётся всего 0.4
    а нам надо 3мс для считывания пакета!! 2.2*2+3 = 7.4мс... не получатся
    тоесть даже оставив 12каналов чуток не успеваем
    а вот с 6ю каналами хайспид очень даже получается!!!

  42. #199

    Регистрация
    12.07.2011
    Адрес
    Киев
    Возраст
    53
    Сообщений
    284
    Один очень хороший человек мне подсказал один вариант чтения по восьми цифровым входам и мгновенной передачей их на 8 цифровых выходов для управления сервами. Мне интересно, я пробовал с PCM и PPM приемниками, но без фаста, все было супер, а кто может проверить данный код у себя? Тут правда под мегу прописаны выводы.
    Код:
    void setup()    
    {       
       for (int i=22; i < 30; i++) pinMode(i, INPUT);   
       for (int i=37; i > 30; i--) pinMode(i, OUTPUT);       
    }   
    
    void loop()  
    { 
    uint8_t Result; 
    asm volatile(  
    "cli" "\n\t"              
    "label%=:"  "in %[Result], %[in_porta]"   "\n\t" 
                "out %[out_portc],  %[Result]" "\n\t" 
    "rjmp label%=" "\n\t" 
    
            : [Result] "=r" (Result) 
            : [out_portc] "I" (_SFR_IO_ADDR(PORTC)), [in_porta] "I" (_SFR_IO_ADDR(PINA))    
            ); 
         
    sei(); 
    }
    Кстати, при этом, похожем варианте
    Код:
    unsigned char Byte_Port;  
    void setup()   
    {      
       for (int i=22; i < 30; i++) pinMode(i, INPUT);  
       for (int i=37; i > 30; i--) pinMode(i, OUTPUT);      
    }  
    
    void loop()   
    {  
    PORTC = PINA; 
    }
    сервы дергались.
    Последний раз редактировалось Mastar; 23.01.2012 в 05:54.

  43. #200
    KGB
    KGB вне форума
    Забанен
    Регистрация
    19.10.2009
    Адрес
    Димитровград
    Возраст
    46
    Сообщений
    1,117

Закрытая тема

Похожие темы

  1. Ответов: 423
    Последнее сообщение: 14.08.2014, 10:04
  2. Фиксированная скорость нарастания сигнала PPM
    от АДэшник в разделе Самодельная электроника, компьютерные программы
    Ответов: 3
    Последнее сообщение: 16.05.2011, 17:36
  3. Продам Приемник "Pilotage-6 Digital", 40MHz, FM, микро, 6 каналов
    от Bizon в разделе Барахолка. Аппаратура
    Ответов: 4
    Последнее сообщение: 15.02.2011, 11:03
  4. RSSI сигнал на приёмнике 1.2 ГГц
    от =FLY= в разделе Полеты по камере, телеметрия
    Ответов: 9
    Последнее сообщение: 13.02.2011, 17:10
  5. PWM, PPM, частоты
    от ultrablox в разделе Новичкам
    Ответов: 10
    Последнее сообщение: 22.10.2010, 16:35

Метки этой темы

Ваши права

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