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! =)
Problemi programmazione in c per microcontrollori
Moderatore:
Paolino
37 messaggi
• Pagina 1 di 4 • 1, 2, 3, 4
0
voti
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.
#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.
0
voti
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:
4-ora con questo main puoi spiegare a parole come si comporta l'esecuzione del programma ed l'interrupt ?
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 ?
-

AjKDAP
1.255 2 6 9 - Expert EY

- Messaggi: 796
- Iscritto il: 17 mag 2006, 0:13
- Località: nella coda dei pronti
0
voti
Scusate! Non ho trovato la sezione microcontrollori e allora ho postato qui!
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.
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.
0
voti
Spostato la discussione nel posto giusto.
Rinnovo l' invito a postare tutto il sorgente.
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.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
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?
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?
-

AjKDAP
1.255 2 6 9 - Expert EY

- Messaggi: 796
- Iscritto il: 17 mag 2006, 0:13
- Località: nella coda dei pronti
0
voti
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.
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.
0
voti
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! =(
0
voti
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.
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.
-

AjKDAP
1.255 2 6 9 - Expert EY

- Messaggi: 796
- Iscritto il: 17 mag 2006, 0:13
- Località: nella coda dei pronti
0
voti
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?
37 messaggi
• Pagina 1 di 4 • 1, 2, 3, 4
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 7 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)