Самодельный передатчик (часть 1)
а ват заготовка прошивки под эту печку
(VMLAB+WinAVR)
чуть не забыл yserlib.rar надо распокавать сюда \VMLAB\userlib\
Привет, Ser_bil !
А где в Инете можно скачать VMLAB+WinAVR?
Хочу заняться программированием AVR`ов, а то я чувствую что мне это очень нужно стало…
А где в Инете можно скачать VMLAB+WinAVR?
Хочу заняться программированием AVR`ов, а то я чувствую что мне это очень нужно стало…
VMLAB
это уже полностью открытая версия
WinAvr
это фактически линуксовый компилятор оптимизированный под контроллер,я юзаю WinAVR-20060125 там есть и более свежая версия но я её не щупал
как вариант использовать avr-gcc, uisp и simulavr 😉
так сказать open way
2Ser_bil:
понравилось мне как у вас сделано, только уж больно жирный .heх получается… хотя при атмега128 это не проблема
как вариант использовать avr-gcc, uisp и simulavr 😉
так сказать open way
я просто к VMLAB привык хотел на протеуса перелесть но что то пока не пошло 😃
2Ser_bil:
понравилось мне как у вас сделано, только уж больно жирный .heх получается… хотя при атмега128 это не проблема
на данный момент компилятор сказал:
Total code size: 5727 words
тоесть 11454 байта, не так и много получается помоему но конечно в том что выложено на данный момент море всяко мусора😊 на данный момент это “престрелочный” вариант…
а исходники так и оставите открытыми? или “пристреляетесь” - закроете ? 😃
а исходники так и оставите открытыми? или “пристреляетесь” - закроете ? 😃
коммерция конечно штука хорошая ,но я зарабатываю на жизнь несколько другими вещами 😒
и потом:
- если бы хотел оставить их закрытыми не выложил бы не зачто не выложил бы
- в этом коде есть много мыслей самых разных людей в том числе и отсюда
здорово. только не бросайте.
так по поводу кооперации:
в этой ветке кто-то (сорри не вспомню на вскидку кто) предлагал больше общаться на предмет математики кодера ,по моему очень здраво.
например я хоть меня тресни не понимаю как ввести экспоненту в управляющий сигнал, что это за функция?.. 😊
(интересно было услышать мнение focus-а по этому поводу)
2Ser_bil:
а что вы собираетесь использовать в качестве радиоканала? вч-блок просто прикупите и стандартные приемники? или как?
2Ser_bil:
а что вы собираетесь использовать в качестве радиоканала? вч-блок просто прикупите и стандартные приемники? или как?
пока да а дальше видно будет…
так по поводу кооперации:
в этой ветке кто-то (сорри не вспомню на вскидку кто) предлагал больше общаться на предмет математики кодера ,по моему очень здраво.
например я хоть меня тресни не понимаю как ввести экспоненту в управляющий сигнал, что это за функция?..
(интересно было услышать мнение focus-а по этому поводу)
Доброго времени суток. Сегодня сдал первый экзамен… ЕГЭ… Придумали блин!
Сейчас почти распаял новую печатку. Осталось тока проц впаять. Но сначала надо из старой выпаять. Надо торопиться - до 17 июня надо запуститьпередатчик… А еще 4 экзамена сдавать.
Про экспоненту. Она вводит нелинейность во взаимосвязь входного и выходного сигнала… похожа на функцию Y=e^x, Только коэффициенты еще вставить надо. Я еще как такову на рассматривал. Буду делать настраиваемую… Реализовывать можно через таблицу, но это жрет много памяти. Лучше через кусочно линейную аппроксимацию. Заодно и любую кривую задать можно. На другом форуме, тока не помню каком, Глайдер подробно описывает это.
А по поводу математики - это верно сказано. Главное создат математическую маодель… А уж реализовать ее не так уж и сложно…
ВЧ блок: Я пока делаю на своем родном от передатчика, но в будущем думаю поставить синтезатор… Или на прямом синтезе или ФАПЧ… Но DDS жрет много… Надо запустить ее попробовать … Лежат 4 штуки от аналога. Две на 41МГц выходной частоты и две на 130МГц выходной… Входные соответственно 120 и 400МГц.
Пока все… постараюсь побыстрей с железом разобраться и за прогу сесть…
Про экспоненту. Она вводит нелинейность во взаимосвязь входного и выходного сигнала… похожа на функцию Y=e^x, Только коэффициенты еще вставить надо. Я еще как такову на рассматривал. Буду делать настраиваемую… Реализовывать можно через таблицу, но это жрет много памяти. Лучше через кусочно линейную аппроксимацию. Заодно и любую кривую задать можно.
Экспонента и “любая кривая” это немного разные вещи. На мой взгляд, лучше сделать так: есть кривая, которую можно редактировать, но там же, в редакторе, можно предусмотреть возможность автоматом выставить 5 (или сколько их будет, 7, например) точек по экспоненте. Для этого переходим на другой экран, вводим значение в %%, жмем “установить”. Возвращаемся - наша кривая выстроена четко по экспоненте. Можем отредактировать или установить другие значения.
В процессе микширования нужно использовать линейную интерполяцию по заранее вычисленным (введенным) точкам. Вычислять каждый раз степенную функцию нет необходимости.
На мой взгляд, лучше сделать так: есть кривая, которую можно редактировать, но там же, в редакторе, можно предусмотреть возможность автоматом выставить 5 (или сколько их будет, 7, например) точек по экспоненте. Для этого переходим на другой экран, вводим значение в %%, жмем “установить”. Возвращаемся - наша кривая выстроена четко по экспоненте. Можем отредактировать или установить другие значения.
У меня, к примеру, именно так и сделано. Даже нет отдельного экрана для задания степени экспоненты. Просто при задании числа экспоненты автоматом выставляется кривая. А если изменить кривую руками, то вместо числа экспоненты будут рисоваться прочерки.
Кстати, смотрю на варианты схем - даже кварцы стоят по 12MHz. Но почему в этих схемах никто не нарисовал подключение PC по USB? Ведь это - пара мелких деталей при таком раскладе.
При этом появляется возможность:
- конфигурирования устройства с PC по USB (графические редакторы кривых и т.п.);
- загрузки-выгрузки описания и настроек моделей (кто там обсуждал единый формат данных?);
- использования пульта для симуляторов (очевидное применение);
- управления чем-то с PC (для мазохистов);
- обновления прошивок непосредственно по USB (при использовании USB boot loader’а);
- чего-то еще, что я просто не учел.
Это можно не поддерживать в базовой версии софта, но схемотехнически это предусмотреть, IMHO, абсолютно необходимо и полезно. USB, само собой, софтверный.
а ссылочку на что-то подобное? в частности на софтверный USB-лоадер, для примера.
Кстати, смотрю на варианты схем - даже кварцы стоят по 12MHz. Но почему в этих схемах никто не нарисовал подключение PC по USB? Ведь это - пара мелких деталей при таком раскладе.
у меня это заложено(софтовый USB-) в атмеловских апноутах это есть ,
планируется что он будет подключён вместо UART -a. возможно и шить через него получится
а вот ссылка на софтовый USB
а ссылочку на что-то подобное? в частности на софтверный USB-лоадер, для примера.
На что-то подобное - на что именно?
- Редактор кривых - частный случай конфигурирования по USB. Я это делал для других проектов.
- См. выше. Реально есть возможность читать и писать блоки данных по USB - значит, можно что угодно конфигурировать и чем угодно управлять.
- См. rcdesign.ru - USB адаптар передатчика на ATmega8.
- Аналогично первым двум пунктам.
В целом, есть прекрасный программный USB драйвер с открытыми исходными текстами. Для данных задач его более чем достаточно. Если делать устройство, как HID, то писать драйвер на PC тоже не надо - Windows определяет устройство автоматически. Остается только написать утилиту конфигурирования или управления.
Что касается пункта 5 - загрузчика, то я реализовал такой для ATmega32 и выше (нужен бут-блок размером от 4-х килобайт, так как весь код написан на C). Он реализован также как HID устройство, поддерживает шифрование прошивок, обновление версий по тому же USB с помощью утилиты с PC, и ряд специальных функций. То есть, я вполне аргументированно могу утверждать, что это возможно, так как сам им пользуюсь для своих поделок. В процессе работы над ним был найден (и исправлен в сотрудничестве с автором usb-drv) ряд ошибок в упомянутом драйвере, добавилась функциональность и родился его порт для компилятора IAR, который стал частью официальной версии (см. оригинальное readme драйвера).
Однако, такой boot - это закрытый проект, поскольку делался не для данной темы. Потому я только упомянул, что такое возможно, но не имею возможности привести пример в виде ссылки. Это не исключает того, что кто-то напишет аналогичный. Знаю точно, что, как минимум, еще один человек пишет такой, но сам с ним не общался.
Так что предусмотреть надо однозначно - есть и пины свободные, и кварц подходит оптимально.
у меня это заложено(софтовый USB-) в атмеловских апноутах это есть ,
планируется что он будет подключён вместо UART -a. возможно и шить через него получится
а вот ссылка на софтовый USB
Советую обратить внимание на ту ссылку, что дал я. Драйвер от Objective Development не сравнить с первым таковым от Игоря Цеско (автора упомянутого аппноута атмела). Он написан на C под GCC/WinAVR (кроме time-critical секций, написанных на ассемблере), имеет открытый исходный код с гуманной лицензией и полностью документирован, включая особенности и ограничения. С ним основной код пишется на раз два, вот так, к примеру (кусок из кода адаптера RC аппаратуры к схеме с rcdesign):
//
// Execution starts here
//
__C_task void main(void)
{
wdInit(); // initialize watchdog timer
usbInit(); // initialize USB driver
bootInit(); // initialize boot loader interface
inDecoderInit(); // initialize input decoder
usbDeviceConnect(); // connect USB device to the bus
__enable_interrupt();
while (1)
{
wdReset(); // reset watchdog timer
inDecoderPoll(); // poll for input data
outSendData(); // return data via USB Interrupt In endpoint
usbPoll(); // process USB requests
#if BOOT_SUPPORT_ENABLED
if (bootRequest()) // jump to boot loader if switch is pressed
{
usbDeviceDisconnect(); // disconnect the USB device from the bus
inDecoderStop(); // stop the input decoder interrupts
bootJump(); // jump to boot loader
}
#endif
}
}
А вот, собственно, всё, что необходимо и почти достаточно (не считая формирования блока данных и HID Report Descriptor’а) для обработки USB запросов HID джойстика. Не правда ли, куда менее cryptic, чем ассемблерные варианты? Да к тому же еще и обработка USB данных в этом драйвере выполняется в реальном времени, а не после приема в буфер. Ровно 8 команд на бит - интересная статья о том, как это удалось, есть на сайте автора драйвера.
//
// USB setup request processing
//
uchar usbFunctionSetup(uchar data[8])
{
usbRequest_t *rq = (void *)data;
if ((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS)
{
// Return the report if host requests it without USB interrupt
if (rq->bRequest == USBRQ_HID_GET_REPORT)
{
// wValue: ReportType (highbyte), ReportID (lowbyte)
// we only have one report type, so don't look at wValue
usbMsgPtr = usbBuildReport();
return sizeof(usbReport);
}
}
return 0;
}
//-----------------------------------------------------------------------------
//
// Check if the USB Interrupt In point buffer is empty and return
// the data buffer for the following host request via USB interrupt
//
void outSendData(void)
{
if (usbInterruptIsReady())
{
// fill in the report buffer and return the
// data pointer (Report ID is not used)
usbSetInterrupt(usbBuildReport(), sizeof(usbReport));
}
}
Все это здорово конечно… но, коль скоро разговор вернулся в конструктивное русло, давайте не будем распыляться. Эта “рюшечка” по сложности и требованию к ресурсам не далеко уходит от самого передатчика. Лучше направить усилия на создание того, что мы, собственно, собираемся ей конфигурировать 😃
2 osnwt:
Очень ценная и дельная информация, жаль немного преждевременная 😦 Хотя было бы здорово, если бы кто-то, руководствуясь ей, начал бы, как Вы говорите, отдельный проект по реализации конкретно этой фичи 😃
С софтверным обработчиком USB есть вот какие грабли - хост может подвесить контроллер на произвольное время, не говоря уж о проблемах с другими критичными прерываниями. Так что управлять моделью с подключенным хостом я бы не стал совершенно точно :о).
Вообще, применение софтверного USB для сложных real-time систем мне представляется малоперспективной затеей. Тем более, что уже достаточно недорогих контроллеров с аппаратной поддержкой USB. Мне, например, очень понравилось работать с AT91SAM7S64 - 64 кб флеш, 16 кБ ОЗУ, ARM ядро, отличная периферия и честный full-speed USB. По цене сравним с ATmega64.