Микроконтроллеры Микроконтроллеры - это автономные процессоры, имеющие память для хранения исполняемой программы, энергонезависимую память для хранения данных, линии ввода\вывода. Микроконтроллеры применяются в самых различных устройствах, где требуется цифровая обработка информации. При подачи питания на микроконтроллер начинает выполнятся загруженная в его память программа, и он начинает взаимодействовать со схемой а также с другими микроконтроллерами через линии ввода\выода. Есть микроконтроллеры и с микромощным передатчиком (rfPIC) для обмена информацией, но я рассмотрю их позднее. Запись программы в микроконтроллер производится с помощью программатора, т.е. устройства для "прошивки" контроллеров. подключается оно к компьютеру, откуда идет управление специальным ПО ходом прошивки, стирания, а также считывания программы. Существует много схем программаторов, от сложности схемы зависит и колчиество поддерживаемых микроконтроллеров, а также надежность загрузки программы в кристалл (прошивки). Для разработки программ для микроконтроллеров Microchip создана среда разработки - MPLAB. Это и ассемблер, и отладчик. Однако конечный результат важно достигнуть именно на практике. Есть и плагин для MPLAB, позволяющий писать прошивки на языке С. Также в моём арсенале имеется симулятор и дезасемблер. Помимо вычислений, современные микроконтроллеры имеют аппаратные поддержки различных полезных функций, например как Широко Импульсная Модулация (ШИМ) Аналого-Цифровые преобразователи (АЦП), Компараторы, прерывания по различным событиям например как изменение лог. уровней на линиях, переполнение сторожевого таймера. На примере я буду рассматривать контроллер PIC12F629. Он наиболее дешев, и обладает нужными мне функциями. нашел http://www.microchip.ru/d-sheets/41190.htmIC12F629:1x1 Оисание на Русском Он будет применятся у меня как обработчик сенсорного контакта(да, контроллер может и такое), и выставлять при прикосновении лог.1 на одной из линий, тем самым через транзисторный каскад будет подаватся +12В на реле, которое будет управлять питанием мощного усилителя. Наиболее распространёный микроконтроллер в радиолюбительских устройствах - PIC16F84A. Однако существуют контроллеры дешевле и производительней, но статистика вещ упрямая этот контроллер имеет 13 линий ввода\вывода и 2 порта PORTA и PORTB. (не путать с линиями, порт - это группа линий!) PORTA и PORTB - это регистры этого процессора, состояние битов этих регистров зависит от логического уровня на выводах микроконтроллера, т.е. линий ввода-вывода. установка бита <0> в 1 регистра PORTA приведет к появлению высокого уровня на вывода RA0. Для работы с линиями ввода\вывода нужно настроить их на ввод или на вывод, путем установки соответствующего бита в регистре TRISA и TRISB соответственно. PIC16F84A поддерживает 35 комманд. Также хочу обратить ваше внимание на конфигурацию процессора. Ее можно изменять непосредсвенно в WinPic (программа для прошивки), и указать директивой __CONFIG. Конфигурацию, записанную в кристалл нельзя изменить программно, возможно только при помощи программатора. PIC контроллеры имеют внутренний тактовый генератор (4 МГц), но лучше использовать внешний кварцовый, если требуется повышенная точность тактовой частоты. В данном случае, если у вас простой JDM программатор, то лучше в конфигурации указать использовать внешний генератор, т.к. при последущей попытке прошить контроллер возникнут проблемы, тк при подключении питания начнет исполнятся программа. За один такт выполняется одна комманда, кроме комманд перехода, они выполняются за 2 машинных цикла. Чтож, если этот материал уяснен, можно приступать к практике, что я опишу в следующей статье... ССЫЛКИ ПО ТЕМЕ MPLAB 7.62 Симулятор со схемами Схема программатора Программатор попроще ПО для прошивки Компилятор С интегрируемый в MPLAB PS что еще интересует\непонятно пишите, буду дополнять
Зачетно, вот не мог бы ты рассказать аудитории какие самые применяемые ака распространенные и наиболее удовлетворяющие требованиям контроллеры, есть на белом свете? Какие используешь лично ты? В Ксакепе были статьи по обману "Таблеток" с помощью Pic микросхемки. Плюс я там не раз видел статьи с их применением.
Какие требования - такие и контроллеры! Линейка ПИКов делится на серии: Pic12FXXX, Pic16FXXX, Pic18FXXX, а дальше пока не интересно. Чем выше индекс, тем "круче" контроллеры (Больше программной и оперативной памяти, выше тактовая частота, всякие примочки типа АЦП, Usart, ШИМ и т.д.) Для начала я бы порекомендовал PIC16F676. Вроде бы их везде как грязи и недорого. На него можно спокойно переносить (с доработками конечно) любые проекты, написанные для старого доброго PIC16F84(16C84), которых в сети накопилось за прошлые годы тьма тьмущая. Основные параметры: 14-ти ногий корпус, килобайт для написания программы, 64 байта оперативной памяти, внутренний генератор на 4 мегагерца (что очень радует. подключил пять вольт и контроллер заработал, никакой возьни с кварцем) Для создания эмулятора "таблетки" его хватит за глаза! Да и много еще для чего.
Не вопрос! http://ww1.microchip.com/downloads/en/DeviceDoc/40039E.pdf Вообще, если какая документация нужна, то сразу на microchip.com Там прям на лицевой странице окошко для поиска даташитов.
Hello, World! мигающие светодиоды.я написал столь простую программку на СИ в среде MPLAB, думаю она понятна будет для всех. Code: #include <pic.h> __CONFIG(0x03F72); void pause(unsigned int time) { } void main(void) { T0IE=0; GIE=0; TRISIO=0; GPIO=0; CMCON=0x07; //инициализация процессора while(1) { GPIO++; //asm("BCF 0x05,0"); pause(70000); } } здесь идет увеличение значения регистра GPIO, биты которого отвечают за состояние линий ввода-вывода. при переполнении разрядов, идет его обнуление. во время выполнения программы можно наблюдать состояние портов ввода-вывода на диаграмме. http://imhost.ru/out.php/i4841_.jpg скриншот =))) прошиваем контроллер, вставляем в макет, подводим питание, светодиод на линию GP0 - будет мигать светодиод. на линию GP1 - мигает реже позже сам прошью контроллер... Народ, задавайте вопросы по ходу дела :\
Avr Советовал бы интересующимся присмотреться также к микроконтроллерам Avr от Atmel. На практике использовал и те и другие, но от Avr больше хороших воспоминаний. Вот преимущества: Дешевле. Проще в освоении. Побыстрее работают. Хотя каждому свое.
Вот такой вот "Здравствуй, мир!" в железе для 676 пика. Здесь применено внутрисхемное программирование. Т.е., не надо постоянно выдергивать контроллер из отладочной платы и втыкать в программатор и обратно. Подключаем программатор прямо к контроллеру на плате. ОСТОРОЖНО!!! Не с каждым программатором (касается простых самодельных, в основном) этот фокус пройдет! Часто видел на простых схемах применение простых логических микросхем (инверторов и чегото еще). Так что может сложиться такая ситуация: у вас две микросхемы непосредственно соединенные выводами друг с другом, на одной микросхеме будет один лог уровень, а на другой - другой. Какие могут быть варианты развития событий? Правильно! Может одна, а может и обе сгорят. К сожалению, поленился я посмотреть ссылки MegaDeth на программаторы, постараюсь попозже на них поглядеть внимательно, но скорее всего, хотелось бы увидеть транзисторные ключи не только на MCLR, но и на дате с клоком,или хотя-бы ограничивающие резисторы. Сам пользуюсь клоном ICD-2 от Olimex (заказывал в чипе-дипе, стоит около двух с половиной штук), пахает сутками, проблем сильных не наблюдается, но немного, по сравнению с микрочиповским оригинальным ICD-2, есть. Если у вас другой контроллер, то сначала смотрите в даташит, где у него Vdd,Vss, MCLR, ICSP_DAT,ICSP_CLK. Емкость С3 желательно напаять как можно ближе к ногам контроллера. Очень желательно ставить панельку под контроллер. Перед установкой контроллера подайте питание и посмотрите туда ли приходит пять вольт питания.
Ой, блин! Забыл подтягивающий резистор на MCLR: между выводом MCLR (он же RA3) и +5Вольт должен быть резистор на 10-20кОм. Вечерком постараюсь наклапоцапь каких нибудь примерчиков на С (стыдно конечно, но к асму давно уже не приходилось прибегать, забылся он у меня уже). Кстати, писать буду на CCS PICC, постараюсь найти ссылки на дистрибутив и книжку хорошую, и мануал, естественно. MegaDeth, а что у тебя там за PICC_Lite? Чей?
http://rapidshare.com/files/59884341/ccs.rar - это дистрибутив с кейгеном, пароль на архив: Sonsivri http://www.ccsinfo.com/downloads/ccs_c_manual.pdf -это мануал на CCS PICC; "Програмирование на языке С для AVR и PIC микроконтроллеров" Ю.А.ШПАК - хорошая книжка, ищите яндексом, в первой пятерке ссылок находит где скачать.
Ну что, скачали и установили CCS PICC? Хорошо! Теперь напишем болванку для наших игрищ с представленным выше проектиком. Запускаем CCS. Жмем File->New и создаем файл кода в заранее созданной директории. Пишем туда чего нибудь, сохраняем файл. Затем Project->New->Manual Create. Выбираем только что созданный файл С, затем выбираем тип контроллера (PIC16F676). Проект создан ( на самом деле он будет создан после первой удачной компиляции). В дальнейшем, при запуске CCS, идем в Project->Reopen и выбираем нужный *.pjt. А вот и текст: Code: #include <16F676.h> //Выбираем контроллер #use delay(clock=4000000) //Частота внутр генератора 4МГц #Use Fast_IO(A) //Ручная установка регистров TRIS #Use Fast_IO(C) #fuses nowdt, nomclr,intrc_IO //отключаем сторожевой таймер, //отключаем внешний сброс //работа от внутреннего генератора //без тактовых импульсов на RA4 //переменные******************************************************** //функции*********************************************************** void Initial() //функция настройки контроллера { setup_adc_ports(NO_ANALOGS); //все выводы "цифровые" setup_adc(ADC_OFF); // отключаем АЦП setup_timer_0(RTCC_Internal|RTCC_Div_64); // настройка таймера 0 setup_timer_1(T1_DISABLED); //отключение таймера 1 setup_comparator(NC_NC); //отключение компаратора setup_vref(FALSE); //отключение порогового напряжения компаратора Set_Tris_A(0b00111111); //весь порт А настроен на вход Set_Tris_C(0b00000000); //весь порт С настроен на выход Disable_Interrupts(Global); //запрещаем все прерывания } main() { Initial(); //А дальше текст программы }
ну насчет дешевизны то непоспорю, насчет простоты немогу судить тк софта для них не видел... думаю для МК проще чем на СИ писать быть неможет насчет быстроты - мне и этого хватает. 4мгц? куда большле то? можно и 10 поставить... МК от батарейки чаще всего питаются у стройствах переносных, такчто надо учитывать еще и потр. мощность. кстати, я совсем про питание не рассказал блин ((( и про мой горький опыт =)))) 1)не делайте невкоем случе на соплях! (а мне хотелось скорее испробовать) 2)не питайте от мощного источника питания! а если и питаете то пульсации нужно свести к самому минимуму. питайте лучше от кроны + стабилизатор. 3) обязательно юзать слаботочные интегральные стабилизаторы (5в). 4) для надежности можно воткнуть диод в цепь питания. 5) ВНИМАТЕЛЬНО смотрите как вставляете контроллер в панельку.
подтяг программно мона Code: bsf OPTION_REG,7 чей чей, микрочиповский наверна! а я рекомендую книжку Яценкова почитать "Микроконтроллеры Microchip" найду в электр. виде выложу
На MCLR-ноге Pull-up нету... Так что, только внешним резистором. И, кстати,MegaDeth, ты сам то программатор собирал по схеме, которую в первом сообщении дал? Нукась, рассказывай поподробней про программатор.
Animal, собирал простой программатор. Тот, от которого схема на народе лежит еще не собирал но собираюсь в ближайшем времени. собирал знакомый, очень доволен =) ногу можно определить как сброс по низкому уровню, или как линию (хотя даташит читать лень =) ) а у порта полюбому должен быть подтяг... хотя, если у тя в конфиге как сброс по низкому уровню то тогда надо да...
У всего порта A есть кроме RA3(MCLR) Я MCLR отключаю всегда за ненадобностью. Просто подтяжка нужна, чтобы на длинном проводе программатора никуда не подключенном не навелось напряжение, которое в режим программирования контроллер переведет. На самом деле он необязателен, так, на всякий случай.