Pagina 1 di 4

Problemi programmazione in c per microcontrollori

MessaggioInviato: 9 apr 2013, 0:26
da Davidark
Salve a tutti!
Leggo spesso il vostro forum perché mi è molto di aiuto e siete dei geni! ;)
Sono agli inizi della programmazione in C di microcontrollori, e sto riscontrando non poche difficoltà.
Frequento il corso di laboratorio di elettronica in ingegneria dell'informazione e utilizziamo due software:
per la compilazione in C : CCS compiler C
per la realizzazione al PC : Proteus della isis.
Ho praticamente un problema stupido: non riesco a gestire gli interrupt tramite C! Mi spiego meglio:
Devo utilizzare un 18F2455 per accendere e spegnere un led a intervalli di un secondo!
Nel CCS Compiler utilizziamo il wizard, che ci permette di impostare diverse periferiche del microcontrollore.
Una volta fatto questo rispetto a cosa s'è settato nel wizard viene creato il main e la classe interrupt, adesso credo che per svolgere il compito assegnato devo agire nella classe interrupt, ma non capisco come, come faccio a fare spegnere e accendere il led a intervalli di 1 secondo? devo utilizzare un ciclo? Il prof ci ha detto di abilitare il piedino sul quale collegare il led tramite la funzione output_high(oppure low)(PIN_A0), ma una volta abilitato come gestisco il tutto? Grazie per le eventuali risposte e chiedo scusa per la domanda sicuramente banale per voi! =)

Re: Problemi programmazione in c per microcontrollori

MessaggioInviato: 9 apr 2013, 9:20
da Davidark
Questo è il codice creato tramite il wizard
#include <led.h>
#int_RTCC
void RTCC_isr(void)
{

}



void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32); //1.0 s overflow
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF);


}
A lezione il prof ha detto di inserire dentro void RTCC_isr(void) le righe di codice.

Re: Problemi programmazione in c per microcontrollori

MessaggioInviato: 9 apr 2013, 9:35
da AjKDAP
Ciao, benvenuto,
ecco un po' di osservazioni:

1-forse non è la sezione adatta a questo tipo di domande, magari un mod può spostare la discussione nella sezione microcontrollori?

2-usa i tag CODE per racchiudere il tuo codice:

3-io inizierei ad aggiungere un bel ciclo infinito nel main:
Codice: Seleziona tutto
void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32); //1.0 s overflow
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF);

while(1) {}

}


4-ora con questo main puoi spiegare a parole come si comporta l'esecuzione del programma ed l'interrupt ?

Re: Problemi programmazione in c per microcontrollori

MessaggioInviato: 9 apr 2013, 9:41
da Davidark
Scusate! Non ho trovato la sezione microcontrollori e allora ho postato qui! :oops:
In parole povere l'interrupt dovrebbe avvenire ogni secondo, in modo da far commutare lo stato del led da alto a basso, ossia un secondo il led si deve accendere e un altro secondo si deve spegnere.

Re: Problemi programmazione in c per microcontrollori

MessaggioInviato: 9 apr 2013, 10:23
da TardoFreak
Spostato la discussione nel posto giusto.
Rinnovo l' invito a postare tutto il sorgente.

Re: Problemi programmazione in c per microcontrollori

MessaggioInviato: 9 apr 2013, 12:12
da AjKDAP
ok, il concetto va bene, ma volevo che mi spiegassi cosa fa il PIC quando viene alimentato.

del tipo:
-inizia l'esecuzione del main
-inizializza e setta il timer zero
-inizializza e sette gli interrupts
-inizializza l'oscillatore interno ad 8MHz
-entra nel ciclo while infinito
-...

poi che succede?

Re: Problemi programmazione in c per microcontrollori

MessaggioInviato: 9 apr 2013, 12:14
da Davidark
Questo è il sorgente:
Questo è il codice creato tramite il wizard
#include <led.h>
#int_RTCC
void RTCC_isr(void)
{

}



void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32); //1.0 s overflow
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF);


}
A lezione il prof ha detto di inserire dentro void RTCC_isr(void) le righe di codice.

Re: Problemi programmazione in c per microcontrollori

MessaggioInviato: 9 apr 2013, 13:38
da Davidark
Niente perché non so cosa inserire dentro il ciclo while! Come faccio a dirgli di spegnere e accendere il diodo ad intervalli di un secondo?? Non so quali sono le stringhe di codice da inserire nel while! =(

Re: Problemi programmazione in c per microcontrollori

MessaggioInviato: 9 apr 2013, 13:44
da AjKDAP
Nel ciclo while non devi inserire nulla, come giustamente ha detto il tuo prof devi lavorare nella routine di interrupt.

Il microcontrollore stara' fermo nel ciclo while all'infinito, solamente al sopraggiungere di una interruzione si passera' all'esecuzione del codice presente nella routine di interrupt, per poi ritornare al ciclo while del main una volta finita l'esecuzione.

Le mie domande erano specifiche per capire se hai presente il funzionamento delle interruzioni. Altrimenti e' difficile che tu possa proseguire.

Re: Problemi programmazione in c per microcontrollori

MessaggioInviato: 9 apr 2013, 13:50
da Davidark
Grazie per la risposta!!! E allora cosa bisogna inserire nella classe interrupt?? come faccio a dire che a ogni interrupt deve cambiare stato il led?