Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problemi programmazione in c per microcontrollori

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Problemi programmazione in c per microcontrollori

Messaggioda Foto UtenteDavidark » 9 apr 2013, 0:26

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! =)
Avatar utente
Foto UtenteDavidark
5 3
 
Messaggi: 23
Iscritto il: 8 apr 2013, 11:39

0
voti

[2] Re: Problemi programmazione in c per microcontrollori

Messaggioda Foto UtenteDavidark » 9 apr 2013, 9:20

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.
Avatar utente
Foto UtenteDavidark
5 3
 
Messaggi: 23
Iscritto il: 8 apr 2013, 11:39

0
voti

[3] Re: Problemi programmazione in c per microcontrollori

Messaggioda Foto UtenteAjKDAP » 9 apr 2013, 9:35

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 ?
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.250 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[4] Re: Problemi programmazione in c per microcontrollori

Messaggioda Foto UtenteDavidark » 9 apr 2013, 9:41

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.
Avatar utente
Foto UtenteDavidark
5 3
 
Messaggi: 23
Iscritto il: 8 apr 2013, 11:39

0
voti

[5] Re: Problemi programmazione in c per microcontrollori

Messaggioda Foto UtenteTardoFreak » 9 apr 2013, 10:23

Spostato la discussione nel posto giusto.
Rinnovo l' invito a postare tutto il sorgente.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,8k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15763
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[6] Re: Problemi programmazione in c per microcontrollori

Messaggioda Foto UtenteAjKDAP » 9 apr 2013, 12:12

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?
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.250 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[7] Re: Problemi programmazione in c per microcontrollori

Messaggioda Foto UtenteDavidark » 9 apr 2013, 12:14

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.
Avatar utente
Foto UtenteDavidark
5 3
 
Messaggi: 23
Iscritto il: 8 apr 2013, 11:39

0
voti

[8] Re: Problemi programmazione in c per microcontrollori

Messaggioda Foto UtenteDavidark » 9 apr 2013, 13:38

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! =(
Avatar utente
Foto UtenteDavidark
5 3
 
Messaggi: 23
Iscritto il: 8 apr 2013, 11:39

0
voti

[9] Re: Problemi programmazione in c per microcontrollori

Messaggioda Foto UtenteAjKDAP » 9 apr 2013, 13:44

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.
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.250 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[10] Re: Problemi programmazione in c per microcontrollori

Messaggioda Foto UtenteDavidark » 9 apr 2013, 13:50

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?
Avatar utente
Foto UtenteDavidark
5 3
 
Messaggi: 23
Iscritto il: 8 apr 2013, 11:39

Prossimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti