Перейти к содержанию
    

Как включить GPIO в PIC10f200 ?

Контроллер - 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 и пр - все должно сходу работать и включаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такое впечатление, что в даташит на PIC10 Вы даже не заглядывали... :(

 

Вы про то, что Gpio3 может быть только входом? :-)

 

Это вы верно заметили! Заглядывал, честно :-) На других GPIO все равно нифига не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark
Заглядывал, честно :-)

Читайте по новой. Самое интересное пропустили. Про команду TRIS...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Читайте по новой. Самое интересное пропустили. Про команду 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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если MCLREN, то GP3 должен быть притянут к Vcc (н-р, резистором; подробности в даташите).

 

Угу, спасибо. Но тут и GP1 не работает :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Угу, спасибо. Но тут и GP1 не работает :-)

GP3 может по совместительству работать входом RESET', что Вы и задаёте __CONFIG(MCLREN,... ). Если оставить при этом GP3 в воздухе, то ... подробности в даташите или в любой книжке про контроллеры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

GP3 может по совместительству работать входом RESET', что Вы и задаёте __CONFIG(MCLREN,... ). Если оставить при этом GP3 в воздухе, то ... подробности в даташите или в любой книжке про контроллеры.

 

Да, да уже понял - спасибо!

 

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

 

Ну так я так и делаю - говорю, что GP1 буду юзать как выход остальные входы. Именно трисом. Где я туплю?

 

    // Initialisation
    TRIS = 0b1101;            // configure GP1 (only) as an output

 

АГАААА = кажется понял. У него вообще нету регистра этого! Поэтому ввели TRiS. Ща проверю.

Изменено пользователем DrLan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark
Ну так я так и делаю - говорю, что GP1 буду юзать как выход остальные входы. Именно трисом. Где я туплю?

Вы лучше в свой первый ассемблерный пример добавьте команду TRIS, предварительно загрузив в W нужное значение...

У него вообще нету регистра этого! Поэтому ввели TRiS.

Регистр-то сам есть. Адреса у него нету. Потому, доступ к нему только через специальную команду, и только на запись.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы лучше в свой первый ассемблерный пример добавьте команду 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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример этого кода взяли в 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

 

Наверное вопрос надо по-другому ставить. Попробую вечером другой контроллер вкрутить что ли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так это и в даташите написано в таблице 4-1 и 5-2.

Да, написано, но в примере кода - ошибка.

 

Этот код тоже никакого действия не имеет у меня:

Конечно не будет, а что Вы хотите?

Вообще с ASM как? Знакомы?

 

     MOVLW 006h
     TRIS GPIO; настроили выводы, какие на вход, какие на выход
     
   Вот сюда впишите цикл с дрыганьем ноги соответствующей,  будет - дрыганье
   
     END

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...