Ну вот и я помигал светодиодиком на PIC10F200

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

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

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

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

image_thumb[7]




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

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

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

image




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

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

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

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

image_thumb[24]

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

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

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

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

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

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

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

image_thumb[20]

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

В 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%)


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

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

  • 0
  • 25 сентября 2011, 14:44
  • ZiB

Комментарии (9)

RSS свернуть / развернуть
MCLRE — позволяет настроить линию сброса в качестве линии GP3
Точнее наоборот, включить ресет. В отличие от AVR по дефолту ресет отрублен — ISP до него и так достучится, силой 12 вольт.
В Data Sheets я не нашел подробного описания регистров.
Плохо искал. Кстати, те два что имеют адрес N/A доступны тока спецкомандой на запись)
while(value-- > 0)
{
}
Я бы просто точку с запятой вместо скобок после цикла поставил.

P.S. Перекинь статью в PIC.
0
  • avatar
  • Vga
  • 25 сентября 2011, 15:06
Да, я уже понял что описание разбросано по всей доке :)
Я всегда ставлю скобки, привычка.

п.с. ща попробую перекинуть
0
  • avatar
  • ZiB
  • 25 сентября 2011, 16:44
Самое неожиданное в этих мелкопиках — некоторые выводы по умолчанию настроены на альтернативные функции (например вход АЦП или выход тактового сигнала)
0
так это не только в мелких:) во многих так вроде. Всеравно настраивать, так что не страшно
0
А вот например пин, на который выводится тактовый сигнал — пока ты успеешь его отключить, несколько импульсов он выдаст. А это может быть неприемлимо
0
так он же при программировании устанавливается. ставить в нужное положение сразу при прошивке и все нормально
0
оффтоп
Для управления линиями предназначены четыре регистра:
… Очень непривычно :(
хы)) а я с PIC начинал — мне устройство регистров AVR было непривычно :D зато команды без аккумулятора — это вещь. А то мне этот «w» ночью блин снился :D
0
в СИ забываешь об этих проблемах))
0
100500
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.