- Messaggi: 583
- Ringraziamenti ricevuti 1
pic non mi vede pulsante
12 Anni 9 Mesi fa #1
da Guido
pic non mi vede pulsante è stato creato da Guido
Ciao, su una bredboard ho montato un pic 18f4550, ho fatto il debug per il lampeggio di un led e questo funziona correttamente, ora sono passato all' accensione del led premendo un pulsante e non succede nulla. Come compilatore uso MPLABX e come programmer il pickit2. Un filo del pulsante lo collegato a RB5 (pin 38) l'altro al negativo, avete dei suggerimenti?
Grazie
Ecco il codice:
#include <p18cxxx.h>
#include <portb.h>
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
//OSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilitato il Watchdog Timer
//LVT = OFF Disabilitato programmazione LVT
//PBADEN = OFF Disabilitato gli ingrassi analogici
void main (void){
// Imposto PORTA tutti ingrassi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
LATB = 0x00;
TRISB = 0xFF;
//Imposto PORTC tutti ingressi
LATC = 0x00;
TRISC = 0xFF;
// Imposto PORTD tutte uscite
LATD = 0x00;
TRISD = 0b11111110;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
EnablePullups (); //Abilito resistori di pullups
while (1) { //ciclo infinito
if (PORTBbits.RB5 == 0) { // Controllo la pressione di RB4
LATDbits.LATD0= 1 ;
}
else {
LATDbits.LATD0 = 0; //Spengo LED
}
}
}
Grazie
Ecco il codice:
#include <p18cxxx.h>
#include <portb.h>
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
//OSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilitato il Watchdog Timer
//LVT = OFF Disabilitato programmazione LVT
//PBADEN = OFF Disabilitato gli ingrassi analogici
void main (void){
// Imposto PORTA tutti ingrassi
LATA = 0x00;
TRISA = 0xFF;
// Imposto PORTB tutti ingressi
LATB = 0x00;
TRISB = 0xFF;
//Imposto PORTC tutti ingressi
LATC = 0x00;
TRISC = 0xFF;
// Imposto PORTD tutte uscite
LATD = 0x00;
TRISD = 0b11111110;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
EnablePullups (); //Abilito resistori di pullups
while (1) { //ciclo infinito
if (PORTBbits.RB5 == 0) { // Controllo la pressione di RB4
LATDbits.LATD0= 1 ;
}
else {
LATDbits.LATD0 = 0; //Spengo LED
}
}
}
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Guido
- Autore della discussione
- Platinum Member
Riduci
Di più
12 Anni 9 Mesi fa - 12 Anni 9 Mesi fa #2
da gcupini
Risposta da gcupini al topic Re: pic non mi vede pulsante
ciao,
il programma mi sembra OK,
1) visto che non ci sono ritardi tra l'accensione e lo spegnimento del led, il led sta acceso solo se mantieni spinto il pulsante. appena rilasci si spegne !
2) in alternativa (se non si accevde tenedo spinto il pulsante) sei sicuro che il pulsante sia collegato correttamente a massa ?
3) il led da solo funziona su RD0 ?
Saluti
il programma mi sembra OK,
1) visto che non ci sono ritardi tra l'accensione e lo spegnimento del led, il led sta acceso solo se mantieni spinto il pulsante. appena rilasci si spegne !
2) in alternativa (se non si accevde tenedo spinto il pulsante) sei sicuro che il pulsante sia collegato correttamente a massa ?
3) il led da solo funziona su RD0 ?
Saluti
Ultima Modifica 12 Anni 9 Mesi fa da gcupini.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- gcupini
- Visitatori
12 Anni 9 Mesi fa #3
da Guido
Risposta da Guido al topic Re: pic non mi vede pulsante
Ciao, grazie per avermi risposto, ho combiato codice e scritto cosi funziona, hai qualche idea?
#include <p18cxxx.h>
#include <portb.h>
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
//OSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilitato il Watchdog Timer
//LVT = OFF Disabilitato programmazione LVT
//PBADEN = OFF Disabilitato gli ingrassi analogici
void main (void) {
unsigned int i; //variabile usata per creare un conteggio fittizio
//Imposto PORTA tutti ingrrssi
LATA = 0x00;
TRISA = 0xFF;
//Imposto PORTB tutti ingrrssi
LATB = 0x00;
TRISB = 0xFF;
//Imposto PORTC tutti ingressi
LATC = 0x00;
TRISC = 0xFF;
//Imposto PORTD tutte uscite
LATD = 0x00;
TRISD = 0x00;
//Imposto PORTE tutti ingrrssi
LATE = 0x00;
TRISE = 0xFF;
EnablePullups (); //Abilito resistori di pullups
while (1) { //ciclo infinito
for (i=0; i<10000; i++) { // Pausa filtraggio spike
}
if (PORTBbits.RB4 == 0) { // Controllo la pressione di RB4
LATDbits.LATD1 = 0x01;
}
else {
LATDbits.LATD1 = 0x00;
}
LATDbits.LATD0 = 0x01; //Accendo il led0 per il lampeggio
for (i=0; i<64000; i++) {
}
LATDbits.LATD0 = 0x00; //Spengo il led0 per il lampeggio
}
}
#include <p18cxxx.h>
#include <portb.h>
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
//OSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilitato il Watchdog Timer
//LVT = OFF Disabilitato programmazione LVT
//PBADEN = OFF Disabilitato gli ingrassi analogici
void main (void) {
unsigned int i; //variabile usata per creare un conteggio fittizio
//Imposto PORTA tutti ingrrssi
LATA = 0x00;
TRISA = 0xFF;
//Imposto PORTB tutti ingrrssi
LATB = 0x00;
TRISB = 0xFF;
//Imposto PORTC tutti ingressi
LATC = 0x00;
TRISC = 0xFF;
//Imposto PORTD tutte uscite
LATD = 0x00;
TRISD = 0x00;
//Imposto PORTE tutti ingrrssi
LATE = 0x00;
TRISE = 0xFF;
EnablePullups (); //Abilito resistori di pullups
while (1) { //ciclo infinito
for (i=0; i<10000; i++) { // Pausa filtraggio spike
}
if (PORTBbits.RB4 == 0) { // Controllo la pressione di RB4
LATDbits.LATD1 = 0x01;
}
else {
LATDbits.LATD1 = 0x00;
}
LATDbits.LATD0 = 0x01; //Accendo il led0 per il lampeggio
for (i=0; i<64000; i++) {
}
LATDbits.LATD0 = 0x00; //Spengo il led0 per il lampeggio
}
}
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Guido
- Autore della discussione
- Platinum Member
Riduci
Di più
- Messaggi: 583
- Ringraziamenti ricevuti 1
12 Anni 9 Mesi fa #4
da Akuryu
Risposta da Akuryu al topic Re: pic non mi vede pulsante
A me sembra solo che tu abbia cambiato la porta, nel senso che nel codice di cui il primo posto la porta utilizzata era la RB5 anche se nel commento scrivevi RB$, mentre nel secondo codice usi proprio RB4
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Akuryu
- Premium Member
Riduci
Di più
- Messaggi: 137
- Ringraziamenti ricevuti 3
12 Anni 9 Mesi fa #5
da gcupini
Risposta da gcupini al topic Re: pic non mi vede pulsante
ciao,
se bastano quei piccoli cicli di delay per farla funzionare, allora può dipendere dal fatto che
utilizzi if (PORTBbits.RB4 == 0) . Prova a sostituirlo con iif (PORTBbits.LATB4 == 0) e ad eliminare i cili per vedere se funziona come dovrebbe.
se bastano quei piccoli cicli di delay per farla funzionare, allora può dipendere dal fatto che
utilizzi if (PORTBbits.RB4 == 0) . Prova a sostituirlo con iif (PORTBbits.LATB4 == 0) e ad eliminare i cili per vedere se funziona come dovrebbe.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- gcupini
- Visitatori
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.