Problema pulsanti PIC16f877

12 Anni 11 Mesi fa #1 da marcolindo94
Problema pulsanti PIC16f877 è stato creato da marcolindo94
Buonasera a tutti, mi scuso per il disturbo, ho un problema con il PIC16F877.

Utilizzo la scheda Freedom II, e sto facendo delle prove per un'applicazione.

Il problema è che i pulsanti non ne vogliono sapere di funzionare, cioé, se io provo a scrivere una cosa tipo:

while(1){

if(RB4==1){
RD2=1;
}
if(RB4==0){
RD2=0;
}
}

Il LED collegato alla RD2, rimane sempre acceso, anche se premo il pulsante, anche se avvio la scheda con il pulsante già premuto ecc...
Ho provato anche impostando il OPTION_REG, ma nulla.
Il problema è che anche con i programmi di esempio di Settorezero (che ringrazio per le lezioni), in particolare questo :
Lezione 7 (2/3)
la freccia rimane sempre sulla prima voce (L1), la quale lampeggia tra ON e OFF, e non risponde a nessun tipo di comando.
Ho provato anche a cambiare il pic, ma cosa può essere?
Perché funziona tutto (ADC, LCD, led ecc....) ma i pulsanti no.

Spero in un vostro aiuto, Grazie :)

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • marcolindo94
  • Junior Member
  • Junior Member
Di più
12 Anni 11 Mesi fa #2 da stainless
Risposta da stainless al topic Re: Problema pulsanti PIC16f877
Dando per scontato che i pulsanti siano funzionanti metti prima del while
TRISB=1; //tutti ingressi
PORTB=0;
TRISD=0; //tutte uscite
PORTD=0;

così definisci lo stato dei pin ancor prima di cominciare il programma. Il pulsante BT1 (RB4) é pull down perciò accenderà il led quando va a massa ossia
if(RB4==0)
{
RD2=1;
}
mentre in condizione di riposo il pin è a Vcc quindi legge lo stato logico 1 che nel tuo frammento di codice fa accendere il led.

Ciao

int main void{
while(1){
eat();
drink();
have_fun();
ride();
}
}

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • stainless
  • Premium Member
  • Premium Member
Di più
12 Anni 11 Mesi fa #3 da marcolindo94
Risposta da marcolindo94 al topic Re: Problema pulsanti PIC16f877
Grazie adesso faccio una prova poi comunico se funziona. Grazie dell'aiuto

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • marcolindo94
  • Junior Member
  • Junior Member
Di più
12 Anni 11 Mesi fa #4 da marcolindo94
Risposta da marcolindo94 al topic Re: Problema pulsanti PIC16f877
Ho provato ma non funziona...

con il codice

while(1){

if(RB4==1)
{
RD2=1;
}
if(RB4==0)
{
RD2=0;
}

}

Il led rimane sempre spento,

con il codice

while(1){

if(RB4==1)
{
RD2=0;
}
if(RB4==0)
{
RD2=1;
}

}

Il led rimane sempre acceso...

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • marcolindo94
  • Junior Member
  • Junior Member
Di più
12 Anni 11 Mesi fa #5 da stainless
Risposta da stainless al topic Re: Problema pulsanti PIC16f877
Prova così:

while(1)
{
if(RB4==0)
{
DelayMs(100); //ritardo antirimbalzo per i pulsanti
if(RB4==0) //se RB4 è ancora 0
{
RD2=RD2^1; //inverte lo stato di RD2
}
}
}

ricordandoti di includere la routine di ritardo prima del main

int main void{
while(1){
eat();
drink();
have_fun();
ride();
}
}

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • stainless
  • Premium Member
  • Premium Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login