Leggi il Topic


Indice del forumMotobarForum Internet & Hi-Tech

   

Pagina 1 di 1
 
programma in C? [aiuto per scriverlo]
7366335
7366335 Inviato: 12 Apr 2009 10:28
Oggetto: programma in C? [aiuto per scriverlo]
 

ciaoo a tutti, come dal titolo mi servirebbe una mano per questo programma in C...
"far lampeggiare un diodo led alla pressione di un pulsante in ingresso ad un micro controllore PIC16F876A con una frequenza data dal seguente grafico:


ps sono millisecondi

grazieeee a chi mi risponderà!
 
7394810
7394810 Inviato: 16 Apr 2009 21:50
 

sono abbastanza pratico del C, tanto che ora sto facendo java. ma della programmazione dei pic non so da che parte prendere...magari se mi dai 2 dritte qualcosa riesco a combinare
 
7408146
7408146 Inviato: 19 Apr 2009 10:28
 

dovresti essere piu' preciso.
Deve lampeggiare quando premi il pulsante per 250mS e poi ogni 780mS deve fare un lampeggio di 450 mS? oppure deve solo accendersi all'inizio per 250ms e poi dopo 780mS deve accendersi per 450mS e poi fermarsi?
Non conosco questo micro, per cui ti posso solo dare dello pseudo codice, comunque vedendo i datasheet ha 3 timers e delle porte di I/O (Port A,B,C,etc)
Ti conviene usare 1 dei timers per controllare il tempo, a meno che il tuo compilatore abbia delle librerie con una funzione tipo sleep(mS) che ti permettono di fermarti per tot tempo.
La pressione del tasto la prenderai da una porta di input e il led sara' in una porta di output.
Dovresti fare qualcosa del genere:

#define STATO_INIZIALE 0
#define STATO_SPENTO 1
#define STATO_ACCESO 2
#define STATO_IDLE 3

int stato=STATO_IDLE;

interrupt timer()
{
switch (stato)
{
case STATO_INIZIALE: // spengo il led per 780mS
spegni_led();
riconfigura_timer(780);
stato=STATO_SPENTO;
break;
case STATO_SPENTO: // accendo il led per 450mS
accendi_led();
riconfigura_timer(450);
stato=STATO_ACCESO;
break;
case STATO_ACCESO: // spengo il led
spegni_led();
stato=STATO_IDLE; // se volevi continuare a farlo lampeggiare qui
// devi mettere riconfigura_timer(780);
// stato=STATO_SPENTO
break;
case STATO_IDLE: // finito di lampeggiare, aspetto la pressione del tasto
disabilita_timer();
break;

}
}


void main()
{
int tastopremuto=0;
while (1)
{
if (stato=STATO_IDLE) // se non e' stato premuto nessun tasto o se e' finita la // sequenza di accensione del tasto precedente
{
tastopremuto=controlla_tasto();
if (tastopremuto)
{
stato=STATO_INIZIALE;
accendi_led(); // accendo il led e faccio partire il timer
abilita_timer();
riconfigura_timer(250);
tastopremuto=0;
}
}
}
}
 
Mostra prima i messaggi di:





Pagina 1 di 1

Non puoi inserire nuovi Topic
Non puoi rispondere ai Topic
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi
 
Indice del forumMotobarForum Internet & Hi-Tech

Forums ©