Autor Tema: Interrupcion rb0 y adc se llevan mal?  (Leído 1807 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Skualo

  • PIC10
  • *
  • Mensajes: 42
Interrupcion rb0 y adc se llevan mal?
« en: 12 de Agosto de 2008, 10:19:15 »
Código: CSS
  1. #include <18f4525.h>
  2. #fuses intrc_io,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT
  3. #use delay(clock=4000000)
  4. int8 sdelizq,sdeldel,sdelder,sizq,pared=1,i=0,funcion=0,flanco;
  5. int estado=1;
  6.  
  7.  
  8.  
  9.  
  10. void detras(){
  11. output_high(pin_b4);
  12. output_low(pin_b5);
  13. output_low(pin_b6);
  14. output_high(pin_b7);
  15. }
  16. void recto(){
  17. output_low(pin_b4);
  18. output_high(pin_b5);
  19. output_high(pin_b6);
  20. output_low(pin_b7);
  21. }
  22. void izq(){
  23. output_high(pin_b4);
  24. output_low(pin_b5);
  25. output_low(pin_b6);
  26. output_low(pin_b7);
  27. }
  28. void der(){
  29. output_low(pin_b4);
  30. output_low(pin_b5);
  31. output_high(pin_b6);
  32. output_low(pin_b7);
  33. }
  34. void grnov(){
  35. if(i<4){
  36. recto();
  37. }else if(i>4){
  38. izq();
  39. }
  40. }
  41. void leer(){
  42. set_adc_channel( 0 );
  43. delay_us(25);
  44. sdelizq=read_adc();
  45. set_adc_channel( 1 );
  46. delay_us(25);
  47. sdeldel=read_adc();
  48. set_adc_channel( 2 );
  49. delay_us(25);
  50. sdelder=read_adc();
  51. set_adc_channel( 3 );
  52. delay_us(25);
  53. sizq=read_adc();
  54.  
  55.  
  56. }
  57. void comp1(){
  58. if(sizq<141 && sdelizq<141){
  59.  
  60. }else if(sdelizq>141 && sdelizq<150 || sizq>141 && sizq<150){
  61. recto();
  62. }else if(sizq>151 || sdelizq>151){
  63. recto();
  64. }
  65. }
  66. void encoder1(){
  67. if(estado==1){
  68. if(input(pin_b0)){
  69. ext_int_edge(0, H_TO_L);
  70. estado=0;
  71. }else{
  72. ext_int_edge(0, L_TO_H);
  73. estado=0;
  74. }
  75. }
  76. }
  77. #int_ext
  78. void ext_isr(){
  79. i++;
  80. if(flanco==0){
  81. ext_int_edge(0,L_TO_H);
  82. flanco=1;
  83.  
  84. }else{
  85. ext_int_edge(0,H_TO_L);
  86. flanco=0;
  87.  
  88. }
  89. }
  90. void main() {
  91. delay_ms(333);  
  92.             // Espero a que todo se estabilice e ...
  93.   disable_interrupts(global);     // Inicializo el Micro y ...
  94.   disable_interrupts(int_timer1); // deshabilitando todo lo no necesario ...
  95.   disable_interrupts(int_rda);
  96.   disable_interrupts(int_ext);
  97.   disable_interrupts(int_ext1);
  98.   disable_interrupts(int_ext2);
  99.   setup_spi(FALSE);
  100.   setup_psp(PSP_DISABLED);
  101.   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
  102.   setup_timer_0(RTCC_OFF);
  103.   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
  104.   setup_timer_2(T2_DISABLED,0,1);
  105.   setup_timer_3(T3_DISABLED);
  106.   setup_comparator(NC_NC_NC_NC);
  107.   setup_vref(FALSE);
  108.   port_b_pullups(FALSE);
  109.   ext_int_edge(0,H_TO_L);        
  110.   enable_interrupts(int_ext);
  111.   enable_interrupts(global);
  112.   delay_ms(333);
  113.   flanco = 0;  
  114.   do{
  115. grnov();
  116. }while(true);
  117. }

Buenas, sobre el codigo de arriba me gustaria acer una consulta y es que cuando activo el adc no me va la interrupcion Rb0 :S,
tal y como esta aora si que funciona a las mil maravillas pero es poner el adc y nada la interrupcion como si no estuviera y nose que puede ser e echo mil pruevas esto me obligara a poner otro pic solo para la interrupcion. Alguna idea?

Saludos

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Interrupcion rb0 y adc se llevan mal?
« Respuesta #1 en: 12 de Agosto de 2008, 10:49:39 »
Hola.

Pues a mi no me ha pasado :shock: :shock: Que version del PCWH tienes? puede ser por ese lado.

Saludos
El papel lo aguanta todo

Desconectado Skualo

  • PIC10
  • *
  • Mensajes: 42
Re: Interrupcion rb0 y adc se llevan mal?
« Respuesta #2 en: 12 de Agosto de 2008, 11:46:34 »
Nose pero a mi tambien me parece muy raro la version es 4.023

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: Interrupcion rb0 y adc se llevan mal?
« Respuesta #3 en: 12 de Agosto de 2008, 22:59:51 »
Dudo sinceramente que el problema pase por el compilador, a mi me parece más una cuestión de conflictos en el código.

Intente revisarlo pero recién llego de la facultad y realmente de solo verlo me hace doler la cabeza  :shock:.  tal vez alguien más pueda ayudarte, pero lo que puedo decirte es que yo he utilizado la 4.023 y no he tenido problemas en utilizar la interrupción externa y el ADC al mismo tiempo.
Se que andaba dando vuelta por ahí un post donde comentaban con pruebas bastante confiables la existencia de problemas en el manejo de prioridad de las interrupciones pero a mi nunca me ha sucedido y no se en que versiones se experimenta este problema.

Saludos!
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Interrupcion rb0 y adc se llevan mal?
« Respuesta #4 en: 13 de Agosto de 2008, 12:53:57 »
Hola.

Pues revisandolo por encima ...  :mrgreen: .... veo que la funcion grnov() no usa el ADC por ningun lado .. solo asigna los estados de algunos pines (pareceria el control de un robot seguidor de linea o algo asi :-) ) y que el valor depende de los pulsos que entran por el RB0 ... una cosa ... flanco solo toma 2 valores: 1 o 0 asi que seria mejor declararlo como int1 flanco.

Intenta organizar el codigo un poco, solo deja lo escencial y asi se ira descartando cosas ...

Citar
Intente revisarlo pero recién llego de la facultad y realmente de solo verlo me hace doler la cabeza
Hombre Gonzalo !!! se nota que estas super estresado amigo!!! mucho animo.

Saludos
El papel lo aguanta todo

Desconectado Skualo

  • PIC10
  • *
  • Mensajes: 42
Re: Interrupcion rb0 y adc se llevan mal?
« Respuesta #5 en: 13 de Agosto de 2008, 18:46:34 »
Utilizo todo leer y comp1 tambien lo que pasa es que ese es el codigo que me funciona, weno todo me va bien lo que no me va es la interrupcion pero las lecturas son wenas, solo estava haciendo pruevas con dos sensores IR, pero es que me parece extraño que siempre que pongo algo de adc me falla algo, puede que no sepa acerlo, sobre ordenar el codigo no tengo casi experiencia en programacion por lo tanto no veo nada mal nose como explicarlo si me aconsejais algo? y si no weno asta que aprenda pues tirare con 3 pics uno solo para los servos porque si genero pulsos y leo adc me falla, otro solo para trabajar y otro solo para los encoders  :shock: en fin asta que vaya aprendiendo a depurar mis codigos y tal...

SAludos y se agradecen las respuestas  :mrgreen:

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Interrupcion rb0 y adc se llevan mal?
« Respuesta #6 en: 14 de Agosto de 2008, 11:04:49 »
Skualo, ese micro que estás usando a mi parecer te da para todo lo que quieres hacer. Yo he usado un 16F para servos, lectura ADC, interrupciones en PORTB y demás.. y otros aquí también, así que ese no debe ser el problema. Y además tú estás usando un 18F, mucho más poderoso todavía.
Yo lo que no veo es la definición en el main de cuáles pines son analógicos y cuáles digitales... tal vez el error podría estar por allí. Y también te aconsejo que uses la directiva #use fast_io y asignes los valores de los TRIS adecuados según tu hardware. De esa forma optimizas código y evitas problemas. No soy muy experto tampoco pero es lo que veo por ahora, sólo le eché una miradita por encima.
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web


 

anything