Autor Tema: Ayuda con entradas digitales  (Leído 5038 veces)

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

Desconectado armans

  • PIC10
  • *
  • Mensajes: 9
Re: Ayuda con entradas digitales
« Respuesta #15 en: 13 de Mayo de 2014, 07:00:32 »
Con la resistencia y CLRF PORTA Y PORTC parece que ya ha funcionado, muchisimas gracias.

Aunque de momento vuelvo a las mismas, meto algo nuevo y vuelve a no ir, estoy intentando cambiar la simple apertura de una salida por otra por PWM. El periodo final si no lo he calculado mal es de aproximadamente de 1ms y ya que gasto PR2=15 mi pwm creo que irá de 0 a 16 inclusive. Estoy probando cosas, pero de momento no se ilumina nada.

Código: [Seleccionar]
LIST P=16F886
    INCLUDE P16F886.INC

    __CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
    __CONFIG _CONFIG2, _BOR40V & _WRT_OFF

    CBLOCK 0X20
    ENTRADA
    ENDC

    ORG 00
    GOTO INICIO

INICIO  NOP
    ; Configuración del oscilador
    BANKSEL OSCCON
    MOVLW B'01001100' ; Oscilador interno a 1 MHz
    MOVWF OSCCON ; envía la instrucción de ajuste a OSCCON

    ; Inicialización de los puertos
    BANKSEL PORTA
    CLRF PORTA
    BANKSEL ANSEL
    MOVLW B'00000001' ; RA0 analogico, lo demás digital
    MOVWF ANSEL
    BANKSEL TRISA ; selecciona TRISA
    MOVLW B'11111111'
    MOVWF TRISA    

    BANKSEL PORTB
    CLRF PORTB
    BANKSEL ANSELH
    MOVLW B'00000000'
    MOVWF ANSELH
    BANKSEL TRISB ; selecciona TRISB
    MOVLW B'11111111'
    MOVWF TRISB

    BANKSEL PORTC
    CLRF PORTC
    BANKSEL TRISC
    CLRF TRISC ; Configuro RC2 como salida
    
    MOVLW .15
    MOVWF PR2
    ; con PR2 asigno el periodo
    ; La fórmula para el período es T = (PR2 + 1)*4*Tosc * Valor divisor prescaler TMR2
    ; Jugando con esos valores podemos cambiar el período (y la frecuencia)
    ; Nota: el 4*Tosc del período viene porque TMR2 funciona a un cuarto de la
    ; frecuencia del oscilador seleccionado (es decir, cuatro veces su período)

    ; Ajusta el oscilador externo con CCP1CON
    MOVLW B'00001101'
    MOVWF CCP1CON
    ; Modo PWM 1101 <3,2,1,0>, bit <5,4> en ceros
    ; La configuración activa el modo PWM, y la salida modulada es el pin P1A (pin 13)
    ; Ajusta el prescaler, que nos da el período (y por tanto, al invertirlo, la frecuencia)
    
    MOVLW B'00000110' ;
    ; A partir de la datasheet:
    ;       - bit MSB se ignora
    ;       - bits 6-3 dan el valor de división del postscaler (pasando de binario a decimal; por ejemplo, 0111 sería un postscaler de 7)
    ;       - bit 2 activa el temporizador
    ;       - bits 1-LSB indican la división del prescaler, la que parece que usa este programa:
    ; <1x> Un prescaler de 16 da un periodo apox de 4ms y una frec de 244Hz
    ; <01> Un prescaler de 4 da un periodo apox de 1ms y una frec de 1KHz
    ; <00> Un prescaler de 1 da un periodo apox de 250us y una frec de 4KHz
    MOVWF T2CON ; ajusta prescaler y activa TMR2
    CLRF CCPR1L ; Duty en cero (0)

NUEVO
    BANKSEL PORTA
    MOVF PORTA, W
    MOVWF ENTRADA

    BTFSC ENTRADA, 1
    GOTO OPCION1

    ;BTFSC ENTRADA, 2
    ;GOTO OPCION2

    CLRF CCPR1L

    GOTO NUEVO

OPCION1
    MOVLW .15
    MOVWF CCPR1L
    GOTO NUEVO

;OPCION2
;    MOVLW .10
;    MOVWF CCPR1L
;    GOTO NUEVO

    END

De momento he comentado una opcion para hacerlo más sencillo.

Un saludo.
« Última modificación: 13 de Mayo de 2014, 07:44:02 por armans »

Desconectado armans

  • PIC10
  • *
  • Mensajes: 9
Re: Ayuda con entradas digitales
« Respuesta #16 en: 14 de Mayo de 2014, 07:51:15 »
ya me va, el problema era que portb despues de PR2 se desconfiguraba de algun modo, entonces colocandolo despues ya conserva sus valores a 1 para activar el pwm.

Un saludo y gracias por la ayuda.


 

anything