Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как включить GPIO в PIC10f200 ?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
DrLan
Контроллер - 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
Такое впечатление, что в даташит на PIC10 Вы даже не заглядывали... sad.gif
DrLan
Цитата(@Ark @ Jul 15 2010, 00:42) *
Такое впечатление, что в даташит на PIC10 Вы даже не заглядывали... sad.gif


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

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

Читайте по новой. Самое интересное пропустили. Про команду TRIS...
DrLan
Цитата(@Ark @ Jul 15 2010, 00:55) *
Читайте по новой. Самое интересное пропустили. Про команду TRIS...


понял = ушел читать rolleyes.gif

Цитата(@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
}


Чую, проблема на поверхности, типа не подключил какую-нибудь фитюльку или не отлючил какой-нибудь провод после прошивки :-)
@Ark
В PIC10 запись в регистр TRIS производится только через команду TRIS. Напрямую этот регистр не доступен. Смотрите раздел I/O Ports - TRIS Registers в ДШ...
xemul
Если MCLREN, то GP3 должен быть притянут к Vcc (н-р, резистором; подробности в даташите).
DrLan
Цитата(xemul @ Jul 15 2010, 01:34) *
Если MCLREN, то GP3 должен быть притянут к Vcc (н-р, резистором; подробности в даташите).


Угу, спасибо. Но тут и GP1 не работает :-)
xemul
Цитата(DrLan @ Jul 15 2010, 01:36) *
Угу, спасибо. Но тут и GP1 не работает :-)

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

Цитата(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. Ща проверю.
@Ark
Цитата
Ну так я так и делаю - говорю, что GP1 буду юзать как выход остальные входы. Именно трисом. Где я туплю?

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

Регистр-то сам есть. Адреса у него нету. Потому, доступ к нему только через специальную команду, и только на запись.
DrLan
Цитата(@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

mrKirill
Цитата(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.
DrLan
Цитата(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


Наверное вопрос надо по-другому ставить. Попробую вечером другой контроллер вкрутить что ли.
mrKirill
Цитата(DrLan @ Jul 15 2010, 12:05) *
Так это и в даташите написано в таблице 4-1 и 5-2.

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

Цитата(DrLan @ Jul 15 2010, 12:05) *
Этот код тоже никакого действия не имеет у меня:

Конечно не будет, а что Вы хотите?
Вообще с ASM как? Знакомы?

Код
     MOVLW 006h
     TRIS GPIO; настроили выводы, какие на вход, какие на выход
    
   Вот сюда впишите цикл с дрыганьем ноги соответствующей,  будет - дрыганье
  
     END
DrLan
Цитата(mrKirill @ Jul 15 2010, 10:10) *
Да, написано, но в примере кода - ошибка.


Конечно не будет, а что Вы хотите?
Вообще с ASM как? Знакомы?

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


smile.gif
Да мне не дрыганье, а просто high на gp1 нужен. В асме абсолютный ноль, но и так понимаю, что там цикла нет:-)
Просто по этому примеру может показаться, что состояние gp1 будет 0, но оно должно быть 1.
mrKirill
Цитата(DrLan @ Jul 15 2010, 12:22) *
smile.gif
Да мне не дрыганье, а просто high на gp1 нужен. В асме абсолютный ноль, но и так понимаю, что там цикла нет:-)
Просто по этому примеру может показаться, что состояние gp1 будет 0, но оно должно быть 1.


Держите, на GP1=1;

Код
#include <P10F200.inc>

__CONFIG _IntRC_OSC & _WDT_OFF & _CP_OFF & _MCLRE_OFF

MOVLW 0x00 ;Записываем в регистр W настройку GPIO: 1=ввод, 0=выход
MOVWF GPIO  ;записываем содержимое регистра W в регистр GPIO
TRIS GPIO;записываем содержимое регистра GPIO в TRIS, тем самым конфигурируем порт.

bsf GPIO,1;устанавливаем бит 1 порта GPIO.

END



PS. 100 лет уже ASM PIC не юзал, учитывая, что еще и не знаю его толком smile.gif Для AVR и 8051 учил smile.gif
DrLan
Цитата(mrKirill @ Jul 15 2010, 11:07) *
Держите, на GP1=1;

Код
#include <P10F200.inc>

__CONFIG _IntRC_OSC & _WDT_OFF & _CP_OFF & _MCLRE_OFF

MOVLW 0x00;Записываем в регистр W настройку GPIO: 1=ввод, 0=выход
MOVWF GPIO;указываем "адрес" куда записать содержимое регистра W, в GPIO.
TRIS GPIO;записываем содержимое регистра W в TRIS, тем самым конфигурируем порт.

bsf GPIO,1;устанавливаем бит 1 порта GPIO.

END



PS. 100 лет уже ASM PIC не юзал, учитывая, что еще и не знаю его толком smile.gif Для AVR и 8051 учил smile.gif



УРАААААААААА!!!!!!!!!! smile.gif
Работает! Спасибо Вам добрый человек! Вы просто волшебник! smile.gif



Огромное всем спасибо за помощь. Вопрос решен.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.