Самодельный передатчик (часть 1)

3a-5648

У меня вопрос по схеме. Там MOSI и MISO от SPI идут на ноги 2 и 3.
Смотрю даташит на 128 мегу. MOSI и MISO - 12,13 а 1,2 - RXD и TXD.
Даташит вроде родной. С другой стороны схема вроде много раз повторенная. Я дурак или чего-то не понимаю?

PigTail

Почитайте в даташит как шьется мега128 по последовательному интерфейсу 😃

ALEX333

ATmega128 программитуется через JTAG или SPI. При программировании через SPI сигналы MOSI и MISO от программатора надо заводить на RXD и TXD порта UART0 (2 и 3 ножки) а не на SPI. Тактовая частота заводится на SCK (11 нога). Этой особенностью м128 отличается от других мег. SPI порт у ATmega128 при программировании не используется, за исключением тактового сигнала SCK.

3a-5648
ALEX333:

ATmega128 программитуется через JTAG или SPI. При программировании через SPI сигналы MOSI и MISO от программатора надо заводить на RXD и TXD порта UART0 (2 и 3 ножки) а не на SPI. Тактовая частота заводится на SCK (11 нога). Этой особенностью м128 отличается от других мег. SPI порт у ATmega128 при программировании не используется, за исключением тактового сигнала SCK.

Сиречь на схеме все правильно и баран таки я. Thanx.

Aleksey_Gorelikov
BerliN:


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

Во! вы тоже ленивый. Не поверю, что у “нас” буржуйские запчасти есть, а у “Вас” их не продают.

Я Вам наводку дам. Ищите по тексту (вроде файл Меню.С) вот такие вещи:

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 так, чтобы изображение на вашем дисплее помещалось. Вродебы и сложного ничего нет, даже “С” знать не обязательно.

mwb007
Aleksey_Gorelikov:

Если в программировании не силен, то просто возьми исходники, и поиском с заменой замени во всем проекте “curmodel.trimmer[FLY_MODE]” - на “curmodel.trimmer[1]”, после этого откомпилируй и прошей заново контроллер. Тримера во всех режимах будут одинаковы. Так делать не совсем правильно, в плане “эстетики” программирования, но за то максимально просто, ошибиться негде.

Да нет ошибочка все таки вылезла!!!
После такой замены триммера действительно устанавливаются для всех режимов одинаково. Однако запоминаются только в режиме idle.

Ткните пожалуйста носом где копать в исходниках 😵
СИ потихоньку пытаюсь учить, но сам разобраться не могу.

Aleksey_Gorelikov
mwb007:

Да нет ошибочка все таки вылезла!!!
После такой замены триммера действительно устанавливаются для всех режимов одинаково. Однако запоминаются только в режиме idle.

Ткните пожалуйста носом где копать в исходниках 😵
СИ потихоньку пытаюсь учить, но сам разобраться не могу.

Обрати внимание на строчки:

в variables.c :

eeprom char trimmer[MAX_MODELS][MAX_MODES][4]; - в этом 3х мерном массиве сохраняются все тримера.

char trimmer[MAX_MODES][4]; - ну а в этом двумерном массиве хранятся значения текущих тримеров.

Ну и в остальных местах проекта что-то аналогичное…

Ты хочешь, чтобы во всех режимах у тебя тримера были одинаковыми. Не красивый путь - я тебе посоветовал, поставить вместо “переменной координаты”
в массиве единичку. Логично тоже сделать и в массиве епрома сделать тоже. Либо вобще исключить ненужное измерение.

З.Ы. можно почитать про многомерные массивы, структуры ( записи) в любой книжке, должно с этим вопросом стать попонятнее. max_modes - константа указывающая количество полетных режимов, т.е. реально равняется 3 (при объявлении массива указывает его размер), а FLY_MODE - переменная, - принимает разные значения в зависимости от того, какой режим включен…

7 days later
Denn

Вопрос к тем, кто уже доработал передатчик: а как вы крепили дисплей в корпусе? Если можно , ответьте подробно!

valera_o

У меня в корпус от Еская индкатор стал в верхнюю часть. Закрепил термоклеем, почти год держится.

ubd

А у меня на супер-клее держиться.

Denn

Спасибо, но хотелось бы поподробнее:
Есть дисплеи - только стекло, а есть с рамкой - какой лучше ставить?
Как лучше прижимать контакты к дисплею?

Aleksey_Gorelikov
Denn:

Спасибо, но хотелось бы поподробнее:
Есть дисплеи - только стекло, а есть с рамкой - какой лучше ставить?
Как лучше прижимать контакты к дисплею?

Лучше брать с рамкой, в рамке есть контакты. К контактам удобно паять обрезок 80 проводного шлейфа от жесткого диска. У сомой рамки ненужный пластик отпиливается, в нужном - по вкусу, можно просверлить дырочки в удобных местах, наклеить на него “ушки” под винтики, или приклеить саму рамку к корпусу. Кстати, рамка является рассеивателем для подсветки…

Странно, что вопрос про крепление дисплея вобще возник. Если сделал кодер, переделал тримера под кнопочные и т.д. автоматом подразумевается, что с креплением дисплея проблем не будет.

З.Ы. У меня дисплей припаян на контактах на макетку, макетка привинчена к штатым местам крепления дисплея в корпусе. Правда у меня и дисплей не такой, а с торчащими контактами ( в том числе и крепежными) и корпус от эклипса.

З.Ы.Ы. Разговаривал с Женей (Фокусом), сказал что очень мало свободного времени, но работы над новой версией идут и все почти готово. Форумчанам ждать немного осталось.

Denn

На днях хотел добавить ограничение длительности канального импульса ( 0,9 … 2,1 мс ), но не понял, где она окончательно вычисляется.
Если кто подскажет - буду признателен!

Aleksey_Gorelikov
Denn:

…длительности канального импульса ( 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(), которая в файле матч.с

Denn

Может так :

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++;
}

DagoRed

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

ubd

Какую версию ты заказал? И из какого поста?

DagoRed
ubd:

Какую версию ты заказал? И из какого поста?

Последнюю

igor_kr

Здравствуйте люди!

три дня читал эту тему, всю не прочитал все равно. 😁 😵

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

Спасибо всем