Mensajes recientes

Páginas: [1] 2 3 4 5 6 7 8 9 10
1
Programadores / Re:Fallo al programar 16F887
« Último mensaje por tito melli en Hoy a las 05:36:19 »
Para programra por ICSP al menos en el Pickit2 , que no deberia haber diferencias con el Pickit3..

Pickit3      --------      PIC

MCLR         --------      MCLR (pin1) - este pin lo pone a 12 o 13V para programar, ademas debe resetear el micro.
VDD         ---------       VDD ( pines 11 y 32 )
VSS         --------          VSS ( Pines 13 y 31 )
ICSPCLK --------        RB6 ( Pin 39 )
ICSPDAT -------         RB7 ( Pin 40 )

Asegurate de no hay nada conectado a Rb6 y RB7, y si tenes conectado algo deberia tener una resistencia entre medio.
Tambien que VDD no este alimentando a otra cosa. y en lo posible solo al micro

Gracias KILLERJC, es justo lo que necesitaba.

Pensaba que la reprogramación ICSP era otro tipo especial, como el LVP.

Entonces, significa que debo aplicar un voltaje constante de 12V a MCLR? Cuando sabré que debo resetearlo?

Gracias.

Saludos!
2
Programadores / Re:Fallo al programar 16F887
« Último mensaje por KILLERJC en 26 de Febrero de 2017, 19:38:20 »
Para programra por ICSP al menos en el Pickit2 , que no deberia haber diferencias con el Pickit3..

Pickit3      --------      PIC

MCLR         --------      MCLR (pin1) - este pin lo pone a 12 o 13V para programar, ademas debe resetear el micro.
VDD         ---------       VDD ( pines 11 y 32 )
VSS         --------          VSS ( Pines 13 y 31 )
ICSPCLK --------        RB6 ( Pin 39 )
ICSPDAT -------         RB7 ( Pin 40 )

Asegurate de no hay nada conectado a Rb6 y RB7, y si tenes conectado algo deberia tener una resistencia entre medio.
Tambien que VDD no este alimentando a otra cosa. y en lo posible solo al micro
3
Programadores / Fallo al programar 16F887
« Último mensaje por tito melli en 26 de Febrero de 2017, 17:19:54 »
Hola a todos!

Soy nuevo en esto de los microcontroladores PIC, y bueno... como con todo lo que uno empieza desde 0, siempre va más lento de lo esperado, jeje. Pero no me rindo!

Bueno, el caso es que he intentado programar el PIC 16F887, pero el MPLAB me da fallo (adjunto pantallazo).

Lo estoy haciendo a través de PICkit 3, y MPLAB IPE v3.51.

He revisado el conexionado, y en principio cumplo con lo que me pide el datasheet:

* MCLR/Vpp = +5V (PIN 1)
* Vdd = +5V (independiente del MCLR, y conectado en los pines 11 y 32)
* Vss = ground (negativo de la fuente de Vdd, y conectado en los pines 12 y 31)
* LVP = no conectado al PIC
* ICSPCLK = PIN 39
* ICSPDAT = PIN 40

Es necesario conectar algo más? He visto que en algunos videos de Youtube tienen algo más conectado, pero no tengo claro si es totalmente necesario para sólo programar.

Gracias de antemano!

Saludos
4
Almacén del Assembler / Re:Medir temperatura usando una red RC
« Último mensaje por akira_ve en 26 de Febrero de 2017, 16:00:57 »
Amigo NIKO tenias rason Declare las variables y organice mas el programa y tenia otros problemas con la dvicion no daba bien el resultado pero pense en algo............corrigeme si estoy equivocado pero, el Tiempo de la mediocion de la temperatura no es T1-T2??? y en el manual dicen que se puede calcular la temperatura con el calculo del valor ohmico del Termistos calculado usando la formula que dan y usar una table..........pero para acortar el tiempo de ejecucion no bastaria con calcular la diferencia entre T1 y T2 y usar esa tabla??? y como usaria esa table???

El programa sin la rutina de multiplicacion y division quedo asi:

   list     P=16f84a 
        #include "p16f84a.inc" 

   errorlevel -302    

   __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC

 
   cblock   0x0C
    TEMP, TCALA, TCALB, TMEDA, TMEDB 
    endc

      ORG    0
      goto      Inicio

; ============= Rutinas ====================

Descarga:
      bsf      STATUS,   RP0
      MOVLW   B'00001011'     ;ACTIVATE RA2
           movwf   TRISA
      bcf      STATUS,   RP0

      MOVLW   B'00000000'     ;ACTIVATE RA2
           movwf   PORTA

           MOVLW   0FF
           MOVWF   TEMP
 
LOOP   
      DECFSZ  TEMP,F            ;WAIT
           GOTO    LOOP

      bsf      STATUS,   RP0
           MOVLW   B'00001111'     ;ALL OUTPUTS OFF
           movwf   TRISA
      bcf      STATUS,   RP0
 
           Return

; =========================================

M_TIME:
                                 ;CLEAR RTCC
       CLRF    ACCAA
       CLRF    ACCAB
 
TLOOP 
       INCFSZ  ACCAA,F
       GOTO    ENDCHK
       INCFSZ  ACCAB,F
       GOTO    ENDCHK
       GOTO    END_M

ENDCHK
       BTFSS   PORTA,3             ;Chequeo de que el condensador alcanzo el voltaje
       GOTO    TLOOP

END_M   
       Return

; =========================================

Inicio:   
       bsf      STATUS,   RP0
       MOVLW   B'00001111'        ; Colocamos los Pines que se conectan a Rref, Rmed y C
       MOVWF   TRISA                 ; En alta impedancia
       bcf      STATUS,   RP0

Calibracion:   
       CALL    Descarga           ; Se descarga el Condensador Antes de Medir
                       ; El TCAL
       bsf      STATUS,   RP0
       MOVLW   B'00001110'        ; Activo RA0 en el TRISA
       movwf   TRISA
       bcf      STATUS,   RP0

       MOVLW   B'00000001'      ; Activo RA0 En el PUERTO A
       movwf   PORTA

       CALL    M_TIME           ;  Medicion del Tiempo TCAL
       MOVF    ACCAA,W
       MOVWF   TCALA            ; Valor de TCAL MSB
       MOVF    ACCAB,W
       MOVWF   TCALB            ; Valor de TCAL LSB

Medicion:   
      CALL    Descarga           ; Se Descarga el Condensador antes de Medir
                   ; El TMED
       bsf      STATUS,   RP0
       MOVLW   B'00001101' ; Activo RA1 en TRISA
       movwf   TRISA
       bcf      STATUS,   RP0

       MOVLW   B'00000010'     ; Activo en el Puerto A
       movwf   PORTA

       CALL    M_TIME            ; Medicion del Tiempo TMED
       movf    ACCAA,W          ;
       MOVWF   TMEDA      ; Valor de TMED MSB
       movf    ACCAB,W          ; Valor de TMED LSB
       MOVWF   TMEDB

       GOTO    Inicio
       END
5
Lenguaje C para microcontroladores PIC / Re:Circuito grabacion en EEPROM tras fallo alimentacion
« Último mensaje por KILLERJC en 26 de Febrero de 2017, 12:21:58 »
Claramente no podes sacar conclusiones de esos graficos cuando se pueden ver que estan mal con solo verlos.

Aun mas curioso que tengas mas voltaje cuando se produce el corte de lo que tenias antes  :P.

A veces no todo esta contemplado en las simulaciones, deberias poner entremedio de C14 y R6 un amperimetro, para saber cuanta corriente es que ingresa al PIC. Y ver si es "real" o se aproxima a esto.

Aporto algo teorico:

C = 470uF
Vi = 4.55V ( Valor entre 4.57 y 4.52)

Segun el datasheet el micro tiene los siguientes valores:

Para el uso de LP,XT,RC hasta 4Mhz la tension minima es de 4V ( DC Characteristics - Supply Voltage )
Igual si activas el BOR, aunque esta tension puede variar de 3.7 a 4.35. Y seria muy mala suerte que te toque un micro de todos que este proximo a los 4.35V, asi que suponemos el tipico y minimo, que es 4V.

Es decir tenemos una diferencia de 0.55V que se debe mantener todo el tiempo que este grabandose la EEPROM.
Veamos cuanto consume el micro a 4MHz.
Segun el datasheet solo el micro, sin nada mas, es decir sin Brown Out, WDT, Timers, switching de ports (todas entradas a alta impedancia a VDD), consumo de grabacion de EEPROM, etc, es de 1.25mA tipico a 1.5mA maximo en modo XT @ 25ºC, Esta bien que hay muchas cosas como el WDT/Brown Out/Timers deberan sumar unos 100uA como mucho.

Supongamos 1.3mA.
El tiempo de descarga del capacitor (Corriente constante, aunque disminuiria un poco con la tension) esta dada por:

(Vf - Vi) * C / I = t

Reemplazando:

(4.55 - 4) * 470uF / 1.3mA = 199ms

Parece bastante, pero no consideramos nada mas. cada grabacion/borrado te toma entre 4ms tipico y 8ms maximo, pareceria que podrias grabar bastante. Incluso en el maximo significarian 24 datos.

Segun veo en tus graficos tenes una division de 5ms/div en tu osciloscopio, suponiendo esta descarga super lenta, tendrias que ver una bajada de tension. Mirando ahi tenes unos 18 divisiones, eso son 90ms, en 90ms la tension pasaria de esos 4.55 a 4.30V, o mejor dicho deberias ver una variacion MINIMA de 0.25V en toda la pantalla. Pero en tu simulacion no lo muestra. Es edcir en tu osciloscopio el consumo es 0mA seguro.

Nuevamente estos valores son teoricos, y como muchos han probado el consumo es mucho mayor en circuito, porque no se puede conseguir reunir todas las condiciones en que se midio para el datasheet. Asi que el resto es probar en placa y medirlo alli.


----------

Ahora otra discrepancia.. Tomando en cuenta la formula de descarga de un capacitor con una resistencia. Se puede calcular que le toma aproximadamente 138ms en descargarse un capacitor de 1000uF en una resistencia de 100ohms (desde 5V a 1.2V - cercano a tu valor de deteccion de entrada baja). Obviamente que este tiempo va a ser menor en el circuito, porque no considero la carga que pase al capacitor del micro, alguna corriente en algun otro sentido o por otro lado. Pero segun tu simulacion es instantanea. Y tampoco tengo en cuenta la carga que poseen los demas capacitores de 1000uF/220uF en la entrada que pueden aportar un poco mas de tiempo para que siga con un poco mas de tiempo de carga.

Ahora si dijimos que esos 470uF podian hacer aguantar al micro por 199ms, y tengo que el capacitor de los 5V va a bajar su voltaje a 1V en 138ms, este seria el caso que ambos circuitos bajen casi juntos, Tal ves no te deje tiempo en ves de esos 199ms antes que baje al voltio porque tus salidas estarian entregando corriente como si nada pasara descargando el capacitor de tu micro. Esto es una suposicion del funcionamiento que tendria, no aplique nada teorico en este ultimo parrafo (aviso por las dudas).

----------

Otra cosa tu circuito ya posee 2 componentes mas que son las 2 resistencias, es cierto que hay 1 que puede simular la carga (la R2). Pero veamos esa de 100 que se encuentra sobre los 10V.
10V continuos y una resistencia de 100ohms implican una disipacion de 1W, por lo cual tu resistencia debe ser de 2W (dejando margen porque nunca va a ser 10V seguro, y puede pasar a 12, etc) ocupando mas lugar y generando mas calor, lo cual tambien implica que tenes que proveer 100mA mas gracias a esa resistencia (100mA tirados a la basura), entonces si tu circuito le sobraba un transformador de 100/150mA (ya que tomando la carga tenias 50mA segun R2) ahora vas a andar justo o te queda chico y vas a tener que invertir en uno mas grande. ocupando mas espacio y siendo no tan economico como un pedacito mas de PCB y esos componentes extras.

Si esa resistencia tambien es una carga, entonces este ultimo parrafo seria inutil, pero tenes que darte cuenta que si no tenes carga alli y deberias colocar esa R1, entonces estarias tirando mucha corriente sin sentido, al igual que la R2, si es que el consumo es mucho menor y solo lo pusiste para que se "descargue", son 150mA tirados, es MUCHO.

Mas espacio en PCB por separar esa resistencia de los demas componentes, un gabinete mayor ($$) y mejor ventilacion en donde lo pongas.

-------------

Mi punto de vista es de un producto para comercializacion, ya que si fuera para hobby unicamente entonces todo esto no tiene sentido, podrías poner 10 capacitores de 1000uF y hacer lo que quieras y funcionaria. Nadie dijo que no funcionaria, lo que se discute es que es mas eficiente.

--------

Para finalizar, espero que sigas con tu idea y demuestres que ocurre en fisico, para que todos nos saquemos de los "teoricos simplificados" o "simulaciones" que siempre difieren de la realidad al no tener en cuenta todas las variables. Y no pienses que simplemente estoy dandote la contra a lo que decis.
6
Lenguaje C para microcontroladores PIC / Re:Circuito grabacion en EEPROM tras fallo alimentacion
« Último mensaje por franda2005 en 26 de Febrero de 2017, 05:50:40 »
Hola. Todavia no lo he montado, pero si lo he podido simular y estos han sido los resultados:

Valores en los voltimetros antes del corte:

 - Tienes que ingresar para ver archivos adjuntos -

Valores en los voltimetros despues del corte:

 - Tienes que ingresar para ver archivos adjuntos -

Conclusiones:

- ¿Porque los voltimetros de la F.A. pasan rapidamente a 0? Porque los condensadores se descargan rapidamente a traves de las resistencias de 100 ohmios

- ¿Porque el condensador de 470uF no se descarga? Porque su descarga es muuuy lenta ya que es a traves de los pines de entrada del PIC que tienen un impedancia de entrada muy alta.

Si estas conclusiones son validas el circuito propuesto por mi desde un principio si que serviria para grabar en EEPROM.

Un saludo.
7
- Niple - / Re:GRABAR UNA MEMORIA 24C04 DESDE UN PIC
« Último mensaje por poochini2009 en 25 de Febrero de 2017, 20:29:27 »
Hola, gracias por responder. El problema es una ECU de un vehículo, arranca 10 veces y una parte del archivo lo reforma el programa del Micro y ya no arranca.
Desueldo la memoria le re-grabo y ya queda funcional, mi intención era usar un PIC que 1 segundo después de dar contacto re-grabe la memoria, de esa manera siempre el programa está actualizado.
Lo que no explica en Niple es como escribir las direcciones, por Ej. en la dirección 35-36-37 debo colocar FF como ago.
Talvez no se pueda ya que en Basic se usa un editor de textos para escribir en cualquier memoria desde el editor.
Saludos Poochini.
8
Foro Técnico / Re:Medir batería con ADC y Enable
« Último mensaje por Picuino en 25 de Febrero de 2017, 19:55:35 »
Prueba a medir caída de tensión en un diodo. Necesitas la entrada del ADC y una salida digital para polarizar la resistencia. A nivel bajo, el consumo es de cero.

Probablemente el micro ya tenga una referencia interna de 1.25v (bandgap), más estable que el diodo y también desconectable.

Un saludo.
9
Lenguaje C para microcontroladores PIC / Re:timer1
« Último mensaje por cvargcal en 25 de Febrero de 2017, 19:22:03 »
....

:-/ :-/ muchas gracias, excelente explicación, ahora si tengo todo claro :)
10
Lenguaje C para microcontroladores PIC / Re:timer1
« Último mensaje por KILLERJC en 25 de Febrero de 2017, 18:51:39 »
Como el Timer es ascendente (va sumando 1 en 1 ) y la interrupcion ocurre cuando pasa de 0xFFFF a 0x0000. Entonces tenes que cargar el complemento del numero, o que es lo mismo tenes que cargar lo que le falta para llegar a 65536...

Entonces si yo necesito CONTAR 2304, , debo cargarle el valor 65536-2304 = 63232

Lo mismo ocurre con el otro valor, cuando necesito contaro 40.000 quiere decir que debo cargar en el timer 65536 - 40000 = 25536

Se podria poner de otra forma la formula, para que veas que vos tambien la usas.

Código: [Seleccionar]
Cant.DeValores - LoQueNecesitoContar = LoQueTengoQueCargar
Ej ( 65536 - 2304 = 63232)

Podemos pasar terminos e intentar saber cuanto voy a contar... es decir:

Código: [Seleccionar]
CantDeValores - LoQueTengoQueCargar = LoQueNecesitoContar
Esta ultima formula la usaste vos en la que me pasaste. En la ecuacion que me pasaste:

4/64000000*8(65536-x)

Si descomponemos esa formula queda:

Código: [Seleccionar]
(4 / Fosc)  * Preescaler * LoQueNecesitoContar
o que es igual a:

Código: [Seleccionar]
(4 / Fosc)  * Preescaler * (CantDeValores - LoQueTengoQueCargar)

x = LoQueTengoQueCargar

En un ejemplo numerico:
(4/64000000) * 8 * (65536-25536)
(4/64000000) * 8 * 40000

(4/64000000) = Tosc = Periodo de la señal de entrada ANTES del preescaler
(4/64000000) * 8 = Periodo de la señal a la entrada del Timer1, o basicamente cada cuanto TIEMPO el timer suma 1.

Si tengo cada cuanto suma 1, y quiero saber cuanto tiempo pasaria hasta contar 40.000, lo multiplico y me daria los 0.5us, en este caso. Pero como observas debo cargar 25.536 en este caso para poder contar 40.000
Páginas: [1] 2 3 4 5 6 7 8 9 10
anything