Vai al contenuto
PLC Forum


Problema Con Due Programmini In C


Pildo

Messaggi consigliati

Ciao a tutti, come ho già scritto in un precedente post, mi sto dilettando cin i pic (16f84a) e sto iniziando porgrammando in Mikroc, l'altra sera ho fatto un semplicissimo programma dove premendo un tasto collegato su RA1 di accende un led su RB1 per un secondo. Questo programma non sono riuscito a farlo funzionare, l'ho provato anche con realpic simulator. Ho deciso di provare a fare un altro programma ricominciando da zero, il risultato è che il secondo funziona, allora sono andato a vedere quali sono le differenze tra i due programmi e la sorpresa è stata che apparentemente non ci sono differenze. Ve li allego:

Questo è quello che funziona

/* pic16f84a 4 MHz
premendo un pulsante (A1) si accende un led (B1)*/

#define pulsante porta.B1
#define led portb.B1

void set()
{
porta=0xff; //porta a tutti ingressi
portb=0x00; //porta b tutte uscite
trisb=0x00; //bit porta b tutti a livello basso
}
void main() {
set();
while(1)
{ led=0;
if(pulsante==0)
{
led=1;
delay_ms(1000);
}
}
}

Questo è quello che non funziona

// PIC 16F84A 4 MHz
// premendo il pulsante su RA1 si accende il led su RB1 per un secondo
#define pulsante porta.b1
#define led portb.b1

void set()
{
porta=0xff; // porta a tutti ingressi
portb=0x00; //porta b tutte uscite
trisb=0x00; // bit porta b tutti i bit a zero
}
void main(){
set();
while(1)
{
led=0;
if (pulsante==0)
{
led=1;
delay_ms(1000);
}
}
}

Probabilmente l'errore è davanti ai miei occhi ma non riesco a vederlo, mi aiutereste per cortesia?

Mi viene il dubbio di aver impostato male l'oscillatore o altri parametri, ma con la mia inesperienza non riesco a trovare dove andare a controllarli.

Scusatemi, accatto consigli ed insulti :smile:

Link al commento
Condividi su altri siti


sono uguali :)

rivedi queste istruzioni perché non sono quello che hai commentato

porta=0xff; // porta a tutti ingressi

portb=0x00; //porta b tutte uscite
trisb=0x00; // bit porta b tutti i bit a zero

porta=0xff; mette sulla porta A tutti 1 in uscita, non imposta la porta a come ingresso

stessa cosa porta b mette in uscita tutti zeri

trisb=0 stabilisce che la porta B è un'uscita

avresti dovuto scrivere trisa=0xff per fare in modo che la porta a sia in ingresso

Link al commento
Condividi su altri siti

I programmi sono uguali, il problema risiede altrove.

I commenti dei registri port e tris vanno scambiati, tris imposta la direzione, port il valore.

Hai messo una resistenza di pull-up all'ingresso pulsante?

Ciao.

Link al commento
Condividi su altri siti

Giusto, ho invertito le istruzioni tris con port, ora mi chiedo come fa a funzionare un programma.Il problema forse è proprio qui. Ho messo la resistenza di pullup, ma non mi funziona neanche con Realpuc simulator.

Link al commento
Condividi su altri siti

Hai ragione, ma l'ho scaricato proprio per assicurarmi di non aver sbagliato qualcosa sul circuito vero fatto sulla breadboard, mi ha confermato i risultati ottenuti con il circuito

Provo a togliere il commento, anche se non dovrebbe influire, ma non do nulla per scontato.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...