PIC v C - nefunguje mi tlačítko

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

PIC v C - nefunguje mi tlačítko

Príspevok od používateľa emajko159 » 04 Nov 2015, 14:11

Ahojte. Už pár týždňov neviem vyriešiť nefungujúci vstup.
Prečítal som kopec článkov a podľa mňa mám kód v poriadku.

Kód: Vybrať všetko

#pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

#include <xc.h>

int main(void) {
    nGPPU=0;             // GPIO pull-ups are enabled by individual port latch values
    WPU1=1;              // WEAK PULL-UP REGISTER
    TRISIO0=0;
    TRISIO1=1;
    ANSEL=0x00;               // ANALOG SELECT REGISTER (digital)
    
    while(1) {
        
    if(GPIO1)
      GPIO0=0;
    else
      GPIO0=1;
    }
    return 0;
}
Používam PIC12F675, GPIO0 mám zapojené na +LED, GPIO1 mám zapojené na tlačidlo pripojené k mínus pólu.
Rozblikať LEDku iným kódom mi ide.
Používam XC8 compilátor a MPLAB X IDE.

Vďaka za rady.
0
Naposledy upravil/-a emajko159 v 04 Nov 2015, 16:46, upravené celkom 2 krát.

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12418
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa boraicho » 04 Nov 2015, 14:21

to je MPLAB?
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa emajko159 » 04 Nov 2015, 14:35

Hej. MPLAB X IDE a XC8 compilátor.
0

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12418
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa boraicho » 04 Nov 2015, 14:51

ja musim mať riadok tušim #include<htc.h>
a mas vstup nastaveny ako digitalny? lebo defaultne su ako analogove, a to je dovod prečo to nejde
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa emajko159 » 04 Nov 2015, 15:28

htc.h sa používalo v minulosti. Bolo nahradené xc.h.
Nevedel som že predvolene sú všetky porty analógové. Ale aj tak sa automaticky prepnú na digitálne ak je použitý interný weak pull-up rezistor. Pre istotu som však pridal ANSEL=0x00; do kódu.
No aj tak to nefunguje.
0

Používateľov profilový obrázok
juraj77
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 23 Sep 2012, 22:39
Bydlisko: Nitra
Vek: 44

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa juraj77 » 04 Nov 2015, 15:50

na stránke microchip.com sú hotové príklady v jazyku C pre základné operácie s PIC
Skús načítať hodnotu pinu iným zápisom napr. PORTX.PIN1
0
" Bez vody si viem predstaviť život, ale bez internetu a počítača nie.."

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa emajko159 » 04 Nov 2015, 16:07

To hej. Ale ovládanie PINov je taký základ že tomu nevenovali ani len článok. Ich návody začínajú pri časovači.
Tento PIC pozná iba GPIOx a GPx. Skúšal som obe. PORTx.PIN poznajú až tie viac nožičkové PICi ktoré majú I/O porty rozdelené na A,B,C,...
0
Naposledy upravil/-a emajko159 v 04 Nov 2015, 16:13, upravené celkom 1 krát.

Používateľov profilový obrázok
juraj77
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 23 Sep 2012, 22:39
Bydlisko: Nitra
Vek: 44

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa juraj77 » 04 Nov 2015, 16:09

skús gúúúgl.....určite nájdeš
A kde máš definovaný pin GPIO ?????
Nevidím tam niečo podobné ako: PORTAbits.RA0 == 1
pozri si toto: http://stackoverflow.com/questions/2294 ... and-output
0
Naposledy upravil/-a juraj77 v 04 Nov 2015, 16:16, upravené celkom 1 krát.
" Bez vody si viem predstaviť život, ale bez internetu a počítača nie.."

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa emajko159 » 04 Nov 2015, 16:16

No práveže som googlil o sto šesť, ale nenašiel som nič použiteľné. Zaoberám sa týmto už pá týždňov. Stihol som už dosť pregoogliť.

Ako mám mať definovaný GPIO? Veď na to je ten xc.h nie?
0

Sender
Pokročilý člen
Pokročilý člen
Príspevky: 535
Dátum registrácie: 26 Máj 2008, 00:00

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa Sender » 04 Nov 2015, 16:25

Nikde v tom kódu nevidím zákaz komparatoru (CMCON = 7, ANSEL = 0) ,nebo bude využit ?
0

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa emajko159 » 04 Nov 2015, 17:05

Na mojom PICe nemám možnosť zakázať komparátor. Proste ho nepoužijem. Bez nastavenia. Aspoň tak som zistil v Datasheete.
A hentú stránku som mal otvorenú. Ale to je pre iný PIC. Tie príkazy na čítanie/zápis I/O u mňa nefungujú. Ja môžem I/O porty ovládať iba cez GPx a GPIOx.
A digitálne I/O som nastavil príkazom ANSEL=0x00;.
0

Sender
Pokročilý člen
Pokročilý člen
Príspevky: 535
Dátum registrácie: 26 Máj 2008, 00:00

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa Sender » 04 Nov 2015, 17:19

Pokud používáš 12F675,tak to chce jen čas abys sám přišel na to že ho zakázat bude třeba.
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa mato3000 » 04 Nov 2015, 17:27

Na mojom PICe nemám možnosť zakázať komparátor. Proste ho nepoužijem.
:biggrin:

strana 2 originál DS ... zisti čo je to pri danom pine CIN+ a CIN-

strana 35 register CMCON ..... objasni si ako funguje

strana 19 aktivácia PORTu GPIO ... viem že to ASM, ale hádam vieš nadstaviť správny register na 07h

a je tam aj celá aktivácia , teda aj tovoj ANSEL
0

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa emajko159 » 04 Nov 2015, 17:40

CIN je komparátor. Ale skúšal som dať tlačidlo aj na GPIO5 a bolo to to isté.

The ANSEL (9Fh) and CMCON (19h) registers must be initialized to configure an analog channel as a digital input. Pins configured as analog inputs will read ‘0’. The ANSEL register is defined for the PIC12F675.

Ale nejak som neprišiel na to ako ten CMCON nastaviť.

Initializing GPIO je v assemblery. To mi nič nehovorí. Je tam ale GPIO, CMCON, ANSEL a TRISIO.
Tri z toho mám. S tým CMCON ale neviem čo mám spraviť...
Prílohy
CMCON register
CMCON register
0

Sender
Pokročilý člen
Pokročilý člen
Príspevky: 535
Dátum registrácie: 26 Máj 2008, 00:00

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa Sender » 04 Nov 2015, 17:43

Zkus lépe číst příspěvky uživatelů,nebo datasheet.Bude ti to hned jasný.
0

mato3000
Power user
Power user
Príspevky: 9767
Dátum registrácie: 04 Jan 2009, 00:00
Bydlisko: BA

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa mato3000 » 04 Nov 2015, 17:46

Ale skúšal som dať tlačidlo aj na GPIO5 a bolo to to isté.
lebo tam bude vyvedené OSC1 :biggrin: a to odstavíš v config bitoch.

Ale ani keby že to dáš na GPIO2 tak ti to nepôjde, pretože si neodstavil komprátor na druhom GPIO :wink:


... viem že to ASM, ale hádam vieš nadstaviť správny register na 07h
-- Spojený príspevok 04 Nov 2015, 18:48 --

nečakaj, že ti to hneď povieme , keď si doteraz strávil 2 týždne na googlom :D , tak pouvažuj, aj tak sme ti to všetko povedali .... ver mi jedine tak sa to naučíš, inak si odsúdený na knižnice a pochybné rutiny, ktorým nebudeš rozumieť ako 95% miestnych .
0

mroks
Okoloidúci
Okoloidúci
Príspevky: 3
Dátum registrácie: 09 Mar 2011, 00:00
Bydlisko: Handlová
Vek: 51

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa mroks » 04 Nov 2015, 18:44

Ak ti pomôže preložený datasheet, pozri si strany 36,37. Máš tam popísanú konfiguráciu komparátora ...
Prílohy
PIC12F675-překlad.pdf
(2.32 MiB) 41 stiahnutí
0

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa emajko159 » 05 Nov 2015, 21:49

Pridal som do kódu CMCON=0x07;. To by malo vypnúť komparátor. Avšak stále to nefunguje. Ak zmením program a vývody že tlačidlo bude na GPIO5, tak všetko funguje. No tlačidlo na GPIO1 stále nejde.

Aktuálny kód:

Kód: Vybrať všetko

#pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

#include <xc.h>

int main(void) {
    
    ANSEL=0x00;                 // ANALOG SELECT REGISTER (digital)
    CMCON=0x07;               // COPMARATOR DISABLE
    nGPPU=0;                    // GPIO pull-ups are enabled by individual port latch values
    WPU1=1;                     // WEAK PULL-UP REGISTER
    TRISIO0=0;
    TRISIO1=1;
    
    while(1) {
        
    if(GPIO1)
      GPIO0=0;
    else
      GPIO0=1;

    }
    return 0;
}
0

Sender
Pokročilý člen
Pokročilý člen
Príspevky: 535
Dátum registrácie: 26 Máj 2008, 00:00

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa Sender » 06 Nov 2015, 21:43

Zkus ten HW pořádně inicializovat. (po malý úpravě ten kód funguje)
0

Používateľov profilový obrázok
emajko159
Stály člen
Stály člen
Príspevky: 100
Dátum registrácie: 15 Máj 2010, 00:00
Bydlisko: Bratislava
Vek: 32
Kontaktovať používateľa:

Re: PIC v C - nefunguje mi tlačítko

Príspevok od používateľa emajko159 » 06 Nov 2015, 22:13

Vieš nejak konkrétne poradiť? Z toho čo som čítal by už malo byť všetko OK. Komparátor vypnutý, IO nastavené na digitál, čo ešte treba?
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok