TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: hector915 en 30 de Enero de 2014, 15:37:35

Título: Ejemplo INTERRUPCION ADC :(
Publicado por: hector915 en 30 de Enero de 2014, 15:37:35
Saludos , Recientemente estoy realizando un proyecto que implica interrupciones de teclas digitales , y ademas de eso leer varios potenciometros usando interrupciones, El micro con el que estoy realizando esto es el pic18f4550 y me gustaria saber si alguien tiene un ejemplo.

Dejo mi configuracion que actualmente no funciona. :8}
Código: [Seleccionar]
#include <p18f4550.h>
#include <delays.h>
#include <adc.h>
#include <usart.h>
#include <stdlib.h>
#include <stdio.h>

//Librerias Propias ver includes.txt
#include "alcd.h"                         //LIBRERIA LCD MODIFICADA
#include "fuses.h"                      //FUSES DEFINITIONS
#include "config.h"                     //PORTS, TRIS AND OTHER FLAVORS.
#include "interrupts.h"                //INTERRUPCIONES
char k ;
void main(void)
{
   InitPorts();                         //Configura Dispositivos Micro {USART,TRIS,ADC,PWM}
   ADCON0bits.ADON=1;        //HABILITO EL CONVERTIDOR
while(1){
     blinker();                         // STATUS DEL MICRO

                }
}

//******************************************
//HIGH INTERRUPTS

#pragma code high_vector=0x008        //HIGH PRIORITY
void high_interrupt (void)
{
 _asm GOTO high_isr _endasm
}
#pragma code
#pragma interrupt high_isr
void high_isr (void)
{
int x=0;
x=PORTB&0b00001110;                 //Filtra Cambio en teclas, Maskara
//INTERRUPCION INT0 DE TECLAS DIGITALES
if (INTCONbits.INT0IF==1)
{
switch (x)
{
  case 2:
      Activate();
      break;
  case 4:
      Desactivate();
      break; }
INTCONbits.INT0IF=0;}
/**ESTA PARTE NO FUNCIONA ,ADIF SE PONE EN UNO CUANDO UN POTENCIOMETRO PRESENTA UN CAMBIO**/
if (PIR1bits.ADIF==1)
{   PIR1bits.ADIF=0;                    //LIMPIA LA BANDERA DE INTERRUPCION POR ADC
    ADCON0=0x01;                        //SELECIONA CANAL AN0
    ADCON0bits.GO=1;                    //INICIA CONVERSION
    if(ADCON0bits.NOT_DONE);            //ESPERA A TERMINAR
    WriteCmdXLCD(0x01);
    }
}
#pragma code



Lo que deseo realizar es simple tener dos botones uno para activar y otro para desactivar como interrupciones que ya funciona, lo otro es que cuando la bandera por interrupcion del adc se ponga en uno lea el dato analogo , lo guarde en una variable y lo envie por la usart, pero haciendo debuging cuando activo el potenciometro nunca se pone en 1 el ADIF.

Esta es la configuracion que estoy usando para configurar las interrupciones .
  
Código: [Seleccionar]
   TRISA=0XFF;  
    INTCON =0b11010000;             //INTERRUPCION GLOBAL =1, INTERRUPCION PERIFERICOS=1,INTERRUPCION TIMER=0, INTERRUPCION EXTERNA  =1,INT PUERTOB =0,TIMER=0,INTERRUPCION FLAG=0,
    INTCON2=0b11110000;             //PULL UPS DIS=1,
    INTCON3=0b00000000;             //INDICA SI HUBO ALGUNA DE LAS INTERRUPCIONES.
    INTCONbits.GIEH=1;              //ENABLE HIGH INTERRUPT
    PIR1=0b00000000;
    PIR2=0b00000000;
    PIE1=0b01000000;
    PIE2=0b00000000;
    IPR1=0b01000000;
    IPR2=0b00000000;
    RCONbits.IPEN=1;        

Agradeceria que alguien me pudiera pasar algo de documentacion del adc como interrupcion, o algun ejemplo.
Título: Re: Ejemplo INTERRUPCION ADC :(
Publicado por: rivale en 30 de Enero de 2014, 16:47:26
la interrupcion del ADC no inicia la lectura, la interrupcion lo que hace es avisarte cuando la lectura se completó
Título: Re: Ejemplo INTERRUPCION ADC :(
Publicado por: hector915 en 30 de Enero de 2014, 23:53:46
la interrupcion del ADC no inicia la lectura, la interrupcion lo que hace es avisarte cuando la lectura se completó

Tenes algun ejemplo por ahi que me facilites , ando revisando la literatura apenas.Lo agradeceria profundamente.
Título: Re: Ejemplo INTERRUPCION ADC :(
Publicado por: rivale en 31 de Enero de 2014, 11:24:51

Tenes algun ejemplo por ahi que me facilites , ando revisando la literatura apenas.Lo agradeceria profundamente.

no tengo ejemplos usando esa interrupción en hitech, podrías intentar en el buscador, aunque esa interrupcion se maneja igual que las demas, solo que tu esperas que está inicie la conversión y la interrupción no funciona de esta manera