Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

12f629 con pulsanti

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] 12f629 con pulsanti

Messaggioda Foto Utentewsocrates » 27 feb 2011, 19:34

salve a tutti, volevo sottoporvi questo quesito: ho un PIC 12f629 con il quale intendo far lampeggiare due led con i due relativi pulsanti. alla pressione del tasto deve cominciare il lampeggio, e alla successiva pressione terminare. i pulsanti sono collegati a gp5 e gp4, i led gp0 e gp1. il lampeggio dovrebbe avvenire ogni mezzo secondo. per ora sono giunto ad un risultato non troppo entusiasmante. con il programma allegato il lampeggio comincia ma non riesco più a fermarlo.
void main() {
TRISIO = 0b111000;
GPIO=0;
while(1) {
if (GPIO&0x20){
Delay_Ms(200);
if (GPIO&0x20);
while (GPIO&0x20);
GPIO=0x01;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x01;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x01;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x01;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x01;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x01;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x01;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x01;
delay_ms(500);
GPIO=0x0;
}
if (GPIO&0x10){
Delay_Ms(200);
if (GPIO&0x10);
while (GPIO&0x10);
GPIO=0x02;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x02;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x02;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x02;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x02;
delay_ms(500);
GPIO=0x0;
delay_ms(500);
GPIO=0x02;
delay_ms(500);
GPIO=0x0;
}
}
}



spero qualcuno mi possa aiutare, grazie in anticipo. =D> =D> =D>
Avatar utente
Foto Utentewsocrates
0 2
 
Messaggi: 9
Iscritto il: 28 mag 2010, 9:18

0
voti

[2] Re: 12f629 con pulsanti

Messaggioda Foto UtenteMarcustv » 12 mar 2011, 19:44

Hai provato ad inferire al posto della funzione "if" di lettura del secondo pulsate lafunzione "else" ?
Avatar utente
Foto UtenteMarcustv
0 1
 
Messaggi: 9
Iscritto il: 5 gen 2011, 16:49

0
voti

[3] Re: 12f629 con pulsanti

Messaggioda Foto UtenteMarcustv » 12 mar 2011, 20:18

Scusa ... non avevo ben letto ciò che volevi :lol:
Creati una variabile es: a, la quale se premuto il tasto la poni a 1.
Se la variabile è a 1 ottieni il lampeggio.

Se premi l'altro tasto, la riporti a 0
quindi

if(a==1) ;
lampeggio
if(a==0)
fine lampeggio
Avatar utente
Foto UtenteMarcustv
0 1
 
Messaggi: 9
Iscritto il: 5 gen 2011, 16:49

0
voti

[4] Re: 12f629 con pulsanti

Messaggioda Foto UtenteCandy » 13 mar 2011, 0:50

Prima di tutto una domanda e mezza: che razza di programma sei riuscito a scrivere ?? Che logica c'è dietro ??

E poi:
Codice: Seleziona tutto
void main() {
TRISIO = 0b111000;
GPIO=0;
   while(1) {
   if (GPIO&0x20){
      Delay_Ms(200);
      if (GPIO&0x20);  <<----- ???
      while (GPIO&0x20);  <<----- ???
      GPIO=0x01;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x01;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x01;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x01;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x01;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x01;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x01;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x01;
      delay_ms(500);
      GPIO=0x0;
   }
   if (GPIO&0x10){
      Delay_Ms(200);
      if (GPIO&0x10); <<----- ???
      while (GPIO&0x10); <<----- ???
      GPIO=0x02;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x02;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x02;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x02;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x02;
      delay_ms(500);
      GPIO=0x0;
      delay_ms(500);
      GPIO=0x02;
      delay_ms(500);
      GPIO=0x0;
      }
   }
}


Se vuoi qualche ulteriore aiuto togli tutti quei delay e scrivi qualcosa di più logico.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[5] Re: 12f629 con pulsanti

Messaggioda Foto UtentePaolino » 13 mar 2011, 19:00

Ti suggerisco di valutare gli interrupt. Ha ragione candy: se vuoi due indicazioni utili, forse è il caso che il codice (e forse anche le idee) sia più chiaro.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti