Страница 1 из 1

PIC12 GPIO на вход

Добавлено: Вс дек 01, 2013 09:48:04
valerik88
МК 12f683.
Не получается снять сигнал с некоторых ножек GPIO
Программа простецкая. Ждём сигнал с любой ножки, после этого подаём сигнал на все ножки сразу.

Код: Выделить всё

//12f683.h
#include <pic.h>;

__CONFIG(MCLRDIS & WDTDIS & INTIO);

void main() {
    TRISIO = 0b11111111;
    ANSEL = 0b0000111;

    while (!(GPIO0 || GPIO1 || GPIO2 || GPIO3|| GPIO4|| GPIO5)) {
        _delay(10);
    }

    TRISIO = 0;
    GPIO =  0b11111111;

    while (1) {
    }
}
При подаче сигнала на любую из первых трёх ножек, ничего не происходит.
Изображение

При подаче сигнала на любую из оставшихся трех ножек, всё работает, как ожидалось.
Изображение

Вопрос: Почему сигнал не снимается с первых трех ножек?

Поменял на ANSEL = 0; Заработала 3я ножка (GP2) первые две по прежнему не работают



Всё спасибо, разобрался!
Нужно было ещё компаратор отключить CMCON = 0x07

Re: PIC12 GPIO на вход

Добавлено: Вс дек 01, 2013 11:04:56
Flasher
The ANSEL register is used to configure the Input
mode of an I/O pin to analog. Setting the appropriate
ANSEL bit high will cause all digital reads on the pin to
be read as ‘0’ and allow analog functions on the pin to
operate correctly.
Note: The ANSEL and CMCON0 registers must
be initialized to configure an analog
channel as a digital input. Pins configured
as analog inputs will read ‘0’.

Re: PIC12 GPIO на вход

Добавлено: Ср дек 18, 2013 10:22:18
iGraphicsS
Вы не правильно моделируете схему!!!
В протеусе, даже разомкнутая кнопка имеет сопротивление, по этому схему подачи сигнала нужно изменить
Регистр ANSELХ определяет, какая "ножка" (если можно так сказать), будет работать как аналоговая или цифровая. Для работы как цифровая, необходимо установить (это значит "1") соответствующий биты в этом регистре.
Вход GP3 MCLR/Vpp не может быть настроен как выход, значит не "все на выход"!
Необходимо учесть параметры сигнала (выход с открытым коллектором, с подтяжкой, изолированный итп), и при необходимости выключить или включить подтягивающие резисторы. Если этого не сделать, то при отсутствии входного сигнала (просто голый провод или разомкнутое реле), на входе будет творить ахинея, и если мимо пробежал например кот))), схема ложно сработает. По этому применяют активный логический уровень "0" (для защиты от помех), и "подтяжку" к питанию. По этому у ножки пика у вас не синий и не красный квадратик, а серый, что говорит о неопределённом состоянии.
В вашем случае, необходимо подтянуть сигнальные линии к земле через резистор в 4,7-10 кОм для моделирования
Если вам надо, могу выложить код на асме.