Перейти к содержанию

Рекомендуемые сообщения

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

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Кажется, получилось. Только он не хочет "на горячую" переключаться из режима программатора в режим usb-uart. Впрочем, если отключить-подключить разъем - все работает нормально. Как ни странно, из usb-uart в режим программатора оно переходит без проблем.

Сейчас проверял на отладочной плате, выводы на которой разведены так:

D+ : PD2

D- : PD3

PULLUP : D4

JUMPER : D5

LED1 : D6

LED2 : D7

Вывод PULLUP иногда используется в vusb, с ним соединяется резистор 1.5 кОма вместо питания.

Вывод JUMPER - переключение режимов. Если посажен на землю - программатор, если на питание (или в воздухе, там программная подтяжка к питанию) - переходник.

LED1 - индикация режима программатора.

LED2 - индикация режима переходника.

Фузы выставлены как hfuse=0xC0, lfuse=0x9F (самозагрузчик активен).

Кварц 12 МГц.

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

Отдельное "веселье" было с переходами от одной области к другой, они же понятия не имеют друг о друге. Простой asm("rjmp 0x0000") не срабатывал (разобрался почему - он относительный, поэтому прыгал хз куда), пришлось извращаться с секциями __attribute__((section(<sec_name>))) и расположением в них фиктивной функции. При слиянии кексов эту функцию надо вырезать вручную, благо адрес известен.

С самим слиянием проблем не было. В результирующий файл копировался сначала hex от программатора, без последней пары строчек (:021800... и финальной :00000001FF), потом туда добавлялся файл от переходника, но уже без первой строчки (:04000000F894FFCFA2). Полученый файл прекрасно скармливается программатору.

Отдельное ФУ то ли авторам раннего vusb, то ли авторам avr-gcc: последний упорно хочет, чтобы в ПЗУ располагались только константы (PROGMEM const char...), а первым было лень это делать (PROGMEM char...). Впрочем, особых проблем это не доставило.

Отдельно результирующий файл прошивки.

hybrid.tar.gz

res.hex.tar.gz

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Так стандартное vusb, только добавлены кнопка и 2 светодиода. В конечной схеме можно добавить резисторы по выводам SPI и UART.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Примерно так

Резисторы для защиты, вдруг и программатор и программируемый контроллер заъотят одновременно подать напряжение на один и тот же вывод.

post-58864-0-24753100-1416120979_thumb.jpeg

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Ну а если совместить разъемы UART и ISP ,как на оригинальном USBASP?

Если на горячую не хочет переключаться,может поможет сторожевой пес, производящий автосброс?

Ссылка на комментарий
Поделиться на другие сайты

А зачем совмещать выводы? Это разные модули, на отладочной плате все равно лучше проводками кинуть, без разъемов.

Watchdog? Он используется в vusb и постоянно сбрасывается. Лучше вывести ресет или кинуть на него линию вводы-вывода. Но правильнее, конечно, еще пошаманить с кодом и найти, откуда возникает бага. Все исходники (исправленные, разумеется) в архиве. Заодно можно поменять назначение выводов в соответствии со своей платой, убрать pullup, например, и перекинуть светодиоды с джампером.

В общем, исходники я допилил, так что usb-uart влезает в область самозагрузчика (часть функций обмена перенесена в секцию preboot, которая расположена в области основной программы, перед загрузчиком), компилятор не ругается на PROGMEM и написал рабочий способ перехода на нужный адрес без ассемблерных вставок. Наверное, можно было прямыми указателями на функцию, но так тоже ничего. Все изменения в переходнике были в добавлении перед несколькими функциями атрибута __attribute__((section(preboot))). В обоих добавлены проверки джампера и обработка светодиодов, это в начале main и функция test_reinit(). Разумеется, подправлены фуйлы hardware.h и usbconfig.h для настройки аппаратной подтяжки и проверки линий D+, D- и makefile'ы, чтобы задать адреса всех секций: для переходника .text=1800, preboot=1500, res=0 ; для программатора только res=1800. Исправить это под свои нужды сможет уже любой, кто более-менее долго занимался с контроллерами avr.

Кстати, в качестве программатора использован avrdoper-hid по двум причинам: во-первых, вроде как спецификация usb-1.1 не позволяет эмулировать uart (впрочем, это никому не мешает), но win7x64 не любит неподписанных драйверов. А вот для HID используются родные. Кроме того, даже без функциональности переходника, возможность программирования сохраняется. Во-вторых, для каждой задачи контроллер прикидывается своим устройством: либо программатором, тогда виртуального com-порта просто нет, либо com-портом, тогда нет программатора. Перепутать сложнее.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Сам тестировал скорость UART ?

Я на просторах инета находил универсальный переходник USB - UART - SPI - I2C , с исходниками, там правда,переключается режим через USB, + программа на Windows . Есть исходники, можешь покопаться, может интересное в них найдешь.

Устройство так же работает как HID, этим самым обошли проблему с драйверами на Win7 x64

Изменено пользователем stas732
Ссылка на комментарий
Поделиться на другие сайты

Согласно документации, скорость 600 - 38400 bps, сам не проверял. Мне как-то 9600 всегда хватало.

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

Устройство так же работает как HID, этим самым обошли проблему с драйверами на Win7 x64
То есть программы, которые пытаются работать с обычным com-портом на этой штуке не заработают? Впрочем, мне это уже не слишком важно: есть "нормальный" переходник usb-com, а программатор уже давно использую именно hid. Да и linux подобные устройства подхватывает без лишних проблем и установки драйверов. Что vusb, что аппаратные.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Ну мне в общем-то максимум 19200 хватает,в основном 9600, так что вполне достаточно. Да сам на линухе этим балуюсь. Надо будет на дня опробывать все это дело в реале.

Файл main.hex или res.hex заливать?

Ссылка на комментарий
Поделиться на другие сайты

Вроде же специально выложил res.hex отдельно. Файл main.hex это avrdoper, файл cdcmega.hex это usb-uart.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

почему-то не определяется win 7 x32

Заливал прошивку чистого usbasp - работает нормально. то есть качество монтажа исключается.

Просто неизвестное устройство определяется. Светодиоды переключаются четко по кнопке.

Моя ошибка,извиняюсь, D+ D- неправильно подключил

Ссылка на комментарий
Поделиться на другие сайты

Определяется в обоих режимах, работоспособность проверить неначем. Может с фузами что-то не так? Надо перенести вектор RESET в область загрузчика и выставить ее максимальной. Сами фузы я уже давал - hfuse=0xC0, lfuse=0x9F. Либо запускать с перемычкой (PD5 на землю), тогда будет работать только как программатор.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

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

позже проверю еще разок

а распиновка usb в точном соответствии со схемой?

Ссылка на комментарий
Поделиться на другие сайты

Распиновка в точном соответствии с usbconfig.h:

#define USB_CFG_IOPORTNAME	  D
#define USB_CFG_DMINUS_BIT	  3
#define USB_CFG_DPLUS_BIT	   2
#define USB_CFG_PULLUP_IOPORTNAME   D
...
#define USB_CFG_PULLUP_BIT		  4

На схеме изображен разъем mini-usb, обратите внимание на нумерацию. В модели порядок выводов другой, чем в реальном разъеме (при разводке протеус это учитывает). В модели порядок такой: VCC ; D+ ; D- ; GND А в реальности для обычного USB-A такой: VCC ; D- ; D+ ; GND, а для mini - VCC ; D- ; D+ ; NC ; GND (он пятивыводный, предпоследний висит в воздехе).

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Проверил в WinXP в виртуальной машине, соединив RxD и TxD в режиме usb-uart. Эхо приходит нормально. Подключать разъем программирования к моей отладочной плате несколько неудобно. Но, еще раз повторяю, логику программ я не трогал, только пошаманил с расположениями и обработкой джампера и светодиодов. На всякий случай приложил модель своей платы в протеусе. Там много лишнего, и проверить программу на ней невозможно, но разводка станет понятна.

Кстати, что насчет резистора подтяжки? 1.5 кОм между PD3 и PD4. usbasp'у он не мешает?

usbtest.tar.gz

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Наверное, в этом и ошибка. На отладочной плате между PD3 и PD4. Вообще, для low-speed usb вывод D- должен быть подтянут к питанию, точнее, к 3.3 В резистором 1.5 кОм. Видимо, схему неправильно перерисовал.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Вот теперь работает все, терминал обрабатывает и принимает все, программатор не прибывал, но определяется. Проблема в переключении режима.

Ссылка на комментарий
Поделиться на другие сайты

Предлагаю, как вариант, дергать сброс при каждом переключении режима с помощью конденсатора (0, 1мкФ), посредством переключателя (дополнительными контактами)

Ссылка на комментарий
Поделиться на другие сайты

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...