• Martes 5 de Noviembre de 2024, 07:55

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.


Temas - Pegasux

Páginas: [1]
1
Microcontroladores / al salir del sleep no me recibe por la UART
« en: Miércoles 18 de Febrero de 2009, 09:52 »
Muy buenas, estoy  usando un PIC16F876 recibiendo datos por la UART, si hago un retardo largo en el programa principal y durante ese retardo le envio los datos, funciona perfectamente, pero el aparato funcionaria a baterias, por lo que deberia dormirlo cuando no haya datos y despertarlo en cuanto comience a recibir datos. Para despertarlo he puenteado las lineas RX y RB0 y he programado la interrupcion INT0, como no uso el puertoB puedo hacerlo sin problemas y ademas el micro se despertara antes de que haya terminado el bit de "start" y pueda coger todo el primer byte correctamente. Pues bien, al llegar los datos, el micro se despierta, pero no recibe los datos, cuando entra en la rutina de atencion a la INT0 la desprogramo porque ya no me hace falta y asi solamente saltara la interrupcion por recepcion, he comprobado con un led los flags necesarios para la recepcion y estan correctamente, tambien he comprobado con un contador que sin dormirlo recibe 11 datos (correcto) y durmiendolo no recibe ningun dato . Algo pasa al dormirlo que me estropea la recepcion de datos y no se que es, he probado a volver a configurarlo segun salta la INT0 y ese tipo de cosas pero nada. No se si es porque no recibe bien el primer bit y pierde toda la sincronizacion o que le pasa.

Gracias y un saludo.

2
Microcontroladores / Problema con interrupcion RB y retardos
« en: Viernes 6 de Febrero de 2009, 18:02 »
Muy buenas. El problema que tengo consiste en que cuando llamo a la rutina de un retardo largo, durante ese retardo no me salta a la interrupcion RB, la del timer funciona bien y no me explico el porqué. He probado a meter directamente el codigo de la rutina en la funcion principal, pero tampoco salta.
Mas datos, he observado con un led que se enciende el solo cuando salta la interrupcion, al leer el bit RBIF dentro de la rutina de atencion a la interrupcion, el problema es que yo no estoy pulsando nada y ademas no hace nada porque no se aguanta el tiempo suficiente para superar el antirebote por software y sale de la rutina, pero cuando aprieto el pulsador ni siquiera llega a encenderse. He probado a habilitar las interrupciones pertinentes antes de llegar al retardo, pero funciona igual.
Gracias y un saludo.

3
Microcontroladores / Problemon con la RBIF y timer0
« en: Martes 3 de Febrero de 2009, 12:37 »
Muy buenas. Llevo unos dias atascado (otra vez...) Utilizo un 16F876, la interrupcion del tmr0 y la del RB a la vez, cuando salta el timer mira el ADC y me saca el valor por pantalla, y cuando acciono el pulsador me cambia el valor de un registro y asi en el programa principal, que no es mas que un bucle que decide si conectar el timer o no, decide segun ese registro si el aparato funciona o no. Si no funciona desactiva el timer para que no muestre en pantalla y se duerme, y si funciona activa el timer si es que estaba desactivado y hace un retardo.
El problema que tengo es que salta el flag RBIF constantemete, cada vez que salta la interrupcion por lo que sea miro si esta a 1 y muestro en el LCD una letra, lo borro y despues hace lo del ADC. Supuestamente si yo no acciono el pulsador, RBIF no se puede poner a 1 y por lo tanto no ha de mostrarme la letra en pantalla, ademas que al borrar el flag siempre que entra, parece como si el pulsador estuviese constantemente pulsandose, ya que para saltar necesita el flanco de bajada en la patilla RB7... Como no sea el LCD que me esta interaccionando no se me ocurre nada, el tema es que si no activo el timer, me funciona perfectamente la rutina del pulsador, se activa y desactiva bien, pero en cuanto le pongo el timer como que se estorban... asi que no creo que sea por el LCD. Cualquier tipo de ayuda sera agradecida.

Saludos.

4
Microcontroladores / Se me queda dormido al habilitar RBIE
« en: Viernes 30 de Enero de 2009, 12:53 »
Muy buenas. Tengo un problema con un programilla, lo que hago basicamente es con un pulsador pongo en marcha o paro el programa, lo hago con las interrupciones del RB, cuando el programa funciona solamente tiene que usar el ADC y sacar el valor por pantalla, y cuando esta parado, saco un mensaje por pantalla para avisar y le dejo en sleep habilitando el pulsador para poder encenderlo. La rutina de atencion del pulsador no es mas que cambiar un bit de un registro, asi sabe si esta encendido o apagado y cambia ese valor al pulsar. El problema es que cuando habilito la interrupcion RBIE, el micro se queda parado despues de haber usado el CAD y sacado el dato por pantalla 1 vez, solamente con poner  BSF INTCON,RBIE y seguido BCF INTCON,RBIE se supone que no pasaria nada si el flag RBIF esta a 0 (lo borro previamente) pues ya no funciona, se queda dormido en ese punto, lo se porque despues de ese punto saco un mensaje por pantalla y al pulsar el boton salta la interrupcion, el programa continua el flujo y me sale el mensaje por pantalla, lo mismo que si hubiera hecho un sleep y al saltar la interrupcion del pulsador continuase el programa. Logicamente, si no habilito la RBIE, el CAD funciona continuamente y puedo verlo en pantalla variando la tension que le meto con un potenciometro, pero entonces ya no puedo detener el aparato usando el pulsador porque no esta habilitada la RBIE. Llevo 2 dias parado con este problema, y anteriormente lo intente hacer usando un timer, cada cierto tiempo saltaba el timer y me sacaba el valor usando el CAD, pero tenia el mismo problema con el pulsador y no funcionaba bien. Intentare comprar otro micro (16F876A) para ver si es eso, pero no lo creo...
Si alguien me puede echar un cable se lo agradeceria enormemente.

Saludos.

5
Microcontroladores / Problema al juntar dos codigos
« en: Lunes 22 de Diciembre de 2008, 12:47 »
Muy buenas. Tengo un dispositivo con un 16F876 en el que he desarrollado dos codigos, uno consiste en manejar teclado y pantalla, esto me funciona bien, el otro consiste en enviar unos datos sencillos por el puerto serie, tambien me funciona bien, pero cuando junto los codigos, osea, primero pido los datos y luego intento enviarlos, la parte de pedirlos funciona bien, pero la parte de enviarlos funciona mal, el caso es que por separado todo funciona bien y si lo junto deja de funcionar. He probado a modificar los valores de los registros principales y reescribirlos con los datos que habia al principio, para hacer como una especie de "reset" en caliente, pero sigue igual, creo que una solucion seria conseguir una especie de reset en caliente sin que pierda los datos de la ram y que la parte de enviar funcione como cuando esta sola. No es que sea una solucion muy buena, pero no se me ocurre otra cosa, y haciendolo como creo que deberia ser no funciona. ¿Alguien puede ayudarme?

Gracias y un saludo.

6
Microcontroladores / Despertar el micro por RX
« en: Viernes 5 de Diciembre de 2008, 11:37 »
Muy buenas, tengo un problema para despertar el micro cuando recibe datos por el puerto serie, si no le duermo, hago un retardo de 5 segundos, durante los cuales enciendo el otro equipo que le manda datos y lo recibe perfectamente, pero al ser un equipo que va a funcionar por baterias, tengo que dormirle, lo unico que hago es quitar el retardo y poner un sleep y esperar a que le mande los datos desde el otro equipo, pero le mando los datos y este no se despierta. ¿No se supone que sale del reposo cuando recibe una interrupcion?

Un saludo.

7
Microcontroladores / Teclado matricial no funciona con interrupcion
« en: Jueves 30 de Octubre de 2008, 17:36 »
Muy buenas. Mas que el teclado lo que no funciona es el salto a la interrupcion. No se que error cometo, pero he probado muchas configuraciones y cosas raras y tampoco funciona. El tema es que lo dejo en sleep y cuando salte la interrupcion solamente me muestre algo en pantalla, porque con el teclado no hay manera y sin embargo el LCD funciona bien, pero ni con esas, la interrupcion por actividad en el puerto B no furrula, y la conexion al teclado es bastante sencilla, no se si cambiando a otras configuraciones que he visto con las resistencias pull up fuera del micro puede que funcione...
Si alguien ve algun fallo por favor que lo diga.

Gracias y un saludo.

      

      processor 16F876A

      LIST   P=16F876A   ;Se indica el modo de procesador
      
      INCLUDE   <P16f876A.inc>   ;se incluye la definicion de los
               ;registros internos

      __config 3D31
      


PDel0      EQU   0x21
PDel1      EQU   0x22
PDel2      EQU   0x23
BUFFER      EQU   0x24
INNER      EQU   0x25      ;delay variable mS
OUTER      EQU   0x26      ;delay variable mS
Digito      EQU   0x27

ASCII_H      EQU   0x31
ASCII_M      EQU   0x32
ASCII_L      EQU   0x33

HEXADECIMAL   EQU   0x34


;*************** PARA EL TECLADO ***************************
;


;*********************************************************


;----------------------------------------------------------------------------


      org    0x00      ;vector de inicio
      goto    INICIO


      org    0x05      ;despues del vector de interrupcion
      goto   ServicioInterrupcion


      

;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
;----------------------------------------------------------------------------

INICIO   
      bcf   STATUS,RP0   ;banco 0 _-_-_-_-_-_-_-_-_-_-_-_-_-_-
      bcf   STATUS,RP1
      clrf   PORTA      ;Limpia latches puerto
      clrf   PORTB      ;Limpia latches puerto
      clrf   PORTC      ;Limpia latches puerto
      
      bsf   STATUS,RP0   ;banco 1 _-_-_-_-_-_-_-_-_-_-_-_-_-_-
         
      movlw   0x06      ;Puerto A en modo digital
      movwf   ADCON1
      clrf   TRISA      ;PortA como entrada
      clrf   TRISB      ;PortB como salida
      clrf   TRISC      ;PortC como salida
      
      bcf   STATUS,RP0   ;banco 0 _-_-_-_-_-_-_-_-_-_-_-_-_-_-
      
      clrf   PORTA      ;Limpia latches puerto
      clrf   PORTB      ;Limpia latches puerto
      clrf   PORTC      ;Limpia latches puerto

      


;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
   call    LCD_INI
   movlw   b'00000001'     ;Borrar LCD y Home    
    call    LCD_REG                                    
    movlw   b'00000110'     ;                          
    call    LCD_REG                                    
    movlw   b'00001100'     ;LCD On, cursor Off,Parpadeo Off
    movlw   0x80            ;Direccion caracter
    call    LCD_REG  
      movlw   '0'
      call    LCD_DATOS       ;Visualiza caracter
   
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

;###############################################################################
;   PROBANDO TECLADO

   call    Teclado_Inicializa

   movlw   b'11001000'         ; Habilita la interrupción RBI, perifericos y la general.
   movwf   INTCON

   sleep

;   movlw   b'00000000'         ; deshabilita las interrupciónes del teclado
;   movwf   INTCON






aux2   call    PDelay      ;retardo de 2 segundos
      goto   aux2
   




;###########################################################################
;###########################################################################
del_1ms      movlw   d'199'      ;delay 1mS
      movwf   INNER
in_lp      nop
      nop
      decfsz   INNER,F
      goto   in_lp
      return

delay      movwf   OUTER      ;vueltas de 1mS
out_lp      call   del_1ms
      decfsz   OUTER,F
      goto   out_lp
      return
      


;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
   
Hex_Ascii   ;cargar en W el dato hex.
;
      ;MOVLW   .254
      MOVWF   HEXADECIMAL
            clrf    ASCII_H          ;Para BCD D'0'
            clrf    ASCII_M       ;Para BCD D'0'
            clrf    ASCII_L         ;Para BCD D'0'
;
Centenas
;
            movlw     D'100'          ;D'100' --> W
            subwf   HEXADECIMAL,W   ;HEXADECIMAL - D'100' --> W
            btfss   STATUS,C        ;¿ HEXADECIMAL es menor que D'100' ?
            goto    Decenas         ;Si
            movwf   HEXADECIMAL     ;Salva el resto
            incf    ASCII_H,F       ;Incrementa el contador de centenas BCD
            goto    Centenas        ;Vuelve por otros D'100'
;
Decenas
;
            movlw   D'10'             ;D'10' --> W
            subwf   HEXADECIMAL,W   ;HEXADECIMAL - D'10' --> W
            btfss   STATUS,C        ;¿ HEXADECIMAL es menor que D'10' ?
            goto    Unidades        ;Si
            movwf   HEXADECIMAL     ;Salva el resto
            incf    ASCII_M,F       ;Incrementa el contador de decenas BCD
            goto    Decenas         ;Vuelve por otros D'10'
;
Unidades
;
            movf    HEXADECIMAL,W   ;El resto pertenece
            movwf   ASCII_L         ;a las unidades BCD
            clrf    HEXADECIMAL     ;Pone a cero el registro HEXADECIMAL
;
Bcd_A_Ascii
;
            movlw    H'30'           ;H'30' --> W
            iorwf   ASCII_L,F       ;Convierte de BCD a ASCII
            iorwf   ASCII_M,F       ;Convierte de BCD a ASCII
;
            movf    ASCII_H,F       ;ASCII_H --> F
            btfsc   STATUS,Z                ;? ASCII_H es D'00' ?
            goto    Espacio         ;Si
            movlw   H'30'           ;H'30' --> W
            iorwf   ASCII_H,F       ;Convierte de BCD a ASCII
            return                  ;Retorna
;
Espacio
;
            movlw   '0'            ;A' ' --> W
            movwf   ASCII_H     ;A' ' --> ASCII_H
            ;movwf   ASCII_M     ;A' ' --> ASCII_H
            ;movwf   ASCII_L     ;A' ' --> ASCII_H
            return                  ;Retorna
;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()









;###########################################################################
;===========================================================================
;--------------------- RUTINAS LCD 2x16 ------------------------------------
;===========================================================================
;###########################################################################

LCD_E           BSF     PORTA,2         ;Activa señal E
                NOP
                NOP
                NOP                     ;Espera 1uS
                BCF     PORTA,2         ;Desactiva señal E
                RETURN        
                             
LCD_BUSY        BSF     PORTA,1         ;Pone el LCD en modo lectura
                BSF     STATUS,RP0      ;Selecciona el Banco 1
                MOVLW   0xFF  
                MOVWF   TRISB           ;Puerta B act£a de entrada
                BCF     STATUS,RP0      ;Selecciona el Banco 0
                BSF     PORTA,2         ;Activa el LCD (Señal E)
                NOP          
L_BUSY          BTFSC   PORTB,7         ;Chequea el bit BUSY
                GOTO    L_BUSY          ;Est  a "1" (Ocupado)
                BCF     PORTA,2         ;Desactiva el LCD (Se¤al E)
                BSF     STATUS,RP0      ;Selecciona el Banco 1
                CLRF    TRISB           ;Puerta B actua como salida
                BCF     STATUS,RP0      ;Selecciona el Banco 0
                BCF     PORTA,1         ;Pone el LCD en modo escritura
                RETURN        
                             
LCD_REG         BCF     PORTA,0         ;Desactiva RS (Modo instruccion)
                MOVWF   PORTB           ;Saca el codigo de instruccion
                CALL    LCD_BUSY        ;Espera a que se libere el LCD
                GOTO    LCD_E           ;Genera pulso en señal E
                             
LCD_DATOS       BCF     PORTA,0         ;Desactiva RS (Modo instrucci¢n)
                MOVWF   PORTB           ;Valor ASCII a sacar por PORTB
                CALL    LCD_BUSY        ;Espera a que se libere el LCD
                BSF     PORTA,0         ;Activa RS (Modo dato)  
                GOTO    LCD_E           ;Genera pulso en señal E
                             
LCD_INI         MOVLW   b'00111000'
                CALL    LCD_REG         ;Codigo de instruccion
                CALL    DELAY_5MS       ;Temporiza 5 mS.
                MOVLW   b'00111000'
                CALL    LCD_REG         ;Codigo de instruccion
                CALL    DELAY_5MS       ;Temporiza 5 mS.
                MOVLW   b'00111000'
                CALL    LCD_REG         ;Codigo de instruccion
                CALL    DELAY_5MS       ;Temporiza 5 mS.
                RETURN            
                             
;****************************************************************************                                                              
;DELAY_5MS genera una temporizacion de 5mS necesario para la secuencia de
;inicio del LCD                        
                                       
DELAY_5MS     movlw   .6           ; 1 set number of repetitions (B)
           movwf   PDel0        ; 1 |
PLoop1     movlw   .207         ; 1 set number of repetitions (A)
              movwf   PDel1        ; 1 |
PLoop2       nop                 ; 1 clear watchdog
           decfsz  PDel1, 1     ; 1 + (1) is the time over? (A)
           goto    PLoop2       ; 2 no, loop
           decfsz  PDel0,  1    ; 1 + (1) is the time over? (B)
           goto    PLoop1       ; 2 no, loop
PDelL1     goto   PDelL2         ; 2 cycles delay
PDelL2     nop                 ; 1 cycle delay
           return                 ; 2+2 Done
;###########################################################################



;-------------------------------------------------------------
; Description: Waits 2000000 cycles     2 segundos
;-------------------------------------------------------------
PDelay     movlw   .167      ; 1 set number of repetitions (C)
           movwf   PDel0     ; 1 |
PLoop0s     movlw   .41       ; 1 set number of repetitions (B)
           movwf   PDel1     ; 1 |
PLoop1s     movlw   .72       ; 1 set number of repetitions (A)
           movwf   PDel2     ; 1 |
PLoop2s     nop              ; 1 clear watchdog
           decfsz  PDel2, 1  ; 1 + (1) is the time over? (A)
           goto    PLoop2s    ; 2 no, loop
           decfsz  PDel1,  1 ; 1 + (1) is the time over? (B)
           goto    PLoop1s    ; 2 no, loop
           decfsz  PDel0,  1 ; 1 + (1) is the time over? (C)
           goto    PLoop0s    ; 2 no, loop
PDelL1s     goto    PDelL2s         ; 2 cycles delay
PDelL2s     nop              ; 1 cycle delay
           return              ; 2+2 Done
;-------------------------------------------------------------














ServicioInterrupcion

   call    LCD_INI
   movlw   b'00000001'     ;Borrar LCD y Home    
    call    LCD_REG                                    
    movlw   b'00000110'     ;                          
    call    LCD_REG                                    
    movlw   b'00001100'     ;LCD On, cursor Off,Parpadeo Off
    movlw   0x81            ;Direccion caracter
    call    LCD_REG  
      movlw   '0'
      call    LCD_DATOS       ;Visualiza caracter
   retfie



      END

8
Microcontroladores / Error al compilar en MPLAB
« en: Miércoles 22 de Octubre de 2008, 16:41 »
Muy buenas. Hace unos meses que no tocaba el mplab, ahora resulta que hago un programilla nuevo y cuando compilo me sale un mensaje de error:

DOS File: File not found

Acepto y en la ventana del mplab "Build" me aparece lo siguiente:

Executing: "C:Archivos de programaMicrochipMPASM SuiteMPAsmWin.exe" /q /p16F876 "programador 1.0.asm" /l"programador 1.0.lst" /e"programador 1.0.err" /o"programador 1.0.o"
Skipping link step.  The project contains no linker script.
BUILD FAILED: Wed Oct 22 16:38:06 2008

Con otros programas me funciona perfectamente, y comparando el programa con los que funcionan bien no encuentro ninguna diferencia.
Si alguien puede echarme un cable se lo agradecere un moton!!!

Gracias y un saludo.

9
Microcontroladores / Gestion De Interrupciones
« en: Martes 20 de Noviembre de 2007, 23:59 »
Muy buenas. Tengo un problema al tener habilitadas varias interrupciones a la vez, concretamente de los timers y INT0 y las RB. Me ocurre, que cuando esta atendiendo a la interrupcion del timer0 y salta la del timer2, no se activa el bit de señalización, asi que cuando sale de la rutina de atencion que estaba atendiendo, no entra a la del timer2 (lo uso de cronometro, asi que es esencial que entre). Parecido ocurre con las RB4-7, pero al reves, si salta la irq, hace bien la rutina, pero no se borra el bit de aviso, ni con "bcf   INTCON,RBIF" ni "bcf   INTCON,0" y entra en un bucle sin salida ya que nunca se borra.
¿Alguien sabe que ocurre?
Gracias de antemano y un saludo.

10
Microcontroladores / Registro "rcon" Del 16f876
« en: Domingo 4 de Noviembre de 2007, 21:37 »
Muy buenas. Tengo un problema con la interrupcion del timer1 en un programa básico. Todo esta bien aparentemente, solo que no salta al vector de interrupcion (0x04h).
Tengo un libro de los pic 16F87X y 18FXXX, en el cual, en el capitulo de interrupciones, me habla de un registro "RCON" que contiene el bit "IPEN" que sirve para permitir las interrupciones. Sorprendentemente, en el mapa de registros este "RCON" no aparece en ningun banco y el MPLAB tampoco lo reconoce. Al principio pensé que por culpa de no configurar este registro no me funciona el programa, pero ahora creo que o bien es de la serie 18, o bien es un gazapo en el libro. El caso es que el programilla no me funciona en la simulación y no se porque. ¿Alguien me puede ayudar?
Gracias y un saludo.

11
Microcontroladores / Bucle Que No Funciona
« en: Jueves 18 de Octubre de 2007, 21:47 »
Muy buenas. Quiero mostrar en un LCD de 4x20, en la primera linea, una barra que muestre el "valor" del conversor analogico digital, cuando este sea 0 no se mostrara nada, cuando sea 255 (maximo) que muestre la 1º linea llena de cuadrados rellenos (caracter FF del LCD compatible hitachi). Para convertir los 255 valores en 20, realizo una division a base de restas, 255/13 = 19,algo asi que resto 13 y muestro cuadrados hasta que el valor de "Barra" sea <0, testeando el flag C que se pondra a uno, salgo del bucle. El asunto es que no funciona, se enciende solamente el 1º caracter y en algunos valores concretos se apaga, los demas caracteres de la linea no se encienden nunca, y es algo que no logro entender. El lcd funciona perfectamente,  es el algoritmo el que falla porque sin la division funciona bien (pero no se ajusta a los 20 caracteres). Uso el pic 16f876, por si sirve de algo. Es la unica forma de poder ajustar por software (que yo sepa), la otra opción sería con un divisor de tension mediante un potenciometro a la entrada del conversor, pero preferiría averiguar porque no funciona así.

Gracias y un saludo.

x_salta    
      movlw 0x0D             ; W=13
      subwf   Barra,1      ; barra = barra - 13

      btfsc   STATUS,C
      return

      movlw   0xFF         ; caracter
      call    LCD_DATOS       ; Visualiza caracter
      goto x_salta

12
Microcontroladores / Comentario Largo El Mplab
« en: Lunes 8 de Octubre de 2007, 20:54 »
Muy buenas. Para comentar una zona de codigo de mas de una linea hay algun metodo sencillo como el /*   */ de C o hay que hacer ; a pelo en todas las lineas?
Saludos.

13
Microcontroladores / Problema 16f876 Y Lcd
« en: Jueves 27 de Septiembre de 2007, 14:59 »
Muy buenas. Tengo un display hitachi de 4x20 caracteres y quiero probarlo con un programa simple.
He visto un codigo en internet muy interesante:

http://www.x-robotics.com/downloads/rutinas/X-Temp_LM35.txt

Mas o menos hace lo que yo quiero, (pongo el mio adjunto) que es mirar la tension en AN0 y sacarlo por el display, en realidad el programa mira en 4 entradas, pero como yo solo uso la AN0, he borrado las rutinas que hacen el resto. No se usan librerias, va todo  en rutinas.
El unico inconveniente es que esta realizado para un display de 2x16, no se si sera por eso que no funciona.
Mi display tiene la pantalla azul oscuro, modificando el contraste consigo que 2 filas de las 4 se pongan mas o menos blancas, imagino que es lo que tiene que hacer, pero no se si tengo que encender los led de la retroiluminacion para ver algo.
Estoy por probar el programa sin modificar a ver que pasa...
Saludos.

14
Microcontroladores / Re: Problemas Al Compilar
« en: Domingo 23 de Septiembre de 2007, 19:35 »
Muy buenas. Estoy realizando un programilla para un 16F876 que hace lo siguiente: Programamos el timer0 para producir unas 15 interrupciones por segundo. Cuando salta la interrupción, mira el valor analogico de AN0, lo pasa a BCD y lo saca por el LCD. El asunto es que a la hora de compilar, me da un montón de errores, imagino que  por el uso de las librerias, pero no lo tengo nada claro, en el primer error indica la direccion 0, osea, a inicio.
¿Alguien puede echarme un cable?
Gracias y un saludo.

15
Microcontroladores / Pic 12c509 Programable Una Sola Vez?
« en: Viernes 20 de Julio de 2007, 14:53 »
Muy buenas. Quiero usar un pic 12f509, pero me encuentro por ahí que es OTP, osea, solo programable una vez. Me llama la atención que en la web de microchip indican que la memoria es del tipo "Standard Flash", por lo que no entiendo a que se debe que solo sea programable una sola vez.
Otra cosilla. He encontrado el 12c508 en smd, pero tiene poca ram y necesito usar por lo menos el 509, pero no lo encuentro en smd. ¿alguien sabe de algun sitio para comprarlo?
Un saludo.

16
Microcontroladores / Re: Tamaño Maximo De Memoria I2c Para Pics
« en: Martes 13 de Marzo de 2007, 19:36 »
Muy buenas. Quiero realizar un proyecto en el que se mete en una memoria gran cantidad de informacion (unos pocos megas) concretamente de texto, para despues sacarlo por un lcd. La duda que no he conseguido aclarar hasta ahora es si hay un limite de memoria manejable para los pics de 8 bits. En el libro que tengo del 16f84 viene la 24lc256 (32kB) como la más grande, no se si es porque en el momento de editar el libro efectivamente era la de mayor tamaño, o si es la mayor con la que puede trabajar el pic al ser de 8 bits. He visto hasta 24LC2048 integradas en tarjetas de plastico (con micro atmel) y 24LC1024 en encapsulado SOP, que es el formato que mas me interesa. Estaba pensando tambien si se podria utilizar una tarjeta SD de 16Mb que tengo, si tengo que pasarme a otro tipo de microcontroladores o si he de usar uno de 16 bits o los DSP. Como soy novato en pics no acabo de aclararme con estas cosillas. ¿Alguien puede iluminarme un poco?
Saludos.

17
Microcontroladores / Problema Con Variable En Mpasm
« en: Miércoles 28 de Febrero de 2007, 15:14 »
Muy buenas de nuevo. He declarado una variable "ABAJO" cuyo valor puede ser '0' o '1', para indicarle a la rutina de giro de un motor que gire en un sentido o en el otro. La curiosidad, es que a partir de una posicion del programa, en cada paso que doy en el simulador, esta variable se me incrementa inexplicablemete, lo que hace que el programa funcione mal. Las demas estan bien, es solamente esta la que se incrementa. ¿Es cosa del MPASM?¿virus?¿cachondeo?
Saludos.

18
Microcontroladores / Duda Gorda Sobre Los Bancos De Memoria
« en: Domingo 25 de Febrero de 2007, 22:36 »
Muy buenas. Al compilar mi codigo me da el error de que el registro al que intento acceder (option_reg) no esta en el banco 0, cuando yo acabo de configurar RP0 a 1 y RP1 a 0 (banco 1). Estoy mirando programas de ejemplo y veo que accede a PORTB que esta en el banco 0 cuando el banco actual es el 1:

                bsf   STATUS,RP0   ; Acceso al Banco 1.
   clrf   PORTB      ; Puerto B como salida.
   bcf   STATUS,RP0   ; Acceso al Banco 0.

y al compilar este ejemplo no da ningun error. La unica diferencia es que mi programa es para el 16f876 y el ejemplo es para el 16f84.
No entiendo nada. ¿Alguien me lo puede explicar?
Saludos.

19
Microcontroladores / Retardo Mínimo Para Un Pap
« en: Domingo 25 de Febrero de 2007, 11:22 »
Muy buenas. ¿Alguien sabe el tiempo de retardo minimo que hay que darle a un motor PAP para que funcione bien?
Un saludo.

20
Microcontroladores / ¿como Hacer Una Comparacion?
« en: Viernes 23 de Febrero de 2007, 15:31 »
Muy buenas. Me gustaria hacer un programa que moviese un motor PAP a una determinada posicion en funcion del valor de la entrada analogica que controlo con un potenciómetro. Lo realizo con un 16F876. El asunto es que realizo la conversión de la entrada analogica y necesito ver si el valor es mayor al que habia antes o menor para saber si he de mover el motor en un sentido o en sentido contrario hasta llegar a la posicion indicada por el valor de la entrada analogica. ¿Alguien tiene alguna idea?
Un saludo.

21
Microcontroladores / Declarar Variables En Mplab
« en: Sábado 17 de Febrero de 2007, 13:25 »
Buenas. ¿Se pueden declarar variables para el MPASM de forma parecida al PicBasicPro? (perro var byte ; gato var bit ; W0 var word ; sharks var byte[10]....) ¿Se pueden declarar las variables como espacios  (pepe .space 8)?
Saludos.

22
Microcontroladores / Velocidad Grabado En Eeprom 16f876
« en: Domingo 11 de Febrero de 2007, 23:08 »
Muy buenas. Estoy intentando hacer un control de unos motores PAP con el 16F876 usando el CAD, unos pulsadores y unos interruptores para seleccionar acciones, display lcd...
Tengo que usar unas variables que son la posicion de cada motor en cada momento y necesito guardarlas en memoria no volatil, osea, EEPROM de datos o la FLASH de programa. ¿Para que en memoria no volatil? Por si se va la alimentación mientras el dispositivo esta en marcha, necesito saber la posición en la que estaban los motores, puesto que sino reiniciará con valores aleatorios o borrados que tomara como una posición en la que el motor no esta, llegando al mal funcionamiento del aparato.
He leído que el tiempo de escritura en EEPROM es de unos 10ms, y dado que el sistema es a tiempo real, quiero que funcione muy rápido y tiene muchas subrutinas que hacer, por lo que esos 10ms no se si será demasido tiempo en el que está parado el micro, o no ha llegado a grabar un dato cuando se lo mando leer o grabar otro encima...
No estoy seguro de lo que va a hacer el micro, si lo puedo usar mientras está grabando o tengo que esperar los 10 ms y no me fio de los simuladores.
La cuestion es ¿funcionara bien? ¿hay otra forma de guardar en memoria no volatil mas rapidamente sin usar otro chip? ¿Hay alguna forma de guardarlo rapidamente en caso de fallo de alimentación?

Un saludo.

23
Microcontroladores / Sobre Entrenadores Pic
« en: Lunes 16 de Febrero de 2004, 14:57 »
Hace años utilice el micropic trainer, en una web de electronica que tenia muy buena pinta he visto otro muy polivalente, estoy a ver si lo localizo. Cual comprariais? Sirven de verdad para hacer todo tipo de pruebas?
Saludetes.

24
Microcontroladores / Proyecto: Grua Para Camara De Video
« en: Jueves 5 de Febrero de 2004, 00:28 »
Buenas, como ya dije en otro post sin respuesta  :(  soy mas bien nuevo en esto, aunque en el pasado hice mis pinitos. Quiero construirme una grua tipo a esta:

http://www.dvinfo.net/canon/articles/article35.htm

Quizas un poco mas pequeña, pero el diseño seria muy parecido. Para el control de los mandos de la videocamara usare el mando remoto, asi que por eso no hay que preocuparse, pero para mover la camara donde esta sujeta quiero hacerlo con un par de motores para el movimiento horizontal y vertical. La de la foto tiene solamente movimiento vertical y a manivela, horizontalmente esta fija en la posicion que la pongas, pero quiero mejorar eso y ademas hacer el control de los motores con un pic y unos potenciometros/pulsadores. Se que puedo hacerlo analogicamente con unos circuitillos simples, pero me resulta mas emocionante el control digital. Que pic me recomendais?? Serian mejor motores paso a paso?? Quiero hacer tambien un regulador de velocidad, con un interruptor (o pulsador) que seleccione 1x, 2x, 4x de velocidad (por ejemplo, se visualizaria la velocidad seleccionada mediante unos leds o mejor aun, un display) y despues el mando de movimiento realizarlo con un joystick o gamepad. Que os parece??
Saludos.

25
Microcontroladores / Error Al Compilar Asm
« en: Domingo 1 de Febrero de 2004, 22:47 »
Buenas, estoy haciendo mis primeros pinitos con pics, he bajado de la red unos ejemplos de programas para controlar motores, sensores y demas, pero al complilarlos con el MpAsmWin me da error de que ciertas variables usadas en el programa no han sido declaradas. Sin embargo, se supone que los asm tiene que funcionar perfectamente y las variabes a veces si estan declaradas (Lcd_var):

CBLOCK   Lcd_var         ;Inicio de las variables

y otras veces no (RP0 aparece aqui por primera vez):

UP_LCD          bsf     STATUS,RP0      ;Banco 1

Asi me pasa con otras variables llamadas Z, W... etc que no estan declaradas por ningun lado. Sin embargo, en otros codigos asm que compilo me aparece lo mismo, pero no da error!!! (Z no ha sido declarada anteriormente):

btfss   STATUS,Z   ;Mira si es el último (0x00)

En este ultimo ejemplo el pic es un 16f876, lo que me da pensar que el 16f84 (el utilizado en los ejemplos anteriores) no tiene esos registros y por lo tanto el codigo tiene el tipo de pic mal declarado.
¿Las declaro como Z equ 0? mejor seria Z res 1? o es el compilador que esta mal??
saludos.

Páginas: [1]