Компания ST обновила семейство ШИМ-регуляторов со встроенным ключом ViperPlus, выпустив новые бюджетные микросхемы VIPER122 и VIPER222, микросхемы VIPER265K и VIPER267K, имеющие встроенный ключ MOSFET напряжением 1050 В, и самый мощный VIPer31x. С их помощью возможно реализовать топологии: изолированный и неизолированный обратноходовой преобразователь (flyback), понижающий преобразователь (buck), повышающе-понижающий преобразователь (buck-boost).
Компилировать и прошивать МК собираюсь после проверки на эмуляторе . Хочется понять больше по программной части . Изучал Assembler на KP580 , поэтому на Atmel мне не так-то легко сейчас . Очень понравилась книга Ю.Ревич , «Практическое программирование Микроконтроллеров AVR на языке ассемблера» читал , старался понять .
Компания Mean Well выпускает настолько широкий спектр продукции, что бывает трудно разобраться в этом многообразии и выбрать оптимальный вариант для своего изделия или приложения. Для облегчения выбора и более ясного понимания различий между сериями продукции Mean Well мы представляем вашему вниманию подборку материалов по данной теме.
Огромное спасибо ! пока то что нужно , позже в любом случае отпишусь )))
Если я не прав , и где-то ошибка , если можно конечно , подскажите над чем мне подумать , поработать .
Подключил кнопку к порту C , светодиод к порту D . По схеме у меня порт C — ввода , порт D — вывода . Кнопка у нас ввод , светодиод вывод . По умолчанию все порты настроены на ввод , поэтому настраиваем только порт D на вывод . При нажатии кнопки на порту ввода C появляется число 10000000 , до нажатия было 00000000 . Вводим это число в регистр . Далее его выводим .
У меня вопросы : при нажатии кнопки как показано на рисунке , в порту ввода будет появляться число 10000000 или 00000000 . На KP580 включенная кнопка это 0 , тут аналогично ? Как писать заголовок , первую строку программы , например «.include «d:\avr\avrasm\appnotes\2313def.inc» . Нужно ли настраивать порт D на вывод ? ( объясните если можно ) . Настройка порта D на вывод осуществляется с помощью этой команды ( ldi Temp, 0D11111111 ) ?
Заранее извиняюсь за код , старался написать базу , тело программы .
1) сделать правильную схему. Например вы хотите повестить на МК кнопку и светодиод — в том же протеусе подключите все сразу так как нужно. С питанием, землей, линией сброса, защитными резисторами.
2) написать код в AVR Studio, и попробовать для начала его симуляцию именно там. Походить по шагам по коду и посмотреть как меняются квадратики и чиселки. На том же сайте поищите. Тут на радиокоте статьи неплохие, но не рассчитаны на совсем новичка.
_________________ only pure true norwegian blackx
Постарайтесь сначала отдельно:
1) сделать правильную схему. Например вы хотите повестить на МК кнопку и светодиод — в том же протеусе подключите все сразу так как нужно. С питанием, землей, линией сброса, защитными резисторами.
2) написать код в AVR Studio, и попробовать для начала его симуляцию именно там. Походить по шагам по коду и посмотреть как меняются квадратики и чиселки. На том же сайте поищите. Тут на радиокоте статьи неплохие, но не рассчитаны на совсем новичка.
огромное спасибо за ответ . Постараюсь поработать над этим . У меня самая первая ошибка в заголовке , выдает ошибку
Последний раз редактировалось RossiaForever Сб янв 05, 2013 10:02:58, всего редактировалось 2 раз(а).
Компилирую программу , компилируется . Заметил «ошибку» программы при загрузке ее в МК в Proteus , думал это Proteus виноват ( в интернете часто на программу сваливают ) . Решил отладить программу через Debug в AVR Studio , так-то и нашел ошибочку .
В пример приведу часть программы ( она компилируется ) , команда заносит в регистр R16 ( Temp ) число 11111111 :
ldi Temp, 0b11111111 out DDRD,Temp
При отладке в Debug в регистре R16 появляется число FF ( 11111111 ) как и должно быть . Счетчик циклов увеличивается с 0 до 4096 и т.д. Счетчик программ (PC) = 0x000001 . Счетчик циклов , программ и регистр R16 выделены красным цветом .
Без подпрограммы ( задержка ) все работает нормально . При отладке программы : по команде rcall вызывается п/п , при выходе из п/п . снова возвращается на команду Init: Ldi Temp , 0b00000001 , и так до бесконечности . Где накосячил не могу понять , указатели стека пока немного трудно понять .
Задача: Разработаем программу управления одним светодиодом. При нажатии на кнопку светодиод горит, при отпускании гаснет.
Для начала разработаем принципиальную схему устройства. Для подключения к микроконтроллеру любых внешних устройств используются порты ввода-вывода. Каждый из портов способен работать как на вход так и на выход. Подключим светодиод к одному из портов, а кнопку к другому. Для этого опыта мы будем использовать контроллер Atmega8. Эта микросхема содержит 3 порта ввода-вывода, имеет 2 восьмиразрядных и 1 шестнадцатиразрядный таймер/счетчик. Также на борту имеется 3-х канальный ШИМ, 6-ти канальный 10-ти битный аналого-цифровой преобразователь и многое другое. По моему мнению микроконтроллер прекрасно подходит для изучения основ программирования.
Для подключения светодиода мы будем использовать линию PB0, а для считывания информации с кнопки воспользуемся линией PD0. Схема приведена на рис.1.
Через резистор R2 на вход PD0 подается плюс напряжения питания, что соответствует сигналу логической единице. При замыкании кнопки напряжение падает до нуля, что соответствует логическому нулю. В дальнейшем R2 можно исключить из схемы, заменяя его на внутренний нагрузочный резистор, введя необходимые настройки в программе. Светодиод подключен к выходу порта PB0 через токоограничивающий резистор R3. Для того чтобы зажечь светодиод надо подать в линию PB0 сигнал логической единицы. Задающий тактовый генератор будем использовать внутренний на 4MHz, так как в устройстве нет высоких требований к стабильности частоты.
Теперь пишем программу. Для написания программ я использую программную среду AVR Studio и WinAvr. Открываем AVR Studio, всплывает окошко приветствия, нажимаем кнопку «Создать новый проект» (New project), далее выбираем тип проекта — AVR GCC, пишем имя проекта например «cod1», ставим обе галочки «Создать папку проекта» и «Создать файл инициализации», нажимаем кнопку «Далее», в левом окошке выбираем «AVR Simulator», а в правом тип микроконтроллера «Atmega8», нажимаем кнопку «Финиш», открывается редактор и дерево категорий проекта — начальные установки закончены.
Для начала добавим стандартный текст описаний для Atmega8 с помощью оператора присоединения внешних файлов: #include
синтаксис директивы #include
#include #include “имя_файла.h”
Угловые скобки указывают компилятору, что подключаемые файлы нужно сначала искать в стандартной папке WinAvr с именем include. Двойные кавычки “ и “ указывают компилятору начинать поиск с директории, в которой хранится проект.
Для каждого типа микроконтроллера есть свой заголовочный файл. Для ATMega8 этот файл называется iom8.h, для ATtiny2313 – iotn2313.h. В начале каждой программы мы должны подключать заголовочный файл того микроконтроллера, который мы используем. Но есть и общий заголовочный файл io.h. Препроцессор обрабатывает этот файл и в зависимости от настроек проекта включает в нашу программу нужный заголовочный файл.
Для нас первая строчка программы будет выглядеть вот так:
Любая программа на языке Си должна обязательно содержать одну главную функцию. Она имеет имя main. Выполнение программы всегда начинается с выполнения функции main. У функции есть заголовок – int main(void) и тело – оно ограниченно фигурными скобками <>.
В тело функции мы и будем добавлять наш код. Перед именем функции указывается тип возвращаемого значения. Если функция не возвращает значение – используется ключевое void.
int – это целое 2-х байтное число, диапазон значений от – 32768 до 32767
После имени функции в скобках () указываются параметры, которые передаются функции при ее вызове. Если функция без параметров – используется ключевое слово void. Функция main содержит в себе набор команд, настройки системы и главный цикл программы.
Далее настраиваем порт D на вход. Режим работы порта определяется содержимым регистра DDRD(регистр направления передачи информации). Записываем в этот регистр число «0x00» (0b0000000 – в двоичном виде), кроме кнопки к этому порту ничего не подключено, поэтому настраиваем весь порт D на вход. Настроить порт поразрядно можно записав в каждый бит регистра числа 0 или 1 (0-вход, 1-выход), например DDRD = 0x81 (0b10000001) — первая и последняя линия порта D работают на выход, остальные на вход. Необходимо также подключить внутренний нагрузочный резистор. Включением и отключением внутренних резисторов управляет регистр PORTx, если порт находится в режиме ввода. Запишем туда единицы.
Настраиваем порт B на выход. Режим работы порта определяется содержимым регистра DDRB. Ничего кроме светодиода к порту B не подключено, поэтому можно весь порт настроить на выход. Это делается записью в регистр DDRB числа «0xFF». Для того чтобы при первом включении светодиод не загорелся запишем в порт B логические нули. Это делается записью PORTB = 0x00;
Для присвоения значений используется символ «=» и называется оператором присваивания, нельзя путать со знаком «равно»
Пишем основной цикл программы. while («пока» с англ.) — эта команда организует цикл, многократно повторяя тело цикла до тех пор пока выполняется условие, т. е пока выражение в скобках является истинным. В языке Си принято считать , что выражение истинно, если оно не равно нулю, и ложно, если равно.
Команда выглядит следующим образом:
В нашем случае основной цикл будет состоять лишь из одной команды. Эта команда присваивает регистру PORTB инвертируемое значение регистра PORTD.
PIND; //взять значение из порта D, проинвертировать его и присвоить PORTB (записать в PORTB)
// выражения на языке Си читаются справа налево
PIND регистр ввода информации. Для того, чтобы прочитать информацию с внешнего вывода контроллера, нужно сначала перевести нужный разряд порта в режим ввода. То есть записать в соответствующий бит регистра DDRx ноль. Только после этого на данный вывод можно подавать цифровой сигнал с внешнего устройства. Далее микроконтроллер прочитает байт из регистра PINx. Содержимое соответствующего бита соответствует сигналу на внешнем выводе порта. Наша программа готова и выглядит так:
В языке Си широко используются комментарии. Есть два способа написания.
При этом компилятор не будет обращать внимание на то что написано в комментарии.
Если используя эту же программу и подключить к микроконтроллеру 8 кнопок и 8 светодиодов, как показано на рисунке 2, то будет понятно что каждый бит порта D соответствует своему биту порта B. Нажимая кнопку SB1 — загорается HL1, нажимая кнопку SB2 — загорается HL2 и т.д.
В статье были использованы материалы из книги Белова А.В. «Самоучитель разработчика устройств на AVR»