|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Kain589
26
« en: Viernes 17 de Febrero de 2006, 10:22 »
Si programas en asm se puede desactivar mediante la palabra de configuracion, aunque no se muy bien como, todo es cosa de buscarlo. Yo uso para grabar en el micro el winpic que te permite elegir si quieres activar o desactivar el watchdog, entre otros parametros como el tipo de oscilador.
27
« en: Jueves 16 de Febrero de 2006, 19:51 »
Puedes crear otro pwm por codigo, uno por cada timer y mas de uno asignados a un timer si son multiplos entre si, por ejemplo que vaya a la mitad de frecuencia o de ciclo en alto, mediante una variable contadora de temporizaciones.
28
« en: Martes 14 de Febrero de 2006, 14:07 »
Siempre se me ha planteado una cuestion y uso este hilo por no abrir otro. ¿Los dos PWM pueden funcionar a la vez? porque ambos usan el mismo temporizador, el timer 2, o hay alguna caracteristica especial que les permita funcionar a la vez
29
« en: Viernes 3 de Febrero de 2006, 21:24 »
En español van a encontrar poca cosa, yo no he buscado a fondo pero no he encontrado nada. Yo no soy nadie aqui, pero que tal si antes de pedir las cosas nos esforzamos un poco por nosotros mismo y mas si eres un profesor pues ese es tu trabajo y no el de otro; siento ser grosero pero me cansa ver como la gente recurre a los foros no buscando ayuda sino que les hagan el trabajo
30
« en: Domingo 15 de Enero de 2006, 13:50 »
Estoy intentando realizar este programa que usa el modulo pwm para encender un led aplicando una potencia creciente, cuando llegue a esta esperar 5 segundos y decremental hasta que la potencia se nula, esperando otros 5 segundos; es mas que todo para familiarizarme con el modulo pwm. El problema es que al ejecutarlo, pues no tiene el efecto deseado simplemente se enciende el led con poca potencia, ¿alguien sabe en que puedo estar fallando? gracias de antemano LIST P=16F876 #INCLUDE <P16F876.INC> PERIODO EQU 0ffh TEMPORAL EQU 020H TEMPORAL1 EQU 021H DELAY_CONT EQU 022H ORG 00H GOTO INICIO ORG 05H ;USA PWM DESDE NULO A MAXIMO Y DECREMENTA HASTA NULA DELAY MOVLW 4EH;(~.78) MOVWF TMR0 DELAY_1 BTFSS INTCON,T0IF GOTO DELAY_1 BCF INTCON,T0IF DECFSZ DELAY_CONT,F GOTO DELAY RETURN INICIO CLRF PORTA CLRF PORTB CLRF PORTC BSF STATUS,RP0 BCF STATUS,RP1;BANCO1 MOVLW 06H;(00000110) MOVWF ADCON1 CLRF TRISA CLRF TRISB CLRF TRISC MOVLW 0C7H;(11000111) MOVWF OPTION_REG;TMR0 A 256 MOVLW PERIODO-1;CARGA PERIODO MOVWF PR2 BCF STATUS,RP0;BANCO 0 BSF PORTB,1;PRUEBA BUCLE MOVLW 0CH MOVWF CCP2CON;CONFIGURA CCP2 EN PWM MOVLW 0ffh;MAXIMA POTENCIA DESEADA MOVWF TEMPORAL MOVWF TEMPORAL1 CLRF CCPR2L MOVLW 07H MOVWF T2CON;HABILITA Y PREDIVISOR A 16 AUMENTA MOVLW 05H MOVLW DELAY_CONT CALL DELAY INCF CCPR2L,F DECFSZ TEMPORAL,F GOTO AUMENTA CALL ESPERA DECREMENTA MOVLW 05H MOVWF DELAY_CONT CALL DELAY DECF CCPR2L,F DECFSZ TEMPORAL1,F GOTO DECREMENTA CALL ESPERA DESACTIVAPWM CLRF CCP2CON GOTO BUCLE ESPERA ;RETARDO 5 S MOVLW 0fah MOVWF DELAY_CONT CALL DELAY RETURN END
31
« en: Viernes 13 de Enero de 2006, 23:36 »
A mi particularmente me gusta mas el asm, tambien es que he usado poco el C, pues tampoco llevo en esto de los pics mucho. Para aprender a usarlos creo que es mejor el asm que te permite ver como se debe configurar el pic para cada proposito y para el uso de los perifericos.
Una de las grandes pegas es que el codigo te llena mucho espacio (en cantidad de codigo escrito me refiero), y es mas dificl, a priori, llevar una idea de todo lo que se va haciendo; ademas en assembler es mas facil cometer errores pues tienes que ir configurando todos los bits y registros, y es facil que se te pase alguno o que intercambies el orden de las acciones que a veces da igual pero otras no. como ventajas, el codigo resultante es mas compacto y por tanto tardara menos en ejecutarse y un control total sobre el pic
La "pega" de C,a mi forma de ver, es esa que las aplicaciones ocupan mas espacio y tardan ams en ejecutarse cosa que en la mayoria de los procesos no es muy relevante, y el problema del tamaño esta solucionado debido al aumento de la capacidad de memoria de los pics que se hacen para facilitar su programacion en C. Por otra parte, la programacion en C es mas simple y facil de llevar, ademas de ser mas legible a simple vista por el usuario. Tambien los compiladores mejoran cada vez permitiendo codigos mas compactos
Como conclusion, para empezar con los pics recomendar el assembler si se quiere paralelamente con c, pero creo que todo el que programe pics deberia pasar por assembler. Y para grandes funcionalidades, como por ejemplo teclado que permita configuara parametros a usar en el programa, sacar datos por lcd conversiones adc y comunicaciones pues la resolucion desde c parece mas viable, aunque con assembler se pueda aunque quedara un tocho considerable de codigo
32
« en: Viernes 13 de Enero de 2006, 15:13 »
No seas sobervio pues tu tambien y en mas de una ocacion debiste fallar en tus primeras rutinas de asembler No pretendia ser soberbio, y si eso ha parecido lo siento. Ademas aunque haya sido un dialogo entre dps este es uno de los puntos a tener en cuenta cuandop vas a resolver un problema, en que lenguaje lo haces. Lo de que es fallo del programador y no assembler, no era a ti en particular sino en general porque mucha gente le ve esa desventaja ,que es cierta, a assembler que es mas facil cometer un error. Yo al inicio cometia errores, ahora los cometo y seguire cometiendolos, es ley de vida. Toda mi defensa de assembler es porque creo que para el que comienza le permite y obliga a una mayor comprension del pic y de que pasos hacer para usar cada modulo: adc,usart, timers... y porque creo que en cuanto a potencia, en referencia a tiempo de ejecucion, el programa supera al hecho en C, diciendo esto como opinion sin querer volver a entrar en la polemica. C tambien tiene sus ventajas, yo lo he utilizado poco pero leido bastante, como el hecho de que permite un programa que realice multiples funciones y usar los distintos perifericos tardando en realizar el codigo menos tiempo entre oytras cosas y supongo que tendra mas
33
« en: Miércoles 11 de Enero de 2006, 21:01 »
Los procesadores tipo Risc como los Pics se caracterizan por optimizar codigo por dos caminos (Tamaño o Tiempo de ejecucion).Caso curioso que para lograr la mayor velocidad hay que evitar compactar codigo, si no crees revisa los ejemplos de Microchip para tamaño y velocidad,te daras cuenta que para velocidad no escatiman en el gasto de memoria.Asi que no va lo de mas compacto = mas velocidad por el contrario. A ver, yo no soy el master de los pics, pero si no me equivoco segun los datasheet las instrucciones solo gastan 1 o 2 ciclos de reloj, dependiendo de cual sea. Por tanto a mas instrucciones, mas tiempo eso no tiene vuelta de hoja No es cierto por que el Hardware que estas programando lo diseñaste y construiste tu mismo por tanto estas siempre ligado a su esencia. Y luego lo que se pierde de vista el hardware es inevitable, digas lo que digas de todas formas yo no voy a discutir mas este tema. Exite una regla en programacion, y es que a mayor nivel en el lenguaje, mayor facilidad de programacion y menor dominio del hardware y optimizacion, cada vez esto va a menos pero sigue estando ahi. Aunque a lo mejor eso solo pasa en el resto del mundo excepto en tu caso. Durante años programe para varios micros (Z80,8031,68000,6800,Pics,ARM) en asembler se lo que es lidiar con asemblers de diferente tipo pasando horas revisando rutinas que parecian optimas y que no funcionaban por que colocates datos en un registro o memoria ya ocupada del cual no te diste cuenta. En ese caso no es assembler quien falla, es el programador Para Jaumegs en la seccion de soluciones de hard y de soft puse un ejemplo de como usar la uart y de como use el adc
34
« en: Miércoles 11 de Enero de 2006, 00:01 »
No he dicho que sea poco poderoso, sino que lo es menos que assembler.
La velocidad para realizar los procesos es mayor en assembler, ya que los compiladores no minimizan al maximo el tamaño de codigo, cosas que si eres tu el que programa y sabes te saldra un codigo mucho mas compacto y por tanto mas veloz en ejecucion, para encender un led da igual pero habra procesos en los que el tiempo es critico.
Assembler te permite entender y comprender mejor a los microcontroladores y tener un dominio mayor sobre ellos, en C se pierde un poco la esencia del micro: el tener que configurar registros, activas bits de un registro...por ejemplo el configurar el adc, en assembler tienes que saber en cada momento que significa cada bits de los registros implicados y como configurarlo, en c tienes que configurar pero de una forma menos completa(ya te lo hace el)
En C lo mismo estas programando un pc, que un micro, que una tostadora(ya se que no se programan) lo que quiero decir es que se pierde de vista el concepto del hardware y en gran parte de su funcionamiento y configuracion. la prueba es que cualquiera puede programar en C pero no en assembler
P.D. Esto se desvia del mensaje pero lo pongo porque la pregunta esta en este hilo
35
« en: Martes 10 de Enero de 2006, 23:48 »
Si el problema es por la tension negativa del sensor otra opcion es emplear un amplificador operacional sumandole una tension positiva cuyo valor sea igual a la que genera el sensor a la temperatura minima de trabajo, asi para la temperatura negativa mayor tendras 0 voltios a la salida del amplificador, pero ya tendras que variar el programa, la solucion de usar el 335 me parece mas razonable, pues simplifica el diseño pero si quieres o necesitas usar el 35 esa es una solucion
36
« en: Martes 10 de Enero de 2006, 21:23 »
En C es mas facil programar pero menos poderoso que en asembler
37
« en: Martes 10 de Enero de 2006, 21:21 »
A lo mejor me equivoco, pero el 16f877 solo tiene un conversor que se puede configurar a 8 ó 10 bits, y tiene 8 entradas ( no recuerdo los puertos, creo que el puerto A y el puerto E, 5+3) posibles al conversor que se van multiplexando segun programa. Si quieres conectar 14 necesitas multiplexar a cada entrada 2 posibles por ejemplo, o usar 2 pic comunicados, no se cuanto puede costar 1 multiplexor analogico por eso te digo lo de los dos pics.
38
« en: Domingo 8 de Enero de 2006, 23:54 »
2.- Por espacio dices Otros. Donde cave uno de 16Pines cave uno de 28Pines sin grandes coseciones de espacio. Yo pienso igual que tu. Y ni por el espacio, existen micros superiores al f84 con mas modulos, incluido usart y que tiene el mismo patillaje para poder sustituirlo en el mismo circuito
39
« en: Domingo 8 de Enero de 2006, 13:22 »
Esos reguistros los debes declarar al inicio del programa, despues de declarar el dispositivo, por ejemplo: ;dispositivo LIST P=PIC16F876 INCLUDE <P16f876.INC> ;el include sirve para que cargue un archivo que declara los registros del sistema ;status,trisb,intcon,option_reg...(todos en mayusculas) ;variables necesarias PDe10 EQU 20H PDe11 EQU 21H Esto asigna tus variables a los registros determinados por esas direcciones, lo unico que debes tener en cuenta es no hacerlo sobre registros del sistema, en el pic16f84 creo que es a patir de la direccion 0C, eso lo puedes mirar en el datasheet EDITO>> Para el 16f874 no los conozco, si es como el 876 sera a partir de la direccion 20
40
« en: Domingo 8 de Enero de 2006, 13:12 »
Gracias por vuiestra ayuda, ya lo he conseguido hacer funcionar resulta que tenia varios fallos. La temporizacion era de 100 segundos, en lugar de 10 como yo pretendia, ya que la interrupcion se generaba cada 500 milisegundos y no cada 50; y ademas me faltaba inicializar el contador, asi cada vez que lo encendia tomaba un valor cualquiera, asi que despues de configurar el temporizador hay que cargar el valor correspondiente al contador. Ahora voy a por el modulo Pwm ,que ya lo he intentado una vez pero no me ha salido
41
« en: Sábado 7 de Enero de 2006, 15:07 »
Lo he intentado recargando y activando el timer antes de retornar de la interrupcion y tampoco me funciona, es decir antes de retornar, desactivo el timer cargo los valores de timer1h/l y vuelvo a activarlo ;ISR ORG 04H BCF PIR1,0;Borro bandera DECFSZ CONTADOR GOTO RETORNA;Va a retornar de la int, BSF TRANSICION,0 GOTO VERSAL VERSAL MOVLW 0C8H;realiza 200 temporizaciones antes de variar salida MOVWF CONTADOR BTFSS PORTB,0;Analiza la salida GOTO ACTIVAR;Va a activar salida BCF PORTB,0;DESACTIVA GOTO RETORNA ACTIVAR BSF PORTB,0;activa RETORNA BCF T1CON,0;desactivo el temp MOVLW 0DCH MOVWF TMR1L;CARGA TIMER1BAJO MOVLW 0BH MOVWF TMR1H;CARGA TIMER1ALTO MOVLW 31H MOVWF T1CON;PRESCALER 8 Y ACTIVA RETFIE
42
« en: Jueves 5 de Enero de 2006, 23:49 »
Gracias por tu ayuda, lo de no salvar w y status en la interrupcion es porque es solo una prueba, status no se modifica y w aunque se modifica se escribe antes de usar su valor, sé que en un programa de "verdad" es necesario pero aqui solo queria comprobar su funcionamiento, y lo de no verificar la bandera no lo hacia por lo mismo. He probado a recargar TMR1L/R, asi como T1CON, antes de retornar de la interrupcion, pero sigue sin funcionar. Lo de "goto tiempo", crei que lo haria pues tras ejecutar el "goto nada" el puntero estaria apuntando (valga la redundancia)a la siguiente "goto tiempo", y al retornar de la interrupcion la ejecutaria
43
« en: Jueves 5 de Enero de 2006, 23:00 »
Rutina para la transmision, transmite un dato realiza un retardo y manda otro dato, es un bucle infinito list p=16f876 ;micro #include <p16f876.inc>;include errorlevel -302 ;suprime error no banco 0 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_OFF & _LVP_OFF & _DEBUG_OFF & _CPD_OFF ;---------------------------------------------------------------------------- ;Constants SPBRG_VAL EQU .25 ;configuracion 9600 baudios a 4Mhz ;---------------------------------------------------------------------------- ;Variables CBLOCK 0x020 Flags ;byte indicador banderas CUENTA1 ;Las variables retardo CUENTA2 ENDC ;---------------------------------------------------------------------------- ;Macros para seleccion de banco Bank0 MACRO ;bank 0 bcf STATUS,RP0 bcf STATUS,RP1 ENDM Bank1 MACRO ;bank 1 bsf STATUS,RP0 bcf STATUS,RP1 ENDM Bank2 MACRO ;bank 2 bcf STATUS,RP0 bsf STATUS,RP1 ENDM Bank3 MACRO ;bank 3 bsf STATUS,RP0 bsf STATUS,RP1 ENDM ;---------------------------------------------------------------------------- ORG 0x0000 ResetCode: clrf PCLATH ;selecciona pagina 0 goto Main ;va a programa ORG 0x0004 ;vector interrupcionm InterruptCode:;codigo isr retfie ;retorno ;---------------------------------------------------------------------------- Main: call SetupSerial;inicializa serial y buffer Bank1 clrf TRISB;puerto b como salida del dato recibido bank1 MainLoop: movlw 0x37 movwf PORTB;muestra dato en b call TransmitSerial;emitir el dato call DELAY movlw 0x81 movwf PORTB;muestra dato en b call TransmitSerial;emitir el dato call DELAY goto MainLoop;bucle ;---------------------------------------------------------------------------- ;Transmit data in WREG when the transmit register is empty. TransmitSerial: Bank0 ;select bank 0 btfss PIR1,TXIF;verifica si transmision ocupada goto $-1 ;espera a transmisor ;no ocupado movwf TXREG ;transmite el dato return ;---------------------------------------------------------------------------- ;Set up serial port. SetupSerial: Bank1 movlw 0xc0 ;configura bits tx y rx iorwf TRISC,F movlw SPBRG_VAL;carga para baudios movwf SPBRG movlw 0x24 ;habilita transmision ;y velocidad alta movwf TXSTA Bank0 movlw 0x80 ;activa puerto serial movwf RCSTA clrf Flags ;limpia banderas return ;---------------------------------------------------------------------------- ;=================================================== ;= DELAY: Subrutina de retardo = DELAY MOVLW 0FFH MOVWF CUENTA1 ACA1 MOVLW 0FFH MOVWF CUENTA2 ACA DECFSZ CUENTA2,F GOTO ACA DECFSZ CUENTA1,F GOTO ACA1 RETURN END
Este programa puede modificarse para mandar un dato de cualquier tipo en el momento deseado sin retardos, el que yo realice era solo a modo de prueba
44
« en: Jueves 5 de Enero de 2006, 22:53 »
La siguiene rutina recive un dato y lo vuelve a transmitir list p=16f876 ;micro #include <p16f876.inc>;include errorlevel -302 ;suprime error no banco 0 __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_OFF & _LVP_OFF & _DEBUG_OFF & _CPD_OFF ;---------------------------------------------------------------------------- ;Constants SPBRG_VAL EQU .25 ;configuracion 9600 baudios a 4Mhz ;---------------------------------------------------------------------------- ;Bit Definitions GotNewData EQU 0 ;bit indica nuevo dato recibido ;---------------------------------------------------------------------------- ;Variables CBLOCK 0x020 Flags ;byte indicador banderas ENDC ;---------------------------------------------------------------------------- ;Macros para seleccion de banco Bank0 MACRO ;bank 0 bcf STATUS,RP0 bcf STATUS,RP1 ENDM Bank1 MACRO ;bank 1 bsf STATUS,RP0 bcf STATUS,RP1 ENDM Bank2 MACRO ;bank 2 bcf STATUS,RP0 bsf STATUS,RP1 ENDM Bank3 MACRO ;bank 3 bsf STATUS,RP0 bsf STATUS,RP1 ENDM ;---------------------------------------------------------------------------- ORG 0x0000 ResetCode: clrf PCLATH ;selecciona pagina 0 goto Main ;va a programa ORG 0x0004 ;vector interrupcionm InterruptCode:;codigo isr retfie ;retorno ;---------------------------------------------------------------------------- Main: call SetupSerial;inicializa serial y buffer Bank1 clrf TRISB;puerto b como salida del dato recibido clrf TRISA;puerto a salida para mostrar si hay error bank1 MainLoop: call ReceiveSerial;recepcion dato btfsc Flags,GotNewData;verifica si se recibe dato call showandtransmit;si ha recibido va a emitir bcf Flags,GotNewData;indica dato no recibido ;codigo goto MainLoop;bucle showandtransmit clrf PORTA;limpia a movwf PORTB;muestra dato en b call TransmitSerial;si ha recibido muestra ;y emite el dato ;---------------------------------------------------------------------------- ;Analiza el dato recibido y lo pasa a W. ReceiveSerial: Bank0 btfss PIR1,RCIF;analiza si se ha rebicido dato return ;vuelve si no se ha recibido btfsc RCSTA,OERR;analiza desbordamiento goto ErrSerialOverr;si hay se va a rutina btfsc RCSTA,FERR;analiza error frame goto ErrSerialFrame;si hay se va a rutina movf RCREG,W ;se carga el dato en w bsf Flags,GotNewData;pone a 1 indicador de ;dato nuevo return ;error desbordamiento ErrSerialOverr: bcf RCSTA,CREN;resetea la recepcion clrf PORTA; bsf PORTA,0; indica error desbordamiento bsf RCSTA,CREN;habilita la recepcion return ;error FERR ErrSerialFrame: clrf PORTA; bsf PORTA,1; ;indica error ferr return ;---------------------------------------------------------------------------- ;Transmite el dato en W cuando el transmisor esta listo TransmitSerial: Bank0 ;select bank 0 btfss PIR1,TXIF;verifica si transmision ocupada goto $-1 ;espera a transmisor ;no ocupado movwf TXREG ;transmite el dato return ;---------------------------------------------------------------------------- ;Set up serial port. SetupSerial: Bank1 movlw 0xc0 ;configura bits tx y rx iorwf TRISC,F movlw SPBRG_VAL;carga para baudios movwf SPBRG movlw 0x24 ;habilita transmision y ; velocidad alta movwf TXSTA Bank0 movlw 0x90 ;activa puerto serial y la recepcion movwf RCSTA clrf Flags ;limpia banderas return ;---------------------------------------------------------------------------- END
Si solo se desea la recepcion del dato y no volver a emitir se elimina la rutina de transmision o se emplea para transmitir en otra parte de programa un dato diferente
45
« en: Jueves 5 de Enero de 2006, 22:45 »
Pues esta rutina esta preparada para configurar el conversor y sacar el resultado por los puertos B y C del micro, esta diseñada para el 16f876 ;dispositivo LIST P=PIC16F876 INCLUDE <P16f876.INC> ;declara puerto(opcional) ;variables necesarias DATOALTO EQU 20H DATOBAJO EQU 21H ; programa Org 05H Inicio CLRF CUENTA1 ;Ponemos a 0 CLRF CUENTA2 BCF STATUS,5 ;BANCO 0 MOVLW 81H ;FOSC/32 SELECCION DE RA0 configuramos adcon 0 MOVWF ADCON0 BSF STATUS,5 ;CAMBIO DE BANCO 1 MOVLW 8EH ;configuramos adcon1 MOVWF ADCON1 MOVLW 01H ;DEJANDO COMO ENTRADA A AN0 MOVWF TRISA CLRF TRISB ;PUERTO B COMO SALIDA CLRF TRISC ;PUERTO C SALIDA CLRF DATOALTO ;Ponemos a 0 CLRF DATOBAJO ;MANEJO DE LA CONVERSION UNO CLRF ADRESL BCF STATUS,5 ;VOLVEMOS AL BANCO 0 MOVF DATOALTO,W MOVWF PORTC MOVF DATOBAJO,W MOVWF PORTB ;Sacamos variable por puerto B CALL DELAY ;retardo ;INICIO DEL PROCESO CLRF ADRESH ;limpiamos resultado parte superior BSF ADCON0,2 ;EMPEZAR LA CONVERSION CONVIERTE BTFSC ADCON0,2 ;VERIFICACION DE ;FINALIZACION DE CONVERSION GOTO CONVIERTE MOVF ADRESH,W; (TAMBIEN 00) MOVWF DATOALTO;PASAMOS LA PARTE ALTA DE LA CONVERSION ;A DATO ALTO BSF STATUS,5;PASAMOS A BANCO 1 MOVF ADRESL,w;(TAMBIEN 00) BCF STATUS,5;BANCO0 MOVWF DATOBAJO;PASAMOS LA PARTE ALTA DE LA CONVERSION ;A DATO BAJO GOTO UNO DELAY;escribir aqui rutina de retardo adecuada END
La rutina de retardo depende del cristal, se utiliza para que se estabilice el convertidor y para un cristal de 4 Mhz bastara con 20 microsegundos Alguna modificacion interesante es en lugar de justificar a la derecha,llenando de ceros los bits mas sifnificativos del registro ADRESH justificar a izquierda(llena de ceros los bits menos significativos de ADRESL), asi los 8 bits mas significativos estan en un mismo registro ADRESH, y podemos usar el convertidor como si fuera de 8 bits, mejorando la respuesta ante el ruido(al tener menos sensibilidad) y facilitando el manejo de la conversion, siempre que no sea critica la precision en la conversion
46
« en: Jueves 5 de Enero de 2006, 22:23 »
A ver si me pueden ayudar, el problema es que no consigo hacerlo funcional, creo que el fallo puede estar en el bucle infinito de temporizacion que quiero crear, y que variara las salidas por la interrupcion list p = 16f876; #include <p16f876.inc> ;temporiza y parpadea portb,0 CONTADOR EQU 20H TRANSICION EQU 21H ORG 00H GOTO INICIO ORG 04H BCF PIR1,0;Borro bandera DECFSZ CONTADOR GOTO CONTINUA;Va a retornar de la int, BSF TRANSICION,0 GOTO VERSAL VERSAL MOVLW 0C8H;realiza 200 temporizaciones antes de variar salida MOVWF CONTADOR BTFSS PORTB,0;Analiza la salida GOTO ACTIVAR;Va a activar salida BCF PORTB,0;DESACTIVA CONTINUA RETFIE ACTIVAR BSF PORTB,0;activa RETFIE INICIO BCF STATUS,6 BSF STATUS,5;banco 1 CLRF TRISB;B SALIDA MOVLW 01H;HABILITA TMR1E MOVWF PIE1 MOVLW 0C0H; MOVWF INTCON;HABILITA GIE Y PERIFERICOS BCF STATUS,5;BANCO 0 CLRF PORTB BSF PORTB,1;COMPROBAR SI FUNCIONA EL MICRO TIEMPO BCF T1CON,0;desactivo el temp MOVLW 0DCH MOVWF TMR1L;CARGA TIMER1BAJO MOVLW 0BH MOVWF TMR1H;CARGA TIMER1ALTO MOVLW 31H MOVWF T1CON;PRESCALER 8 Y ACTIVA NADA GOTO NADA GOTO TIEMPO END
Cuando entro en el bucle NADA el PC apuntará a la siguiente instruccion, asi que al retornar de la interrupcion ira a goto tiempo, a lo mejor esto que he dado por supuesto esta mal. No se que pùede estar mal, a ver si me pueden sugerir como hacerlo andar, gracias
47
« en: Jueves 5 de Enero de 2006, 18:05 »
Pues muchas gracias, ahora estoy con el ccp1 y con el timer1, el timer creo que se usarlo pero se me presenta un problema al recargarlo, si me tienes algo de informacion te lo agradeceria. Tambien si lo creeis conveniente se podia abrir un hilo sobre el 16f876 con ejemplos de sus nuevas funciones con respecto al f84, yo tengo rutinas para usar el adc y la usart
48
« en: Jueves 5 de Enero de 2006, 18:00 »
Puede deberse al ic-prog, yo te recomiendo que uses como software grabado el winpic800, creado por sisco, seguro que si buscas un poco lo encuentras, sino informame y te digo como conseguirlo. A mi me daba ese error y se debia al icprog, aunque puede que el fallo sea por otro motivo
49
« en: Jueves 5 de Enero de 2006, 11:34 »
Entiendo lo que dices, y es bueno experimentar y seguir aprendiendo sobre este gran mundo de los pic's, ademas me parece una buena salida en el caso de no disponer de ningun pic con modulo usart. Para casos que requieran seguridad y velocidad en el envio, estos modulos permiten al micro hacer otras tareas durante la comunicacion mientras tambien se encargan de la recepcion, transmision y de verificar si existieron errores,todo ellos solitos lo que si se hace por software nunca se conseguira al 100% o complicara demasiado y limitara el software. El F84 ha sido y será mitico, ese cacharrito sigue dando guerra y creo que casi todos hemos pasado por el para el aprendizaje; y en casos en lo que no se requieran conversores ni comunicaciones o muy poca comunicacion, sigue siendo un gran pic. Yo he empezado hace poco en esto de los pic's y empece con el, y ahora estoy peleandome con el 16F876 que presenta nuevos modulos y tipos de comunicaciones
50
« en: Jueves 5 de Enero de 2006, 01:36 »
Esto se aleja un poco del mensaje, pero creo que ya es mucho mas facil y seguro ademas de standar usar pic que tiene habilitado un modulo para la comunicacion serie. Unos pics muy similares podrian ser el 16f828a o 16f848a, que poseen el mismo numero de patillas y cuyo precio es igual y en algunos caso menos, ademas de poseer dos puertos de 8 bits, y 3 temporizadores
|
|
|