Страница 111 из 111
Re: WinAvr в вопросах и ответах
Добавлено: Сб июн 27, 2026 22:35:29
watchmaker
Есть ли в WinAVR поддержка ATmega328PB? Если нет - пойдёт на этом чипе прошивка, скомпилированная для обычной 328P/PA?
Re: WinAvr в вопросах и ответах
Добавлено: Вс июн 28, 2026 14:07:10
ARV
Если мне не изменяет память, разница в этих МК только в питании/энергопотреблении и/или максимальной тактовой частоте, т.е. программно они совместимы на 100%.
Re: WinAvr в вопросах и ответах
Добавлено: Вс июн 28, 2026 15:53:18
ARV
Оказывается, PB отличается... Я был не прав.
Пошивка от А пойдет на B, если распиновка корпуса совпадет. В РВ почти вдвое больше всей периферии, поэтому обратная совместимость не гарантируется.
Re: WinAvr в вопросах и ответах
Добавлено: Вс июн 28, 2026 17:51:30
OKF
watchmaker писал(а): Сб июн 27, 2026 22:35:29
Есть ли в WinAVR поддержка ATmega328PB? Если нет - пойдёт на этом чипе прошивка, скомпилированная для обычной 328P/PA?
У WinAvr нет поддержки PB. Но ничто не мешает добавить iom328pb.h и использовать некоторые фишки PB. Но лучше иметь тулчейн посвежее. Ардуино PB поддерживает. Производитель заявляет о 100% программной совместимости P c PB. Но я не проверял.
Re: WinAvr в вопросах и ответах
Добавлено: Вс июн 28, 2026 19:55:09
Starichok51
прошивка для "Р" будет работать на "РВ".
Re: WinAvr в вопросах и ответах
Добавлено: Вс июн 28, 2026 22:02:42
watchmaker
Понятно. Просто завалялась платка именно с PB.
Но лучше иметь тулчейн посвежее.
Что посоветуете? Родной микрочиповский или что-то ещё?
Re: WinAvr в вопросах и ответах
Добавлено: Вс июн 28, 2026 22:04:25
watchmaker
Пошивка от А пойдет на B, если распиновка корпуса совпадет.
Далеко не всегда так было. Самый классический пример - ATmega8 и ATmega88 в дипе. Распиновка одинаковая, возможности похожие, а регистры распиханы совершенно по-разному. В своё время переделывал часики с этого форума с ATmega8 на 88 - пришлось несколько дней перелопачивать все исходники. Зато потом перейти на 168/328 оказалось в разы проще.
Re: WinAvr в вопросах и ответах
Добавлено: Пн июн 29, 2026 06:51:16
OKF
watchmaker писал(а): Вс июн 28, 2026 22:02:42
Что посоветуете?
У меня стоит Ардуино 1.8.19. У неё GCC 7.3.0. Добавил в path c:\Program Files\Arduino\hardware\tools\avr\bin\ и работаю в редакторе через make.
Когда необходимо использую и Ардуино IDE.
Мега8 и мега88 - это разные группы внутри одной линейки. Есть хорошо расписанный AN AVR094 по переходу.
Вот тут и преимущества Ардуино фреймворка. Используй что хош, безо всяких переделок. Если грамотно написано.)
Re: WinAvr в вопросах и ответах
Добавлено: Вт авг 11, 2026 23:08:11
watchmaker
Компилирую одни и те же исходники с одними и теми же параметрами под ATtiny25 и ATtiny45 - получаю бинарники разного размера (у 45 больше на несколько байт или десятков байт). Так и должно быть? Два одинаковых проекта в Протеусе, только с разными чипами, компиляция через WinAVR, оптимизация -Os.
Re: WinAvr в вопросах и ответах
Добавлено: Ср авг 12, 2026 04:22:42
akl
К примеру, tiny25 имеет только SPL, а tiny45 еще и SPH. EEPROM тоже имеет разный размер.
Re: WinAvr в вопросах и ответах
Добавлено: Ср авг 12, 2026 15:45:10
watchmaker
EEPROM я не использую, из оборудования только один пин GPIO на выход и один таймер с прерыванием.
SPL и SPH - возможно, если компилятор знает об этом различии.
Re: WinAvr в вопросах и ответах
Добавлено: Ср авг 12, 2026 16:19:00
ДядяВован
Конечно знает компилятор, надо же указатель стека инициализировать.
Re: WinAvr в вопросах и ответах
Добавлено: Чт авг 13, 2026 04:16:36
akl
В этой серии стек устанавливается аппаратно. Знает ли об этом компилятор? Ассемблер студии 4.19 знает.
Спойлер

Re: WinAvr в вопросах и ответах
Добавлено: Пт авг 14, 2026 16:13:24
veso74
Blink по таймеру. GCC v7
ATTiny25: 80 байта / 0 байта
ATTiny45: 84 байта / 0 байта
ATTiny85: 84 байта / 0 байта
Спойлер

Остальная часть .lst файла та же самая.
Re: WinAvr в вопросах и ответах
Добавлено: Пт авг 14, 2026 22:27:55
OKF
80 много. Это смотря какой блинк. А то можно и в 24, 16 и даже в 10 байт вложиться.)
Re: WinAvr в вопросах и ответах
Добавлено: Сб авг 15, 2026 12:16:06
OKF
t13 например
#include <avr/wdt.h>
int main()
while ((WDTCR = PORTB = DDRB = 1<<WDE | 1<<WDP2 | 0<<WDP1 | 1<<WDP0)); //0,5S не меандр!