Pagina 1 di 1

12f629 con pulsanti

MessaggioInviato: 27 feb 2011, 19:34
da wsocrates
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>

Re: 12f629 con pulsanti

MessaggioInviato: 12 mar 2011, 19:44
da Marcustv
Hai provato ad inferire al posto della funzione "if" di lettura del secondo pulsate lafunzione "else" ?

Re: 12f629 con pulsanti

MessaggioInviato: 12 mar 2011, 20:18
da Marcustv
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

Re: 12f629 con pulsanti

MessaggioInviato: 13 mar 2011, 0:50
da Candy
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.

Re: 12f629 con pulsanti

MessaggioInviato: 13 mar 2011, 19:00
da Paolino
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.