реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как включить GPIO в PIC10f200 ?
DrLan
сообщение Jul 14 2010, 20:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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 и пр - все должно сходу работать и включаться.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jul 14 2010, 20:42
Сообщение #2





Guests






Такое впечатление, что в даташит на PIC10 Вы даже не заглядывали... sad.gif
Go to the top of the page
 
+Quote Post
DrLan
сообщение Jul 14 2010, 20:44
Сообщение #3


Участник
*

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



Цитата(@Ark @ Jul 15 2010, 00:42) *
Такое впечатление, что в даташит на PIC10 Вы даже не заглядывали... sad.gif


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

Это вы верно заметили! Заглядывал, честно :-) На других GPIO все равно нифига не работает.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jul 14 2010, 20:55
Сообщение #4





Guests






Цитата
Заглядывал, честно :-)

Читайте по новой. Самое интересное пропустили. Про команду TRIS...
Go to the top of the page
 
+Quote Post
DrLan
сообщение Jul 14 2010, 21:08
Сообщение #5


Участник
*

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



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


Чую, проблема на поверхности, типа не подключил какую-нибудь фитюльку или не отлючил какой-нибудь провод после прошивки :-)
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jul 14 2010, 21:27
Сообщение #6





Guests






В PIC10 запись в регистр TRIS производится только через команду TRIS. Напрямую этот регистр не доступен. Смотрите раздел I/O Ports - TRIS Registers в ДШ...
Go to the top of the page
 
+Quote Post
xemul
сообщение Jul 14 2010, 21:34
Сообщение #7



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Если MCLREN, то GP3 должен быть притянут к Vcc (н-р, резистором; подробности в даташите).
Go to the top of the page
 
+Quote Post
DrLan
сообщение Jul 14 2010, 21:36
Сообщение #8


Участник
*

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



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


Угу, спасибо. Но тут и GP1 не работает :-)
Go to the top of the page
 
+Quote Post
xemul
сообщение Jul 14 2010, 21:46
Сообщение #9



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



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

GP3 может по совместительству работать входом RESET', что Вы и задаёте __CONFIG(MCLREN,... ). Если оставить при этом GP3 в воздухе, то ... подробности в даташите или в любой книжке про контроллеры.
Go to the top of the page
 
+Quote Post
DrLan
сообщение Jul 14 2010, 21:58
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jul 14 2010, 22:05
Сообщение #11





Guests






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

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

Регистр-то сам есть. Адреса у него нету. Потому, доступ к нему только через специальную команду, и только на запись.
Go to the top of the page
 
+Quote Post
DrLan
сообщение Jul 14 2010, 22:50
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 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

Go to the top of the page
 
+Quote Post
mrKirill
сообщение Jul 15 2010, 04:30
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
DrLan
сообщение Jul 15 2010, 06:05
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 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


Наверное вопрос надо по-другому ставить. Попробую вечером другой контроллер вкрутить что ли.
Go to the top of the page
 
+Quote Post
mrKirill
сообщение Jul 15 2010, 06:10
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01454 секунд с 7
ELECTRONIX ©2004-2016