Autor Tema: Ayuda con la programación  (Leído 2002 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pepocor

  • PIC10
  • *
  • Mensajes: 8
Ayuda con la programación
« en: 04 de Diciembre de 2004, 09:22:00 »
Hola a todos. Hace muy poco que estoy en esto de la programación y me ha surgido una duda que me trae de cabeza. Conseguí hacerme un programador para el 16f877/a pero no consigo programar según me gustaría.

Mi problema es que necesito hacer un programa que al tiempo que parpadea un led conectado a RB1 se visualice un contador en un display de 7 segmentos. Según las pulsaciones de un switch conectado a RB0 podré aumentar/disminuir la cuenta y si la pulsación es mayor a un segundo cambiar el tipo de cuenta y en lugar de mostrar números, mostrar una serie de símbolos.

El problema que no consigo resolver es como hacer las pausas para mostrar el parpadeo y el display sin que ello me estorbe a las posibles lecturas del switch. He probado con interrupciones pero no resuelvo nada.

Cualquier sugerencia o código similar sería agradecido enormemente.

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Ayuda con la programación
« Respuesta #1 en: 04 de Diciembre de 2004, 15:07:00 »
Por que no colocas el codigo del programa de los que has realizado hasta el momento. Muchos te podemos ayudar.

gfp Sonrisa

Desconectado pepocor

  • PIC10
  • *
  • Mensajes: 8
RE: Ayuda con la programación
« Respuesta #2 en: 07 de Diciembre de 2004, 09:48:00 »
Hola de nuevo, ya conseguí más o menos solucionar el problema anterior mediante el uso del timer0.
Ahora planteo otra duda que espero también resolver en breve. Es sobre el conversor A/D. Se supone que recibo por RA0 una tensión proveniente de un potenciómetro y de acuerdo con esta señal tendré que hacer que el circuito (led + contador) parpadeen a una determinada frecuencia (dependiendo de la posición del potenciómetro).  Ahora bien, mi duda es como transformar los 10 bits del conversor (0-1023) en un número decimal con el que poder trabajar usando registros de 8 bits. Lo que se me había ocurrido era decrementar el total recibido en la conversión por el factor que diferencia a un estado de otro (suponiendo, por ejemplo, 15 posibles posiciones del potenciómetro) e incrementar una variable que sería la velocidad con la que actuaría el sistema.

Conversor_AD
   movlw 0xA
   movwf cont_pot
                bsf     ADCON0,GO       ;Comenzamos la conversión A/D
        Espera
        btfsc   ADCON0,GO       ;Esperamos a que se complete la
        goto    Espera                ;conversión, para ello preguntamos
                     ;por el estado del bit GO

        movf    ADRESL,W        ;Cogemos la parte baja de la direccíón
                   ;
        movwf   Potencia        ;LEDs
   
; Potencia será un valor entre 0 y 1023, dependiendo de la tensión que entre
; por la puerta RA0 y, por tanto, de la situación de nuestro potenciómetro.
; Como no tenemos registros de 10 bits cogemos la parte baja del resultado
; que comprenderá valores de 0 - 255.
; Como no nos interesa más que un múltiplo de dicho valor dividiremos el
; resultado entre 15, los posibles estados de nuestro sistema y nos dará
; el valor de cada intervalo, 17

        movlw D"17"
      movwf incremento

        suma
          btfss STATUS,0           ; Mientras se active el flag de acarreo (borrow)  
                                             ; tendremos un número mayor y seguimos restando
                return
          movfw incremento
          subwf Potencia,0        ;Vamos decrementando a la cantidad obtenida  
                                             ; del potenciómetro
          movwf Potencia          ; el valor base con el que dividimos la frecuencia de
                                             ; parpadeo     
          incf cont_pot               ; e incrementamos el contador de frecuencia
          goto suma   

Muchas gracias por leer el ladrillo. Un saludo.

Desconectado pepocor

  • PIC10
  • *
  • Mensajes: 8
RE: Ayuda con la programación
« Respuesta #3 en: 07 de Diciembre de 2004, 10:07:00 »
Con respecto al código anterior, aclarar que en un principio en lugar de justificar a la derecha lo hice a la izquierda y en lugar de seleccionar los bits de ADRESL lo hice de ADRESH y tampoco me funcionaba el mismo código.
En teoría me daría completamente igual que la conversión fuera de 8 bits en lugar de 10 para poder trabajar con ellos pero en la práctica este ejemplo anterior no funciona.

Gracias de nuevo y espero disculpen mi torpeza de primerizo.