Autor Tema: Placa de desarrollo Picuino  (Leído 51805 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Placa de desarrollo Picuino
« Respuesta #90 en: 12 de Diciembre de 2011, 13:39:04 »
Estoy programando en C18 para hacer una función de control de PWM y no entiendo la traducción a ensamblador que hace el compilador:

Código: [Seleccionar]
000008   cfd9     MOVFF     0xfd9,0xfe6    void dac_pwm_vo1(byte volt)  {
.
.
.
00001c   0efe     MOVLW     0xfe                 WREG += volt;
00001e   50db     MOVF      0xdb,0x0,0x0
000020   26e8     ADDWF     0xe8,0x1,0x0

¿Por qué la instrucción en c "WREG += volt;" no se traduce a un simple "ADDWF  volt, 0, 0" ?


Saludos.
« Última modificación: 12 de Diciembre de 2011, 14:27:05 por picuino »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Placa de desarrollo Picuino
« Respuesta #91 en: 12 de Diciembre de 2011, 14:35:43 »
Nunca me fije como trabaja C18 la recepción de parámetros de una función, pero el tema viene por ahí. Lo trabajará con indireccionamiento indirecto  :huh:
No contesto mensajes privados, las consultas en el foro

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Placa de desarrollo Picuino
« Respuesta #92 en: 12 de Diciembre de 2011, 16:50:54 »
No sólo el parámetro de la función se direcciona de forma extraña, he intentado declarar una variable interna y es todavía peor (lo sustituye por 6 instrucciones!!)

Me gustaría poder hacer la rutina en C para que sea más portable y se entienda mejor, pero se compila con mucho código.

Al final se ha resuelto un poco declarando todas las variables como static, pero no consigo que estén en el Access Bank.

Código: [Seleccionar]
                                           void dac_pwm_vo1(static byte volt) {
                                               static byte loop, sreg;
000008   0100     MOVLB     0x0                loop = 0;                   // Inicializa variables locales
00000a   6b6b     CLRF      0x6b,0x1           
00000c   0100     MOVLB     0x0                sreg = 0x80;
00000e   0e80     MOVLW     0x80               
000010   6f6c     MOVWF     0x6c,0x1           
000012   9889     BCF       0x89,0x4,0x0       LATAbits.LATA4 = 0;
000014   9892     BCF       0x92,0x4,0x0       TRISAbits.TRISA4 = 0;       // Activa la salida PWM

000016   6ad8     CLRF      0xd8,0x0           STATUS = 0;             
                                               do {                        // Repetir 255 veces:
000018   0100     MOVLB     0x0                    sreg += volt;               // sumar sreg y volt            <<<<<<<<< CODIGO ASM MUY LARGO <<<<<<<<<<<<<
00001a   516a     MOVF      0x6a,0x0,0x1           
00001c   0100     MOVLB     0x0                   
00001e   276c     ADDWF     0x6c,0x1,0x1
000020   a0d8     BTFSS     0xd8,0x0,0x0           if (STATUSbits.C) {         // si hay acarreo
000022   d003     BRA       0x2a                   
000024   0000     NOP                                 Nop();
000026   8889     BSF       0x89,0x4,0x0              LATAbits.LATA4 = 1;      // PWM = 1
000028   d003     BRA       0x30                   } else {
00002a   9889     BCF       0x89,0x4,0x0              LATAbits.LATA4 = 0;      // en caso contrario PWM = 0
00002c   0000     NOP                                 Nop();
00002e   0000     NOP                                 Nop();
                                                   }
000030   0100     MOVLB     0x0                } while (--loop);
000032   076b     DECF      0x6b,0x1,0x1       
000034   e1f1     BNZ       0x18               
000036   8892     BSF       0x92,0x4,0x0       TRISAbits.TRISA4 = 1;       // Salida PWM en alta impedancia
000038   0012     RETURN    0x0            }


Esta rutina genera una salida de 0 a 5voltios con frecuencia variable:

   volt= 32     PWM=000100000001000000010000....
   volt=128    PWM=101010101010101010101010....
   volt=192    PWM=110111011101110111011101....


de esta forma la tensión de rizado es mínima y solo depende de la duración del bucle (por eso cuanto menos dure el bucle mejor)

Con el compilador CC5X para el 16F88 la rutina dura 10 ciclos por repetición.

Con el compilador C18 para el 18F2550 la rutina dura 13 ciclos por repetición :?

Con esto me conformo, pero me extraña que el C18 no pueda mejorar los tiempos de un compilador de segunda fila como el CC5X.

Saludos!
« Última modificación: 12 de Diciembre de 2011, 17:03:48 por picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Placa de desarrollo Picuino
« Respuesta #93 en: 16 de Diciembre de 2011, 17:34:08 »
Estoy trabajando en la placa VI_Tester y me he encontrado con un problema:

El amplificador operacional LM358 tiene un slew-rate muy lento (tarda 5 us en subir 1.5 voltios y no puedo medir con precisión).
Tengo que sustituirle por otro Op Amp dual que suba más rápido, con Vinput desde 0 voltios, si puede ser con salida rail to rail y que sea fácil de encontrar. Además con encapsulado de 8 pines

He encontrado uno que parece estar bien: TLC272
En una tienda cercana lo venden por menos de un euro.

¿Conoceis alguno similar?

Saludos.
« Última modificación: 18 de Diciembre de 2011, 19:17:07 por picuino »

Desconectado martincnc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 352
Re: Placa de desarrollo Picuino
« Respuesta #94 en: 16 de Diciembre de 2011, 18:06:49 »
Hola picuino, un A.O que suelo usar cuando necesito una alta velocidad de subida es el TLV2772

TLV2772

   High Slew Rate...10.5 V/µs Typ
    High-Gain Bandwidth...5.1 MHz Typ
    Supply Voltage Range 2.5 V to 5.5 V
    Rail-to-Rail Output
    360 µV Input Offset Voltage
    Low Distortion Driving 600- 0.005% THD+N
    1 mA Supply Current (Per Channel)
    17 nV/Hz Input Noise Voltage
    2 pA Input Bias Current
    Characterized From TA = –55°C to 125°C
    Available in MSOP and SOT-23 Packages
    Micropower Shutdown Mode...IDD < 1 µA
    Available in Q-Temp Automotive
    High Reliability Automotive Applications
    Configuration Control / Print Support
    Qualification to Automotive Standards


Saludos!

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Placa de desarrollo Picuino
« Respuesta #95 en: 16 de Diciembre de 2011, 19:46:19 »
Gracias martincnc,

En la tienda no tienen el TLV2772, pero tienen uno muy parecido que a mí me vale: TLV2472

Tiene menos slew-rate, pero es suficiente (1.5V/us)
y tiene más corriente de salida (+-30mA)

Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Placa de desarrollo Picuino
« Respuesta #96 en: 16 de Diciembre de 2011, 20:34:38 »
Las capturas de pantalla de la imagen 3D:



Me faltan poner el LED del USB y algunas conexiones todavia y poner la serigrafía, pero por lo menos te puedes hacer una idea.
Un saludo!

¿Qué tal va la placa samshiel_pic ?

Estoy diseñando una placa de expansión con LCD y 4 pulsadores para el puerto RB que le vendría fenomenal a tu diseño (que no tiene teclado ni leds).

Saludos!

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Placa de desarrollo Picuino
« Respuesta #97 en: 17 de Diciembre de 2011, 08:25:33 »
Todavia no la he montado pero no creo que tarde en cuando la tenga montada no te preocupes que empiezo a cacharrear con ella y ha hacerle módulos  :mrgreen:  ;-)

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Placa de desarrollo Picuino
« Respuesta #98 en: 17 de Diciembre de 2011, 19:54:16 »
He diseñado ya el módulo Display LCD con teclado de 4 pulsadores.
Esta tarde lo he montado y mañana haré las pruebas. En cuanto compruebe que funciona, lo publicaré en la web.
El módulo utiliza los 8 pines del Puerto RB (lo que incluye alimentación).
Lo que me hace falta ahora es tener rutinas en C18 para controlar el LCD.
Los pulsadores son fáciles de controlar.

Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Placa de desarrollo Picuino
« Respuesta #99 en: 17 de Diciembre de 2011, 20:16:14 »
Todavia no la he montado pero no creo que tarde en cuando la tenga montada no te preocupes que empiezo a cacharrear con ella y ha hacerle módulos  :mrgreen:  ;-)
Estoy pensando en cambiar los puertos para añadir un conector macho de paso 2.5 (tipo JST)
Al final quedaría en cada puerto una tira de pines hembra (para poder conectar cables sueltos) y un conector macho para conectar de una sola vez los 8 o 5 cables del puerto (y sin equivocarte con la polaridad)

El conector macho es de este tipo:





La hembra para PCB sería esta (pero con 8 pines o con 5 pines dependiendo del conector):



¿Que opinas del cambio?

Saludos!
« Última modificación: 18 de Diciembre de 2011, 19:18:38 por picuino »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Placa de desarrollo Picuino
« Respuesta #100 en: 17 de Diciembre de 2011, 21:40:27 »
con esos conectores debes tener cuidado que no se agarren mucho, porque quizas alguno tirando lo arranca de la PCB xD o de poner/quitar mucho se rompa, son cosas que debes pensar bien.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Placa de desarrollo Picuino
« Respuesta #101 en: 18 de Diciembre de 2011, 05:50:39 »
con esos conectores debes tener cuidado que no se agarren mucho, porque quizas alguno tirando lo arranca de la PCB xD o de poner/quitar mucho se rompa, son cosas que debes pensar bien.
Muchas gracias por el aviso MerLiNz.

Creo que el tema de los conectores es muy importante en esta placa.

Los conectores hembra que utilizo en el PCB funcionan de lujo: Se conectan con facilidad, hacen buena conexión, son robustos, se pueden conectar cables de forma individual, no son caros, etc:




El problema viene con el cable. Los conectores macho son difíciles de fabricar (son muy artesanales), no aseguran que los conectes con la polaridad correcta y, al ser machos, se doblan con facilidad cuando están desconectados:





He pensado alguna vez en los Molex:



    Puntos fuertes: con polaridad, fácil de conectar, cable fácil de fabricar, cable hembra (no se dobla)
    Negativo: Un poco grandes, los pines machos en el pcb se pueden doblar (no están protegidos y si se rompe un pin en el PCB, la has liado).



¿Alguna idea sobre los mejores conectores?

Saludos!
« Última modificación: 18 de Diciembre de 2011, 06:11:48 por picuino »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Placa de desarrollo Picuino
« Respuesta #102 en: 18 de Diciembre de 2011, 08:31:25 »
  ¿No te serviría el IDC Box sin traba? En el cable usarías el IDC hembra crimpado. Yo los armo con una morza, nada de pinzas especiales de crimpado.
  Ocupa un poco más de espacio, eso si, pero la conexión es segura y el armado es fácil.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Placa de desarrollo Picuino
« Respuesta #103 en: 18 de Diciembre de 2011, 19:05:41 »
Es una de las opciones que he pensado.
El problema es que sólo puedo encontrar el de doble fila.
   Si utilizas las dos filas, es difícil utilizar ese conector en placas protoboard o PCB de prototipos.
   Si sólo utilizas una fila, es un conector demasiado grande.


Lo ideal sería un IDC de simple fila que se pudiera 'crimpar' en cable plano:

   


Pero he preguntado por este conector y no es fácil de encontrar en las tiendas (sólo tienen el de doble fila).

Saludos!
« Última modificación: 18 de Diciembre de 2011, 19:14:58 por picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Placa de desarrollo Picuino
« Respuesta #104 en: 18 de Diciembre de 2011, 19:21:42 »
Todavia no la he montado pero no creo que tarde en cuando la tenga montada no te preocupes que empiezo a cacharrear con ella y ha hacerle módulos  :mrgreen:  ;-)

Ya he publicado el módulo con Display LCD y teclado de 4 pulsadores:

   

    Placa de expansión LCD y Teclado

Es un poco grande, pero funciona muy bien.

Saludos!
« Última modificación: 18 de Diciembre de 2011, 19:23:44 por picuino »