Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

INTERRUPT con PIC 16f628

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] INTERRUPT con PIC 16f628

Messaggioda Foto Utenteroberto93 » 23 dic 2011, 16:02

Sto cercando di realizzare un semplice programma il cui obiettivo è l'accendere un led tramite l'utilizzo di un pulsante. Sono alle prime armi, e gli interrupt mi sono davvero ostili. Ho provato a buttar giù un codice ma ovviamente non funziona...cosa ho sbagliato??? Grazie. O_/
Codice: Seleziona tutto
void main()
{
  TRISB.B0=1;
  PORTB=0;
  INTCON.GIE=1;
  INTCON.INTE=1;
 
  while(1){
          }
}

void interrupt (){
                   if(INTCON.INTF==1){
                      PORTB.F5=1;
                      INTCON.INTF=0;
                      }
                   }
Avatar utente
Foto Utenteroberto93
0 2
 
Messaggi: 4
Iscritto il: 23 dic 2011, 15:46

0
voti

[2] Re: INTERRUPT con PIC 16f628

Messaggioda Foto UtenteAjKDAP » 23 dic 2011, 21:14

roberto93 ha scritto:ma ovviamente non funziona...


cosa significa non funziona? non da segni di vita una volta fornita l'alimentazione? non riesci a completare la compilazione del codice? si accende il led ma poi non si spegne più come previsto?

spiegaci un po' come e cosa non ti funziona ;-)

Se sei alle prime armi, meglio lasciar perdere le interrupt e concentrati sul far lampeggiare il led normalmente con delle istruzioni di delay software. Come faresti un ciclo per far lampeggiare un led con dei delays?

ciao
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[3] Re: INTERRUPT con PIC 16f628

Messaggioda Foto UtentePaolino » 23 dic 2011, 21:18

Ciao Foto Utenteroberto93.
A mio avviso il problema non sta nell'interrupt, in sè. Piuttosto dovresti rivedere la configurazione del PIC. MI spiego meglio: hai impostato come input il pin RB0 con l'istruzione:

Codice: Seleziona tutto
TRISB.B0=1;


Poi, dopo aver abilitato l'interrupt sulla variazione dell'ngresso RB0, quando si scatena l'interrupt vai ad alzare il pin RB5, con l'ìistruzione

Codice: Seleziona tutto
PORTB.F5=1;


Ora, se vai a guardare cosa dice il datasheet del dispositivo, ti accorgi che il valore di TRISB dopo un reset è 0xFF, cioè PORTB è tutta impostata come INPUT. Se vuoi che il tuo codice funzioni, dovrai fare così:

Codice: Seleziona tutto
void main()
{
  TRISB = 0x01; // Solo RB0 è INPUT, il resto è OUTPUT
  PORTB=0;
  INTCON.GIE=1;
  INTCON.INTE=1;

  while(1){
          }
}


Prova così e poi fammi sapere.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[4] Re: INTERRUPT con PIC 16f628

Messaggioda Foto UtenteAjKDAP » 23 dic 2011, 21:26

Ho dei seri problemi :mrgreen:

ho risposto pensando che volessi far lampeggiare un led tramite interrupt, ora ho riletto e ho capito che vuoi solo accenderlo #-o

scusa :) eheh
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[5] Re: INTERRUPT con PIC 16f628

Messaggioda Foto Utenteroberto93 » 24 dic 2011, 21:48

Ok grazie mille adesso mi funziona ;)
Avatar utente
Foto Utenteroberto93
0 2
 
Messaggi: 4
Iscritto il: 23 dic 2011, 15:46


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti