Как принять сигнал с приемника в AVR (PWM|Digital)
определиться, какой из двух входных сигналов следует использовать для синхронизации выходного.
Пожалуй вернее всего было бы синхронизироваться от 1 канала 😉 или входящего ППМ, но тк это излишне, просится в качестве синхро младший канал, ибо он по любому либо одновременно либо раньше… отсюда и вывод… с другой стороны как ни стартуй, а пока не получишь оба значения не замесишь, поэтому, по первому есть смысл сброситься в 0 а после получения последнего сгенерить и запускать замес в студию… как раз там времени достаточно много на то чтобы все отработало… а с каким из остальных каналов приемника окажешься в фазе или супротив оной, не очень то и волновать должно по идее.
никогда не пользовал в процах ШИМ! поэтому совсем вылетело из головы!!!
вот что нашол… читая про ШИМ
Аппаратный ШИМ
В случае 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ю каналами хайспид очень даже получается!!!
Один очень хороший человек мне подсказал один вариант чтения по восьми цифровым входам и мгновенной передачей их на 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;
}
сервы дергались.
S.Bus System
“Песок, не важная замена овсу…”(С)О`Генри.
С.бас тоже хорошо, но такое решение требует практически полную замену всего имеющегося оборудования, новым и вполне даже не бюджетным…
вариант чтения по восьми цифровым входам и мгновенной передачей их на 8 цифровых выходов для управления сервами.
Хочется продолжить тему. У кого то есть идеи по одновременной обработке нескольких - бОлее 2, но не более 6-8 PWM каналов каким то более человеческим методом кроме прямого чтения в цикле?.
Интересует реализация совершенно конкретно на Атмега168/328 (HK KK Board V2 или V3)… 😉 более того, в распоряжении там доступны не все порты, более того и эл.схемы пока еще не нашел …
Хочется продолжить тему. У кого то есть идеи по одновременной обработке нескольких - бОлее 2, но не более 6-8 PWM каналов каким то более человеческим методом кроме прямого чтения в цикле?.
А то что я сделал не подходит?
А то что я сделал не подходит?
Подходит, но но варианты не помешают 😉 самое очевидное что нужно немедленно разобраться со схемотехникой, пинами и портами которые выведены на разъемы физически, хотя я почти уверен в том что увижу там …