Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Проблем с входовете на PIC16F627A
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=14905
Страница 1 от 2

Автор:  forscience [ Съб Ное 19, 2016 9:11 pm ]
Заглавие:  Проблем с входовете на PIC16F627A

Здравейте.
На кратко опитвам се да направя нещо като клавиатура която контролира 7 сегментен дисплей.
Използвам PIC16F627A, MPLAB X, и езикът C.
Съответно в кода съм декларирал кои битове да са входове и кои изходи. Искам, чрез натискане на Бутон 1 (подаване на 1-ца към пин на микроконтролера) да светнат няколко диода. Проблема е, че те светват директно с включването на чипа. Предполагам, че всичко идва от IF-a, но Вие преценете. Ето целия код:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <pic.h>
#include <xc.h>

#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = ON       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = ON       // Brown-out Detect Enable bit (BOD enabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)


#define Button1 RA3
#define Button2 RA4
#define Button3 RA5
#define Button4 RB0
#define Button5 RB1
#define Button6 RB2
#define Button7 RB3
#define Button8 RB5
#define Button9 RB4

#define DISP1 RB7
#define DISP2 RB6
#define DISP3 RA1
#define DISP4 RA6
#define DISP5 RA0
#define DISP6 RA7
#define DISP7 RA2

void main(void)
{
    CMCON = 0x07;
    TXSTA = 0xFF;
    VRCON = 0xFF;
   
    TRISA = 0b00111000;
    TRISB = 0b00111111;
   
    for(;;){
        if (Button1 == 1) {
        DISP1 = 1;
        DISP2 = 1;
        DISP3 = 1;
        DISP4 = 1;
        DISP5 = 1;
        DISP6 = 1;
       
        } else {
            DISP1 = 0;
            DISP2 = 0;
            DISP3 = 0;
            DISP4 = 0;
            DISP5 = 0;
            DISP6 = 0;
        }
    }
   
}

Автор:  ToHu [ Съб Ное 19, 2016 9:16 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

тоя пък for странно решение while(true)
Но остави това, от дефиницията идва, не изпозлвам mplab но не знам защо си мисля че така дефинирано ще трябва да изпозлваш някоя от вградените функции за тест на бит а не директно да го проверяваш. Мисля че беше нещо като portbits.RA5 ... ама да не те излъжа, както казах MPAB не изпозлвам.

Автор:  forscience [ Съб Ное 19, 2016 9:39 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

Ето код от друг мой проект който е със чип 16F628 и входа работи. Но тук е деклариран като вход целия PORTB....

Код:
#define sw RB3
#define led RA1
#define led2 RB4
void main(void)
{   
   
    TRISA = 0;
    TRISB = 1;

    for(;;){
   
    if (sw == 1) {
        led = 1;
    } else {
        led = 0;
        led2 = 1;
    }
    }
   
}

Автор:  ToHu [ Съб Ное 19, 2016 9:49 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

Не ми се рови по документацията на mplab но все си мисля че така дефинираш байт но .... прочети дефинициите. По прицнип това което си направил никога не се прави така, трябва д аимаш дебонсинг най-малкото но това е друг въпрос ... погледни дефинициите, според мен не е така но може и да греша, възможно е RB3 някъде да е ддефинирано като 0x06.3 a MPLAB да е по умен от CSS и като види такова да знае че това е битова променлива.

Автор:  veryoldman [ Съб Ное 19, 2016 10:05 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

Не виждам никъде да конфигурираш CMCON. След Reset входовете от RA0 до RA3 са аналогови компаратори. Трябва ти CM<2:0>=111.

Автор:  forscience [ Съб Ное 19, 2016 10:17 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

veryoldman написа:
Не виждам никъде да конфигурираш CMCON. След Reset входовете от RA0 до RA3 са аналогови компаратори. Трябва ти CM<2:0>=111.


Продължава да работи по същия начин дори след корекцията на CMCON.

От скоро се занимавам с PIC, студент съм специалност КСТ, и още не са ми ясни доста неща.

CMCON = 0b111; (Така трябва да изглежда командата нали?)

Автор:  ToHu [ Съб Ное 19, 2016 10:38 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

Така, сега като чета явно някъде е дефинирано че RB0 .. RBx sa bitowe, т.е. не е дефиницията в случая, по скоро не чета а гледам пример техен.
Като ти гледам кода .. как си го вързл схемно, защото стандартната схема за връзване на бутон е пълъп към + и бутон към маса, в смисъл това е по -изпозлвамото, и в този случай входа ти винаги е 1-ца и става 0 като натиснеш.
Другото как са ти свързани диодите, защото пък много често те са с резистор към + о през порта се светват като го правиш 0 .....

п.с. не може да е CMCON защото ако си оставил компаратора включен ще четеш бита внаги 0-ла

Автор:  veryoldman [ Съб Ное 19, 2016 10:46 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

Как ти изглежда хардуера. Ако с натискане на бутона подаваш "1", това означава, че бутона е включен между входа и "+". Тогава би трябвало да имаш резистор към маса, за да определя нивото при ненатиснат бутон. Обикновено се прави обратното, за да се ползват Pullup резистори, но няма значение. Важното е при ненатиснат бутон да имаш едно устойчиво ниво (в твоя случай може би "0") и при натиснат бутон да имаш друго устойчиво ниво. Покажи по някакъв начин схема.
Когато се включи устройството, точно избраните диоди ли светват или всички - т.е. проблемът софтуерен ли е или хардуерен. Промени комбинацията, която искаш да свети, за да си сигурен, че ги пали софтуера, а не грешка по платката/схемата.

Автор:  forscience [ Съб Ное 19, 2016 10:54 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

Дисплея е с общ катод, а 1-ците ги подавам директно от +VDD през пуш бутон. При смяна на диодите в софтуера се получава желаната комбинация, но отново IF-a се изпълнява все едно бутона е натиснат, а реално не е. Както казах в по-горния си пост, предния примерен код работи върху друга платка, там реално е един бутон и един диод, а тук са 9 бутона и 7 диода.

Автор:  ToHu [ Съб Ное 19, 2016 11:00 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

А на тия входове имаш ли нещо което да ги държи в ниско ниво, т.е. резистор към маса, оставени висящи ... вече не помня какво връщаха, но на силабс примерно могат да ти върнат и 0 и 1.

Автор:  forscience [ Съб Ное 19, 2016 11:02 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

ToHu написа:
А на тия входове имаш ли нещо което да ги държи в ниско ниво, т.е. резистор към маса, оставени висящи ... вече не помня какво връщаха, но на силабс примерно могат да ти върнат и 0 и 1.


Нищо не ги държи в ниско ниво, свързани са единствено през бутона.
Но дори и да трябва да сложа резистори, пак не си обяснявам как при 1 вход и 1 изход работи, а с 9 входа и 7 изхода не.

Автор:  veryoldman [ Съб Ное 19, 2016 11:12 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

сложи им резистори, не е коректно да са висящи

Автор:  forscience [ Съб Ное 19, 2016 11:15 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

veryoldman написа:
сложи им резистори, не е коректно да са висящи


Хардуерно е практически невъзможно. Има ли начин софтуерно да им окажа логическа 0 при липса на 1ца?

Автор:  ToHu [ Съб Ное 19, 2016 11:29 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

Не, няма, какво значи хардуерно е невъзможно ? Дали ще разботи е въпрос който зависи от много неща, може да се чете винаги 0, може винаги 1-ца и което е най-лошото може да е произволно, или донякъде свързано с предходно състояние. Нямам спомен как се държаха входовете на PIC когато са висящи, но ри в идеалния случай да са 0, всяко смущение ще ги направи 1-ца. Пробвай да сложиш някакъв резистор за пробата към маса, ако изгасне значи това ти е проблема.

Автор:  forscience [ Съб Ное 19, 2016 11:44 pm ]
Заглавие:  Re: Проблем с входовете на PIC16F627A

ToHu написа:
Не, няма, какво значи хардуерно е невъзможно ? Дали ще разботи е въпрос който зависи от много неща, може да се чете винаги 0, може винаги 1-ца и което е най-лошото може да е произволно, или донякъде свързано с предходно състояние. Нямам спомен как се държаха входовете на PIC когато са висящи, но ри в идеалния случай да са 0, всяко смущение ще ги направи 1-ца. Пробвай да сложиш някакъв резистор за пробата към маса, ако изгасне значи това ти е проблема.



Да, точно там е проблема. Кода работи както трябва, просто хардуерно трябва да се добавят pullup резистори. Благодаря Ви за помощта.

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/