Прошу прощения, вы меня не правильно поняли. Я в курсе что фьюзы выставляются при прошивке. Вопрос в том - можно ли по исходнику узнать какие фьюзы нужно выставить?
Только анализируя что используется. Например, если в 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 контроллер сам сдвинет байт ...
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения