Stránka 1 z 1

PIC12F683, nenastavuje se vystup GP0

Napsal: 21 srp 2012, 13:25
od mbrazdil
Zdravim Vas,
mam takovy problem a netusim, kde by mohl byt. Mam jednoduchy program na ovladani kompresoru pomoci uP PIC12F683, kde pouzivam 3 piny (GP0 - spinani kompresoru, GP1 - stavova LED, GP2 - tlacitko). Kod vypada takto:

Kód: Vybrat vše

// PIC 12F683
// Casove spinani kompresoru

#include <htc.h>

#define _XTAL_FREQ 4000000

#define airPump GP0
#define led GP1
#define button GP2

int status = 0;

// Fuse bity
__CONFIG(FCMEN_OFF & IESO_OFF & BOREN_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_OFF & WDTE_OFF & FOSC_INTOSCIO);


// inicializace
void init() {
   // TRISIO
   TRISIO0 = 0;
   TRISIO1 = 0;
   TRISIO2 = 1;
   // ANSEL
   ANS2 = 0;
}

// spusteni programu
void start() {
   airPump = 0;
   led = 0;
   __delay_ms(2000);
   for (int i = 10; i > 0; i--) {
      if (status == 1) {
         led = 0;
         status = 0;
      } else {
         led = 1;
         status = 1;
      }
      __delay_ms(100);
   }
   for (;;) {
      if (button == 1) {
         __delay_ms(1000);
         if (button == 1) {
            break;
         }
      }
   }
   airPump = 1;
   led = 1;
   while (button == 1);
   for (;;) {
      if (button == 1) {
         __delay_ms(1000);
         if (button == 1) {
            break;
         }
      }
   }
   airPump = 0;
   led = 0;
   while (button == 1);
   __delay_ms(1000);
}

// hlavni program
void main() {
   init();
   start();
   for (;;) {
   }
}



A ted jak to funguje. Po zapojeni napajeni, se po 2 sekundach rozblika stavova dioda (5x se rozviti a zhasne). Po te ceka na stusknuti tlacitka po dobu 1 sekundy, kdy se zapne kompresor a rozne se stavova LED. Po sem je to OK az na to, ze na vystupu GP0 (kompresor) nic neni. LED sviti spravne, ale kdyz ji pripojim na GP0 tak nesviti a sviti by mela. Nevite v cem by mohl byt problem?

Napsal: 21 srp 2012, 15:33
od piitr
Jak máš ve funkci init() napsáno ANS2=0, tak bych to samé udělal s ANS0 a ANS1.

Napsal: 21 srp 2012, 16:01
od mbrazdil
Zkousel jsem, ale nepomohlo. Ono to tim ani byt nemuze pac to by mi pak nesvitila LEDka. ANS2 jsem vypinal jen kvuli tlacitku.

Napsal: 21 srp 2012, 16:25
od Andrea
Co to udělá, když přehodíš pořadí těch dvou příkazů
led = 1;
airPump = 1;
místo
airPump = 1;
led = 1;
?

Napsal: 22 srp 2012, 08:42
od piitr
mbrazdil píše:Zkousel jsem, ale nepomohlo. Ono to tim ani byt nemuze pac to by mi pak nesvitila LEDka. ANS2 jsem vypinal jen kvuli tlacitku.
To je divné, že to nepomáhá. Podle dokumentace je počáteční hodnota ANS0 a ANS1 jednička, a výslovně tam upozorňují na tohle chování. Takže bez toho nulování bych to vůbec nezkoušel. A chová se ti to přesně podle dokumentace, takže to všechno docela zapadá. Taky je ale možné, že tam je ještě jiný problém, nečetl jsem ten popis celý, ale to nulování ANS0 a ANS1 bych tam určitě dal. Dobrý test ti navrhla Andrea. Uvidíme, co to udělá, jestli to zkusíš.

Napsal: 22 srp 2012, 08:56
od piitr
Aha. Ještě bych zapsal 7 do CMCON0. A k tomu nulovat ty ANS.