Прошу прощения, вы меня не правильно поняли. Я в курсе что фьюзы выставляются при прошивке. Вопрос в том - можно ли по исходнику узнать какие фьюзы нужно выставить?
Только анализируя что используется. Например, если в ATmega8/48/... используется таймер 2 в асинхронном режиме, наверняка там должен висеть часовой кварц, а это значит что тактирование ядра будет не от него же, а от встроенного RC-генератора. Или если вывод RESET или JTAG используются как обычные порты ввода-вывода, должны быть установлены соответствующие фузы. Или если нигде нет настройки сторожевого таймера и его сбросов, надо его и фузами отключить. Ну и так далее. Иногда необходимые фузы прописываются в каком-то из файлов конфигурации или описания, или даже в Makefile.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Я уже сообщал, что прога не моя. Я ищу глюки и аддаптирую её для работы с портом. А вообще содержание - это меню, LCD, небольшая обработка графики, клава, внешняя ОЗУ, работа с UART
Посмотрю Make: какой там ключ
Добавлено after 4 hours 4 minutes 10 seconds: Из Даташит:
Цитата:
Внутрисистемно программируемая флэш-память программ ATmega128 содержит 128 кбайт внутренней внутрисистемно перепрограммируемой флэш-памяти для хранения программы. Поскольку все AVR-инструкции являются 16 или 32-разр., то флэш-память организована как 64 кбайт х 16. Для программной защиты флэш-память программ разделена на два сектора: сектор программы начальной загрузки и сектор прикладной программы.
Регистр RAMPZ обычно используется для указания той страницы ОЗУ размером 64 кбайт, к которой выполняется доступ через Z-указатель. Т.к. ATmega128 не поддерживает память на статическом ОЗУ размером свыше 64 кбайт, то данный регистр используется только для выбора страницы памяти программ, доступ к которой осуществляется с помощью инструкций ELPM/SPM. Различные установки бита RAMPZ0 имеют следующий результат: RAMPZ0 =0: Инструкции ELPM/SPM осуществляют доступ к памяти программ в диапазоне адресов $0000 - $7FFF (младшие 64 кбайт) RAMPZ0 =1: Инструкции ELPM/SPM выполняют доступ к памяти программ в диапазоне адресов $8000 - $FFFF (старшие 64 кбайт) Обратите внимание, что действие инструкции LPM не зависит от установки RAMPZ.
Получается программно нужно как-то расширять возможности записи программ больше 64к или все приехали: на данном микроконтроллере дальше не уедешь?
А каким методом прошивка происходит? Беглый взгляд на даташит на предмет RAMPZ говорит, что это вроде как критично лишь при самопрограммировании (через загрузчик).
Пользуйтесь avrdude - в комплекте WinAVR есть, и в типовом шаблоне makefile тоже есть вызов. Не шиться может только по вине программатора, ядро МК тут совсем не при чем, и объем прошивки тоже не при чем.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
Что-то мне странного захотелось - положить в PROGMEM массив структур. Или что-то еще в том же духе.
Конкретно - список станций для приемника на RDA5807 (WiseLord, похоже, модификация Вашего творения, но с экраном от Нокии 5110). То есть в в программной флеши должно лежать слово с частотой, за ним - строка текста (допустим, 16 байт) с названием станции, и так 10 и более раз.
Естественно, положить отдельно таблицу частот, отдельно - таблицу с названиями станций - не вопрос. Только править такое - это два разных изменения одной программы, т.е. потенциальный источник ошибок для не очень хорошего специалиста. А хочется сочинить макрос для того, чтобы вносить каждую станцию одной отдельной строчкой. Тогда кто угодно сможет скорректировать под себя список станций, необязательно вообще быть программистом.
Беглый поиск в Нете ничего хорошего не принес...
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Заголовок сообщения: Re: WinAvr в вопросах и ответах
Добавлено: Вс окт 08, 2017 18:26:05
Опытный кот
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
Как-как? Студией, вестимо. Просто в той программуле, которую я нашел, при изменении списка станций, править надо в пяти местах: во-первых, в блоке #define с частотами надо сделать два исправления - исправить define-имя для частоты станции и собственно саму частоту, затем два раза в блоке if'ов - define-имя этой станции и текст с ее названием, и, наконец, надо исправить "магическую" константу "15" в конце, на завороте таблицы станций. Я сам, пока вносил список своих станций, пару-тройку раз ошибся. А хотелось что-нибудь, вроде:
Код:
// Начало списка станций RadioDef(10050," Тенгри FM "); RadioDef(10120,"Радио Текс "); .... RadioDef(10770," Дала FM "); // Конец списка станций
Впрочем, конечно, никто не мешает положить частоту в текстовом виде в начало каждой из строк с названием станций, фиксированным количеством цифр, а потом преобразовать его программно. Так, вероятно, и сделаю...
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Насколько я знаю, WinAVR не позволяет макросом определять строковую константу и одновременно делать ссылку на неё в массиве. Для массива станций в ОЗУ проблем нет, макросы элементарны, для flash - заметно хуже.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
void transver_4 ( char a) { //Для 8-и бит. // 41.125us char i=0; do { PORT_VID.VID_PIN = ((a & (1 << i)) >> i)&0x01; //побитно на PB7 i++;
} while (i<8); }
void transver_5 ( char a) { //Для 8-и бит. // 10.938us char i=0; do { PORT_VID.VID_PIN = a & 0x01; //побитно на PB7 a >>= 1; i++;
} while (i<8); }
void transver_6 ( char a) { //Для 8-и бит. //6.1875us
PORT_VID.VID_PIN = a & 0x01; //побитно на PB7 PORT_VID.VID_PIN = a & 0b00000010; //побитно на PB7 PORT_VID.VID_PIN = a & 0b00000100; //побитно на PB7 PORT_VID.VID_PIN = a & 0b00001000; //побитно на PB7 PORT_VID.VID_PIN = a & 0b00010000; //побитно на PB7 PORT_VID.VID_PIN = a & 0b00100000; //побитно на PB7 PORT_VID.VID_PIN = a & 0b01000000; //побитно на PB7 PORT_VID.VID_PIN = a & 0b10000000; //побитно на PB7 }
Все коды рабочие, проверено правда в симуляторе протеус. Время измерено протеусом между двумя вызовами COLUMN().
Заголовок сообщения: Re: WinAvr в вопросах и ответах
Добавлено: Пн окт 09, 2017 16:37:51
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Код какой то странный. При любом установленном бите в переменной "a" (т.б. "a" имеет какое либо значение), "PORT_VID.VID_PIN" присваивается единица. Иначе - ноль. Зачем тогда куча условий ?
При любом установленном бите в переменной "a" (т.б. "a" имеет какое либо значение), "PORT_VID.VID_PIN" присваивается единица. Иначе - ноль. Зачем тогда куча условий ?
Не. На ножку порта выдвигается байт младшим битом вперед. Dimon456, это видеосигнал чтоли? Я так понимаю, биты должны быть одинаковой длительности?
А) Приведи ассемблер transver () Если тебе важно быстродействие данного кода, можно его на ассемблере переписать Б) если флеша много свободного, можно и 256 функций (для каждого байта своя функция), тогда ветвлений при выдаче байта не будет В) Если есть возможность использовать ножку MOSI, то можно выдавать байт в SPI, а SPI контроллер сам сдвинет байт ...
Сейчас этот форум просматривают: Jack_A и гости: 37
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения