Программа для прошивки микроконтроллеров stc
Я уже рассказывал про микроконтроллер STC15W408AS, с архитектурой 8051, будет обзор на ещё один МК от STCmicro Limited - STC15W204S. Для загрузки в эти МК своей прошивки, её вначале нужно скомпилировать и в данной статье я расскажу, как это сделать, с помощью Keil uVision 5. Данный материал будет полезен и для других МК с архитектурой 8051.
Микроконтроллеры компании STCmicro Limited становятся популярными, на Aliexpress можно купить набор, для сборки часов на STC15W408AS. Программа для прошивки МК обычно предоставляется в виде исходных кодов, которые нужно скомпилировать, в результате получим hex-файл, который нужно будет загрузить в МК, с помощью фирменной утилиты.
Компилировать программу будем в среде разработки Keil uVision 5. Данное ПО платное, но можно скачать ознакомительную версию, в которой компилятор, ассемблер, компоновщик и отладчик 8051 ограничены 2 Кб объектного кода. Если будите писать программы до 2 Кб, то эти ограничения для вас не страшны, в противном случае, программы, которые генерируют более 2 Кбайт объектного кода, не будут компилироваться, собираться или связываться.
Keil uVision можно скачать на официальном сайте.
Заполняем форму и в ответ нам предоставят ссылку для скачивания дистрибутива.
Установив, запускаем программу.
Создаём проект, с помощью пунктов меню "Project" – "New uVision Project …"
Пишем имя проекта, у меня это blink. Каждый проект желательно размещать в отдельной папке, в моём примере это папка blink, нажимаем "Сохранить".
Проект сохранится с расширением .uvproj
Выбираем микроконтроллер, для которого будем писать программу. В поле "Search:" пишем "8052" и в выпадающем списке выбираем в пункте "Generic" - "8052 (all Variants)" и нажимаем "ОК".
На вопрос "Copy 'STARTUP.A51' to Project Folder and Add File to Project?" отвечаем "Нет".
Так будет выглядеть панель проекта.
Создадим новый файл, для этого нажмём на соответствующую иконку или воспользуемся комбинацией "Ctrl + N". Появится поле для ввода кода.
Введём в это поле код, в примере это будет код для мигания светодиодом (Blink). По-умолчанию в моей плате уже был залит код для мигания светодиода, но в примере сделаем мигание чаще.
void Delay_us(int n)
int x;
Исходный код программы Blink. В строке "sbit led=P1^0;" указывается пин, к которому подключен светодиод. На отладочной плате STC15W408AS, светодиод подключен к пину P10. В строке "Delay_us(10);" задаётся количество миллисекунд, на которое останавливается выполнение программы (в примере это 10 миллисекунд).
Сохраним введённый код в формате С-файла, для этого воспользуемся соответствующей иконкой на панели или с помощью комбинации клавиш "Ctrl + S". Файл необходимо сохранить с любым именем и расширением ".c" (в примере main.c).
Имя файла изменится на то, которое выбрали при сохранении.
Теперь нужно добавить этот С-файл в наш проект, для этого правой кнопкой мыши клацаем на папке "Source Group 1" и в меню выбираем пункт "Add Existing Files to Group 'Source Group 1'".
Выбираем С-файл, который нужно добавить в проект (main.c) и нажимаем "Add" для его добавления, затем "Close", что бы закрыть это окно.
main.c добавлен в наш проект.
Перед сборкой проекта нужно настроить формат вывода, нам необходимо вывести в hex-файл. Для этого клацаем правой кнопкой мыши на папке "Target 1" и выбираем "Options for Target 'Target1'. ".
В окне "Options for Target ' Target 1'" выбираем вкладку "Output", выставляем флажок в пункте "Create Hex File", нажимаем ОК.
Теперь можно построить проект, для этого воспользуемся соответствующей иконкой или нажмём F7. Если код написан правильно, то ошибок не должно быть.
Файл "blink.hex" будет создан в папке проекта, в подпапке "Objects". Теперь его можно загрузить в микроконтроллер, с помощью утилиты "STC-ISP".
Попробуйте изменить в коде, в строке "Delay_us(10);" значение на 1000, пересобрать hex-файл и загрузить его в микроконтроллер. Светодиод должен мигать не так часто.
Давайте рассмотрим ещё один пример, добавив к светодиоду тактовую кнопку. В этом примере, светодиод будет зажигаться, если будет нажата кнопка.
Подключаем внешний светодиод и тактовую кнопку к свободным пинам на отладочной плате STC15W204S. В примере, светодиод я подключил к пину P14, а кнопку к P13.
Создаём новый проект и всё проделываем так же, как и с примером Blink, только пишем новый код:
В строке "sbit Button = P1^3;" указываем пин, к которому подключаем кнопку. В строке "sbit LED = P1^4;" - пин со светодиодом.
К отладочной плате на STC15W204S, не нужно подключать внешний светодиод и кнопку, они уже распаяны на плате, нужно лишь указать правильно пины в коде: для кнопки - "sbit Button = P3^2;", для светодиода - "sbit LED = P3^3;".
Попробуй собрать программу из исходных кодов, загрузить в микроконтроллер и проверить её в действии.
Комментарии
Да в общем то не становится линейка STC популярной, по причине того, что кроме крякнутого Кейла, ничем более не откомпилиш прогу на этот микроконтроллер. Китайцы на ворованых интеловских технологиях добавив тех же ворованых технологий современных создали неплохой экземпляр -- и фсЁ! Чуть более написать кода, чем пример в сей статье -- и ERROR -- привышение лимита 2кб! :-/Для любителей и студентов к сожалению так и есть. Но ведь производитель не на них рассчитывает, а на крупные центры разработки, у которых должна быть лицензия на Кейл. С помощью этой линейки решается как минимум две проблемы:
1. Импортозамещени е в самом Китае.
2. Кто захочет выпускать свою продукцию на 8051 дешевле, тот с американских МК, может перейти на Китайские.
Есть вроде вариант бесплатной среды для компиляции, но пока до конца не протестировал. Да в общем то не становится линейка STC популярной, по причине того, что кроме крякнутого Кейла, ничем более не откомпилиш прогу на этот микроконтроллер . Китайцы на ворованых интеловских технологиях добавив тех же ворованых технологий современных создали неплохой экземпляр -- и фсЁ! Чуть более написать кода, чем пример в сей статье -- и ERROR -- привышение лимита 2кб! :-/ сам куб поддерживает прямое общение с программой 3D8S Alpha ,но как сохранить в памяти эти программы не понятно .пока программа включена и вход соединён с ПК все бегает, а как офлайн сохранить эти программы в куб ,не могу понять .ни какой информации нет.
Прочитал я про этот куб. Существует несколько версий куба, в зависимости от прошивки:
1. Просто куб, со встроенными эффектами, одноцветный.
2. Куб с возможностью подключения к Ардуино. В данном случае, Ардуино не прошивает куб, а по UART, передаёт массив, какие светодиоды и как зажечь. Здесь плюс Ардуино в том, что можно разнообразить световые эффекты. Минусы: Ардуино должна быть всегда подключена и так же требуются знания работы с Ардуино и работы со скетчами.
3. Куб с поддержкой Ардуино, пульта, которым можно переключать вшитые в MCU эффекты и возможность подключать звук.
4. Тоже самое, что и 3-й вариант, только ещё имеется поддержка работы с программой 3D8S Alpha. Эта программа делает тоже самое, что и Ардуино - через UART выводит массивы со световыми эффектами.
Плюс программы в том, что не нужно покупать Ардуино и разбираться в его подключении и программировании.
5. Поддержка работы с программой 3D8S Alpha и карты памяти. Вот этот вариант куба можно запрограммирова ть и пользоваться своими эффектами автономно. В 3D8S создаётся эффект, затем данные записываются на карту памяти и куб её проигрывает.
6. Поддержка карты памяти и встроенного динамика. На динамик можно выводить звуковые эффекты.
Вывод, что бы программировать свои эффекты и ими пользоваться автономно без сторонних девайсов:
1. Собрать куб 5-й или 6-й версии.
2. Можно апгрейдить свой куб до другой версии, заменив/добавив недостающие компоненты + где-то раздобыв прошивку. Китайцы просто так эту прошивку не дадут, они хотят продавать кубы разных версий, не хотят себе конкурентов.
3. Написать с нуля свою прошивку на С, скомпилировать её например в Keil и загрузить через утилиту STC-ISP в микроконтроллер от STC.
Загрузчик (bootloader)
Загрузчик живёт в самом конце Flash памяти МК и позволяет записывать прошивку, отправляемую через UART. Загрузчик стартует при подаче питания на МК, ждёт некоторое время (вдруг кто-то начнёт слать код прошивки по UART), затем передаёт управление основной программе. И так происходит каждый каждый раз при старте МК.
- Загрузчик позволяет прошивать МК через UART;
- Загрузчик замедляет запуск МК, т.к. при каждом запуске ждёт некоторое время для потенциальной загрузки прошивки;
- Загрузчик занимает место во Flash памяти. Стандартный старый для Arduino NANO занимает около 2 кБ, что весьма существенно!
- Именно загрузчик мигает светодиодом на 13 пине при включении, как индикация работы.
Программатор
Помимо записи прошивки во flash память, программатор позволяет:
- Считывать содержимое Flash памяти (скачать прошивку на компьютер)
- Полностью очищать чип от всех данных и настроек
- Записывать и читать загрузчик
- Считывать/записывать EEPROM память
- Читать и настраивать фьюзы (fuses, fuse-bits) и лок биты.
USB-TTL (UART)
USB-TTL | Arduino |
DTR | DTR |
RX | TX |
TX | RX |
GND | GND |
VCC/5V/3.3V | VCC |
Фьюзы (Pro)
Фьюзы (фьюз-биты) являются низкоуровневыми настройками микроконтроллера, которые хранятся в специальном месте в памяти и могут быть изменены только при помощи ISP программатора. Это такие настройки как выбор источника тактирования, размер области памяти под загрузчик, настройка отсечки по напряжению и прочее. Фьюз-биты собраны по 8 штук в байты (т.н. байты конфигурации), как типичный регистр микроконтроллера AVR. Таких байтов может быть несколько, они называются low fuses, high fuses, extended fuses. Для конфигурации байтов рекомендуется использовать калькулятор фьюзов (например, вот такой), в котором просто ставятся галочки на нужных битах, и на выходе получается готовый байт в hex виде. Рассмотрим на примере ATmega328p:
Лок-биты (Pro)
Лок-биты (lock-bits) позволяют управлять доступом к памяти микроконтроллера, что обычно используется для защиты устройства от копирования. Лок-биты собраны опять же в конфигурационный лок-байт, который содержит: BOOTLOCK01, BOOTLOCK02, BOOTLOCK11, BOOTLOCK12, LOCKBIT1, LOCKBIT2 (для ATmega328). Калькулятор лок-битов можно использовать этот. BOOTLOCK биты позволяют запретить самому МК запись (самопрограммирование) во flash память (область программы и область загрузчика)
А вот локбиты LOCKBIT позволяют запретить запись и чтение flash и EEPROM памяти извне, при помощи программатора, т.е. полностью защитить прошивку от скачивания и копирования:
Таким образом включив LOCKBIT1 (лок-байт будет 0x3E) мы запретим внешнюю запись во Flash и EEPROM память, т.е. при помощи ISP программатора, а включив LOCKBIT1 и LOCKBIT2 (лок-байт: 0x3C) полностью заблокируем заодно и чтение данных из памяти микроконтроллера. Повторюсь, всё описанное выше относится к ATmega328p, для других моделей МК читайте в соответствующих даташитах.
ISP программатор
USBasp
Решение проблем
Решение большинства проблем с загрузкой через программатор (независимо от того, что написано в логе ошибки):
- Вытащить и обратно вставить usbasp в usb порт
- Вставить в другой usb порт
- Переустановить драйвер на usbasp
- Проверить качество соединения USBasp с МК
- Перепаять переходник и отмыть флюс
Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):
Основные ошибки в логе Arduino IDE
Arduino as ISP
Почти любая другая плата Arduino может стать ISP программатором, для этого нужно просто загрузить в неё скетч ArduinoISP:
- Открыть скетч Файл > Примеры > 11. ArduinoISP > ArduinoISP
- Всё! Ваша Arduino теперь стала ISP программатором
- Подключаем к ней другую Arduino или голый чип по схеме ниже
- Выбираем Arduino as ISP в Инструменты > Программатор
- И можем писать загрузчики, фьюзы или загружать прошивку напрямую во Flash
-
Либо поставить поставить конденсатор ёмкостью
Решение проблем
Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):
- Arduino ISP: нужно изменить частоту загрузки прошивки в скетче Arduino ISP и снова прошить его в ардуино-программатор (см. строку в скетче 45 и ниже);
Работа в Arduino IDE
Прошивка загрузчика
Как убрать загрузчик?
Загрузка скетча
В Arduino IDE можно зашить скетч через программатор, для этого надо нажать Скетч > Загрузить через программатор. Это очень удобно в том случае, когда МК используется без загрузчика, или просто голый МК.
Фьюзы
Конфигуратор платы в Arduino IDE устроен следующим образом: каждой плате в Инструменты > Плата соответствует свой набор настроек, включая фьюзы, которые прошиваются вместе с загрузчиком . Некоторые из них:
- Загрузчик (путь к файлу)
- Скорость загрузки (через загрузчик)
- Объем доступной flash и sram памяти
- Весь набор фьюзов и лок-биты
Файл конфигурации называется boards.txt и найти его можно в папке с ядром Arduino: C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt. Документацию на boards.txt можно почитать здесь. При желании можно вывести нужные фьюзы через калькулятор (читайте выше), изменить их в boards.txt (главное не запутаться, для какой выбранной конфигурации платы делается изменение) и прошить в МК, нажав Инструменты > Записать загрузчик.
Такая работа с фьюзами максимально неудобна, но есть и другие варианты:
- Ядро GyverCore для atmega328, в нем мы сделали кучу готовых настроек фьюзов прямо в настройках платы, читайте в уроке про GyverCore. Несколько загрузчиков, включая вариант без загрузчика, выбор источника тактирования и другие настройки в один клик мышкой.
- Программа AVRdudeprog, про нее поговорим ниже
Avrdudeprog
- Чтение/запись/очистка flash памяти
- Чтение/запись/очистка eeprom памяти
- Полная очистка чипа
- Калькулятор фьюзов и локбитов (чтение/запись)
Более подробный обзор на avrdudeprog можно посмотреть здесь . Давайте посмотрим на калькулятор фьюзов. Выбираем свой микроконтроллер и программатор (можно добавить другие модели микроконтроллеров и программаторов, читай тут). Переходим во вкладку Fuses, нажимаем прочитать. При успешном чтении увидим текущий набор настроек своего чипа. Можно их поменять и загрузить. Важно! Галку инверсные биты не трогаем! Лок-биты и отключение RST заблокирует микроконтроллер, не трогайте их, если такой цели нет! Можно загружать прошивку или загрузчик из .hex файла, указав путь к ней на первой вкладке в окне Flash. Очень удобная утилита для низкоуровневой работы с МК.
Видео
Программа для просмотра схем материнских плат (BoardViewer). Версия для Linux. Умеет просматривать форматы brd, bdv, cst, asc, bvr, bvr2, bvre, cad, fz, fab, hyp, odb, GenCAD, Altium Designer / Protel, IPC-D-356[A]Всем доброго дня или вечера.
Недавно купил программатор ezp2019+ и появиласть проблема с драйвером . Через диспетчер устройств , драйвера не найдутся ,это понято . Скачивал с форумах , но ничего (отключение проверки подписей не помогло) . В комплекте шел диск с которого я высунул драйвер и тут все заработало.
Все находится в RAR файле . Откройте user manual и делайте как так .
Если будут вопросы ,задавайте !
Программатор Eeprom Spi Avr Microwire
Программа написана для использования с программатором CH341A китайского производства.
Данная программа является альтернативой китайской программы автора SkyGz Series Soft.
Добавлена возможность автоматического распознавания и программирования следующих чипов:
>> I2C EEPROM 24 серии
>> SPI FLASH 25 серии
>> SPI EEPROM 25/95 серии
>> MICROWIRE EEPROM 93 серии
>> SPI AVR микроконтроллеров Atmega
版本: V11.10 2021.07.09
T56编程器 :
Support: 26716 pcs( 增加芯片数:+234)
TL866II 编程器 :
Support:16810pcs(增加芯片数: +125)
Новая версия программного обеспечения для программаторов XGECU.
Добавлен ряд новых микросхем.
Добавлена поддержка BR9010 / 20/21/40/41/80/16.
Поддержка EON, WINBOND, GIGADEVICE 'OTP / Security registers' (должна быть отмечена опция SPI "Expert").
исправлена ошибка адресации MSM16811.
Улучшен процесс стирания микросхем PM25LQ512 / 010/020/040.
Фaйлы .eep по умолчанию открываются во вкладке EEPROM.
Размер чипа по умолчанию CT1C08 изменен с 64 до 36 байт.
Добавлена поддержка PUYA SPI NOR.
Улучшения обнаружения и удаления защиты I2C SDP 34x04 / 34X02.
Улучшен процесс стирания и программирования микросхем AT25DFxxx.
Улучшения импорта / экспорта фaйлов IntelHex.
Программа для программатора CH341.
В версии 1,41 добавлена возможность редактирования дампа и окно поиска
Программа для работы с программатором GuitarTestPlatform для отладки емкостных тачскринов на контроллере GOODIX
Программа для программатора Mini Progr ammer CH341A
С помощью этой программы вы сможете протестировать видео карту и оперативную память.Первым делом программа покажет, какая видео карта у вас установлена и доступную память.Данный тест может быть интересен тем, кто хочет определить общую производительность системы.Запустить тестирование путем нажатия кнопки Run benchmark, если ниже у вас установлено значение на Allocate, если вы выставили параметр Free, тогда тест как чтения так и записи будет запускаться отдельно для каждого типа.Формирование пиковых значений занимает какое-то время,т.к. работает в максимально быстром режиме доступа к железу, стоит отметить - что достоверные данные о работе RAM можно сделать только при "свободной" системе от видео и закачек.
Vestel Editor программа для конфигурации майнов 17mbxxx.
Берем чистую USB флэш (Fat32).Кидаем в корень чистые файлы:
DownloadProfile.mbXX
DownloadPq.mbXX
DownloadSpi.mbXX
Вставляем флэшку в ТВ, вьіполняя последовательность нажатий с пульта :
после вкл ТВ - МЕНЮ 4725- кнопка вверх - OK
на флешке должньі записаться файльі кофигурации майна и т.п.
Редактируем нужньіе позиции и сохраняем в папку на флешке profile.
Вставляем обратно в ТВ и включаем с зажатой кнопкой "ОК" на пульте.Идёт прошивка до перезагруза.
NeoProgrammer 2.2.0.7
Поддерживается большое семейство компонентов:
SPI NOR flash
SPI NAND flash
SPI EEProms (25xxx, 95xxx)
SPI EEProms (45xxx)*
SPI F-RAMs, FRAMs
I2C EEProms, F-RAM (24Cxx)
MicroWire EEProms (93Cxx 8/16 bit)* M93S46, M93S56, M93S66, ER5911, ER5912, ER5922, MSM16911, 93C57, M811P . (см. DIV_59x и OKI в devicelist.txt).
AVR Mcu (ATmega, ATtiny)*
NUVOTON Mcu (N76E003)*
ENE KB90xx*
Специальные компоненты:
I2C:
AT24RF08/PCA24S08/BUL08/LE26CAP08 (проверено)*
PCF8582C (проверено)*
M34E02/AT34C02 (проверено)*
M34E04/AT34C04 (проверено)*
CT1C08 (проверено)*
CT1C16*
SPI EEprom:
M35080.
ST95P08 (проверено)
В архиве добавлены переходники для USBasp.
Удобная оболочка для прошивки большого количества микросхем памяти и других. Работает автораспознавание.
Альтернативный софт для CH341A
Поддерживается большое семейство компонентов:
SPI NOR flash
SPI NAND flash
SPI EEProms (25xxx, 95xxx)
SPI EEProms (45xxx)
SPI F-RAMs, FRAMs
I2C EEProms (24Cxx)
MicroWire EEProms (93Cxx 8/16 bit) (93C57)
AVR Mcu (ATmega, ATtiny)
NUVOTON Mcu (N76E003)
ENE KB90xx
Специальные компоненты:
I2C:
AT24RF08/PCA24S08/BUL08/LE26CAP08
PCF8582C
M34E02/AT34C02
M34E04/AT34C04
CT1C08
CT1C16
SPI EEprom:
M35080, M351xx
ST95P08
Актуальная версия — 5 . 36 от 5 марта 2021 г .
— Victoria с русским, английским и украинским переводом.
— Технология S.M.A.R.T. HDD/SSD на русском и украинском языках.
— Поддержка накопителей с интерфейсом M.2 / U.2 NVMe.
Калькулятор фьюзов AVR, разархивировать содержимое в одну папку, запускать файл calc.html
Программа обновления ПО мониторов SAMSUNG. Обновляет по VGA/DVI/HDMI соединению, прошивает видимо не флэш, а что-то другое. Перезапись флэш не помогла, а эта утилита монитор воскресила.
SamsungFirmwareUpdater
Версия: V10.75 2021.01.28
Программист T56:
Поддержка: 26022 шт. (Увеличение количества чипов: + 42 шт.)
Программатор TL866II:
Поддержка: 16666 шт. (Увеличение количества чипов: + 15 шт.)
Программатор Eeprom Spi Avr Microwire
Программа написана для использования с программатором CH341A китайского производства.
Данная программа является альтернативой китайской программы автора SkyGz Series Soft.
Добавлена возможность автоматического распознавания и программирования следующих чипов:
>> I2C EEPROM 24 серии
>> SPI FLASH 25 серии
>> SPI EEPROM 25/95 серии
>> MICROWIRE EEPROM 93 серии
>> SPI AVR микроконтроллеров Atmega
Обновление для NeoProgrammer
При нажатии кнопки READ буфер редактора предварительно заполняется FF, если он пуст.
Исправлена ошибка с «blankcheck», когда буфер редактора пуст.
Программа для программатора RT809H 20201216 ENG
Программа для программатора RT809F 20201216 ENG
«Victoria HDD/SSD» — лучшая бесплатная программа для диагностики, исследования, тестирования и мелкого ремонта жёстких дисков, SSD-накопителей, карт памяти, а также любых других накопителей в операционной системе Windows.Актуальная версия — 5 . 34 от 9 декабря 2020 г.
— Victoria с русским, английским и украинским переводом.
— Технология S.M.A.R.T. HDD/SSD на русском и украинском языках.
— Поддержка накопителей с интерфейсом M.2 / U.2 NVMe.
Что нового в версии 5.34:
— Добавлен фильтр на устройства класса CD-ROM, чтобы их буквы не отображались ошибочно в списке физических устройств API. Для того, чтобы в программе Victoria работать с оптическими дисками и их эмуляторами, можно установить галку «Отображать логические диски» в меню «Настройки» -> «Паспорт».
Программное обеспечение для программаторов USBasp,CH341.
Поддерживается большое семейство компонентов:
SPI NOR flash
SPI NAND flash
SPI EEProms (25xxx, 95xxx)
SPI EEProms (45xxx)*
SPI F-RAMs, FRAMs
I2C EEProms, F-RAM (24Cxx)
MicroWire EEProms (93Cxx 8/16 bit)* M93S46, M93S56, M93S66, ER5911, ER5912, ER5922, MSM16911, 93C57, M811P . (см. DIV_59x и OKI в devicelist.txt).
AVR Mcu (ATmega, ATtiny)*
NUVOTON Mcu (N76E003)*
ENE KB90xx*
Специальные компоненты:
I2C:
AT24RF08/PCA24S08/BUL08/LE26CAP08 (проверено)*
PCF8582C (проверено)*
M34E02/AT34C02 (проверено)*
M34E04/AT34C04 (проверено)*
CT1C08 (проверено)*
CT1C16*
SPI EEprom:
M35080.
ST95P08 (проверено)
*: Обратите внимание, что многие из этих компонентов требуют подключения адаптера к CH341. Схема адаптера доступна непосредственно в программном обеспечении.
В этой статье я расскажу о том, как программировать микроконтроллеры без использования Arduino. Мы будем использовать программатор AvrISP STK500 для программирования контроллера ATtiny84.
Нам понадобится
Подключаем питание
Arduino мы не используем, поэтому обо всем нам придется думать самостоятельно. И первое, с чем необходимо разобраться — питание. Мы будем использовать преобразователь L7805, обладающей следующими характеристиками:
Теперь нам надо узнать схему подключения этого преобразователя. Ее мы найдем на странице 3 даташита.
Распиновка
Необходимо знать назначение ножек преобразователя. Это описано на 2-й странице даташита.
Схема
С учетом всего вышеописанного, получается схема для организации питания.
Программатор
В качестве программатора мы использовали AvrISP STK500 от Seeed Studio. Для его работы под Windows и Mac OS необходимы драйверы. Их можно скачать с официального сайта. Пользователям Linux устанавливать ничего не нужно — программатор будет сразу готов к работе.
Подключение к контроллеру
Распиновка разъема программатора такова:
Важно! Это распиновка разъема программатора, если смотреть на него сверху (отверстиями от себя). Не перепутайте!
Разъем программатора необходимо подключить к микроконтроллеру. Можно использовать как 10-пиновый разъём, так и 6-пиновый. Без разницы. Соединим проводами соответствующие пины, т.е:
10-пиновый ICSP | ATtiny84 | |
---|---|---|
Reset | 5 | 4 |
MOSI | 1 | 7 |
MISO | 9 | 8 |
SCK | 7 | 9 |
Прошивка
Напишем код прошивки на чистом «C», которая заставит светодиод мигать. Использование ШИМ-сигналов и считывание аналоговых сигналов на чистом «C» не так тривиальна, и может являться темой отдельной статьи, поэтому остановимся пока на простейшем примере.
После скетчей Arduino, код малопонятен, правда? Ничего, сейчас я объясню, что да как. В первых двух строчках мы подключаем необходимые библиотеки, чтобы воспользоваться такими штуками, как DDRA , PORTA , _delay_ms .
Что же такое DDRA ? Это регистр микроконтроллера, управляющий направлением работы порта А. Он содержит в себе 8 бит. Если установить какой-то бит в 1, то пин с соответствующим номером станет выходом.
PORTA — тоже регистр, но он содержит в себе данные порта А. Если мы хотим на вывод номер 2 записать логическую единицу, то мы должны поместить 1 в соответсвующий бит регистра.
А _delay_ms — функция задержки. Исходя из этого можно составить таблицу соответствия:
Arduino | C | |
---|---|---|
Направление | pinMode(led, OUTPUT); | DDRA = 1 << 2; |
Значение | digitalWrite(led, HIGH); | PORTA = 1 << 2; |
Задержка | delay(1000); | _delay_ms(50); |
Однако, самым важным различием кода является то, что в программе на С нет разделений функций setup и loop . За все это отвечает функция int main(void) . И она выполняется всего 1 раз! А мы хотим, чтобы наш светодиод моргал не один раз, а постоянно. Как раз для этого и используется бесконечный цикл while (1==1) .
Поэтому легко сделать вывод, что этот цикл и есть аналог функции loop() в Arduino. А то, что до него — аналог функции setup() .
Далее начинается самое интересное. Нам нужно скомпилировать и загрузить прошивку. Однако, в зависимости от вашей операционной системы, методика будет различаться.
Mac OS X
Первым делом необходимо скачать и установить CrossPack for AVR Development. Это даст нам все необходимые инструменты. CrossPack состоит из двух частей.
AVR Libc — a C library for GCC on AVR microcontrollersПервая нам нужна для написания кода и создания файла прошивки, а вторая — для заливки прошивки в контроллер.
Проект создается в три шага.
В результате будет создано следующее дерево файлов.
На данном этапе нас интересует содержимое файла Makefile . В нем содержится информация о том, что вообще мы используем: какой контроллер, программатор. Это все описывается в строках с 20 по 24:
Пройдемся по строкам:
DEVICE содержит в себе название контроллера, который мы программируем OBJECTS — какие объектные файлы будут сгененрированыВнимание! Задание неверных fuse-битов может привезти к тому, что микроконтроллер перестанет работать и вернуть его к нормальной жизни может быть либо очень сложно либо невозможно! Воспользеумся сайтом AVR Fuse Calcuator.
Сначала из выпадающего списка выберем нужный нам контроллер (ATtiny84).
И затем укажем необходимые опции, которые нам нужны. Сейчас для нас важны 2 вещи: сохранение возможности прошивать контроллер через SPI и сохранение его работоспособности без внешнего резонатора, поэтому выбираем соответствующие пункты, а остальные оставляем по умолчанию.
Видим, как поменялись сгенерированные значения.
Внесем изменения в Makefile.
Прошивка
Она происходит в 2 этапа.
Сначала необходимо перейти в папку firmware и выполнить команду make . Если ошибок нет, то результат выполнения команды будет таким:
Эта команда сделает из нашего исходника main.c файл, пригодный для заливки в контроллер — main.hex .
Второй этап — как раз заливка прошивки. Делается это с помощью команды make flash . Ее нормальный вывод выглядит следующим образом:
Все, прошивка контроллера завершена.
Windows
Здесь все проще.
Первым делом необходимо скачать и уствновить среду разработки для AVR — Atmel AVR Studio 4. А вторым — Atmel AVR Toolchain.
После запуска среды, необходимо создать новый проект.
Затем указать имя, расположение и то, что мы хотим использовать С ( GCC ).
Третий шаг — настройка отладчика.
На этом все, проект готов к использованию. Теперь необходимо написать и сохранить исходник, который мы уже обсудили.
В результате общий вид среды разработки выглядит вот так:
Теперь необходимо подключиться к программатору. Делается это с помощью нажатия на кнопку con .
В качестве Platform выбираем STK500 , а в Port — Auto . Затем нажимаем Connect.
Если все правильно, то в открывшемся окне выбираем вкладку Main и нажимаем в ней на кнопку Read Signature .
Строка Reading signature from device .. 0x1E, 0x93, 0x0C .. OK! говорит о том, что все хорошо и сигнатура успешно прочиталась. Сигнатура — это своего рода позывной микроконтроллера, которым он сообщает собственную модель.
Это окно нельзя закрывать, иначе соединение с программатором будет потеряно. Просто сверните его.
Теперь нажмем Build → Build . Это заставит программу скомпилироваться. Прошьем контроллер с помощью кнопки Write Flash Memory Using Current Settings — это заставит скомпилированную программу загрузиться в память микроконтроллера.
Заключение
Мы собрали простейшее устройство мигалку, но сделали это на низком уровне. С использованием программатора и «продвинутой» среды разработки, а не Arduino.
Разобравшись в премудростях программирования микроконтроллеров на чистом «Си», вы сможете выжимать из них максимум возможности, затрачивая при этом минимум места и денег.
Читайте также: