• Domingo 19 de Mayo de 2024, 18:25

Mostrar Mensajes

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

Páginas: 1 [2] 3
26
Microcontroladores / Re: Watchdog
« 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
Programación en C / Re: Se Puede Tener Mas De 1 Pwm En Un 16f877a??
« 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
Programación en C / Re: Se Puede Tener Mas De 1 Pwm En Un 16f877a??
« 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
Microcontroladores / Re: Dspic30f Manual Basico
« 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
Microcontroladores / Usando El Pwm En El 16f876
« 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


Código: Text
  1. LIST P=16F876
  2.   #INCLUDE <P16F876.INC>
  3.  
  4.   PERIODO    EQU  0ffh
  5.   TEMPORAL  EQU  020H
  6.   TEMPORAL1  EQU  021H
  7.   DELAY_CONT  EQU  022H
  8.  
  9.   ORG  00H
  10.   GOTO  INICIO
  11.   ORG  05H
  12. ;USA PWM DESDE NULO A MAXIMO Y DECREMENTA HASTA NULA
  13. DELAY
  14.   MOVLW  4EH;(~.78)
  15.   MOVWF  TMR0
  16. DELAY_1
  17.   BTFSS  INTCON,T0IF
  18.   GOTO  DELAY_1
  19.   BCF    INTCON,T0IF
  20.   DECFSZ  DELAY_CONT,F
  21.   GOTO  DELAY
  22.   RETURN
  23.  
  24. INICIO
  25.   CLRF  PORTA
  26.   CLRF  PORTB
  27.   CLRF  PORTC
  28.   BSF    STATUS,RP0
  29.   BCF    STATUS,RP1;BANCO1
  30.   MOVLW  06H;(00000110)
  31.   MOVWF  ADCON1
  32.   CLRF  TRISA
  33.   CLRF  TRISB
  34.   CLRF  TRISC
  35.   MOVLW  0C7H;(11000111)
  36.   MOVWF  OPTION_REG;TMR0 A 256
  37.   MOVLW  PERIODO-1;CARGA PERIODO
  38.   MOVWF  PR2
  39.   BCF    STATUS,RP0;BANCO 0
  40.   BSF    PORTB,1;PRUEBA
  41. BUCLE
  42.   MOVLW  0CH
  43.   MOVWF  CCP2CON;CONFIGURA CCP2 EN PWM
  44.   MOVLW  0ffh;MAXIMA POTENCIA DESEADA
  45.   MOVWF  TEMPORAL
  46.   MOVWF  TEMPORAL1
  47.   CLRF  CCPR2L
  48.   MOVLW  07H
  49.   MOVWF  T2CON;HABILITA Y PREDIVISOR A 16
  50. AUMENTA
  51.   MOVLW  05H
  52.   MOVLW  DELAY_CONT
  53.   CALL  DELAY
  54.   INCF  CCPR2L,F
  55.   DECFSZ  TEMPORAL,F
  56.   GOTO  AUMENTA
  57.   CALL  ESPERA
  58. DECREMENTA
  59.   MOVLW  05H
  60.   MOVWF  DELAY_CONT
  61.   CALL   DELAY
  62.   DECF  CCPR2L,F
  63.   DECFSZ  TEMPORAL1,F
  64.   GOTO   DECREMENTA
  65.   CALL  ESPERA
  66. DESACTIVAPWM
  67.   CLRF  CCP2CON
  68.   GOTO  BUCLE
  69.  
  70. ESPERA        &#59;RETARDO 5 S
  71.   MOVLW  0fah
  72.   MOVWF  DELAY_CONT
  73.   CALL DELAY
  74.   RETURN
  75.  
  76. END
  77.  

31
Programación en C / Re: C ó Asm?
« 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
Microcontroladores / Re: Fallo - Rs232
« en: Viernes 13 de Enero de 2006, 15:13 »
Cita de: "lalo_soft"
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
Microcontroladores / Re: Fallo - Rs232
« en: Miércoles 11 de Enero de 2006, 21:01 »
Citar
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

Citar
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.

Citar
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
Microcontroladores / Re: Fallo - Rs232
« 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
Microcontroladores / Re: Temperaturas Negativas
« 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
Microcontroladores / Re: Fallo - Rs232
« en: Martes 10 de Enero de 2006, 21:23 »
En C es mas facil programar pero menos poderoso que en asembler

37
Microcontroladores / Re: Termocupla + Pic16f877
« 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
Microcontroladores / Re: Fallo - Rs232
« en: Domingo 8 de Enero de 2006, 23:54 »
Cita de: "lalo_soft"
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
Microcontroladores / Re: Help...necesito Un Delay...
« 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:

Citar
;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
Microcontroladores / Re: Uso Del Tmr1 En El 16f876
« 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 :lightsabre: ,que ya lo he intentado una vez pero no me ha salido

41
Microcontroladores / Re: Uso Del Tmr1 En El 16f876
« 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

Citar
 
  ;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
Microcontroladores / Re: Uso Del Tmr1 En El 16f876
« 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
Soluciones de Hard y Soft / Re: Emision Y Recepcion Serie Rs232
« 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

Código: Text
  1.     list p=16f876  &#59;micro
  2.     #include &#60;p16f876.inc&#62;&#59;include
  3.     errorlevel -302  &#59;suprime error no banco 0
  4.  
  5.     __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_OFF & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
  6.  
  7. ;----------------------------------------------------------------------------
  8. ;Constants
  9. SPBRG_VAL  EQU  .25  &#59;configuracion 9600 baudios a 4Mhz
  10. ;----------------------------------------------------------------------------
  11. ;Variables
  12.     CBLOCK  0x020
  13.     Flags    &#59;byte indicador banderas
  14.     CUENTA1    &#59;Las variables retardo
  15.     CUENTA2      
  16.   ENDC
  17.  
  18. ;----------------------------------------------------------------------------
  19. ;Macros para seleccion de banco
  20. Bank0    MACRO    &#59;bank 0
  21.     bcf  STATUS,RP0
  22.     bcf  STATUS,RP1
  23.     ENDM
  24. Bank1    MACRO    &#59;bank 1
  25.     bsf  STATUS,RP0
  26.     bcf  STATUS,RP1
  27.     ENDM
  28. Bank2    MACRO    &#59;bank 2
  29.     bcf  STATUS,RP0
  30.     bsf  STATUS,RP1
  31.     ENDM
  32. Bank3    MACRO    &#59;bank 3
  33.     bsf  STATUS,RP0
  34.     bsf  STATUS,RP1
  35.     ENDM
  36.  
  37. ;----------------------------------------------------------------------------
  38.     ORG     0x0000    
  39. ResetCode:  
  40.     clrf    PCLATH  &#59;selecciona pagina 0
  41.       goto    Main  &#59;va a programa
  42.     ORG  0x0004  &#59;vector interrupcionm
  43. InterruptCode:&#59;codigo isr
  44.     retfie    &#59;retorno
  45. ;----------------------------------------------------------------------------
  46. Main:  call  SetupSerial&#59;inicializa serial y buffer
  47.     Bank1
  48.     clrf  TRISB;puerto b como salida del dato recibido
  49.     bank1
  50. MainLoop:
  51.     movlw  0x37  
  52.     movwf  PORTB;muestra dato en b
  53.     call  TransmitSerial&#59;emitir el dato
  54.     call   DELAY
  55.     movlw  0x81  
  56.     movwf  PORTB;muestra dato en b
  57.     call  TransmitSerial&#59;emitir el dato
  58.     call   DELAY
  59.     goto  MainLoop&#59;bucle
  60.  
  61. ;----------------------------------------------------------------------------
  62. ;Transmit data in WREG when the transmit register is empty.
  63.  
  64. TransmitSerial:  Bank0    &#59;select bank 0
  65.     btfss  PIR1,TXIF&#59;verifica si transmision ocupada
  66.     goto  &#036;-1  &#59;espera a transmisor
  67.                                                                                &#59;no ocupado
  68.     movwf  TXREG  &#59;transmite el dato
  69.     return
  70.  
  71. ;----------------------------------------------------------------------------
  72. ;Set up serial port.
  73.  
  74. SetupSerial:  Bank1    
  75.     movlw  0xc0  &#59;configura bits tx y rx
  76.     iorwf  TRISC,F
  77.     movlw  SPBRG_VAL&#59;carga para baudios
  78.     movwf  SPBRG
  79.     movlw  0x24  &#59;habilita transmision
  80.                                                                                &#59;y velocidad alta
  81.     movwf  TXSTA
  82.     Bank0
  83.     movlw  0x80  &#59;activa puerto serial
  84.     movwf  RCSTA
  85.     clrf  Flags  &#59;limpia banderas
  86.     return
  87.  
  88. ;----------------------------------------------------------------------------
  89. ;===================================================
  90.  
  91. ;=  DELAY:  Subrutina de retardo               =
  92.  
  93. DELAY  MOVLW  0FFH    
  94.                 MOVWF  CUENTA1    
  95. ACA1  MOVLW  0FFH    
  96.   MOVWF  CUENTA2  
  97. ACA  DECFSZ  CUENTA2,F    
  98.                 GOTO  ACA  
  99.                 DECFSZ  CUENTA1,F  
  100.   GOTO  ACA1      
  101.                 RETURN
  102.  
  103. END
  104.  

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
Soluciones de Hard y Soft / Emision Y Recepcion Serie Rs232
« en: Jueves 5 de Enero de 2006, 22:53 »
La siguiene rutina recive un dato y lo vuelve a transmitir
Código: Text
  1.  
  2.     list p=16f876  ;micro
  3.     #include &#60;p16f876.inc&#62;;include
  4.     errorlevel -302  ;suprime error no banco 0
  5.  
  6.     __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_OFF & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
  7.  
  8. ;----------------------------------------------------------------------------
  9. ;Constants
  10. SPBRG_VAL  EQU  .25  ;configuracion 9600 baudios a 4Mhz
  11. ;----------------------------------------------------------------------------
  12. ;Bit Definitions
  13. GotNewData  EQU  0  ;bit indica nuevo dato recibido
  14. ;----------------------------------------------------------------------------
  15. ;Variables
  16.     CBLOCK  0x020
  17.     Flags    ;byte indicador banderas
  18.     ENDC
  19. ;----------------------------------------------------------------------------
  20. ;Macros para seleccion de banco
  21. Bank0    MACRO    ;bank 0
  22.     bcf  STATUS,RP0
  23.     bcf  STATUS,RP1
  24.     ENDM
  25. Bank1    MACRO    ;bank 1
  26.     bsf  STATUS,RP0
  27.     bcf  STATUS,RP1
  28.     ENDM
  29. Bank2    MACRO    ;bank 2
  30.     bcf  STATUS,RP0
  31.     bsf  STATUS,RP1
  32.     ENDM
  33. Bank3    MACRO    ;bank 3
  34.     bsf  STATUS,RP0
  35.     bsf  STATUS,RP1
  36.     ENDM
  37.  
  38. ;----------------------------------------------------------------------------
  39.     ORG     0x0000    
  40. ResetCode:  
  41.     clrf    PCLATH  ;selecciona pagina 0
  42.       goto    Main  ;va a programa
  43.     ORG  0x0004  ;vector interrupcionm
  44. InterruptCode:;codigo isr
  45.     retfie    ;retorno
  46. ;----------------------------------------------------------------------------
  47. Main:  call  SetupSerial;inicializa serial y buffer
  48.     Bank1
  49.     clrf  TRISB;puerto b como salida del dato recibido
  50.     clrf  TRISA;puerto a salida para mostrar si hay error
  51.     bank1
  52. MainLoop:  
  53.     call  ReceiveSerial;recepcion dato
  54.     btfsc  Flags,GotNewData;verifica si se recibe dato
  55.     call  showandtransmit;si ha recibido va a emitir
  56.     bcf  Flags,GotNewData;indica dato no recibido
  57.   ;codigo
  58.  
  59.     goto  MainLoop;bucle
  60. showandtransmit
  61.     clrf  PORTA;limpia a
  62.     movwf  PORTB;muestra dato en b
  63.     call  TransmitSerial;si ha recibido muestra
  64.                                                                               &#59;y emite el dato
  65.  
  66.  
  67. ;----------------------------------------------------------------------------
  68. ;Analiza el dato recibido y lo pasa a W.
  69.  
  70. ReceiveSerial:  Bank0
  71.     btfss  PIR1,RCIF;analiza si se ha rebicido dato
  72.     return    ;vuelve si no se ha recibido
  73.  
  74.     btfsc  RCSTA,OERR;analiza desbordamiento
  75.     goto  ErrSerialOverr;si hay se va a rutina
  76.     btfsc  RCSTA,FERR;analiza error frame
  77.     goto  ErrSerialFrame;si hay se va a rutina
  78.  
  79.     movf  RCREG,W  ;se carga el dato en w
  80.     bsf  Flags,GotNewData;pone a 1 indicador de
  81.                                                                           ;dato nuevo
  82.     return
  83.  
  84. ;error desbordamiento
  85. ErrSerialOverr:  
  86.     bcf  RCSTA,CREN;resetea la recepcion
  87.     clrf PORTA;
  88.     bsf PORTA,0;  indica error desbordamiento
  89.     bsf  RCSTA,CREN;habilita la recepcion
  90.     return
  91.  
  92. ;error FERR
  93.  
  94. ErrSerialFrame:
  95.     clrf PORTA;
  96.     bsf PORTA,1;  ;indica error ferr
  97.     return
  98.  
  99. ;----------------------------------------------------------------------------
  100. ;Transmite el dato en W cuando el transmisor esta listo
  101.  
  102. TransmitSerial:  Bank0    ;select bank 0
  103.     btfss  PIR1,TXIF;verifica si transmision ocupada
  104.     goto  &#036;-1  ;espera a transmisor
  105.                                                                               &#59;no ocupado
  106.     movwf  TXREG  ;transmite el dato
  107.     return
  108.  
  109. ;----------------------------------------------------------------------------
  110. ;Set up serial port.
  111.  
  112. SetupSerial:  Bank1    
  113.     movlw  0xc0  ;configura bits tx y rx
  114.     iorwf  TRISC,F
  115.     movlw  SPBRG_VAL;carga para baudios
  116.     movwf  SPBRG
  117.     movlw  0x24  ;habilita transmision y  
  118.                                                                                 &#59; velocidad alta
  119.     movwf  TXSTA
  120.     Bank0
  121.     movlw  0x90  ;activa puerto serial y la recepcion
  122.     movwf  RCSTA
  123.     clrf  Flags  ;limpia banderas
  124.     return
  125.  
  126. ;----------------------------------------------------------------------------
  127.  
  128.     END
  129.  

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
Soluciones de Hard y Soft / Uso Del Convertidor A/d
« 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

Código: Text
  1. ;dispositivo
  2.   LIST P=PIC16F876
  3.   INCLUDE &#60;P16f876.INC&#62;
  4. ;declara puerto(opcional)
  5. ;variables necesarias
  6. DATOALTO EQU 20H
  7. DATOBAJO EQU 21H  
  8. ; programa
  9.   Org 05H
  10.  
  11. Inicio
  12.   CLRF CUENTA1  &#59;Ponemos a 0
  13.   CLRF CUENTA2
  14.   BCF STATUS,5  &#59;BANCO 0
  15.   MOVLW 81H  &#59;FOSC/32 SELECCION DE RA0 configuramos adcon 0
  16.   MOVWF ADCON0
  17.   BSF STATUS,5  &#59;CAMBIO DE BANCO 1
  18.   MOVLW 8EH  &#59;configuramos adcon1
  19.   MOVWF ADCON1
  20.   MOVLW 01H  &#59;DEJANDO COMO ENTRADA A AN0
  21.   MOVWF TRISA
  22.   CLRF TRISB  &#59;PUERTO B COMO SALIDA      
  23.   CLRF TRISC  &#59;PUERTO C SALIDA
  24.   CLRF DATOALTO   &#59;Ponemos a 0
  25.   CLRF DATOBAJO
  26. ;MANEJO DE LA CONVERSION
  27. UNO
  28.   CLRF ADRESL
  29.   BCF STATUS,5   &#59;VOLVEMOS AL BANCO 0
  30.   MOVF DATOALTO,W
  31.   MOVWF PORTC
  32.   MOVF DATOBAJO,W
  33.   MOVWF PORTB   &#59;Sacamos variable por puerto B
  34.   CALL DELAY   &#59;retardo
  35.  
  36. ;INICIO DEL PROCESO
  37.   CLRF ADRESH   &#59;limpiamos resultado parte superior
  38.   BSF ADCON0,2   &#59;EMPEZAR LA CONVERSION
  39. CONVIERTE
  40.   BTFSC ADCON0,2   &#59;VERIFICACION DE
  41.                                                                &#59;FINALIZACION  DE CONVERSION
  42.   GOTO CONVIERTE
  43.   MOVF ADRESH,W; (TAMBIEN 00)
  44.   MOVWF DATOALTO;PASAMOS LA PARTE ALTA DE LA CONVERSION
  45.                                            &#59;A DATO ALTO
  46.   BSF STATUS,5&#59;PASAMOS A BANCO 1
  47.   MOVF ADRESL,w;(TAMBIEN 00)
  48.   BCF STATUS,5&#59;BANCO0
  49.   MOVWF DATOBAJO&#59;PASAMOS LA PARTE ALTA DE LA CONVERSION
  50.                                             &#59;A DATO BAJO
  51.   GOTO UNO
  52.  
  53.  
  54. DELAY;escribir aqui rutina de retardo adecuada
  55.    
  56. END
  57.  

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
Microcontroladores / Uso Del Tmr1 En El 16f876
« 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
Código: Text
  1. list p = 16f876;
  2. #include &#60;p16f876.inc&#62;
  3. ;temporiza y parpadea portb,0
  4. CONTADOR  EQU  20H
  5. TRANSICION  EQU 21H
  6.  
  7. ORG 00H
  8.   GOTO INICIO
  9.   ORG  04H
  10.   BCF    PIR1,0;Borro bandera
  11.   DECFSZ  CONTADOR
  12.   GOTO   CONTINUA;Va a retornar de la int,
  13.   BSF    TRANSICION,0
  14.   GOTO  VERSAL
  15. VERSAL
  16.   MOVLW  0C8H;realiza 200 temporizaciones antes de variar salida
  17.   MOVWF  CONTADOR
  18.   BTFSS  PORTB,0;Analiza la salida
  19.   GOTO   ACTIVAR;Va a activar salida
  20.   BCF    PORTB,0;DESACTIVA
  21. CONTINUA  
  22.   RETFIE
  23. ACTIVAR
  24.   BSF    PORTB,0;activa
  25.   RETFIE
  26.  
  27. INICIO
  28.   BCF    STATUS,6
  29.   BSF    STATUS,5;banco 1
  30.   CLRF  TRISB;B  SALIDA
  31.   MOVLW  01H;HABILITA TMR1E
  32.   MOVWF  PIE1
  33.   MOVLW  0C0H;
  34.   MOVWF  INTCON;HABILITA GIE Y PERIFERICOS
  35.   BCF    STATUS,5;BANCO 0
  36.   CLRF  PORTB
  37.   BSF    PORTB,1;COMPROBAR SI FUNCIONA EL MICRO
  38. TIEMPO
  39.   BCF    T1CON,0;desactivo el temp
  40.   MOVLW  0DCH
  41.   MOVWF  TMR1L;CARGA TIMER1BAJO
  42.   MOVLW  0BH
  43.   MOVWF  TMR1H;CARGA TIMER1ALTO
  44.   MOVLW  31H
  45.   MOVWF  T1CON;PRESCALER 8 Y ACTIVA
  46. NADA
  47.   GOTO  NADA
  48.   GOTO  TIEMPO
  49.  
  50.   END
  51.  

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
Microcontroladores / Re: Rs-232
« 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
Microcontroladores / Re: Problema Con Programadores Pics
« 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
Microcontroladores / Re: Rs-232
« 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
Microcontroladores / Re: Rs-232
« 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

Páginas: 1 [2] 3