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
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
- Autore della discussione
- Junior Member
Riduci
Di più
12 Anni 11 Mesi fa #2
da stainless
int main void{
while(1){
eat();
drink();
have_fun();
ride();
}
}
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
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
Riduci
Di più
- Messaggi: 127
- Ringraziamenti ricevuti 14
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.
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...
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.
12 Anni 11 Mesi fa #5
da stainless
int main void{
while(1){
eat();
drink();
have_fun();
ride();
}
}
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
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
Riduci
Di più
- Messaggi: 127
- Ringraziamenti ricevuti 14
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.