DrLan 0 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба Контроллер - 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 и пр - все должно сходу работать и включаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба Такое впечатление, что в даташит на PIC10 Вы даже не заглядывали... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrLan 0 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба Такое впечатление, что в даташит на PIC10 Вы даже не заглядывали... :( Вы про то, что Gpio3 может быть только входом? :-) Это вы верно заметили! Заглядывал, честно :-) На других GPIO все равно нифига не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба Заглядывал, честно :-) Читайте по новой. Самое интересное пропустили. Про команду TRIS... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrLan 0 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба Читайте по новой. Самое интересное пропустили. Про команду TRIS... понял = ушел читать :rolleyes: Читайте по новой. Самое интересное пропустили. Про команду 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 } Чую, проблема на поверхности, типа не подключил какую-нибудь фитюльку или не отлючил какой-нибудь провод после прошивки :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба В PIC10 запись в регистр TRIS производится только через команду TRIS. Напрямую этот регистр не доступен. Смотрите раздел I/O Ports - TRIS Registers в ДШ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба Если MCLREN, то GP3 должен быть притянут к Vcc (н-р, резистором; подробности в даташите). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrLan 0 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба Если MCLREN, то GP3 должен быть притянут к Vcc (н-р, резистором; подробности в даташите). Угу, спасибо. Но тут и GP1 не работает :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба Угу, спасибо. Но тут и GP1 не работает :-) GP3 может по совместительству работать входом RESET', что Вы и задаёте __CONFIG(MCLREN,... ). Если оставить при этом GP3 в воздухе, то ... подробности в даташите или в любой книжке про контроллеры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrLan 0 14 июля, 2010 Опубликовано 14 июля, 2010 (изменено) · Жалоба GP3 может по совместительству работать входом RESET', что Вы и задаёте __CONFIG(MCLREN,... ). Если оставить при этом GP3 в воздухе, то ... подробности в даташите или в любой книжке про контроллеры. Да, да уже понял - спасибо! В PIC10 запись в регистр TRIS производится только через команду TRIS. Напрямую этот регистр не доступен. Смотрите раздел I/O Ports - TRIS Registers в ДШ... Ну так я так и делаю - говорю, что GP1 буду юзать как выход остальные входы. Именно трисом. Где я туплю? // Initialisation TRIS = 0b1101; // configure GP1 (only) as an output АГАААА = кажется понял. У него вообще нету регистра этого! Поэтому ввели TRiS. Ща проверю. Изменено 14 июля, 2010 пользователем DrLan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба Ну так я так и делаю - говорю, что GP1 буду юзать как выход остальные входы. Именно трисом. Где я туплю? Вы лучше в свой первый ассемблерный пример добавьте команду TRIS, предварительно загрузив в W нужное значение... У него вообще нету регистра этого! Поэтому ввели TRiS. Регистр-то сам есть. Адреса у него нету. Потому, доступ к нему только через специальную команду, и только на запись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrLan 0 14 июля, 2010 Опубликовано 14 июля, 2010 · Жалоба Вы лучше в свой первый ассемблерный пример добавьте команду 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 15 июля, 2010 Опубликовано 15 июля, 2010 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrLan 0 15 июля, 2010 Опубликовано 15 июля, 2010 · Жалоба Пример этого кода взяли в 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 Наверное вопрос надо по-другому ставить. Попробую вечером другой контроллер вкрутить что ли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 15 июля, 2010 Опубликовано 15 июля, 2010 · Жалоба Так это и в даташите написано в таблице 4-1 и 5-2. Да, написано, но в примере кода - ошибка. Этот код тоже никакого действия не имеет у меня: Конечно не будет, а что Вы хотите? Вообще с ASM как? Знакомы? MOVLW 006h TRIS GPIO; настроили выводы, какие на вход, какие на выход Вот сюда впишите цикл с дрыганьем ноги соответствующей, будет - дрыганье END Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться