PIC10F200- мигаем светодиодиком

25 Сентября 2011 К комментариям

При первом старте самое простое и эффектное – помигать светодиодом ;)

Так как раньше я не программировал под ПИКи, а только прошивал их, начну с документации:

PIC10F200/202/204/206 Data Sheet 6-Pin, 8-Bit Flash Microcontrollers скачать.

Давайте ещё раз посмотрим какими возможностями обладает выбранный микроконтроллер:


Тактовый генератор

Микроконтроллер PIC10F200 имеет встроенный RC-генератор, частота генератора 4 МГц. Данный генератор является единственным источником тактовых сигналов.

Существует возможность изменять частоту генератора в небольших пределах, необходимо для калибровки частоты. Изначально генератор калибруется на заводе, калибровочное значение храниться в регистре OSCCAL. При стирании флеш-памяти микроконтроллера данное значение теряется, поэтому его нужно предварительно считать и сохранить. При использовании программатора PicKit 2 (возможно и в других есть, я не знаю) можно не думать о сохранении данной ячейки, так как во первых при программировании микроконтроллера программа автоматически запоминает значение OSCCAL, а во вторых имеется возможность авто калибровки. Для этого в память микроконтроллера записывается специальная программа, назначение которой “вывести” на определенную линию сигнал со встроенного генератора с определенным коэффициентом деления, измерением частоты сигнала определяется отклонение частоты и рассчитывается калибровочное значение.


Конфигурационные биты

Работу некоторых модулей микроконтроллера возможно настроить только на этапе программирования (могу ошибаться, из-за малого опыта).

Для этого существуют так называемые конфигурационные биты (байты, слово).

Конфигурационное слово микроконтроллера PIC10F200 (CONFIGURATION WORD):

Как видим возможностей немного:

  • MCLRE -  позволяет настроить линию сброса в качестве линии GP3
  • CP – устанавливает защиту программного кода
  • WDTE – разрешает/запрещает работу сторожевого таймера

Линии ввода-вывода

Посмотрим как можно использовать доступные нам четыре линии ввода-вывода:

Как видим первые три линии GP0-GP2 могут работать как вход или как выход, а линия GP3 только как вход.

Мне повезло я предусмотрел подключение светодиода к линии GP0, хотя изначально при трассировке платы хотел подключить к GP3.

Для управления линиями предназначены четыре регистра:

Очень непривычно :(

В Data Sheets я не нашел подробного описания регистров.

Регистр TRISGPIO позволяет задать направление работы линии (вход или выход):

  • ‘0’ – выход
  • ‘1’ – вход

Регистр GPIO предназначен для чтения или записи логического состоянии линии.

Описание регистров OPTION и STATUS выносится на самостоятельное изучение.


Мигаем светодиодом

Ну вот кратенько прошлись по основным моментам, теперь можно перейти к программе.

Напомню что шаблон был создан в предыдущей статье смотреть.

Начнем с настройки конфигурационного слова. Для установки нужных нам бит достаточно описать их в нашей программе и они будут добавлены в выходной файл (т.е. файл с программным кодом будет содержать так же и конфигурационное слово, очень удобно). Я решил отключить защиту, запретить работу сторожевого таймера и настроить линию сброса в качестве линии GP3:

__CONFIG(MCLRE_OFF & WDT_OFF & CP_OFF);

Теперь переходим к самой программе.

Так как микроконтроллер довольно шустрый, необходимо написать функцию задержки (можно было бы использовать таймер, но пока это сложно для меня):

void delay(unsigned int value)
{
    while(value-- > 0)
    {
    }
}

Настроим линию GP0 на выход, и будем менять состояние линии с некоторой задержкой:

void main(void)
{
    // настраиваем линию GP0 на выход
    TRIS = 0b00001110;
    while(1)
    {
        // включаем светодиод
        GP0=1;
        delay(10000);
        // выключаем светодиод
        GP0=0;
        delay(10000);
    }
}

Компилируем программу.

Смотрим расход памяти:

Memory Summary:
 Program space used 34h ( 52) of 100h words ( 20.3%)
 Data space used 6h ( 6) of 10h bytes ( 37.5%)
 EEPROM space None available
 Configuration bits used 1h ( 1) of 1h word (100.0%)
 ID Location space used 0h ( 0) of 4h bytes ( 0.0%)

Программируем микроконтроллер:

И наслаждаемся миганием светодиода:



comments powered by Disqus