|
Как включить GPIO в PIC10f200 ? |
|
|
|
Jul 14 2010, 20:13
|
Участник

Группа: Участник
Сообщений: 64
Регистрация: 9-08-08
Пользователь №: 39 514

|
Контроллер - PIC10F200. Программатор - Pickit2. Среда - MPLab IDE 8.46. Пытаюсь запустить простейшую программу для PIC10f, которая включит доступные GPIO в нем. Пробовал разные компиляторы и языки: CCS, HITECH C, MPASM Assembler, все безуспешно. Что я делаю: 1. Подсоединил соответствующие выводы мк и программатора: МК | Pickit 2 (1)GP0/ICSPDAT - ICSPDAT (4) (2)VSS - GND (3) (3)GP1/ICSPCLK - ICSPCLK (5) (4)GP2/T0CKI/FOSC4 - ----- (5)VDD - Vdd (2) (6)GP3/MCLR/VPP - MCLR/Vpp (1) 2. Подключаю соответственно через USB к компьютеру программатор, запускаю среду разработки. 3. Например, в ассемблере MPASM Assembler такой код: Код include <P10F200.inc>
__CONFIG _IntRC_OSC & _WDT_OFF & _CP_OFF & _MCLRE_OFF
#define g0 GPIO,0
bsf g0;
END Ну вот из той же стихии, только включение-выключение GP3 через одну секунду, но уже в CCS C: Код #include <10F200.h>
#use fast_io(b) #use delay (clock=20000000)
void main() {
SET_TRIS_B( 0xE );
while (TRUE) { output_high(PIN_B3); delay_ms( 1000 ); output_low(PIN_B3); delay_ms( 1000 ); }
} Все прекрасно компилится, билдится. Далее отправляю в мк. 4. Проверяю напряжение на данных GP - 0 V. Что не так делаю? Где косяк? Есть ли какие-то особенные тонкости с PIC или подключением? Судя по всем введениям и примерам - на pic12, Pic18 и пр - все должно сходу работать и включаться.
|
|
|
|
Guest_@Ark_*
|
Jul 14 2010, 20:42
|
Guests

|
Такое впечатление, что в даташит на PIC10 Вы даже не заглядывали...
|
|
|
|
|
Jul 14 2010, 20:44
|
Участник

Группа: Участник
Сообщений: 64
Регистрация: 9-08-08
Пользователь №: 39 514

|
Цитата(@Ark @ Jul 15 2010, 00:42)  Такое впечатление, что в даташит на PIC10 Вы даже не заглядывали...  Вы про то, что Gpio3 может быть только входом? :-) Это вы верно заметили! Заглядывал, честно :-) На других GPIO все равно нифига не работает.
|
|
|
|
Guest_@Ark_*
|
Jul 14 2010, 20:55
|
Guests

|
Цитата Заглядывал, честно :-) Читайте по новой. Самое интересное пропустили. Про команду TRIS...
|
|
|
|
|
Jul 14 2010, 21:08
|
Участник

Группа: Участник
Сообщений: 64
Регистрация: 9-08-08
Пользователь №: 39 514

|
Цитата(@Ark @ Jul 15 2010, 00:55)  Читайте по новой. Самое интересное пропустили. Про команду TRIS... понял = ушел читать  Цитата(@Ark @ Jul 15 2010, 00:55)  Читайте по новой. Самое интересное пропустили. Про команду TRIS... Ну так вроде крамолы то нету никакой. Перепаял светодиод на GP1. Потом взял пример для PIC12 и изменил TRIS для PIC10. Результат тот же. ВОт, к примеру HiTECH С код для мигания диода: Код #include <htc.h> #define _XTAL_FREQ 4000000 // oscillator frequency for _delay()
// Config: ext reset, no code protect, no watchdog, 4MHz int clock __CONFIG(MCLREN & UNPROTECT & WDTDIS );
void main() { unsigned char dcnt; // delay counter // Initialisation TRIS = 0b1101; // configure GP1 (only) as an output
// Main loop for (;;) { // turn on LED on GP1 GP1 = 1; // stay on for 200ms __delay_ms(100); __delay_ms(100);
// turn off LED on GP1 GP1 = 0;
// stay off for 800ms for (dcnt = 0; dcnt < 8; dcnt++) { __delay_ms(100); } } // repeat forever } Чую, проблема на поверхности, типа не подключил какую-нибудь фитюльку или не отлючил какой-нибудь провод после прошивки :-)
|
|
|
|
Guest_@Ark_*
|
Jul 14 2010, 21:27
|
Guests

|
В PIC10 запись в регистр TRIS производится только через команду TRIS. Напрямую этот регистр не доступен. Смотрите раздел I/O Ports - TRIS Registers в ДШ...
|
|
|
|
|
Jul 14 2010, 21:36
|
Участник

Группа: Участник
Сообщений: 64
Регистрация: 9-08-08
Пользователь №: 39 514

|
Цитата(xemul @ Jul 15 2010, 01:34)  Если MCLREN, то GP3 должен быть притянут к Vcc (н-р, резистором; подробности в даташите). Угу, спасибо. Но тут и GP1 не работает :-)
|
|
|
|
|
Jul 14 2010, 21:58
|
Участник

Группа: Участник
Сообщений: 64
Регистрация: 9-08-08
Пользователь №: 39 514

|
Цитата(xemul @ Jul 15 2010, 01:46)  GP3 может по совместительству работать входом RESET', что Вы и задаёте __CONFIG(MCLREN,... ). Если оставить при этом GP3 в воздухе, то ... подробности в даташите или в любой книжке про контроллеры. Да, да уже понял - спасибо! Цитата(@Ark @ Jul 15 2010, 01:27)  В PIC10 запись в регистр TRIS производится только через команду TRIS. Напрямую этот регистр не доступен. Смотрите раздел I/O Ports - TRIS Registers в ДШ... Ну так я так и делаю - говорю, что GP1 буду юзать как выход остальные входы. Именно трисом. Где я туплю? Код // Initialisation TRIS = 0b1101; // configure GP1 (only) as an output АГАААА = кажется понял. У него вообще нету регистра этого! Поэтому ввели TRiS. Ща проверю.
Сообщение отредактировал DrLan - Jul 14 2010, 22:01
|
|
|
|
Guest_@Ark_*
|
Jul 14 2010, 22:05
|
Guests

|
Цитата Ну так я так и делаю - говорю, что GP1 буду юзать как выход остальные входы. Именно трисом. Где я туплю? Вы лучше в свой первый ассемблерный пример добавьте команду TRIS, предварительно загрузив в W нужное значение... Цитата У него вообще нету регистра этого! Поэтому ввели TRiS. Регистр-то сам есть. Адреса у него нету. Потому, доступ к нему только через специальную команду, и только на запись.
|
|
|
|
|
Jul 14 2010, 22:50
|
Участник

Группа: Участник
Сообщений: 64
Регистрация: 9-08-08
Пользователь №: 39 514

|
Цитата(@Ark @ Jul 15 2010, 02:05)  Вы лучше в свой первый ассемблерный пример добавьте команду TRIS, предварительно загрузив в W нужное значение...
Регистр-то сам есть. Адреса у него нету. Потому, доступ к нему только через специальную команду, и только на запись. Т.к. после этого нифига не получается, видимо пора спать. Код include <P10F200.inc>
__CONFIG _IntRC_OSC & _WDT_OFF & _CP_OFF & _MCLRE_OFF
bcf GPIO, 1 bcf GPIO, 0
MOVLW 007h TRIS GPIO
END
|
|
|
|
|
Jul 15 2010, 04:30
|
Местный
  
Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391

|
Цитата(DrLan @ Jul 15 2010, 04:50)  Код include <P10F200.inc> __CONFIG _IntRC_OSC & _WDT_OFF & _CP_OFF & _MCLRE_OFF bcf GPIO, 1 bcf GPIO, 0 MOVLW 007h TRIS GPIO END Пример этого кода взяли в datasheet'е "EXAMPLE 5-1:" ? Ошибка там. Не 007h надо в W заносить, а 006h (смотрите таблицу TABLE 5-2 над примером в DS) С исправленным на 006h значением все у меня скомпильнулось и работает (проверил дрыганьем ноги). PS. В include файл также полезно заглядывать, там тоже прописано GPIO - 006h.
|
|
|
|
|
Jul 15 2010, 06:05
|
Участник

Группа: Участник
Сообщений: 64
Регистрация: 9-08-08
Пользователь №: 39 514

|
Цитата(mrKirill @ Jul 15 2010, 08:30)  Пример этого кода взяли в datasheet'е "EXAMPLE 5-1:" ? Ошибка там. Не 007h надо в W заносить, а 006h (смотрите таблицу TABLE 5-2 над примером в DS)
С исправленным на 006h значением все у меня скомпильнулось и работает (проверил дрыганьем ноги).
PS. В include файл также полезно заглядывать, там тоже прописано GPIO - 006h. Так это и в даташите написано в таблице 4-1 и 5-2. Этот код тоже никакого действия не имеет у меня: Код include <P10F200.inc>
__CONFIG _MCLRE_ON & _WDT_OFF & _CP_OFF
bcf GPIO, 1 bcf GPIO, 0
MOVLW 006h TRIS GPIO
END Наверное вопрос надо по-другому ставить. Попробую вечером другой контроллер вкрутить что ли.
|
|
|
|
|
Jul 15 2010, 06:10
|
Местный
  
Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391

|
Цитата(DrLan @ Jul 15 2010, 12:05)  Так это и в даташите написано в таблице 4-1 и 5-2. Да, написано, но в примере кода - ошибка. Цитата(DrLan @ Jul 15 2010, 12:05)  Этот код тоже никакого действия не имеет у меня: Конечно не будет, а что Вы хотите? Вообще с ASM как? Знакомы? Код MOVLW 006h TRIS GPIO; настроили выводы, какие на вход, какие на выход Вот сюда впишите цикл с дрыганьем ноги соответствующей, будет - дрыганье END
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|