Самодельный передатчик (часть 1)
Ура! Глюк с мусором в Users исправил, оказалось что он возникает когда EEPROM прошиваешь файлом “Coder.eep” (шью PONY PROG) или его вовсе не зашить. Я видел указания на то что память надо всю забить нулями но решил что для этого и существует в прошивке файл “Coder.eep”. В итоге открыв этот файл в PONY PROG я заменил все “FF” на “00” и все заработало! И еще раз попрошу, выложите пожалуйста HEX с исправленным глюком пищалки.
Ура! Глюк с мусором в Users исправил, оказалось что он возникает когда EEPROM прошиваешь файлом “Coder.eep” (шью PONY PROG) или его вовсе не зашить. Я видел указания на то что память надо всю забить нулями но решил что для этого и существует в прошивке файл “Coder.eep”. В итоге открыв этот файл в PONY PROG я заменил все “FF” на “00” и все заработало! И еще раз попрошу, выложите пожалуйста HEX с исправленным глюком пищалки.
Вот держи Coder.rar,пищалка вкл при 8.8 откл 8.5 в.Если надо другое напряжение поши исправлю. 😒
Великолепно!
Нашли виновника???
Выход, то выхот то где???
Не вы одни этим маетесь
Ты вообще, о чём? Какой выход?
Всё у всех работает, разобрались.
пищалка вкл при 8.8 откл 8.5 в.Если надо другое напряжение поши исправлю
Не рекомендую ставить такой низкий прог пищалки. При напряжении 8,8 В, уже начинает падать мощность передатчика, а значит падает радиус дейстивия аппаратуры. Лучше, хотя бы от 9 до 8,7В пищало.
Хотя, это нужно проверять, для конкретного передатчика. Если передатчик хорошо работает при 8,5 В, то можно и такой порог ставить.
У заводских передатчиков, вроде бы на 9,5 начинает пищать.
Ты вообще, о чём? Какой выход?
Всё у всех работает, разобрались.
Не рекомендую ставить такой низкий прог пищалки. При напряжении 8,8 В, уже начинает падать мощность передатчика, а значит падает радиус дейстивия аппаратуры. Лучше, хотя бы от 9 до 8,7В пищало.
Хотя, это нужно проверять, для конкретного передатчика. Если передатчик хорошо работает при 8,5 В, то можно и такой порог ставить.
У заводских передатчиков, вроде бы на 9,5 начинает пищать.
Извеняюсь. Вчера не все прочитал.
Уже сделал и себе. Все работает.
Всем Спасибо.
Доброго времени суток! Andrej100, спасибо за исправленный файлик! А вот по поводу порога срабатывания пищалки вопрос интересный! К примеру у меня на SANVA она срабатывает при 9.6 V, и с одной стороны вроде бы пульт заранее предупреждает пользователя, а с другой стороны остаеться меньше времени на хоть какую нибуть работу пульта. А за напряжением и так постоянно следишь, ведь не пойдеш на поле с полусевшей аппаратурой. Так что лично для меня наверное это не сильно критично.
У меня вопрос по схеме. Там MOSI и MISO от SPI идут на ноги 2 и 3.
Смотрю даташит на 128 мегу. MOSI и MISO - 12,13 а 1,2 - RXD и TXD.
Даташит вроде родной. С другой стороны схема вроде много раз повторенная. Я дурак или чего-то не понимаю?
Почитайте в даташит как шьется мега128 по последовательному интерфейсу 😃
ATmega128 программитуется через JTAG или SPI. При программировании через SPI сигналы MOSI и MISO от программатора надо заводить на RXD и TXD порта UART0 (2 и 3 ножки) а не на SPI. Тактовая частота заводится на SCK (11 нога). Этой особенностью м128 отличается от других мег. SPI порт у ATmega128 при программировании не используется, за исключением тактового сигнала SCK.
ATmega128 программитуется через JTAG или SPI. При программировании через SPI сигналы MOSI и MISO от программатора надо заводить на RXD и TXD порта UART0 (2 и 3 ножки) а не на SPI. Тактовая частота заводится на SCK (11 нога). Этой особенностью м128 отличается от других мег. SPI порт у ATmega128 при программировании не используется, за исключением тактового сигнала SCK.
Сиречь на схеме все правильно и баран таки я. Thanx.
…
… может кто то все таки поможет, не из ленивых?
… Очень не хочется лезть во внутрь, все заново разбирать, резать…
Во! вы тоже ленивый. Не поверю, что у “нас” буржуйские запчасти есть, а у “Вас” их не продают.
Я Вам наводку дам. Ищите по тексту (вроде файл Меню.С) вот такие вещи:
lcd_line ( x,y,x1,y1,modе); // Обычная линия
lcd_dashline (x, y,x1, y1) ; // Пунктирная линия
lcd_rectangle(x, y, x1,y1,color); // Прямоугольник
lcd_fillrect (x, y, x1, y1,color); // закрашенный прямоугольник
lcd_setxy(x,y); // установка координат курсора
Ну и корректируете чиселки x,y,x1,y1 так, чтобы изображение на вашем дисплее помещалось. Вродебы и сложного ничего нет, даже “С” знать не обязательно.
Если в программировании не силен, то просто возьми исходники, и поиском с заменой замени во всем проекте “curmodel.trimmer[FLY_MODE]” - на “curmodel.trimmer[1]”, после этого откомпилируй и прошей заново контроллер. Тримера во всех режимах будут одинаковы. Так делать не совсем правильно, в плане “эстетики” программирования, но за то максимально просто, ошибиться негде.
Да нет ошибочка все таки вылезла!!!
После такой замены триммера действительно устанавливаются для всех режимов одинаково. Однако запоминаются только в режиме idle.
Ткните пожалуйста носом где копать в исходниках 😵
СИ потихоньку пытаюсь учить, но сам разобраться не могу.
Да нет ошибочка все таки вылезла!!!
После такой замены триммера действительно устанавливаются для всех режимов одинаково. Однако запоминаются только в режиме idle.Ткните пожалуйста носом где копать в исходниках 😵
СИ потихоньку пытаюсь учить, но сам разобраться не могу.
Обрати внимание на строчки:
в variables.c :
eeprom char trimmer[MAX_MODELS][MAX_MODES][4]; - в этом 3х мерном массиве сохраняются все тримера.
char trimmer[MAX_MODES][4]; - ну а в этом двумерном массиве хранятся значения текущих тримеров.
Ну и в остальных местах проекта что-то аналогичное…
Ты хочешь, чтобы во всех режимах у тебя тримера были одинаковыми. Не красивый путь - я тебе посоветовал, поставить вместо “переменной координаты”
в массиве единичку. Логично тоже сделать и в массиве епрома сделать тоже. Либо вобще исключить ненужное измерение.
З.Ы. можно почитать про многомерные массивы, структуры ( записи) в любой книжке, должно с этим вопросом стать попонятнее. max_modes - константа указывающая количество полетных режимов, т.е. реально равняется 3 (при объявлении массива указывает его размер), а FLY_MODE - переменная, - принимает разные значения в зависимости от того, какой режим включен…
Вопрос к тем, кто уже доработал передатчик: а как вы крепили дисплей в корпусе? Если можно , ответьте подробно!
У меня в корпус от Еская индкатор стал в верхнюю часть. Закрепил термоклеем, почти год держится.
А у меня на супер-клее держиться.
Спасибо, но хотелось бы поподробнее:
Есть дисплеи - только стекло, а есть с рамкой - какой лучше ставить?
Как лучше прижимать контакты к дисплею?
Спасибо, но хотелось бы поподробнее:
Есть дисплеи - только стекло, а есть с рамкой - какой лучше ставить?
Как лучше прижимать контакты к дисплею?
Лучше брать с рамкой, в рамке есть контакты. К контактам удобно паять обрезок 80 проводного шлейфа от жесткого диска. У сомой рамки ненужный пластик отпиливается, в нужном - по вкусу, можно просверлить дырочки в удобных местах, наклеить на него “ушки” под винтики, или приклеить саму рамку к корпусу. Кстати, рамка является рассеивателем для подсветки…
Странно, что вопрос про крепление дисплея вобще возник. Если сделал кодер, переделал тримера под кнопочные и т.д. автоматом подразумевается, что с креплением дисплея проблем не будет.
З.Ы. У меня дисплей припаян на контактах на макетку, макетка привинчена к штатым местам крепления дисплея в корпусе. Правда у меня и дисплей не такой, а с торчащими контактами ( в том числе и крепежными) и корпус от эклипса.
З.Ы.Ы. Разговаривал с Женей (Фокусом), сказал что очень мало свободного времени, но работы над новой версией идут и все почти готово. Форумчанам ждать немного осталось.
Спасибо!
На днях хотел добавить ограничение длительности канального импульса ( 0,9 … 2,1 мс ), но не понял, где она окончательно вычисляется.
Если кто подскажет - буду признателен!
…длительности канального импульса ( 0,9 … 2,1 мс ), но не понял, где она окончательно вычисляется.
…
Содер.С:
interrupt [TIM1_COMPA] void timer1_compa_isr(void) // прерывание, в котором собственно говоря и идет вычисление импульсов 😃
{char i;LED2=1;
if (nb<curmodel.num_ch)
{
if (nb<curmodel.num_ch-1)CHcalc(nb+1);
ICR1H=output[nb]>>8; //заливаем длительность канала
ICR1L=output[nb]&0b11111111;nb++;
}…
Переменные output[] считаются в процедуре CHcalc(), которая в файле матч.с
Может так :
interrupt [TIM1_COMPA] void timer1_compa_isr(void) // прерывание, в котором собственно говоря и идет вычисление импульсов
{char i;
LED2=1;
if (nb<curmodel.num_ch)
{
if (nb<curmodel.num_ch-1)
CHcalc(nb+1);
ICR1H=output[nb]>>8; //заливаем длительность канала
ICR1L=output[nb]&0b11111111;
if (ICR1H>=9 && ICR1L>=216) { ICR1H=9; ICR1L=216; } // макс длит 2,1 мс
if (ICR1H<=2 && ICR1L<=216) { ICR1H=2; ICR1L=216; } // мин длит 0,9 мс
nb++;
}