TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Richi_Sambora en 03 de Abril de 2019, 17:37:03

Título: Interrupcion ADC Pic 16f88
Publicado por: Richi_Sambora en 03 de Abril de 2019, 17:37:03
Hola a todos.

Soy nuevo en programacion c, hasta ahora me habia arreglado para lo que necesitaba con FlowCode.
Hice un programa para leer una entrada analogica y mostrar el valor en volts y su equivalente en entero.
Lo que estoy tratando de hacer ahora(si es posible) es agregar una interrupcion ADC cuando la entrada sea de pulsos y tomar una decision en consecuencia.
pero mis conocimientos estan aun muy verdes.
No pido que me lo hagan si no que me digan si es posible y que me orienten un poco sobre el tema de interrupciones ADC.

Desde ya muchas gracias

Dejo el codigo c

Código: C
  1. #include <16f88.h>
  2. #device ADC = 8
  3. #fuses XT
  4. #use delay (clock=4)
  5. #define LCD_RS    PIN_B2
  6. #define LCD_E     PIN_B3
  7. #define LCD_DB4   PIN_B4
  8. #define LCD_DB5   PIN_B5
  9. #define LCD_DB6   PIN_B6
  10. #define LCD_DB7   PIN_B7
  11. #include <lcd1.c>
  12. int valor;
  13. float valor2=0;
  14. void main(){
  15.    SETUP_ADC(ADC_CLOCK_INTERNAL);
  16.    SETUP_ADC_PORTS(ALL_ANALOG);
  17.    lcd_init();
  18.    SET_ADC_CHANNEL(0);
  19.    
  20.    while(true){
  21.      
  22.       delay_us(20);
  23.       valor=READ_ADC();
  24.       valor2=(5.00*valor/255.0);
  25.       lcd_gotoxy(1,0);
  26.       printf(lcd_putc,"Probando=%03u",valor);
  27.       lcd_gotoxy(1,1);
  28.       printf(lcd_putc,"Voltaje=%3.2f V",valor2);
  29.    }
  30. }
Título: Re:Interrupcion ADC Pic 16f88
Publicado por: Richi_Sambora en 03 de Junio de 2019, 18:02:35
Hola de nuevo, estoy tratando de entender como funcionan las interrupciones AD pero con encuentro la forma de hacerlo funcionar.

esta vez estoy probando con un 12f675

Código: C
  1. #include <12f675.h>
  2. #fuses NOMCLR , INTRC_IO, NOWDT
  3. #use delay(clock=4M)
  4. int voltage=0;
  5. #INT_AD
  6. void isr(){
  7.  output_toggle(PIN_A0);  
  8. }
  9. void main(){
  10.    SETUP_ADC(ADC_CLOCK_INTERNAL);
  11.    SETUP_ADC_PORTS(AN3_ANALOG);
  12.    SET_ADC_CHANNEL(3);
  13.    enable_interrupts(GLOBAL);
  14.    enable_interrupts(INT_AD);
  15.    READ_ADC(ADC_START_ONLY);
  16.  
  17.    while(TRUE){
  18.       delay_us(20);
  19.       voltage=READ_ADC(ADC_READ_ONLY);
  20.      
  21.         output_toggle(PIN_A1);
  22.         delay_ms(100);
  23.    }
  24. }

esto no funciona, que estoy haciendo mal
Título: Re:Interrupcion ADC Pic 16f88
Publicado por: KILLERJC en 03 de Junio de 2019, 19:42:05
No te puedo ayudar con CCS.. Es un compilador que no utilizo.

Pero lo unico que te puedo decir es que al finalizar la conversion es cuando se dispara la interrupcion del ADC