PIC12F683, nenastavuje se vystup GP0

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
mbrazdil
Příspěvky: 39
Registrován: 20 kvě 2012, 00:00

PIC12F683, nenastavuje se vystup GP0

#1 Příspěvek 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?
Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 00:00
Kontaktovat uživatele:

#2 Příspěvek od piitr »

Jak máš ve funkci init() napsáno ANS2=0, tak bych to samé udělal s ANS0 a ANS1.
Uživatelský avatar
mbrazdil
Příspěvky: 39
Registrován: 20 kvě 2012, 00:00

#3 Příspěvek 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.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#4 Příspěvek 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;
?
Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 00:00
Kontaktovat uživatele:

#5 Příspěvek 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íš.
Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 00:00
Kontaktovat uživatele:

#6 Příspěvek od piitr »

Aha. Ještě bych zapsal 7 do CMCON0. A k tomu nulovat ty ANS.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“