Autor Tema: Analizador lógico de 3 Canales monitorizado en el PC  (Leído 45254 veces)

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

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #45 en: 24 de Abril de 2006, 09:57:55 »
Vamos, lo que es una etapa de entrada :D (yo todavia me ando pegando con la del frecuencimetro, es bastante puñetera la cosa)
Si juegas contra el mejor, pierdes como los demás.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #46 en: 24 de Abril de 2006, 10:09:59 »
Me vuelvo a quitar el sombrero ante vos, maestro Diego, que barbaridad, ya me gustaría a mí que mis proyectos avanzaran como los tuyos...

animo que está quedando de lujo :D

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17666
    • MicroPIC
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #47 en: 24 de Abril de 2006, 17:42:17 »
Don Diego, si sólo vas a tratar señales digitales, creo que la mayoría estará entre 1,8 y 5V con la excepción del RS232.
No creo que debas complicarte tanto.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado Kid_Bengala

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 402
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #48 en: 25 de Abril de 2006, 16:59:57 »
Como te he dicho anteriormente, estas hecho un monstruo...

Por cierto, ya que estamos (mas bien estais) hablando de analizadores logicos. Me podeis ayudar con esto http://www.todopic.com.ar/foros/index.php?topic=11728.0?. gracias.

saludos de antonio

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5427
    • Picmania by Redraven
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #49 en: 25 de Abril de 2006, 17:18:49 »
Si Don Manué lo que pasa es que quiero "pensar" en cosas ... son como dije antes "pequeñas ideas" ... pero lo básico es como tú dices (de hecho las señales en las que estoy verdaderamente interesado son todas TTL puras y duras)

Otra cosa, mariposa.  :P

Estos dos días no he hecho "nada". Y para mí "nada" significa ... recostarme en mi sillón orejero, abrir el PDF del 18F4550 y leer...  8)

¡Atento Sisco! .... como sabéis estoy utilizando las tres Interrupciones Externas por RB0, RB1 y RB2 del 18F4550 .... pero además este magnífico micro tienes dos CCP con sus correspondientes interrupciones Capture. Lo cual me ayuda a implementar un par de canales más y subir el proyecto ¡hasta 5 canales! sin excesiva complicación. Como verás Sisco, tus 8 canales no estan tan lejos ...  :mrgreen:

Nota: La función Capture, para los que no lo hayan usado nunca, consiste en la detección por hardware del periodo de un pulso. Se habilita esta función indicándole qué flanco del pulso en el pin es el que va a realizar el inicio de la medida, y qué timer es el que va a utilizar para ello. El tiempo, número de ticks de dicho timer, que tarda en presentarse el siguiente flanco se guarda en un registro asociado al CCP con lo que nos realiza la función de sensado sin necesidad de software alguno (como es el caso del que estoy usando en las otras interrupciones externas, en las que soy yo quien hace la copia inicial y final de los valores del Timer)

Esta función Capture no la he usado nunca en los PIC pero en los Motorola 68HC11 si las usé con profusión y no había caído en ella hasta que las ví en el Datasheet de marras, razón por la que os recomiendo que cuando no tengaís cosas imperiosas que hacer ... os relajéis y leáis un rato ...  :-)

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #50 en: 26 de Abril de 2006, 07:24:10 »
[...] recostarme en mi sillón orejero [...]

jejejeje ... tb se me ocurre qye se puede usar las interrupciones RB4:7, siempre salta la misma interrupción, pero luego no es complicado saber cual la causó no?
Si juegas contra el mejor, pierdes como los demás.

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2392
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #51 en: 26 de Abril de 2006, 13:18:29 »
Saber que pin genero la interrupcion del potb <4:7> no es dificil, es mas, hay un ejemplo en el post de Ejemplitos en C para 16F648A , concretamente el numero 48, que trata ese asunto...

Por cierto amigo RedPic, fenomenal tu trabajo!!!


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5427
    • Picmania by Redraven
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #52 en: 26 de Abril de 2006, 14:57:55 »
¡¡¡ Véis como es bueno tener amigos puros de corazón, generosos, erudítos y ocurrentes !!! ¡¡¡ Viva la madre que sus parió !!!!

Gracias M.vszener y D.Radon. Siscooooo ya tenemos otraaaaaa.  :mrgreen:

Con la INT RB4..7 .... Que con las 3 RB0..2 y con la CCP1 de RC2 y la CCP2 (que puede ser detectada en RC1 o RB3) tenemos un total de 6 canales .... ya nos falta menos.

Nota: Para usar INT RB4..7 hay que tener cuidado con ICSP (habrá que tomar nota de las pruebas realizadas por Olotill y sus valores de resistencias) ya que interfieren con RB6 y RB7 que son PGC y PGD respectivamente.   8)






« Última modificación: 26 de Abril de 2006, 14:59:27 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1469
    • winpic800
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #53 en: 27 de Abril de 2006, 02:43:14 »
Con una resistencia de 1K , no tendras problema .
Lo mejor  al final el proyecto es puntearlas al ser una entradas criticas y evitar malos funcionamientos .

umm .....y bien podrias usar un dowmloader en este caso , ya que usas rs232.


Desconectado valdorre

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 346
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #54 en: 27 de Abril de 2006, 13:43:06 »
que maravilla!!! me alejo unos dias del foro y cuando vuelvo hay muchisimas novedades :-/ :-/ :-/
que buena pinta tiene este analizador
animo que falta menos :-)
saludos
Osvaldo

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5427
    • Picmania by Redraven
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #55 en: 28 de Abril de 2006, 18:37:36 »
Continuamos avanzando, mu poco a poco, pero avanzando al fin y al cabo ...

Le he añadido un par de detalles, una pantalla de Log para ir enviando mensajes y un sistema de medida sobre la representación gráfica.

Con esto doy por concluído el asunto de la representación gráfica. Hace lo que quería que hiciese asi que se acabó lo que se daba ...  :mrgreen:



Ahora lo siguiente es implementar la configuración del PIC desde el Soft del PC ... y añadir los otros dos canales, que ya va siendo hora de ver los sincronismos y asíncronías de este invento  :D

Os mantendré informados.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17666
    • MicroPIC
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #56 en: 29 de Abril de 2006, 02:39:07 »
¡Qué pinta, qué pintaaaaaaa!
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5427
    • Picmania by Redraven
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #57 en: 29 de Abril de 2006, 03:30:04 »
Sencillo, a la par que elegante.  8)



ja, ja, ja, ja,  :D  :D  :D
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #58 en: 29 de Abril de 2006, 06:10:43 »
Estas hecho un hacha Diego!!
Si juegas contra el mejor, pierdes como los demás.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5427
    • Picmania by Redraven
Re: Analizador lógico de 3 Canales (Simple) monitorizando en el PC
« Respuesta #59 en: 30 de Abril de 2006, 17:36:17 »
¡¡¡ Necesito de vuestra capacidad de análisis !!!

Os ruego que pongáis vuestros cerebros a destilar jugo de neuronas y me hechéis una mano sobre un efecto que me está desquiciando los nervios, y no le veo el por qué por ninguna parte ... no sé si es que estoy mas obtuso de lo normal o es que he alcanzado mi nivel de incompetencia, y en él me mantengo.  Estoy atascado :shock:

Voy a intentar explicaros lo mas claramente posible el problema a ver si podéis arrojar luz sobre lo que está pasando:

Descripción del problema: Como sabéis, la sonda lógica detecta un tren de pulsos, guardando y transmitiendo posteriormente los tiempos en que ocurren los distintos y alternados flancos de subida y bajada. Esto lo hace perfectamente el 90% de las veces, pero hay un 10% de error, de muestreos en que se solapan dos pulsos consecutivos .... ante la imposibilidad física de que me llegen dos flancos del mismo tipo sin pasar antes por un flanco contrario imagino que el problema estriba en la forma de detectarlo y/o guardar los valores de tiempo correspondientes, pero no veo dónde está el error ....

Elementos que intervienen:

.- El hardware que genera el pulso a detectar es un simple pulsador, conectado al PIN B0 mediante una resistencia Pull-Up que tira a masa cuando es pulsado. Por ello los pulsos son inversos, flanco de bajada -> flanco de subida, tantas veces como pulsaciones-rebotes se produzcan.

.- La Interrupción Externa en el PIC está configurada al Reset para detectar primero un flanco de bajada.

.- Al llegar la primera interrupción, y solo en esa primera interrupción, se pone a 0 el valor del Timer1 y se habilita la Interrupción por Desbordamiento del Timer1.

.- Al aparecer una Interrupción Externa se conmuta el flanco para detectar el opuesto que configura un pulso completo.

.- Cada flanco detectado se guarda en una tabla con dos valores: El valor en ese instante del Timer1 y el número de veces que dicho Timer1 se ha desbordado.

.- Al recibir el PIC cierto comando via RS232 envía al PC las tablas de datos recogidos ...

El código concreto que realiza la detección de pulsos (y que sospecho es el responsable del problema) es axactamente este:

1º.- En Reset

Código: CSS
  1. void On_reset(void){
  2.  
  3.    disable_interrupts(global);
  4.    disable_interrupts(int_timer1);
  5.    disable_interrupts(int_rda);
  6.    disable_interrupts(int_ext);
  7.  
  8.    setup_adc_ports(NO_ANALOGS);
  9.    setup_adc(ADC_OFF);
  10.    setup_spi(FALSE);
  11.    setup_psp(PSP_DISABLED);
  12.    setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
  13.    setup_timer_0(RTCC_OFF);
  14.    setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
  15.    setup_timer_2(T2_DISABLED,0,1);
  16.    setup_timer_3(T3_DISABLED);
  17.    setup_comparator(NC_NC_NC_NC);
  18.    setup_vref(FALSE);
  19.  
  20.    for(i=0;i<NMUESTRAS;i++){ TimesUpT[i]=0;   TimesUpI[i]=0;}
  21.    for(i=0;i<NMUESTRAS;i++){ TimesDownT[i]=0; TimesDownI[i]=0;}
  22.  
  23.    nTintext=0;
  24.    uTimeUp=0;
  25.    uTimeDown=0;
  26.  
  27.    ext_int_edge(0,H_TO_L);
  28.    fedge=0;
  29.  
  30.    delay_ms(100);
  31.  
  32.    enable_interrupts(int_rda);
  33.    enable_interrupts(int_ext);
  34.    enable_interrupts(global);
  35.  
  36.    set_timer0(0);
  37. }
  38.  

2º.- En tratamiento de interrupciones :

Código: CSS
  1. #int_ext
  2. ext_handler() {
  3.  
  4.    long t;
  5.    long n;
  6.  
  7.    ++nTintext;
  8.    if(nTintext==1){
  9.       set_timer1(0);
  10.       nTimer1Overflow=0;
  11.       enable_interrupts(int_timer1);
  12.    }
  13.    n=nTimer1Overflow;
  14.    t=get_timer1();
  15.    if(fedge==0){
  16.       ext_int_edge(0,L_TO_H);
  17.       TimesDownI[uTimeDown]=n;
  18.       TimesDownT[uTimeDown]=t;
  19.       ++uTimeDown;
  20.    }
  21.    else
  22.    {
  23.       ext_int_edge(0,H_TO_L);
  24.       TimesUpI[uTimeUp]=n;
  25.       TimesUpT[uTimeUp]=t;
  26.       ++uTimeUp;
  27.    }
  28.    ++fedge;
  29. }
  30.  
  31. #int_timer1
  32. timer1_handler(){
  33.    ++nTimer1Overflow;
  34. }
  35.  

Este soft en el PIC funciona correctamente, como ya os he dicho el 90% de las veces, lamentablemente el restante 10% hace "cosas raras" tal como podéis ver en la imagen inferior, y estimo que un 10% de error es excesivo y tengo que corregirlo antes de continuar con este proyecto.



Fijáos que los pulsos van sucediendose de forma correcta uno tras otro, primero los flancos de bajada depués los de subida. Cada uno de ellos mas "lejos" del inicio, 0 Interupciones + 0 Tick's, conforme van llegando ... Por ejemplo el pulso número 04 comienza en el desbordamiento 30 y con el Timer1 a 412 ticks y se acaba en el mismo desbordamiento 30 pero con el Timer1 a 681 por lo que dura 54 uS, y el siguiente pulso, el número 5, comienza también en el desbordamiento 30 pero con el Timer1 a 813 ticks, por lo que comienza exactamente 132 ticks de Timer1 mas tarde, o sea 26,4 uS después; y acaba en el desbordamiento 33 con Timer1 a 7271 ... Todo correcto ....

Pero los pulsos 06 y 07 se solapan .... el 06 va desde los valores de desbordamiento y timer 43/687 hasta los 43/30923 y el 07 va desde los valores 43/1055 hasta los 46/15067  ¡¡¡ Mal !!!

Según estos datos el pulso 07 ha llegado antes de que termine el 06 ¡¡¡ Mal !!!

Parece como si realmente los datos estuviesen intercambiados y el fin del pulso 06 fuese realmente el comienzo del 07 y simétricamente como si el inicio del 07 fuese realmente el final del 06 ¿¿¿¿¿ :shock: ??????

Y por mas vueltas que le doy al código no encuentro el por qué ocurre esto ....

¿Se os ocurre algo? ¿tenéis piedad de un pobre programador desesperado? ¿eh?  :?


« Última modificación: 19 de Julio de 2007, 21:23:47 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania