Autor Tema: Problema con salidas digitales RA6, RA7  (Leído 8246 veces)

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

Desconectado crazysound

  • PIC10
  • *
  • Mensajes: 6
Re:Problema con salidas digitales RA6, RA7
« Respuesta #15 en: 06 de Mayo de 2018, 10:51:04 »
Gracias KILLERJC por tus respuestas! Ahora funciona la segunda barra agregando INTRC_IO  :lol:.
Lo de la multiplexación y el escaso tiempo encendido de los leds te entiendo, y es lo veo en el simulador. Pero el esquema es tal cual está hecho en la web y funciona. Qué otra técnica se podría usar :rolleyes:?

Saludos...

Desconectado crazysound

  • PIC10
  • *
  • Mensajes: 6
Re:Problema con salidas digitales RA6, RA7
« Respuesta #16 en: 06 de Mayo de 2018, 10:54:06 »
Acá se ve como ya funcionan todas las salidas pero con el problema de la multiplexación.. (Pensé que solo la vería así en el software).

Desconectado crazysound

  • PIC10
  • *
  • Mensajes: 6
Re:Problema con salidas digitales RA6, RA7
« Respuesta #17 en: 06 de Mayo de 2018, 10:57:49 »
Hay forma de corregir estos errores, sin tener que cambiar la computadora  ;-)?

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Problema con salidas digitales RA6, RA7
« Respuesta #18 en: 06 de Mayo de 2018, 16:48:13 »
---Qué otra técnica se podría usar :rolleyes:?

En lugar de hacer una tira interminable de IFs podés usar una tabla con los umbrales y las salidas en portA y portB.
Es lo apropiado para umbrales y salidas arbitrarias,  para umbrales equiespaciados se reemplaza el bucle de comparación por una división  y e incluso puede llegar a simplificarse hasta no ser necesaria una tabla.


Algo así por ejemplo (está pensada para #device adc=8  y  escala cuadrática):

Código: [Seleccionar]
typedef struct {int8 umbral,lb,la;} MLEDS ;

//             Umbral portB  portA
//             ------ -----  -----
MLEDS mled[16]={   0, 0xFF , 0x00 ,
                  60, 0xFE , 0x84 ,
                  85, 0xFD , 0x84 ,
                 104, 0xFB , 0x84 ,
                 120, 0xF7 , 0x84 ,
                 134, 0xEF , 0x84 ,
                 147, 0xBF , 0x84 ,
                 159, 0xDF , 0x84 ,
                 170, 0x7F , 0x84 ,
                 180, 0xFE , 0x48 ,
                 190, 0xFD , 0x48 ,
                 199, 0xFB , 0x48 ,
                 208, 0xF7 , 0x48 ,
                 216, 0xEF , 0x48 ,
                 224, 0xBF , 0x48 ,
                 232, 0xDF , 0x48
                 };


y en el bucle  (ojo que necesitás  #use fast_io(all) ):
Código: [Seleccionar]
    while(true)
    { 
        delay_ms(100);
        nivel = read_adc();

        for(k=0 ; k<15 && nivel>mled[k].umbral ; k++) ;
        output_b(mled[k].lb)   ;
        output_a(mled[k].la)   ;
    }


Citar
Hay forma de corregir estos errores, sin tener que cambiar la computadora  ;-)?

No son errores.  Que no se ejecute en tiempo real es casi insalvable y los otros son problemas de convergencia en la parte analógica.

En estos últimos hay que abrir los ojos porque en el mejor de los casos solamente ralentizan el proceso y en el peor te tiran cualquier valor.

Cuando aparecen estos mensajes, lo que se debe hacer no es cambiar la PC sino ayudar al proceso de simulación. 
Esto es: 
- Todo lo que no sea indispensable para simular --> se saca.
- Todo lo analógico que pueda quedar por momentos en alta impedancia (transistores al corte, diodos sin conducir)  --> se le agrega una resistencia a masa de valor 100megohm.

Obviamente todo esto solo durante simulación :)
« Última modificación: 06 de Mayo de 2018, 22:30:53 por Eduardo2 »


 

anything