Схемы, программы, прошивки Микроконтроллеры Microchip, введение.

Discussion in 'Электроника и Фрикинг' started by MegaDeth, 6 Nov 2007.

  1. MegaDeth

    MegaDeth Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    72
    Reputations:
    13
    Микроконтроллеры

    Микроконтроллеры - это автономные процессоры, имеющие память для хранения исполняемой программы, энергонезависимую память для хранения данных, линии ввода\вывода. Микроконтроллеры применяются в самых различных устройствах, где требуется цифровая обработка информации. При подачи питания на микроконтроллер начинает выполнятся загруженная в его память программа, и он начинает взаимодействовать со схемой а также с другими микроконтроллерами через линии ввода\выода. Есть микроконтроллеры и с микромощным передатчиком (rfPIC) для обмена информацией, но я рассмотрю их позднее.
    Запись программы в микроконтроллер производится с помощью программатора, т.е. устройства для "прошивки" контроллеров. подключается оно к компьютеру, откуда идет управление специальным ПО ходом прошивки, стирания, а также считывания программы. Существует много схем программаторов, от сложности схемы зависит и колчиество поддерживаемых микроконтроллеров, а также надежность загрузки программы в кристалл (прошивки).
    Для разработки программ для микроконтроллеров Microchip создана среда разработки - MPLAB. Это и ассемблер, и отладчик. Однако конечный результат важно достигнуть именно на практике. Есть и плагин для MPLAB, позволяющий писать прошивки на языке С.
    Также в моём арсенале имеется симулятор и дезасемблер.
    Помимо вычислений, современные микроконтроллеры имеют аппаратные поддержки различных полезных функций, например как Широко Импульсная Модулация (ШИМ) Аналого-Цифровые преобразователи (АЦП), Компараторы, прерывания по различным событиям например как изменение лог. уровней на линиях, переполнение сторожевого таймера.
    На примере я буду рассматривать контроллер PIC12F629. Он наиболее дешев, и обладает нужными мне функциями.
    нашел http://www.microchip.ru/d-sheets/41190.htm:pIC12F629: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 что еще интересует\непонятно пишите, буду дополнять
     
    #1 MegaDeth, 6 Nov 2007
    Last edited: 7 Nov 2007
    5 people like this.
  2. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Зачетно, вот не мог бы ты рассказать аудитории какие самые применяемые ака распространенные и наиболее удовлетворяющие требованиям контроллеры, есть на белом свете? Какие используешь лично ты? В Ксакепе были статьи по обману "Таблеток" с помощью Pic микросхемки. Плюс я там не раз видел статьи с их применением.
     
  3. Animal

    Animal Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    221
    Likes Received:
    89
    Reputations:
    6
    Какие требования - такие и контроллеры! :)
    Линейка ПИКов делится на серии: Pic12FXXX, Pic16FXXX, Pic18FXXX, а дальше пока не интересно. :) Чем выше индекс, тем "круче" контроллеры (Больше программной и оперативной памяти, выше тактовая частота, всякие примочки типа АЦП, Usart, ШИМ и т.д.)
    Для начала я бы порекомендовал PIC16F676. Вроде бы их везде как грязи и недорого. На него можно спокойно переносить (с доработками конечно) любые проекты, написанные для старого доброго PIC16F84(16C84), которых в сети накопилось за прошлые годы тьма тьмущая. Основные параметры: 14-ти ногий корпус, килобайт для написания программы, 64 байта оперативной памяти, внутренний генератор на 4 мегагерца (что очень радует. подключил пять вольт и контроллер заработал, никакой возьни с кварцем) Для создания эмулятора "таблетки" его хватит за глаза! Да и много еще для чего.
     
    2 people like this.
  4. MegaDeth

    MegaDeth Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    72
    Reputations:
    13
    ну внутренний генератор и у 12ХХ пиков есть, ты бы лучше линк на даташит бы выложил =))))
     
  5. MegaDeth

    MegaDeth Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    72
    Reputations:
    13
    ок, учел =)
     
  6. Animal

    Animal Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    221
    Likes Received:
    89
    Reputations:
    6
    Не вопрос!
    http://ww1.microchip.com/downloads/en/DeviceDoc/40039E.pdf
    Вообще, если какая документация нужна, то сразу на microchip.com Там прям на лицевой странице окошко для поиска даташитов.
     
  7. MegaDeth

    MegaDeth Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    72
    Reputations:
    13
    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 - мигает реже ;)
    позже сам прошью контроллер...
    Народ, задавайте вопросы по ходу дела :\
     
  8. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    Avr

    Советовал бы интересующимся присмотреться также к микроконтроллерам Avr от Atmel.

    На практике использовал и те и другие, но от Avr больше хороших воспоминаний. :)

    Вот преимущества:
    Дешевле.
    Проще в освоении.
    Побыстрее работают.

    Хотя каждому свое. :)
     
  9. Alexsize

    Alexsize Fail

    Joined:
    17 Sep 2005
    Messages:
    1,771
    Likes Received:
    1,221
    Reputations:
    704
    Не могли бы вы попобронее описать что собирали, дать примеры?
     
    #9 Alexsize, 12 Nov 2007
    Last edited: 12 Nov 2007
  10. Animal

    Animal Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    221
    Likes Received:
    89
    Reputations:
    6
    [​IMG]
    Вот такой вот "Здравствуй, мир!" в железе для 676 пика. :)
    Здесь применено внутрисхемное программирование. Т.е., не надо постоянно выдергивать контроллер из отладочной платы и втыкать в программатор и обратно. Подключаем программатор прямо к контроллеру на плате.
    ОСТОРОЖНО!!! Не с каждым программатором (касается простых самодельных, в основном) этот фокус пройдет! Часто видел на простых схемах применение простых логических микросхем (инверторов и чегото еще). Так что может сложиться такая ситуация: у вас две микросхемы непосредственно соединенные выводами друг с другом, на одной микросхеме будет один лог уровень, а на другой - другой. Какие могут быть варианты развития событий? Правильно! Может одна, а может и обе сгорят. К сожалению, поленился я посмотреть ссылки MegaDeth на программаторы, постараюсь попозже на них поглядеть внимательно, но скорее всего, хотелось бы увидеть транзисторные ключи не только на MCLR, но и на дате с клоком,или хотя-бы ограничивающие резисторы.
    Сам пользуюсь клоном ICD-2 от Olimex (заказывал в чипе-дипе, стоит около двух с половиной штук), пахает сутками, проблем сильных не наблюдается, но немного, по сравнению с микрочиповским оригинальным ICD-2, есть.
    Если у вас другой контроллер, то сначала смотрите в даташит, где у него Vdd,Vss, MCLR, ICSP_DAT,ICSP_CLK. Емкость С3 желательно напаять как можно ближе к ногам контроллера. Очень желательно ставить панельку под контроллер. Перед установкой контроллера подайте питание и посмотрите туда ли приходит пять вольт питания.
     
    1 person likes this.
  11. Animal

    Animal Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    221
    Likes Received:
    89
    Reputations:
    6
    Ой, блин! Забыл подтягивающий резистор на MCLR: между выводом MCLR (он же RA3) и +5Вольт должен быть резистор на 10-20кОм.
    Вечерком постараюсь наклапоцапь каких нибудь примерчиков на С (стыдно конечно, но к асму давно уже не приходилось прибегать, забылся он у меня уже).
    Кстати, писать буду на CCS PICC, постараюсь найти ссылки на дистрибутив и книжку хорошую, и мануал, естественно.
    MegaDeth, а что у тебя там за PICC_Lite? Чей?
     
    1 person likes this.
  12. Animal

    Animal Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    221
    Likes Received:
    89
    Reputations:
    6
    http://rapidshare.com/files/59884341/ccs.rar - это дистрибутив с кейгеном, пароль на архив: Sonsivri
    http://www.ccsinfo.com/downloads/ccs_c_manual.pdf -это мануал на CCS PICC;
    "Програмирование на языке С для AVR и PIC микроконтроллеров" Ю.А.ШПАК - хорошая книжка, ищите яндексом, в первой пятерке ссылок находит где скачать. :)
     
  13. Animal

    Animal Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    221
    Likes Received:
    89
    Reputations:
    6
    Ну что, скачали и установили 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();
    //А дальше текст программы
    }
    
     
  14. MegaDeth

    MegaDeth Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    72
    Reputations:
    13
    ну насчет дешевизны то непоспорю, насчет простоты немогу судить тк софта для них не видел... думаю для МК проще чем на СИ писать быть неможет ;)
    насчет быстроты - мне и этого хватает. 4мгц? куда большле то? можно и 10 поставить...
    МК от батарейки чаще всего питаются у стройствах переносных, такчто надо учитывать еще и потр. мощность. кстати, я совсем про питание не рассказал блин :(((( и про мой горький опыт =))))
    1)не делайте невкоем случе на соплях! (а мне хотелось скорее испробовать)
    2)не питайте от мощного источника питания! а если и питаете то пульсации нужно свести к самому минимуму. питайте лучше от кроны + стабилизатор.
    3) обязательно юзать слаботочные интегральные стабилизаторы (5в).
    4) для надежности можно воткнуть диод в цепь питания.
    5) ВНИМАТЕЛЬНО смотрите как вставляете контроллер в панельку.
     
    1 person likes this.
  15. MegaDeth

    MegaDeth Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    72
    Reputations:
    13
    подтяг программно мона
    Code:
    bsf  OPTION_REG,7
    чей чей, микрочиповский наверна! ;)
    а я рекомендую книжку Яценкова почитать "Микроконтроллеры Microchip" найду в электр. виде выложу
     
  16. Animal

    Animal Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    221
    Likes Received:
    89
    Reputations:
    6
    На MCLR-ноге Pull-up нету... Так что, только внешним резистором.
    И, кстати,MegaDeth, ты сам то программатор собирал по схеме, которую в первом сообщении дал? Нукась, рассказывай поподробней про программатор. :)
     
    #16 Animal, 13 Nov 2007
    Last edited: 13 Nov 2007
  17. MegaDeth

    MegaDeth Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    72
    Reputations:
    13
    Animal, собирал простой программатор. Тот, от которого схема на народе лежит еще не собирал но собираюсь в ближайшем времени. собирал знакомый, очень доволен =)
    ногу можно определить как сброс по низкому уровню, или как линию (хотя даташит читать лень =) )
    а у порта полюбому должен быть подтяг...
    хотя, если у тя в конфиге как сброс по низкому уровню то тогда надо да...
     
  18. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    http://knigomania.nnm.ru/vs_yacenkov_mikrokontrollery_microchip
     
    2 people like this.
  19. Animal

    Animal Elder - Старейшина

    Joined:
    19 Oct 2007
    Messages:
    221
    Likes Received:
    89
    Reputations:
    6
    У всего порта A есть кроме RA3(MCLR) :)
    Я MCLR отключаю всегда за ненадобностью. Просто подтяжка нужна, чтобы на длинном проводе программатора никуда не подключенном не навелось напряжение, которое в режим программирования контроллер переведет. :) На самом деле он необязателен, так, на всякий случай.