TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: pakofer en 12 de Abril de 2007, 06:43:40

Título: Convertidor A/D 3 Analog Channels IN - Problemas con el codigo
Publicado por: pakofer en 12 de Abril de 2007, 06:43:40
Buenas;

Estoy usando un rfPIC12F675F trabajando en los 433mhz (supongo que el convertidor del PIC12F675 es el mismo) y me gustaria saber si este código es correcto, porque hay algo que no entiendo:

Código: [Seleccionar]
READ_ANALOG_ACCX

        bcf     ADCON0, CHS1        ; select analog channel AN0
        bcf     ADCON0, CHS0

        goto    READ_ANALOG

READ_ANALOG_ACCY

        bcf     ADCON0, CHS1        ; select analog channel AN0
        bsf     ADCON0, CHS0

READ_ANALOG_ACCZ

        bsf     ADCON0, CHS1        ; select analog channel AN0
        bsf     ADCON0, CHS0


READ_ANALOG

bsf     ADCON0, ADON
        movlw   D'6'                ; At 4 MHz, a 22us delay
        movwf   TEMP                ; (22us = 2us + 6 * 3us + 1us)
        decfsz  TEMP, F
        goto    $-1

        bsf     ADCON0, GO          ; start A/D conversion

        btfsc   ADCON0, GO          ; has A/D conversion completed?
        goto    $-1

        bcf     ADCON0, ADON        ; Turn off ADC module (consumes no operating current)

        return

He visto en muchos ejemplos que en la primera subrutina de lectura hace un salto hasta READ_ANALOG, osea, goto READ_ANALOG y las otras no, entonces, como se leen las otras entradas?.

Para la entrada estoy utilizando un ACELERÓMETRO DE 3 EJES , por lo que me da una entrada del orden de milivoltios, unos 150-300 mV

ALguien sabria decirme si este codigo es correcto?

Gracias
Título: Re: Convertidor A/D 3 Analog Channels IN - Problemas con el codigo
Publicado por: maunix en 12 de Abril de 2007, 11:53:21
A mi modo de verlo, no es correcto.

Se debe llamar al la rutina readanalog, cada vez que cambies el canal.

Además, no usando un goto sino un 'call' ya que de esta rutina se regresa con un return.  Por último, no veo que se "lea" realmente la conversión, esto se haría haciendo un move del registro ADRESx

Saludos