Самодельный передатчик (часть 1)
и параметры PPM у вас тожа уплыли !!!
у вас сейчас получается таймер щёлкает на 2 мегагерца а в оригинале было 1,5!!
а чтобы врё правильно заработало нужно ввести поправки в длительности каналов а часики сами наместо станут !!!
Ага
я увеличил значения регистров чтобы считало “дольше”. Но часики как бежали - так и бегут. как раз на 25 прОцентов быстрее 😦
у Евгения значения канальных импульсов 2250, я выставил 3000 … Но ничего не изменилось … ВООБЩЕ НИЧЕГО !!! Может я не туда тыкаюсь? Ткните плиз куда мне надо, я с Таймерами в АВР ещё ни разу не работал - посему для меня это “тёмный лес”.
Прикол то ещё и в том, что эти часики то сами с места срываются - а то никакими усилиями не заставишь их тикать , и где ковырять - я тоже пока не понимаю.
Привет всем!
Переписал кодер Фокуса ( для мега16) под под схему Фокуса на мега128.
Хекс внизу.
#define up PIND.4
#define down PIND.5 // навигация по меню
#define ok PIND.6
#define esc PIND.7
#define ch7_1 PINE.2
#define ch7_2 PINE.3
#define ch5 PINE.4 // пятый канал
#define rate PINE.5 //расходы первые/вторые
#define cut PINE.6 // выключение двигателя
#define beeper PORTE.7
у Евгения значения канальных импульсов 2250, я выставил 3000 … Но ничего не изменилось …
Прикол то ещё и в том, что эти часики то сами с места срываются - а то никакими усилиями не заставишь их тикать , и где ковырять - я тоже пока не понимаю.
del=ch[1]+ch[2]+ch[3]+ch[4]+ch[5]+ch[6]+ch[7];// вычисляем общую длину импульсов
del=30000-del; // вычилляем длительность синхропаузы
здесь 30000 исправить на 40000
нуи считать каналы от 3000 и поправочка нужна к тому что прибавляеш к 3000
иначе получиш слишком шерокий диапазон длительностей и можеш выжеч машинки
выглядеть будет примерно так:
ch[1]=3000+adc[1]+trim[1]*9;
по поводу почему “срываются” часы надо в твой код глядеть… 😉
del=ch[1]+ch[2]+ch[3]+ch[4]+ch[5]+ch[6]+ch[7];// вычисляем общую длину импульсов del=30000-del; // вычилляем длительность синхропаузы
здесь 30000 исправить на 40000
У Евгения есть ещё значение задержки 14000 - его тоже надо менять?
ну и считать каналы от 3000 и поправочка нужна к тому что прибавляеш к 3000
иначе получиш слишком шерокий диапазон длительностей и можеш выжеч машинки
выглядеть будет примерно так:ch[1]=3000+adc[1]+trim[1]*9;
по поводу почему “срываются” часы надо в твой код глядеть… 😉
вот мой код - фактически это просто переделанный под Мегу128 и под GCC кодер Евгения. Да, и define вынесены в отдельный файл config.h, но логику работы я не менял.
Я так и не понял по коду - в какой момент _должен_ запускаться таймер и как его можно (и можно ли) принудительно остановить, чтобы не тикало.
Я так и не понял по коду - в какой момент _должен_ запускаться таймер и как его можно (и можно ли) принудительно остановить, чтобы не тикало.
по евгению
таймер запускается принажатии esc и up
останавливатся по esc и down
if ((m[1][0]==0)&&(!esc)&&(!up)&&(tm1!=0)){b_tm=1;} //включение таймера
if ((esc==0)&&(down==0)&&(b_tm==1)){tm2=0;b_tm=0; beeper=0; tm1=time;} //выключение таймера
щас гляну ваш код ,далеко не уходите 😉
про 14000 это инециализационное значение если его не поменять то первая посылка после включения будет не правильная!короткая…
в принчепе ничего страшного но для полядка поставте туда 19000
по евгению
таймер запускается принажатии esc и up
останавливатся по esc и downif ((m[1][0]==0)&&(!esc)&&(!up)&&(tm1!=0)){b_tm=1;} //включение таймера if ((esc==0)&&(down==0)&&(b_tm==1)){tm2=0;b_tm=0; beeper=0; tm1=time;} //выключение таймера
Если верить этому коду, ТО (!esc)&&(!up) означает что кнопки НЕ нажаты, а вот (esc==0)&&(down==0) - как раз нажаты, и вроде как мне пару раз этой комбинацией удалось остановить таймер. но только пару раз 😦
щас гляну ваш код ,далеко не уходите 😉
про 14000 это инециализационное значение если его не поменять то первая посылка после включения будет не правильная!короткая…
в принчепе ничего страшного но для полядка поставте туда 19000
Ок, это поменял , я сейчас параллельно это в VMLAB кручу. У меня длительность канального импульса получается 104.6us , а пауза между импульсами - 406.7us , это правильно?
Если верить этому коду, ТО (!esc)&&(!up) означает что кнопки НЕ нажаты, а вот (esc==0)&&(down==0) - как раз нажаты, и вроде как мне пару раз этой комбинацией удалось остановить таймер. но только пару раз 😦
одно но focus кнопачками на землю ножки коротит!!!
значит эти ножки подтянуты внутренними резисторами к плюсу и пока я не нажму на ноге будет “1”, а когда нажму то “0” а записи типа
(!esc)&&(!up)
и
(esc==0)&&(down==0)
равнозначны и обе говорят если 0 то отдать истину
Ок, это поменял , я сейчас параллельно это в VMLAB кручу. У меня длительность канального импульса получается 104.6us , а пауза между импульсами - 406.7us , это правильно?
там всё есть 😋
www.rcmaster.ru/club/glider/…/index.shtml
а записи типа
(!esc)&&(!up) и (esc==0)&&(down==0)
равнозначны и обе говорят если 0 то отдать истину
Значит мне в моём случае надо поправить это под GCC, спасибо, щас сделаю.
Voprosik, a shemka Focus’a na atmega128 takajazhe ilji 4toto drugoje? Kakto njenashol v etoi vetke na 128, jestj toljko na Atmega 64.
Voprosik, a shemka Focus’a na atmega128 takajazhe ilji 4toto drugoje? Kakto njenashol v etoi vetke na 128, jestj toljko na Atmega 64.
по евгению
таймер запускается принажатии esc и up
останавливатся по esc и downif ((m[1][0]==0)&&(!esc)&&(!up)&&(tm1!=0)){b_tm=1;} //включение таймера if ((esc==0)&&(down==0)&&(b_tm==1)){tm2=0;b_tm=0; beeper=0; tm1=time;} //выключение таймера
щас гляну ваш код ,далеко не уходите 😉
Проверил - по esc + down таймер останавливается, но ненадолго, проходит какое-то небольшое время и таймер САМ стартует с последним значением, стартовать таймер по esc+up у меня так и не вышло.
С того момента как поменял все переменные в сторону увеличения у меня таймер вообще никак не стартует. Без JTAG отладить никак не получается, буду ждать когда посылка приедет с JTAG для AVR.
Большое спасибо за консультации и вообще за участие.
Персональное спасибо Евгению за его работу.
Мне кажется что для универсального пульта будет оптимально иметь два ползунка, две крутилки, 4-6 трехпозиционных тумблеров и 2 двухпозиционных. Ну и ручки само собой. Кто нить прокомментирует?! 😉
Для вертолета по-моему желательно иметь три крутилки, они помогают настраивать висение. А вот про ползунки не подскажу - в самолетах не шарю. На валкере есть ползунки (по бокам, под указательные пальцы), но они банально не задействованы. Есть и еще один переключатель незадействованный.
Фотки чуть позже сделаю.
а ссылочку на что-то подобное? в частности на софтверный USB-лоадер, для примера.
Всему свое время. В данном случае это время пришло: вот ссылка на список проектов, базирующихся на открытом avr-usb драйвере от Objective Development. Сегодня утром там опубликованы новые проекты, в том числе два USB загрузчика.
Один из них - мой с поддержкой AES шифрования (компилятор IAR). Я все же решил его опубликовать КАК ЕСТЬ (без поддержки). Он не является законченным проектом для повторения, хотя в опубликованном виде он у меня работает на тестовой плате на базе ATmega32 (для 64/128 его придется модифицировать, но ход пока не дошел). Исходники утилит для PC (особенно утилита загрузки) выглядят отвратительно, поскольку это был хак чужого кода на скорую руку для проверки работы, собственно, бута. Претензии по стилю программирования не принимаются. Исходник самого бута для ATmega32 написан мной самим (не считая AES) и достаточно подробно прокомментирован в самом тексте. Этого хватит для того, чтобы сделать свой вариант под свои нужды. Я не поддерживаю этот проект, но готов попробовать ответить на конкретные вопросы (а не общие типа “почему это все не работает”).
Второй загрузчик использует библиотеку поддержки boot от GCC, прост и элегантен. Он пригоден для зашивки в бут блок ATmega8/48/88/168 и т.п. Для работы требует установку libusb драйвера на хост. Я его не проверял (он только сегодня появился). Если не требуется наворотов, то этот бут должен быть весьма хорош.
Сам драйвер обновился 26.06.2006. Из полезных нам фич есть поддержка дополнительных точек USB и возможность использовать любые пины порта для D+/D-, а не обязательно нулевой бит. Это крайне полезно для поддержки USB, например, в контроллере AT90PWM3. До сих пор я не видел возможности сделать в нем конфигурирование по USB из за занятости нулевых пинов другими аппаратными функциями, но теперь это вполне возможно.
В общем, дерзайте!
PS. На базе данного USB драйвера мной написан ради интереса свой вариант прошивки RC USB адаптера для схемы, приведенной в статье на данном сайте. В отличие от опубликованного, этот вариант написан на C (среда и компилятор IAR, 30-дневная версия доступна бесплатно с их сайта) и имеет открытый исходный код в соответствии с лицензией на avr-usb. Модульная (выбор на этапе компиляции) структура позволяет включать произвольный входной интерфейс (PPM декодер, встроенный ADC, различные варианты PCM и т.п.) и произвольный выходной кодер (стандартный джойстик, специальные интерфейсы для популярных симуляторов, выход на серво-тестер и т.п.). Я не приветствую публикации только прошивок для устройств, выкладываемых для публичного повторения, без исходников. Потому готов выложить исходники данного проекта. Есть только один нюанс: у меня нет собранной схемы, приведенной в той статье, я экспериментировал на своем собственном железе. Потому нужен доброволец (один), кто согласен проверить работу прошивки на собранном по той схеме устройстве и подтвердить ее работоспособность. После чего исходник будет опубликован. Только не обещаю, что сделаю это в течение 1-2-n дней, так как хотелок много, а времени мало. По мере возможности.
Размер кода в варианте PPM/Joystick - окодо 2.5 килобайта, что оставляет даже место в меге8 для USB загрузчика, что удобно тем, у кого нет своего программатора. Достаточно зашить раз загрузчик, после чего свободно экспериментировать с кодом приложения, зашивая его по тому же USB.
У меня опять проблема: Не работают в версии на атмега 16 дополнительные переключатели. Только 7 канал. Не двойные расходы, не тротел кут, ни 5 канал… 😊 Может подскажете в чем дело? Все остольное фунцыклирует прекрасно…
Поздравляю, Женя! Пожалуй надо исходники спрятать и по мылу выдавать желающим 😃 А то глядишь через полгода узкоглазые братья новый бренд откроют! 😃
Всяческие респекты тебе Евгений! Очень уважаю и жму руку!
Куда поступать после школы будешь?
Потому нужен доброволец (один), кто согласен проверить работу прошивки на собранном по той схеме устройстве и подтвердить ее работоспособность. После чего исходник будет опубликован. Только не обещаю, что сделаю это в течение 1-2-n дней, так как хотелок много, а времени мало. По мере возможности.
Вполне готов проверить, высылай прошивку.
А есть ли нормальная схема кодера на 128меге? Тоже хотел собрать кодер Евгения но схемы удобочитаемой не нашел.
скоро будет… и описание тоже. просто не успел еще…
Всяческие респекты тебе Евгений! Очень уважаю и жму руку!
Куда поступать после школы будешь?
Спасибо! А поступаю в наш местный политех… 😃
TO FOCUS :
Женя поздравляю!!! так держать! Вечных тебе мягких посадок!!!
самик ты неплохо разложил, сочувствую…
Вопрос такой появился, в исходнике у тебя написано
//Зуммер
#define BUZ PORTG.6
не могу понять, в дашите сказано что портов G всего 5 (0-4)
далее в прошивке
void BEEP (void)
{
if (sound)
{
PORTG|=0x4;
delay_ms(50);
PORTG&=0xFB;
delay_ms(50);
}
на какой ноге пищалка получаеться? не на PORTG.4 ?
вот сваял схемку SpL4.0 (ноги по описанию в прошивке) мож пригодиться кому 😉, вариант не окончательный, сигнал на пищалку пока не выведен…
//Зуммер
#define BUZ PORTG.6
эту строчку вообще удалить можно… она не используется…
а пищалка подсоединена к PORTG.2 0x4=0b00000100