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

Aviator73

Коллеги, ткните носом, где можно посмотреть методику настройки ВЧ-модуля, который в этом топике выложен. А то при внедрении кодера внутрь своего Flash-4 случайно коротнул ламели батарейного отсека на ВЧ-часть платы. Вышедшие из строя транзисторы заменил, вроде работает, но сильно греется выходной транзистор ( у меня спиральная антенна, настраивал по Глайдеру).
Пока внутрь не лазил не знал, что транзистор греется - передатчик работал отлично. Может он и раньше грелся, а может после расстройства катушек начал.

Интересует настройка предвыходного каскада и П-фильтра выходного каскада.
Из инструментов есть тестер, осциллограф. Радиолюбительский опыт большой, только с ВЧ-техникой дел до сих пор не имел.

Буду рад любой помощи.
Спасибо!

EagleB3

Я сейчас пытаюсь пристроить к кодеру дисплей TIC154. За основу взял исходники от MSV.

Такое ощущение, что функция displ_head из модуля displ.c работает как-то криво. Вывод строки начинается слишком близко к середине - видимо, некорректное значение возвращает функция LCD_get_char_len из модуля LCD_3320.c.

А знаний не хватает. Не понимаю, как определяется ширина символа через font_norm[ch-32][0].

Расскажите, плиз…

VRV
EagleB3:

Я сейчас пытаюсь пристроить к кодеру дисплей TIC154. За основу взял исходники от MSV.

Такое ощущение, что функция displ_head из модуля displ.c работает как-то криво. Вывод строки начинается слишком близко к середине - видимо, некорректное значение возвращает функция LCD_get_char_len из модуля LCD_3320.c.

А знаний не хватает. Не понимаю, как определяется ширина символа через font_norm[ch-32][0].

Расскажите, плиз…

точно не помню, но в двух словах: тот шрифт что используется имеет разную ширину символов в точках. Ширина указана в 0 злементе массива шрифта. Для вычисления длинны слова в точках берем кол-во символов умноженное на соотв значение длинны каждой буквы шрифта.

СЕРЖЖ

Прошил проц прошивкой которая выше Coder3410(1.8).
Огромное спасибо – работает, но только все равно изображение не на весь экран.
Мелковато как-то.
Можно исправить этот недостаток???
Заранее благодарен.

EagleB3
VRV:

Ширина указана в 0 злементе массива шрифта.

Понятно! Да, у шрифта font_norm описание символа = 9 байт, и в нем да, 0-й элемент сильно похож на ширину.

Но я включил у себя шрифт “font8x8”, а у него описание символа занимает почему-то всего 8 байт. И нулевой элемент на ширину совсем не похож.

И фиг с ним! Не больно-то оно и нужно, это центрирование…

msv

где можно посмотреть методику настройки ВЧ-модуля

Уже отвечал, повторю свое ИМХО: слегка подстроить (выжать максимум) можно по индикатору поля или даже по макс. гулу в комп. колонках (мультипликативная помеха). Серьезно настроить/согласовать АФУ без КСВ-метра (а лучше + антеноскопа) невозможно никакими “народными” средствами. Тем более сильно укороченную антенну… Тем более с суррогатным противовесом…
2EagleB3 displ_head выводит заголовок по центру экрана. Левая координата считается как (width_screen/2)-(width_string/2). Меняйте width_screen и все должно быть ок. font8x8 -рудимент от первых версий. Для его использования необходимо менять функцию LCD_char.
2Серж ждите, может кто-нибудь поправит код для экрана с вашим разрешением. Для моей проги это непростая задачка… 😦 а для полноценного использования большего разрешения вообще полкода прийдется переписывать…
У VRV вроде бы как раз под 3410.

EagleB3
msv:

font8x8 -рудимент от первых версий

На большом дисплее выглядит очень приятно!

msv:

Для его использования необходимо менять функцию LCD_char

Я в ней (и вообще повсюду) поставил условную компиляцию на применяемый шрифт, а цикл не трогал. Все работает. Но я еще до меню не добрался. 😌

Aviator73
msv:

Уже отвечал, повторю свое ИМХО: слегка подстроить (выжать максимум) можно по индикатору поля или даже по макс. гулу в комп. колонках (мультипликативная помеха). Серьезно настроить/согласовать АФУ без КСВ-метра (а лучше + антеноскопа) невозможно никакими “народными” средствами.

Спасибо, я так и сделал. Пользовался индикатором тока антенны. Но не могу понять одну вещь - при вращении сердечников катушек можно найти такое их положение, что индикатор зашкаливает, а ток, потребляемый ВЧ-модулем достигает 2.5А. Т.е. чем больше сигнал в антенне, тем больше потребляемый ток.
Но ведь заводские модули потребляют 160-180 мА. О чем это говорит?

dmitryu

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

msv

О чем это говорит?

Возбуд тоже возможен. Но и без него индикатор тока (ненаправленный) показывает и прямую волну и отраженку, поэтому его показания не являются прямым свидетельством излучаемой мощности. Я настраивал Пи-контур на эквивалент антены (чисто активное сопротивление) по макс напряжению, а потом только удлинняющей катушкой и длиной антены добивался лучшего КСВ. Точнее компромиса, тк. КСВ очень сильно зависел и от того насколько плотно обхвачу руками и прижму к пузу пульт. Кстати еще показания в поле весьма отличаются от показаний на сухом полу, дома. Вам как мин. надо собрать простейший индикатор поля.
2 EagleB3 Тогда и в LCD_get_char_len можно условной компиляцией поставить return 8; Мда, у меня была проблема как впихнуть все необходимое в мелкий экран. А у Вас будет сложность как максимально эффективно использовать такое замечательное разрешение… 😃

EagleB3
msv:

Тогда и в LCD_get_char_len можно условной компиляцией поставить return 8;

То есть, шрифт 8x8 моноширинный? Не пропорциональный?

… Главное, чтобы в меню словам не тесно было.

Сейчас пытаюсь прикодить джойстик от SonyEricsson для навигации по меню.

Aviator73
msv:

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

Подскажите пожалуйста номинал резистора в качестве эквивалента и где смотреть напряжение? Полагаю, что резистор 50 Ом, а напряжение смотреть на выходе П-фильтра?
Пробовал делать индикатора поля, но все равно никак не могу настроить.
Дело в том, что максимальные показания индикатора соответствуют почти 4А потребляемого тока! Хотя нагрев выходного транзистора на ощупь одинаков и при 150 мА и при 4А. Если П-контур влияет на согласование выходного каскада с антенной, то по каким критериям настраивать предвыходной каскад - по максимальному напряжению на коллекторе? Или вольтметр своей входной емкостью на позволить точно настроить каскад?
Спасибо!

Nick_Shl
VRV:

Если данная ветка позволяет-было бы интересно ознакомится.

Значит выложим отдельной темой. Будет полезно всем. Картинок уже наделал, вечером попробую описать и выложить.

VRV:

Ну пожалуй от мк и не стоит требовать возможностей АРМ и х86 архитектур- задачи у них разные. А по сему обектное програмирование реализуется в мк в урезанном виде.

Вообще-то МК и архитектура никак не связана. Есть МК с АРМ внутри. Если переформулировать более научно, то мне не нравится гарвардская архитектура применяемая в АВР, хочу архитектуру Фон Неймана.

VRV:

Наверное повторюсь, но всеже- главной задачей данного проекта (иначе проще купить готовую апу) считаю возможность изменения функциональность (добавить/убрать функции) в зависимости от предпочтений пользователя.

Я тоже так считаю.

Aleksey_Gorelikov:

В таком случае лучше использовать АЦП в диф. режиме.

Про АЦП в диф режиме я уже писал - отстой. Подключается внутренний ОУ - а он шумит. Лучше Aref зарезать, чем использовать диф режим.

EagleB3:

Кажется, нашел я причины фигни с ногой !PEN

И что вы нашли? Это же есть в даташите. Вот только вы понимаете смысл сказанного? Смысл следующий: если программатор не может гарантировать что SCK = 0 при подаче питания на МК, то он должен его сбросить - “отпустить” сброс на время не менее 2-х тактов - МК начнёт инициализироваться, а затем опять его ввести в состояние сброса. Так же можно вместо сброса использовать этот самый !PEN, но тогда SCK всегда должно быть равно 0 на момент подачи питания на МК.
Я бы сказал что у вас проблемы с выводом сброса - при программировании он должен быть на земле. Попробуйте перемычку на сброс вместо !PEN надеть и потом зашить.

msv:

Выложите свою версию с исходниками, и заинтересованных прибавится…

Не прибавится. Проверено - что Фокус выкладывал, что вы… Программистов тут мало. А ещё меньше тех, кому это надо. А теперь псмотрите в свой код, в код Фокуса, в код VRV - сможет в нём разобраться человек не знающий Си, но желающий его выучить, что-бы что-нибудь подправить? Сомневаюсь.
Посмотрите на мой код - что по меню, что для приёмника - форматирование везде одинаковое, откомментирована почти каждая сторока - думаете это мне надо? Я и сам могу разобраться в своём коде. Это нужно для новичков, которые ничего не умеют, но очень хотят. Иначе их желание очень быстро закончится…

msv:

Свое мнение о нецелесообразности коллективного развития столь несложножной поделки, уже неоднократно высказывал. Прийдется подстраиваться к чужим идеям, структурам, интерфейсам, стилю итп. А это требует серьезного менеджмента и займет больше времени, чем все еще раз под себя переписать.

А моё мнение как раз наоборот. Подстройка она уж не так сложна. Под интерфейсы не подстраиваться нужно - их нужно обсуждать, решать, а только потом реализовывать.
Менеджмент много бы не занял(особенно с системой контроля версий) - больше бы заняло обсуждение что и как сделать, а от этого качество только повысилось бы.

msv:

Вот когда перейдем на ARM, начнем писать операционку для него, ну и дальше интерпретатор жавы, мр3-кодер, блюпуп с тачхрином приворачивать, тогда да… в одиночку сложновато справится будет… 😃

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

msv:

у меня была проблема как впихнуть все необходимое в мелкий экран

А у меня была проблема с подсчётом длинны строки в пикселях, поэтому у меня все шрифты моноширинные. Собственно “проблема” это громко сказано, просто решил не грузить МК ещё подпрограммой вычисления длинны строки в пикселях. Хотя, возможно, как-нибудь и реализую…

EagleB3
Nick_Shl:

Так же можно вместо сброса использовать этот самый !PEN

Это будет не совсем то же, насколько я понимаю. Если для входа в режим программирования использовать !PEN, тогда необходимо будет делать горячий перезапуск для выхода из режима программирования.

Проблема у меня была чисто железная (непропай на какой-то из ног XTAL1/XTAL2 или земли рядом с ними); с внешним кварцем камень запускался, но в каком-то чудовищно замедленном темпе - с запуском в тестовый цикл на моргание диодом то ли вообще без задержек, то ли с двумя задержками по 1uS.

😒 Сначала секунд за 35…45 происходила инициализация (обычная от CVAVR), а потом диод моргал с частотой хорошо заметной глазу - герца этак 2…4.

VRV
EagleB3:

Понятно! Да, у шрифта font_norm описание символа = 9 байт, и в нем да, 0-й элемент сильно похож на ширину.

Но я включил у себя шрифт “font8x8”, а у него описание символа занимает почему-то всего 8 байт. И нулевой элемент на ширину совсем не похож.

И фиг с ним! Не больно-то оно и нужно, это центрирование…


 k=strlenf(нечто из флеша)*8;

где к =ширина в точках

Не прибавится. Проверено - что Фокус выкладывал, что вы… Программистов тут мало. А ещё меньше тех, кому это надо. А теперь псмотрите в свой код, в код Фокуса, в код VRV - сможет в нём разобраться человек не знающий Си, но желающий его выучить, что-бы что-нибудь подправить? Сомневаюсь.
Посмотрите на мой код - что по меню, что для приёмника - форматирование везде одинаковое, откомментирована почти каждая сторока - думаете это мне надо? Я и сам могу разобраться в своём коде. Это нужно для новичков, которые ничего не умеют, но очень хотят. Иначе их желание очень быстро закончится…

Человеку, желающему выучит с не стоит пытатся это сделать на примере данного проекта- слишком много кода и особенностей(для этого есть сайт 123авр).
Скажу по себе- спустя месяц даже свой комментированный проект требует времени чтобы вспомнить что к чему.
Хотя коментарии- в определенной степени показатель культуры програмирования😁
Свой проект выкладывал для желающих и умеющих программировать, но не доконца разобравшихся в предидущих версиях:( ( особенности постами выше)

ЗЫ: а кто работал с AT90PWM3B, а еще лучше в связке с IRAMS??? есть такие?

EagleB3

А почему компилятор CVAVR (v.2.03.4) впадает в истерику от вроде бы безобидной команды
if (!(PING.0)) {};? Меняю букву “G” на “D” и тогда все нормально компилируется. 😵

У меня линия “Enter” из разъема на PG0 заведена. И вот такой неожиданный облом…

Nick_Shl
VRV:

Человеку, желающему выучит с не стоит пытатся это сделать на примере данного проекта.

Если читать внимательно тему, то заметите, что есть не те кто просто хочет выучить Си, а те кто хочет выучить его ради этого проекта. И всё моё вышесказанное относилось именно к этим случаям.

EagleB3:

А почему компилятор CVAVR (v.2.03.4) впадает в истерику от вроде бы безобидной команды if (!(PING.0)) {};? Меняю букву “G” на “D” и тогда все нормально компилируется. 😵

Скоро посылать в даташит начну большими буквами. Это связано с тем, что выражение вида PINx.Y означает использовать инструкции CBI, SBI и подобные. Смотрим в даташите карту памяти и видим, что PORTG за пределом доступности этими функциями. То есть побитовая адресация порта G не доступна. Только доступ целиком.

EagleB3:

У меня линия “Enter” из разъема на PG0 заведена. И вот такой неожиданный облом…

Как быть?
А вот так:

#define IsBitSet(x,y) (x&(1 << y))

if( !(IsBitSet(PING, 0)) )
msv

Порт G наверное не поддерживает побитовых операций. Можно if(!(PING & 1)) {}.
о… уже опередили…
2 Teapot сомневаюсь что транзистор выдежит 4A… Может наводки на амперметр?

Под интерфейсы не подстраиваться нужно - их нужно обсуждать, решать, а только потом реализовывать.

Думаю без менедмента весь проект останется на стадии обсуждения интерфейсов и до реализации дело не дойдет… 😃
… Много букв еще написал, но прочитав, все безжалостно стер…

EagleB3

Даташит я честно старался изучить. Но у меня слишком плохой английский, да и с архитектурой процессоров я знаком не настолько хорошо, чтобы разобраться в хитросплетениях их адресного пространства.
Из даташита я понял, что “PORTG, DDRG, and PING are not available in ATmega103 compatibility mode”. А из хелпа к CVAVR - что sfrb может применяться только в интервале адресов 0…1F.

Но вот дальше я уже примеривался в модуле “mega128.h” в строке sfrb EECR=0x1c; заменить вдрызг не нужный EECR на остро необходимый мне PING. 😒

Спасибо!!!

Заработал у меня СониЭрикссоновский джойстик.

//Кнопки навигации
#define SE_Joy

#ifdef SE_Joy // SonyEricsson joystic navigation
    #define L_UP    PIND.4
    #define L_DOWN  PIND.5
    #define R_DOWN  PIND.6
    #define R_UP    PIND.7
    #define J_ENT   (PING & 1)     // PG.0

    #define KEY_UP    !(!L_UP && !R_UP && L_DOWN && R_DOWN)
    #define KEY_DOWN  !(L_UP && R_UP && !L_DOWN && !R_DOWN)
    #define KEY_LEFT  !(!L_UP && R_UP && !L_DOWN && R_DOWN)
    #define KEY_RIGHT !(L_UP && !R_UP && L_DOWN && !R_DOWN)
    #define KEY_ENTER (!J_ENT && L_UP && R_UP && L_DOWN && R_DOWN)

#else // 4-button navigation - classic variant
    #define KEY_UP    PIND.4
    #define KEY_DOWN  PIND.5
    #define KEY_LEFT  PIND.6
    #define KEY_RIGHT PIND.7
#endif
VRV
EagleB3:

А почему компилятор CVAVR (v.2.03.4) впадает в истерику от вроде бы безобидной команды
if (!(PING.0)) {};? Меняю букву “G” на “D” и тогда все нормально компилируется. 😵

У меня линия “Enter” из разъема на PG0 заведена. И вот такой неожиданный облом…

порт G не полнный и на него не реализована структура PING.0…PING.7 см ниже
обращайся к нему стандартными функциями

It is important to note that bit selector access to I/O registers located in internal RAM above address 5Fh (like PORTF for the ATmega128 for example) will not work, because the CBI, SBI, SBIC and SBIS instructions can’t be used for SRAM access.

а понял лишнее… уже все у всех получилось:)