Отговори на тема  [ 29 мнения ]  Отиди на страница 1, 2  Следваща
Проблем с входовете на PIC16F627A 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Фев 19, 2015 7:47 pm
Мнения: 14
Мнение Проблем с входовете на 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;
        }
    }
   
}


Съб Ное 19, 2016 9:11 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Проблем с входовете на PIC16F627A
тоя пък for странно решение while(true)
Но остави това, от дефиницията идва, не изпозлвам mplab но не знам защо си мисля че така дефинирано ще трябва да изпозлваш някоя от вградените функции за тест на бит а не директно да го проверяваш. Мисля че беше нещо като portbits.RA5 ... ама да не те излъжа, както казах MPAB не изпозлвам.


Съб Ное 19, 2016 9:16 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Фев 19, 2015 7:47 pm
Мнения: 14
Мнение 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;
    }
    }
   
}


Съб Ное 19, 2016 9:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Проблем с входовете на PIC16F627A
Не ми се рови по документацията на mplab но все си мисля че така дефинираш байт но .... прочети дефинициите. По прицнип това което си направил никога не се прави така, трябва д аимаш дебонсинг най-малкото но това е друг въпрос ... погледни дефинициите, според мен не е така но може и да греша, възможно е RB3 някъде да е ддефинирано като 0x06.3 a MPLAB да е по умен от CSS и като види такова да знае че това е битова променлива.


Съб Ное 19, 2016 9:49 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Ное 06, 2016 6:49 pm
Мнения: 41
Мнение Re: Проблем с входовете на PIC16F627A
Не виждам никъде да конфигурираш CMCON. След Reset входовете от RA0 до RA3 са аналогови компаратори. Трябва ти CM<2:0>=111.


Съб Ное 19, 2016 10:05 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Фев 19, 2015 7:47 pm
Мнения: 14
Мнение Re: Проблем с входовете на PIC16F627A
veryoldman написа:
Не виждам никъде да конфигурираш CMCON. След Reset входовете от RA0 до RA3 са аналогови компаратори. Трябва ти CM<2:0>=111.


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

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

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


Съб Ное 19, 2016 10:17 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Проблем с входовете на PIC16F627A
Така, сега като чета явно някъде е дефинирано че RB0 .. RBx sa bitowe, т.е. не е дефиницията в случая, по скоро не чета а гледам пример техен.
Като ти гледам кода .. как си го вързл схемно, защото стандартната схема за връзване на бутон е пълъп към + и бутон към маса, в смисъл това е по -изпозлвамото, и в този случай входа ти винаги е 1-ца и става 0 като натиснеш.
Другото как са ти свързани диодите, защото пък много често те са с резистор към + о през порта се светват като го правиш 0 .....

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


Съб Ное 19, 2016 10:38 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Ное 06, 2016 6:49 pm
Мнения: 41
Мнение Re: Проблем с входовете на PIC16F627A
Как ти изглежда хардуера. Ако с натискане на бутона подаваш "1", това означава, че бутона е включен между входа и "+". Тогава би трябвало да имаш резистор към маса, за да определя нивото при ненатиснат бутон. Обикновено се прави обратното, за да се ползват Pullup резистори, но няма значение. Важното е при ненатиснат бутон да имаш едно устойчиво ниво (в твоя случай може би "0") и при натиснат бутон да имаш друго устойчиво ниво. Покажи по някакъв начин схема.
Когато се включи устройството, точно избраните диоди ли светват или всички - т.е. проблемът софтуерен ли е или хардуерен. Промени комбинацията, която искаш да свети, за да си сигурен, че ги пали софтуера, а не грешка по платката/схемата.


Съб Ное 19, 2016 10:46 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Фев 19, 2015 7:47 pm
Мнения: 14
Мнение Re: Проблем с входовете на PIC16F627A
Дисплея е с общ катод, а 1-ците ги подавам директно от +VDD през пуш бутон. При смяна на диодите в софтуера се получава желаната комбинация, но отново IF-a се изпълнява все едно бутона е натиснат, а реално не е. Както казах в по-горния си пост, предния примерен код работи върху друга платка, там реално е един бутон и един диод, а тук са 9 бутона и 7 диода.


Съб Ное 19, 2016 10:54 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Проблем с входовете на PIC16F627A
А на тия входове имаш ли нещо което да ги държи в ниско ниво, т.е. резистор към маса, оставени висящи ... вече не помня какво връщаха, но на силабс примерно могат да ти върнат и 0 и 1.


Съб Ное 19, 2016 11:00 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Фев 19, 2015 7:47 pm
Мнения: 14
Мнение Re: Проблем с входовете на PIC16F627A
ToHu написа:
А на тия входове имаш ли нещо което да ги държи в ниско ниво, т.е. резистор към маса, оставени висящи ... вече не помня какво връщаха, но на силабс примерно могат да ти върнат и 0 и 1.


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


Съб Ное 19, 2016 11:02 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Ное 06, 2016 6:49 pm
Мнения: 41
Мнение Re: Проблем с входовете на PIC16F627A
сложи им резистори, не е коректно да са висящи


Съб Ное 19, 2016 11:12 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Фев 19, 2015 7:47 pm
Мнения: 14
Мнение Re: Проблем с входовете на PIC16F627A
veryoldman написа:
сложи им резистори, не е коректно да са висящи


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


Съб Ное 19, 2016 11:15 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30685
Местоположение: София
Мнение Re: Проблем с входовете на PIC16F627A
Не, няма, какво значи хардуерно е невъзможно ? Дали ще разботи е въпрос който зависи от много неща, може да се чете винаги 0, може винаги 1-ца и което е най-лошото може да е произволно, или донякъде свързано с предходно състояние. Нямам спомен как се държаха входовете на PIC когато са висящи, но ри в идеалния случай да са 0, всяко смущение ще ги направи 1-ца. Пробвай да сложиш някакъв резистор за пробата към маса, ако изгасне значи това ти е проблема.


Съб Ное 19, 2016 11:29 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Фев 19, 2015 7:47 pm
Мнения: 14
Мнение Re: Проблем с входовете на PIC16F627A
ToHu написа:
Не, няма, какво значи хардуерно е невъзможно ? Дали ще разботи е въпрос който зависи от много неща, може да се чете винаги 0, може винаги 1-ца и което е най-лошото може да е произволно, или донякъде свързано с предходно състояние. Нямам спомен как се държаха входовете на PIC когато са висящи, но ри в идеалния случай да са 0, всяко смущение ще ги направи 1-ца. Пробвай да сложиш някакъв резистор за пробата към маса, ако изгасне значи това ти е проблема.



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


Съб Ное 19, 2016 11:44 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 29 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни