TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Lucho08 en 27 de Agosto de 2008, 18:42:48
-
Estoy retomando el tema de los PIC luego de hace algun tiempo, por lo que agradecere su ayuda. El problemita que tengo es el siguiente; hice mi programa que hace que mi circuito reciba datos digitales a 2400 bps por una entrada y los muestre los mismos datos por 5 salidas. Hice el programa en asembler, en el MPLAB y lo queme con el IC-PROG y el circuito quemador de Pablin II. Arme el circuito y lo probe y funciono a las mil maravillas. Pero cuando fui a comprar otro PIC del mismo tipo y lo quemo igual, lo pongo al circuito y no me funciona. Compre otro en otro lugar, al verle la serigrafia era diferente por lo que parecio mas confiable, lo queme y nada, tampoco funciona. El primer PIC que use (el que funciono) era mio que lo compre hace 6 años y su codigo exacto dice: PIC16F84A-04/P y los otros 2 su codigo dice: PIC16F84A-04/P E3. Lo de la E3 no es muy notorio o claro, pareciera una marca. Al quemar el PIC noto que lo hace bien ya que al leerlo y compararlo me da igual al original.
Cualquier ayuda sera bien recibida. Disculpen si ya fue tratado este tema, es que no lo encontre al buscarlo.
Cordiales saludos
-
los codigos que tienen E3 solo los he identificado en las muestras que envia microchip -en los samples- en los que compro jamas tare ese E3 pero no por ello quiere decir que no funcionen, revisa el pin de mclr quiza es por ahi.
-
Gracias Navaismo por tu respuesta, revise el voltaje de MCLR y nada lo veo bien en nivel alto. Por las dudas cambie de Cristal a 2Mhz (el original era de 4MHZ) pero la cosa sigue igual. ¿ Que de diferente tendran los PIC de este codigo que fueron fabricados hace 6 años con los de ahora ? No encuentro la respuesta. Seguire investigando. Cualquier sugerencia sera bienvenida
Saludos
-
Hola
Se me ocurre que cuando programaste el PIC que sí funciona programaste los fusibles "a mano" ya que no venían indicados en el archivo .hex.
Ahora que estás programando un pic idéntico con el mismo .hex talvez te esté haciendo falta programar los fusibles...
bit 13-4 CP: Code Protection bit
1 = Code protection disabled
0 = All program memory is code protected
bit 3 PWRTE: Power-up Timer Enable bit
1 = Power-up Timer is disabled
0 = Power-up Timer is enabled
bit 2 WDTE: Watchdog Timer Enable bit
1 = WDT enabled
0 = WDT disabled
bit 1-0 FOSC1:FOSC0: Oscillator Selection bits
11 = RC oscillator
10 = HS oscillator
01 = XT oscillator
00 = LP oscillator
... los cuales talvez no venían incluídos en el hex.
Dale una revisada especialmente al oscilador, debe estar en XT si es para 4MHz.
-
El codigo E3 en muchos semiconductores lo están colocando los fabricantes para identificar los componentes que cumplen con la normativa ROHS.
No se si será eso.
Fermín
-
Gracias migsantiago y Fer_Taca por sus aportes; les cuento que la configuracion la hice desde el editor de programa de asembler en MPLAB; el archivo Hex que se genera tiene la configuracion de los fusibles, ya que cuando cargo este archivo en el ic-prog me muestra WDT desactivado, CP desactivado, PWRTE activado, oscilador en XT tal como lo configure en el programa. Tambien hice la siguiente prueba, lei el programa de mi PIC que si funciona con el IC-PROG y el archivo hex tiene todos los fusibles como los queme, luego esa misma data la quemo en los PIC nuevos y nada , no funcionan.
Para salir de dudas lleve los PICs nuevos a una tienda donde los queman, tuve que pagar, lleve mi programa en una memoria y los queme. Los probe y siguen igualito (lo hice para descartar mi quemador).
Lo de la normativa ROHS que apunta el amigo, no la conozco, pero si involucra un cambio de operacion del PIC, pienso que Microchip lo indicaria en sus datasheets, lo cual no encontre. Si alguien tiene algun dato sobre esa normativa y la comparte seria de gran ayuda.
Aca les comparto el programa, para ver si tiene algun error, que yo no pude ver, esta en asembler. Inicialmente prendo y apago un led 2 veces, le doy el temporizado para que se note y luego escaneo la entrada y la muestro en las 5 salidas. Inverti la salida en un puerto para que me maneje un led y me muestre actividad.
Gracias por su colaboracion
Bendiciones
list p=16F84A ; list directive to define processor
#include <p16F84a.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x0C ; variable used for context saving
status_temp EQU 0x0D ; variable used for context saving
;**********************************************************************
RESET_VECTOR CODE 0x0000 ; processor reset vector
goto start ; go to beginning of program
ISR CODE 0x0004 ; interrupt vector location
Interrupt:
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
; Place ISR Here
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
MAIN_PROGRAM CODE
start: bsf 0x03,5;
movlw 0xff;
movwf 0x05;
movlw 0x00;
movwf 0x06;
bcf 0x03,5;
arranque movlw 0xff;
movwf 0x06;encendemos led indicador ON RB6
movlw 0x0f;temporizamos por un seg
movwf 0x10;
aa movlw 0xff;
movwf 0x11;
bb decfsz 0x11;
goto bb;
decfsz 0x10;
goto aa;
movlw 0xbf;
movwf 0x06;apagamos led indicador RB6
movlw 0xff;temporizamos por 3 seg.
movwf 0x10;
cc movlw 0xff;
movwf 0x11;
dd decfsz 0x11;
goto dd;
decfsz 0x10;
goto cc;
arranque2 movlw 0xff;
movwf 0x06;encendemos led indicador ON RB6
movlw 0x0f;temporizamos por un seg
movwf 0x10;
ee movlw 0xff;
movwf 0x11;
ff decfsz 0x11;
goto ff;
decfsz 0x10;
goto ee;
movlw 0xbf;
movwf 0x06;apagamos led indicador RB6
movlw 0xff;temporizamos por 3 seg.
movwf 0x10;
gg movlw 0xff;
movwf 0x11;
hh decfsz 0x11;
goto hh;
decfsz 0x10;
goto gg;
scan btfss 0x05,0; Rutina de Scan de In para Out
goto scan1;
movlw 0xbf;
movwf 0x06;
goto scan;
scan1 movlw 0x40;
movwf 0x06;
goto scan;
end;
; remaining code goes here
goto $
END ; directive 'end of program'
-
La normativa ROHs se aplica a los materiales con que se fabrican los componentes(libres de plomo principalmente).
No deben implicar ningun cambio de funcionamiento.
-
Gracias Fer_Taca por tu aclaracion. Resulta que pude solucionar el problema o por lo menos haber encontrado la causa. Probe los nuevos PICs grabados en un protoboard con una sola salida conectada y me funciono a la perfeccion, estos PIC que fabrican ahora no tienen la capacidad de manejar igual carga que los antiguos. Al probarlo en mi tarjeta me di cuenta que puede manejar hasta 4 salidas (en realidad hice una interface con un transistor) en mi circuito, al ponerle la quinta carga se bloqueaba y no trabajaba bien. En el circuito no habian cruces ni nada por el estilo, los circuitos de las 5 salidas son iguales. Con el PIC antiguo trabaja a la perfeccion con las 5 salidas. Voy a tener que rediseñar mis buffers o interfaces.
Por alli escuche a un colega decir "las cosas ya no las hacen como antes" ; parece cierto; je je je . Gracias por su apoyo.
-
Suena raro que antes los pics fueran capaces de entregar más de 25mA por terminal.
Aquí las características por terminal del 16f84a.
(http://img253.imageshack.us/img253/982/dibujoca8.jpg)