Activity

Какой процессор выбрать для освоения.

Самый дешевый USB программатор самодельный на atmega8 USBAsp Отладка в эмуляторе Winavr. Насчет дебуга, смущает строка в даташите:
Emulates All On-chip Functions, Both Digital and Analog , except RESET Pin
Получается там результат может быть не реальным, а предполагаемым.
The debugWIRE system accurately emulates all I/O functions when running at full speed, i.e., when the program in the CPU is running. When the CPU is stopped, care must be taken while accessing some of the I/O Registers via the debugger (AVR Studio). See the debugWIRE documentation for detailed description of the limitations
Напрягает фраза: “accurately emulates” - хотя и точно, но все таки подражает (эмулирует)

Какой процессор выбрать для освоения.
1Dimon1:

Лучше что нибудь из атмела, уточню, програмирую на “Algorithm Builder”, мне проще графическое восприятие алгоритмов 😃

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

Какие конденсаторы для внешнего кварца МК (полярные vs неполярные)?
V_Alex:

Это ноу-хау применялось в регуляторах и в зарядниках в доисторические времена.

А что сейчас применяется? Скока моделей видел - ничего.

Какие конденсаторы для внешнего кварца МК (полярные vs неполярные)?

Нельзя говорить за весь RC. У каждого изготовителя RC свой стандарт. Вот первая попавшаяся на хоббикинге модель готова-летать, у нее 3s, или это нельзя назвать стандартом? У липолек предел разряда 3v, 2S дают 6в. С учетом возможных помех по питанию 1в (для пятивольтовых схем) это ниочем. Другое дело если ВСЯ бортовая электроника 3.3в, но это редкость (тот самый не стандарт 😃 ). Для меня не проблема сделать SEPIC БП, но не каждый захочет иметь лишний габарит+вес. Насчет качества питания - в одной из веток на этом форуме я предложил ставить последовательно батарейке обычный автомобильный предохранитель на мах.ток+20%. На случай если пробъет транзистор(ы) в регуляторе оборотов движка. Чтоб до пожара не доводить. Так меня там запинали - “никто не ставит”, “у меня крутой регулятор, гореть нечему”,“сопля на проводах, это не красиво”, и т.д.
Подытожу - в моей деятельности до 5 вольт хватает емкостей до 10мкф, емкости выше требуют напряжений до 50в.

Какие конденсаторы для внешнего кварца МК (полярные vs неполярные)?

У LM2930 в типичном включении 10 мкФ, и обычно за пределы 25мкф нигде не вылезает. Для меня не проблема 2-3 10мкф в параллель поставить. Если токи до 1А без зазрения совести поставлю 7805-78L05, оно там без проблем живет. Если нужны бОльшие токи, то проще импульсник LM2596, а там уже другие требования по входу.
Насчет перепада “вход-выход” - дело хозяйское, если вся аппаратура на пяти вольтах сидит, до стабилизатора я поставлю 3S липольку подобранную по размеру. По мне запас в 3 вольта должен быть всегда.

Какие конденсаторы для внешнего кварца МК (полярные vs неполярные)?

После стабилизатора питания обычно стоят 0.1 мкф, причем сильно увеличивать это значение не рекомендуют сами производители стабилизаторов. Значения более 10 мкф у меня используются либо до стабилизатора, либо в импульсных БП, а там напряжения значительно выше. Насчет танталовых, на википедии из них вообще полную страшилку сделали. Ну и значительный ток утечки тантала делает их не всегда возможными к применению. Я особо не мудрю - ставлю и керамику и алюминий, но стараюсь придерживаться рекомендаций производителей компонент.

Какие конденсаторы для внешнего кварца МК (полярные vs неполярные)?

Керамические конденсаторы обычно идут до 1мкф, дальше технологически проще делать электролиты. Если надо выбрать номинал этих конденсаторов, то у можно заглянуть сюда: AVR042

увеличение быстродействия серво
usup:

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

Помеха может быть не только на сигнальных проводах, но и на силовых. Как ведет себя контроллер при подобных небольших импульсных перенапряжениях - неизвестно. Погореть не должен, но и нормально работать не будет. Насчет помех - а если попробовать (для опыта) запитать одну серву от другого, независимого источника питания? Если дергаться не будет, значит проблема в питании. Если будет нужно искать проблему в сигнальных проводах.

увеличение быстродействия серво

Тут http://swip.com.cn/en/download/YT5188.pdf 7в, а тут http://ru.datasheet4u.net/ru/share_search.php?sWord=KC5188 7,5в
Я бы осторожно относился к напряжению выше 6в. Слишком маленький порог для возможной помехи.

Помогите допилить проект на Attiny13
mix_mix:

Как я вижу вашу задачу, на входе по таймеру записываю число первого времени в один регистр, затем число второго времени в другой регистр. затем обсчет величин.

Допустим есть 8-битный регистр-счетчик времени и счет идет вверх по кругу (по достижению значения 255 он обнуляется и считает снова). Предположим у нас 10 шагов счетчика на максимальный сигнал на входе. В первый регистр заносим 254 (именно в этот момент сигнал на входе скакнул вверх), во второй регистр заносим 5. Как будет выглядеть обсчет величин? А если сигнал на входе отвис на два-три и т.д. периода регистра-счетчика?
Обычно делается не так. Берем регистр, при появлении сигнала на входе двигаем этот регистр вверх с проверкой граничных величин. Как тока сигнал на входе изменился, копируем полученное число в регистр переменную длительности сигнала на входе. Основной фокус проверка тех самых граничных величин.
Теперь о проблемах. В Attiny13 один 8-битный таймер и внутренний генератор частоты на 9.6 мГц. Для того чтобы получить на выходе не просто сигнал направления (для двигателя вперед-назад), а чтобы этот сигнал был ШИМом для движка, есть два способа - аппаратный ШИМ, и программный ШИМ. Программный шим я уже сделал, но у него очень низкая частота. Для увеличения частоты нужен аппартный ШИМ. Теперь математика - используем режим “Fast PWM TOP=0xFF” для таймера. У таймера три прерывания - два прерывания для ШИМ, и одно по переполнению. Прерывание по переполнению используем для обсчета входного сигнала. 9600000/256=37500. На входе сигнал 1 мсек =1кГц (вперед или назад) у нас 37,5 периодов таймера максимальное разрешение таймера. буду считать 36 влево или вправо, а 1 на границу нуля. Выходной сигнал от 0 до 255. 255/36 = семь с копейками. Значит полученное значение умножаем на 7 и в регистр сравнения таймера для формирования ШИМ. Остается снабдить эту конструкцию проверкой границ и определения рабочего выходного канала (вперед или назад).

Помогите допилить проект на Attiny13

По ссылке проект, в котором на входе PPM, на выходе несколько PWM каналов. У меня это часть в приемнике. Я делаю схемку, которая принимает два PWM канала, на которых обычно висят сервы, и управляю двумя коллекторными движками. Подобную схему я не видел в инете, либо один контроллер на один движок. Хотя даже в одной тиньке сил хватает на два движка. Основная проблема с входным сигналом, я не знаю как приходят PWM импульсы, предполагаю что сигналы друг с другом вообще никак не связанны (может там два разных приемника).
Насчет питания - можно проще сделать - на рельсы подавать постоянный ток, и туда-же через конденсатор подмешивать полезный сигнал, на приемной стороне через такой-же конденсатор снимать сигнал.

Помогите допилить проект на Attiny13

Чета оно мне не очень понравилось, в логике не хватает красоты и простоты. Делаю версию 2.
План:
Тактовая частота - внутренний источник 9.6 мГц
Таймер - в режиме “Fast PWM TOP=0xFF”; прерывание по переполнению для оцифровки двух входных каналов; прерывания OCRA OCRB для формирования управляющего сигнала на выходе.
Таймер настроен на частоту 37,5 кГц. Для каждого направления в канале использую 36 шагов. Для PWM на выходе эти 36 шагов буду массштабировать (умножать) на 7. Почему 36? Потому что 36*7=252, а таймер 8-битный, макс значение регистра сравнения 255. Выбрал что поближе.
На выходе буду использовать (в схематике) L9110, ибо оно меньше бакса на мотор получается, да и места берет меньше.

увеличение быстродействия серво

Правильнее сказать уменьшаем время реакции, плата за это возросшее значение ошибки (серва пролетает нужное значение и делает колебательное движение назад)

Непонятные помехи в работе регистров 74HC165
ШВЕД:

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

Автор: Хоровиц П., Хилл У.
Искусство схемотехники
В 7 главе
Тут_оно_есть_в_7_главе

Преобразование ШИМ в напряжение

Желание поиметь схему с минимумом деталей, а в идеале одна-две, вполне понятно. Но есть некоторые правила, которые рекомендуют иной подход. В учебной библии от Хилл-Хоровитц сказано: пихайте оперционники везде где можно, ибо помимо низкой цены оных, можно получить схему со стабильными повторяемыми результатами при общем минимуме деталей и время-затрат на разработку. Почему-то я им верю.
По последней схеме - между RC цепочкой и входом FIV нужен буфер, с малым потреблением на входе, и достаточной нагрузочной способностью на выходе. Можно чудить на транзисторах, но просится операционник.

Электро техники помогите

А почему у свечи минус на корпусе, а от стартера плюс на корпусе? Обычно на корпусе всегда один выбранный полюс.
Вообще без схемы трудно понять. Может имеется ввиду - на корпус идет минус батареи, плюс идет с нее на схему питания свечи и двигатель стартера. Двигатель стартера обычный коллекторный, на нем подключено так (относительно нарисованных плюс минус на корпусе двигателя стартера) чтобы стартер крутился в нужную сторону.
Для полноты нужно знать - что понимается под понятием подкал?

Правильное подключение МК к внешней схеме

Если блоки находятся рядом (до 15см), БП донора перекроет по мощности потребности обоих плат, в транзитной зоне (провода) опупенных помех не предвидится, то можно соеденить обычным шлейфом. Иначе может возникнуть кучка дополнительных решений: БП не хватает - нужен дополнительный; помехи в транзитной зоне - экранированные провода и использование шинных каналов (RS232, RS485, галваническая развязка, и т.д), использование помеходавов по питанию. В общем нужно более точное ТЗ, с прикидкой указанных факторов.

Помогите допилить проект на Attiny13

Полученный код ниже. Чуть позже опишу FUSE, надо ногу RESET отдать под IO порт, разрешить Internal OSC 9.6mHz, еще можно разрешить WDT 1s
В приведенном коде порт PB5 соединен с RESET для отладки и прошивки, хотя функционал его работы полностью написан.

/*
* rx2b_asm.asm
*
* Created: 21.10.2013 19:40:25
* Author: tester500
*/

/*
* CPU use internal RC clock 9,6 MHz
*/

.def temp=r16
.def depwm_a=r17
.def depwm_b=r18
.def pwm_t=r19
.def cr_a=r20
.def cr_b=r21
.def pin_i=r22
.def ch_a_in=r23
.def ch_b_in=r24
.equ cha_p_left=2 ; PB2
.equ cha_p_right=3 ; PB3
.equ chb_p_left=4 ; PB4
.equ chb_p_right=5 ; PB5

.org 0x0000

;Interrupt Vectors
rjmp RESET ;RESET
reti ;INT0
reti ;PCINT0
reti ;TIM0_OVF
reti ;EE_RDY
reti ;ANA_COMP
rjmp Timer_INT ;TIM0_COMPA
reti ;TIM0_COMPB
reti ;WDT
reti ;ADC

;INT0:
;PCINT0:
;TIM0_OVF:
;EE_RDY:
;ANA_COMP:
;TIM0_COMPA:
;TIM0_COMPB:
;WDT:
;ADC:

RESET:
;init procedure
ldi temp,RAMEND ;Set Stack Pointer to RAMEND 0x9f
out SPL,temp

;shutdown adc
clr temp ;0x0 -> ADCSRA
out ADCSRA,temp
inc temp ;0x1 -> PRR
out PRR,temp

;PORTB variable initializations
;PORTB0 for 1: __PB0 as Input - Reserved for pin PB0
;PORTB1 for 1: __PB1 as Input - Reserved for pin PB1
;PORTB2 for 1: __PB2 as Output - Reserved for pin PB2
;PORTB3 for 1: __PB3 as Output - Reserved for pin PB3
;PORTB4 for 1: __PB4 as Output - Reserved for pin PB4
;PORTB5 for 1: __PB5 as Output - Reserved for pin PB5

;PORTB5 NOT Connected to IO PORT! Connected to reset
;for debug and ISP. On code functions for PB5 full
;present

ldi temp,0x1C ; for full need 0x3C (PB5 - out)
out PORTB,temp
out DDRB,temp

clr temp
clr depwm_a ; temp timer chanel A
clr depwm_b ;temp timer chanel A
clr pwm_t ; software PWM
clr cr_a
clr cr_b
clr pin_i
clr ch_a_in
clr ch_b_in

;TIMER_COUNTER_0 - -
;
;Waveform Generation Mode = Clear Timer on Compare Match TOP=OCRA
;Clock Select = clk (No prescaling)
;Output Compare Register A = 0x4A
;CPU clock = 9,6 MHz
ldi temp,0x04 ;(1<<OCIE0A)
out TIMSK0,temp
ldi temp,0x4A ;OCR0A = 0x4A 127kHz
out OCR0A,temp
ldi temp,0x02 ;(1<<WGM01)|(0<<WGM00)
out TCCR0A,temp
ldi temp,0x01 ;(0<<WGM02)|(0<<CS02)|(0<<CS01)|(1<<CS00)
out TCCR0B,temp
sei

main_loop:
nop
rjmp main_loop

;Timer0 Overflow procedure
Timer_INT:
in pin_i,PINB ;store PinB to R16

;PWM procedure
start_pwm:
inc pwm_t

cp pwm_t,cr_a
brne pwm_b_start
tst cr_a ; if cr_a eq (0x00 or 0xFF) goto test cr_b
breq pwm_b_start
cpi cr_a,0x40
breq pwm_b_start
cbi PORTB,cha_p_left ; pwm_t eq cr_a, need clear PIN out chanel
cbi PORTB,cha_p_right
pwm_b_start:
cp pwm_t,cr_b
brne pwm_ff
tst cr_a ; if cr_b eq (0x00 or 0xFF) goto pwm_ff
breq pwm_ff
cpi cr_a,0x40
breq pwm_ff
cbi PORTB,chb_p_left ; pwm_t eq cr_b, need clear PIN out chanel
cbi PORTB,chb_p_right
pwm_ff:
cpi pwm_t,0x40
brne pwm_end
; pwm_t=ff; load cr_a, cr_b; need set out_PIN if cr_a or cr_b eq (0x00 or 0xFF)
clr pwm_t
;cr_a chanel
cpi ch_a_in,0x83
brlo cr_a_full_left
cpi ch_a_in,0xBD
brlo cr_a_left
cpi ch_a_in,0xC5
brlo cr_a_stop
cpi ch_a_in,0xFE
brlo cr_a_right
cr_a_full_right:
; cr_a full right
ser cr_a
cbi PORTB,cha_p_left ; clear pin_left, set pin_right
sbi PORTB,cha_p_right
rjmp cr_b_pwm_set
cr_a_full_left:
; cr_a full left
ser cr_a
sbi PORTB,cha_p_left ; set pin_left, clear pin_right
cbi PORTB,chb_p_right
rjmp cr_b_pwm_set
cr_a_stop:
; stop cr_a
clr cr_a
cbi PORTB,cha_p_left ; clear pin_left,pin_right
cbi PORTB,chb_p_right
rjmp cr_b_pwm_set
cr_a_left:
; cr_a left
ldi cr_a, 0xC0
sub cr_a,ch_a_in
sbi PORTB,cha_p_left ; set pin_left, clear pin_right
cbi PORTB,cha_p_right
rjmp cr_b_pwm_set
cr_a_right:
; cr_a right
mov cr_a,ch_a_in
subi cr_a,0xC0
cbi PORTB,cha_p_left ; clear pin_left, set pin_right
sbi PORTB,cha_p_right
cr_b_pwm_set:
;cr_b chanel
cpi ch_b_in,0x83
brlo cr_b_full_left
cpi ch_b_in,0xBD
brlo cr_b_left
cpi ch_b_in,0xC5
brlo cr_b_stop
cpi ch_b_in,0xFE
brlo cr_b_right
cr_b_full_right:
; cr_b full right
ser cr_b
cbi PORTB,chb_p_left ; clear pin_left, set pin_right
sbi PORTB,chb_p_right
rjmp pwm_end
cr_b_full_left:
; cr_b full left
ser cr_b
sbi PORTB,chb_p_left ; set pin_left, clear pin_right
cbi PORTB,chb_p_right
rjmp pwm_end
cr_b_stop:
; stop cr_b
clr cr_b
cbi PORTB,chb_p_left ; clear pin_left,pin_right
cbi PORTB,chb_p_right
rjmp pwm_end
cr_b_left:
; cr_b left
ldi cr_b, 0xC0
sub cr_b,ch_b_in
sbi PORTB,chb_p_left ; set pin_left, clear pin_right
cbi PORTB,chb_p_right
rjmp pwm_end
cr_b_right:
; cr_b right
mov cr_b,ch_b_in
subi cr_b,0xC0
cbi PORTB,chb_p_left ; clear pin_left, set pin_right
sbi PORTB,chb_p_right
pwm_end:

bst pin_i,0 ; Test Chanel A
brts Pin0_not_null ; jump if Pin0 =1
tst depwm_a
brne tim_cha_notnull ; jump if Pin_chA = 0 Timer_chA > 0

Test_chB:
bst pin_i,1 ; Test Chanel B
brts Pin1_not_null ; jump if Pin1 =1
tst depwm_b
brne tim_chb_notnull ; jump if Timer Chanel B > 0
rjmp ret_int

tim_cha_notnull:
mov ch_a_in,depwm_a
clr depwm_a
rjmp Test_chB

tim_chb_notnull:
mov ch_b_in,depwm_b
clr depwm_b
rjmp ret_int

Pin0_not_null: ; inc Timer Chanel A
cpi depwm_a,0xFF
breq Test_chB
inc depwm_a
rjmp Test_chB

Pin1_not_null:
cpi depwm_b,0xFF
breq ret_int
inc depwm_b
rjmp ret_int

ret_int:
wdr
reti

Проблема с питанием ATtiny13

Про резистивный делитель и почему проседает - контроллер это нагрузка, которую грубо можно представить в виде резистора. Значит если в резистивном делителе параллельно резистору (одна нога которого на земле) подключить еще один резистор, то в общей точке мы и увидим меньшее напряжение относительно земли. Если токи
маленькие, то вместо нижнего резистора ставят стабилитрон на нужное напряжение.

Помогите допилить проект на Attiny13

У меня при 2кГц получается 64 шага, если увеличу до 4кГц, то - во первых будет всего 32 шага, во вторых надо будет массштабировать, код может вылезти за прерывание. Оставлю 2кГц, авось прокатит. Сегодня буду катать в железе.

Помогите допилить проект на Attiny13

до заливки в тело еще не дошло, сегодня буду доделывать. Код получается небольшой, я решил увеличить кол-во выборок до 128 на 1мс (128кГц), изменение в коде OCR0A = 0x4A

Помогите допилить проект на Attiny13
Иван:
  • можно проще - на свои выходы приёмыша навесить потроха от серв например 9ти грамовых, вместо переменника подстроечник- выствить нейтраль и ВСЁ - у вас два рега для движков.

с тинькой смысла морочиться тут никакого, ИМХО 😃)

Одна игрулька - две распотрашенных сервы, а десять игрулек?
Я не ищу решение для одной вещи, у меня их много. У нас неисправные (в основном электроника) игрушки продают на вес. Чтобы сделать то что стоит в серве, мне не надо ее потрошить, это я и сам могу быстро сделать, там ниче трудного нет.

Помогите допилить проект на Attiny13

Что я хочу заменить:

из этой схемы выкидываем радиочасть, RX2B, и вставляем тиньку. PB0,PB1 вход с приемника; PB2,PB3 выход PWM для 1 мотора; PB4,PB5 выход PWM для 2 мотора. Приемник:

На данный момент код такой:

/*
* rx2b_asm.asm
*
* Created: 21.10.2013 19:40:25
* Author: tester500
*/

/*
* CPU use internal RC clock 9,6 MHz
*/

.def temp=r16
.def depwm_a=r17
.def depwm_b=r18
.def pwm_t=r19
.def cr_a=r20
.def cr_b=r21
.def pin_i=r22
.def ch_a_in=r23
.def ch_b_in=r24

.org 0x0000

;Interrupt Vectors
rjmp RESET ;RESET
reti ;INT0
reti ;PCINT0
reti ;TIM0_OVF
reti ;EE_RDY
reti ;ANA_COMP
rjmp Timer_INT ;TIM0_COMPA
reti ;TIM0_COMPB
reti ;WDT
reti ;ADC

;INT0:
;PCINT0:
;TIM0_OVF:
;EE_RDY:
;ANA_COMP:
;TIM0_COMPA:
;TIM0_COMPB:
;WDT:
;ADC:

RESET:
;init procedure
ldi temp,RAMEND ;Set Stack Pointer to RAMEND 0x9f
out SPL,temp

;shutdown adc
clr temp ;0x0 -> ADCSRA
out ADCSRA,temp
inc temp ;0x1 -> PRR
out PRR,temp

;PORTB variable initializations
;PORTB0 for 1: __PB0 as Input - Reserved for pin PB0
;PORTB1 for 1: __PB1 as Input - Reserved for pin PB1
;PORTB2 for 1: __PB2 as Output - Reserved for pin PB2
;PORTB3 for 1: __PB3 as Output - Reserved for pin PB3
;PORTB4 for 1: __PB4 as Output - Reserved for pin PB4
ldi temp,0x1C
out PORTB,temp
out DDRB,temp

clr depwm_a ; temp timer chanel A
clr depwm_b ; temp timer chanel B
clr cr_a ; Compare Reg for Chanel A
clr cr_b ; Compare Reg for Chanel B
clr ch_a_in ; Ch_A
clr ch_b_in ; Ch_B
clr pwm_t; software PWM counter

;TIMER_COUNTER_0 - -
;
;Waveform Generation Mode = Clear Timer on Compare Match TOP=OCRA
;Clock Select = clk (No prescaling)
;Timer Overflow Interrupt Enable = Enabled
;Output Compare Register A = 0xBF
;Counter Frequency = 50,0 kHz
;Counter Period = 20,0 usec
;Seconds per Count = 104,167 nsec
;Counts per Second = 9,6 MHz
;Output Compare Register A Time = 19,896 usec
ldi temp,0x04 ;(1<<OCIE0A)
out TIMSK0,temp
ldi temp,0xBF ;OCR0A = 0xBF
out OCR0A,temp
ldi temp,0x02 ;(1<<WGM01)|(0<<WGM00)
out TCCR0A,temp
ldi temp,0x01 ;(0<<WGM02)|(0<<CS02)|(0<<CS01)|(1<<CS00)
out TCCR0B,temp
sei

main_loop:
nop
rjmp main_loop

;Timer0 Overflow procedure
Timer_INT:
in pin_i,PINB ;store PinB to R16

;PWM procedure
start_pwm:
inc pwm_t

cp pwm_t,cr_a
brne pwm_b_start
tst cr_a ; if cr_a eq (0x00 or 0xFF) goto test cr_b
breq pwm_b_start
cpi cr_a,0xFF
breq pwm_b_start
nop ; pwm_t eq cr_a, need down PIN out chanel

pwm_b_start:
cp pwm_t,cr_b
brne pwm_ff
tst cr_a ; if cr_b eq (0x00 or 0xFF) goto pwm_ff
breq pwm_ff
cpi cr_a,0xFF
breq pwm_ff
nop ; pwm_t eq cr_b, need down PIN out chanel

pwm_ff:
cpi pwm_t,0xFF
brne pwm_end
nop ; pwm_t=ff; load cr_a, cr_b; need set out_PIN if cr_a or cr_b eq (0x00 or 0xFF)

pwm_end:

bst pin_i,0 ; Test Chanel A
brts Pin0_not_null ; jump if Pin0 =1
tst depwm_a
brne tim_cha_notnull ; jump if Pin_chA = 0 Timer_chA > 0

Test_chB:
bst pin_i,1 ; Test Chanel B
brts Pin1_not_null ; jump if Pin1 =1
tst depwm_b
brne tim_chb_notnull ; jump if Timer Chanel B > 0
rjmp ret_int

tim_cha_notnull:
mov ch_a_in,depwm_a
clr depwm_a
rjmp Test_chB

tim_chb_notnull:
mov ch_b_in,depwm_b
clr depwm_b
rjmp ret_int

Pin0_not_null: ; inc Timer Chanel A
cpi depwm_a,0xFF
breq Test_chB
inc depwm_a
rjmp Test_chB

Pin1_not_null:
cpi depwm_b,0xFF
breq ret_int
inc depwm_b
rjmp ret_int

ret_int:
nop ; BreakPoint for control ch_a_in,ch_b_in
reti

Основной код выполняется в прерывании начиная с “Timer_INT:”, перед reti точка останова для контроля, если в симуляторе дергать PIN0 PIN1 руками, имитируя входной сигнал, то ch_a_in ch_b_in будут содержать длительность сигнала на входе.
Таймер настроен от балды, главное вылизать код в прерывании, чтобы он не вылез за 96 команд. Настройка портов - PB0,PB1 вход; PB2,PB3,PB4 выход; PB5 пока код не отладим не трогаю - ресет нужен для программирования.
Логика такая:
На входе сигнал длительностью от 1мс до 2мс, меряем его весь (100 едениц на 1мс), если сигнал на входе верный, то он не должен быть больше 200 (0xC8), если его длительность больше 255(0xFF), то обрезаем до 255 (0xFF). Результат идет в ch_a_in ch_b_in. Это уже сделано и в симуляторе работает.
PWM для выхода тоже работает, если в симуляторе в cr_a поместить длительность импульса (0<cr_a<0xFF), то программа будет попадать в точку “nop ; pwm_t eq cr_a, need down PIN out chanel”. С cr_b аналогично “nop ; pwm_t eq cr_b, need down PIN out chanel”. В этих точках нужно опускать выходной пин, логику выбора пина надо доделать. Когда счетчик PWM выхода (pwm_t) дойдет до 0xFF, нужно из ch_a_in, ch_b_in грузить значения в cr_a,cr_b, вот тут надо правильно вычислить что было на входе (посчитать длительность) и установить нужный выходной пин.

Простой регулятор хода коллекторного двигателя
Tigra74:

А пульт на ТХ2В?

Нет, писал раньше:“чтоб можно было игрульку подключить к приемнику PPM путевой аппаратуры”
Есть пульт турнига+приемник,масса китайских игрулек (машинки,катера, фигня на воздушной подушке, и т.д.) и желание это все сочленить.В идеале выкинуть из приемника игрульки радиочасть вместе с RX2B, и добавить туда тиньку. От тиньки ±и два провода входа наружу корпуса игрульки. Снаружи крепим приемник

и понеслась.

Простой регулятор хода коллекторного двигателя

Неправильно поняли. Декодер PPM это часть приемника идущего с радиоаппаратурой. Приемник двухканальный, на выходе приемника PWM.

На картинке сверху PPM сигнал, он где-то в недрах приемника. На выходе приемника канальные сигналы, это PWM.
Я делаю замену RX2B:

Тока у меня на входе два канала PWM с приемника, а на выходе как на схеме left-right, forward-backward. У RX2B на выходе дискретный сигнал, а у меня будет PWM.

Простой регулятор хода коллекторного двигателя

Ну у меня значительно меньше 5А. Если нужно будет больше, сделаю драйвер мотора, у которого два входа: лево-право (High,Low), и PWM (если PWM = Low, то мотор стоп).