Autor Tema: Detectando Flancos de subida (y de bajada) con un 18F4550  (Leído 14301 veces)

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #15 en: 21 de Septiembre de 2008, 05:31:21 »
Diego, mira la tabla 26-2 de la Datasheet: PIC18FXXXX INSTRUCTION SET

Hay una columna al lado de cada instrucción que dice "Cycles".

De todas formas, para medir el tiempo que toma la interrupción te recomiendo otro método. Carga tu programa en MPLAB, le das al debugger paso a paso y con la ventana Stopwatch tienes el tiempo exacto tanto en ciclos de reloj como en microsegundos (si has configurado bien la frecuencia de trabajo).

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #16 en: 21 de Septiembre de 2008, 05:33:22 »
Ya. My gozo in the pozo.  :?
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania


Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #18 en: 21 de Septiembre de 2008, 06:12:06 »
Nada, nada ... que el cálculo de 4 ciclos por cuarto-y-mitad de instrucción es una cagada. Me pongo a contar ciclos por tipo de instrucción según tabla y sumo de verdad (el MPLAB no es mi fuerte) ...  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #19 en: 21 de Septiembre de 2008, 06:45:18 »
Pues salvo error u omisión mi cálculo anterior no es tan descaminado como parecíame al principio ...

He colocado a la izquierda de cada instrucción el número de ciclos de intrucciones que consume ...

Código: C#
  1. 2 018C:  MOVFF  1C,1E ....................    singleRecord.Overflow = timer3_overflows;
  2.  1 0190:  MOVF   FB2,W ....................    singleRecord.Timer    = get_timer3();
  3.  2 0192:  MOVFF  FB3,03
  4.  1 0196:  MOVWF  1F
  5.  2 0198:  MOVFF  03,20 ....................    singleRecord.Channel  = '1';
  6.  1 019C:  MOVLW  31
  7.  1 019E:  MOVWF  1D
  8.  1 01A0:  BTG    FF1.6 ....................    ++Edge1;
  9.  1 01A2:  RLCF   1A,W  ....................    memcpy(&Records[Index],&singleRecord,sizeof(singleRecord));
  10.  1 01A4:  MOVWF  02
  11.  1 01A6:  RLCF   1B,W
  12.  1 01A8:  MOVWF  03
  13.  1 01AA:  RLCF   02,F
  14.  1 01AC:  RLCF   03,F
  15.  1 01AE:  MOVLW  FC
  16.  1 01B0:  ANDWF  02,F
  17.  1 01B2:  MOVF   02,W
  18.  1 01B4:  ADDLW  21
  19.  1 01B6:  MOVLB  6
  20.  1 01B8:  MOVWF  x4F
  21.  1 01BA:  MOVLW  00
  22.  1 01BC:  ADDWFC 03,W
  23.  1 01BE:  MOVWF  x50
  24.  1 01C0:  MOVWF  FEA
  25.  2 01C2:  MOVFF  64F,FE9
  26.  1 01C6:  CLRF   FE2
  27.  1 01C8:  MOVLW  1D
  28.  1 01CA:  MOVWF  FE1
  29.  1 01CC:  MOVLW  04
  30.  1 01CE:  MOVWF  01
  31.  2 01D0:  MOVFF  FE6,FEE
  32.  3 01D4:  DECFSZ 01,F
  33.  2 01D6:  BRA    01D0
  34.  1 01D8:  INCF   1A,F ....................    ++Index;
  35.  3 01DA:  BTFSC  FD8.2
  36.  1 01DC:  INCF   1B,F


Que sumadas hacen un total de 46 ciclos de intrucción, y como cada uno de ellos consume 4 ciclos de reloj tenemos un total de 46 * 4 = 184 ciclos de reloj. Sólo 40 mas que en el calculo anterior.

Hay dos instrucciones, DECFSZ y  BTFSC, que el Datasheet dice 1 ciclo (2 ó 3) y como no indica cuando ocupa cuantos ciclos he puesto que siempre ocupa 3.

Así que 184 * 1 / 48000000 = 3,8333 microsegundos. Casi 4 microsegundos que no está nada mal (para los tiempos que estoy sensando que son del orden de los 250 microsegundos)  :mrgreen: :mrgreen: :mrgreen:

Un poné.

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #20 en: 21 de Septiembre de 2008, 07:00:03 »
Sólo una aclaración adicional, que te podría llevar a afinar más el resultado, si lo necesitaras: las instrucciones que ocupan 2 o 3 ciclos no tienen una duración aleatoria. Son instrucciones que bajo determinadas condiciones llevan a un salto. Si la condición provoca el salto, ocupará 3 ciclos; si no lo provoca, sólo 2.

Así, si tienes por ejemplo un bucle de 100 iteraciones, según como esté construido en 99 de ellas ocupará 2 ciclos y en una 3 o justo al contrario.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #21 en: 21 de Septiembre de 2008, 07:17:24 »
Ok, anotado. Pero ya está bien de precisión ya que son solo dos instrucciones y solo puede haber un margen de mas menos ocho ciclos de reloj.

De todas formas me he dado cuenta de que el cálculo es erróneo al no computar la iteraciones de las zonas repetitivas ... por el ejemplo el memcpy copia byte a byte mediante un bucle de sizeof() que se repite ese número de veces.

Sin embargo el cómputo final de ciclos, incluso incluyendo las iteraciones, es muy pequeño comparado con las señales asi que todo está bien.

De todas formas mas tarde haré el cálculo completo incluyendo éstas para conocer la realidad (que es con diferencia lo que mas me gusta) para que todo quede "atado y bien atado" :mrgreen:

Mirando sólo el último incremento de Index es dificil saber al ciclo cuanto ocupa realmente ...

Código: ASM
  1. 1 01D8:  INCF   1A,F ....................    ++Index;
  2. 3 01DA:  BTFSC  FD8.2
  3. 1 01DC:  INCF   1B,F

... ya que Index es de 16 bits alojada en la RAM en 1A-1B por lo que incrementa primero la posición de memoria 1A y si hay bit de acarreo entonces incrementará la 1B y eso dependerá del valor de 1A-1B por lo que debo hacer un cálculo pesimista y computar como si hubiera acarreo siempre ...

Lo importante creo que es calcular cuanto dura la interrupción como máximo:mrgreen:
« Última modificación: 21 de Septiembre de 2008, 07:23:51 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #22 en: 22 de Septiembre de 2008, 10:20:46 »
Buenooooo ya tengo los resultados gráficamente ... en el antiguo Analizador lógico de 3 Canales

Al final solo trabajo con tres comandos entre el PC y el PIC:

COMMAND_FIRMWARE
PC -> PIC ... 'V'
PIC -> PC ... <V,RedPic LogDigAnalyzer 2.1 over iACDv.1.0.x>           

COMMAND_START
PC -> PIC ... 'S'
PIC -> PC ... <S,L,L,L>

Donde L,L,L son la configuración inicial de flancos detectada
                                                       
COMMAND_DUMP
PC -> PIC ... 'D'
PIC -> PC ... <D,999,9,9,999,99999>

Donde 999=Índice (1..381), 9 Canal (1..3), 9 Flanco (0..1),  999 Overflows (1..999), 99999 Timer (1..65535)

Esta última respuesta se repite cada uno de los distintos flancos detectados en cada uno de los canales seguido de un último <D,999,9,9,232,99999> dónde solo viene cargado el valor de Overflow justo en el momento de detectar el primer flanco por cualquiera de los canales.



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


Desconectado togarha

  • PIC12
  • **
  • Mensajes: 87
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #24 en: 20 de Octubre de 2008, 09:20:22 »
Buenas,

Despues de leer el proyecto del analizador lógico, y ver que esto es una continuación de aquel (aparte de mejora), me he puesto a seguirlo e intentar hacerlo y si es posible, pues ya veremos si soy capaz de incorporarle algo, o no...

Primero he diseñado un esquema básico (solamente para que me digan si es correcto el esquema y podría basarme en algo así). Falta por poner el conector ICSP/DEBUG, pero como ya he dicho es básico (tampoco está puesto el regulador lineal a la entrada de alimentación), pero para saber si va bien...

Como se ve, he querido añadir el conector USB para intentar migrar de rs232 a usb cuando tenga el bicho funcionando...

Un saludo y espero sus expertas opiniones...


Desconectado togarha

  • PIC12
  • **
  • Mensajes: 87
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #25 en: 27 de Octubre de 2008, 12:21:44 »
Buenas de nuevo,

He modificado el esquema para añadirle la fuente de alimentación, el conector icsp y unos transistores en las entradas a sensar para poder usar un amplio rango de tensiones y no limitarlo a 5V.

En breve me pondré a hacer la PCB y comenzar las primeras pruebas...

Sería posible tener el último firmware y exe del pc para empezar las pruebas???

Gracias de antemano...

Un saludo,

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #26 en: 27 de Octubre de 2008, 13:32:39 »
Interesante. ¿Y si le pusieras optoacopladores en vez de transistores en la entrada?

Desconectado togarha

  • PIC12
  • **
  • Mensajes: 87
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #27 en: 27 de Octubre de 2008, 13:39:04 »
Es una idea que se me paso por la cabeza, pero por disponibilidad de material para las primeras pruebas primero los transistores, una vez lo tenga funcionando (espero que también por usb), le pensaré la opción de los optoacopladores e intentaré pasarlo a un 2550, para que sea más apropiado, puesto que creo que queda demasiado micro para tan poco asunto...

No se, es ir poco a poco y lo más rapido era meterle los transistores, por la disponibilidad que tengo...

Ya estoy liado con la pcb, y entre esta tarde y mañana intentaré empezar las primeras pruebas :) que ganas tengo...

Un saludo,

PS: Alguna sugerencia más así para el próximo modelo???


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #28 en: 27 de Octubre de 2008, 14:31:35 »
Que conste que eres tú el que ha pedido sugerencias  :D:
- yo le incluiría algunos pulsadores en los pines libres. Con ellos podrías activar/desactivar algunas funciones sencillas, dándote una mayor libertad de movimientos al no estar atado permanentemente al interface del PC. Imagínate que uno de ellos podría ser Start / Stop.
- creo que también sería interesante ponerle algún led indicador de estado
- y lo bordarías si le pones un zócalo para tarjeta de memoria, de manera que puedas volcar la información sobre ella para luego procesarla en un PC.

Desconectado togarha

  • PIC12
  • **
  • Mensajes: 87
Re: Detectando Flancos de subida (y de bajada) con un 18F4550
« Respuesta #29 en: 27 de Octubre de 2008, 14:50:56 »
Que conste que asumo mi "responsabilidad" de pedir sugerencias :P

El tema de los pines libres, habia pensado en ponerle un conector IDC que me pusiese servir tanto de entradas como de salidas, mas que unos pulsadores (pudiendo imitar el funcionamiento del pulsador con un jumper), así me serviría también para usar cualquier tipo de led...

Respecto al zocalo de memoria, no lo había pensado, pero me parece muy buena idea, el soft de redpic permite la entrada de ficheros de texto o tendria que hacer algun invento emulando puertos serie??? (es el soft que quiero usar como representador, ya que es la parte que más miedo me da, la del pc).

Bueno, todo esto yo creo que sería un segundo paso, una vez esté un poco más familiarizado con el proyecto, que ahora mismo solo lo estoy minimamente con el hardware, ya que todavía no me he puesto con nada del firmware.

Voy apuntando toda sugerencia como mejoras pendientes (en caso de que finalmente no las ponga en esta version...)

Sigo aceptando sugerencias (y asumiendo responsabilidades :P )

Gracias y un saludo,


 

anything