10
CONVERSOR ANALÓGICO DIGITAL DEL PIC16F877 RODRÍGUEZ BALLESTEROS NELSON ROBERTO ARREOLA ROJAS JESUS SALVADOR

Conversor analógico

Embed Size (px)

Citation preview

Page 1: Conversor analógico

CONVERSOR ANALÓGICO DIGITAL DEL PIC16F877RODRÍGUEZ BALLESTEROS NELSON ROBERTOARREOLA ROJAS JESUS SALVADOR

Page 2: Conversor analógico

Tanto nuestra voz como muchas de las señales que se envían a través de un medio guiado como un cable o no guiado como es el aire son de tipo continuo y pueden tomar infinitos valores a lo largo del tiempo.

Page 3: Conversor analógico

El muestreo implica que tenemos que coger una muestra de la señal cada T segundos ya que no hay memoria suficiente capaz de almacenar los infinitos puntos de una señal en un intervalo cualquiera de tiempo

Page 4: Conversor analógico

Estos valores van a depender del número de bits que vayamos a almacenar para cada muestra, por ejemplo, en la imagen se cogen 4 bits y con ellos se pueden formar 16 combinaciones y por lo tanto 16 distintos niveles en los que se puede dividir el eje. El PIC cuantifica con 10 bits luego son 1023 niveles

Page 5: Conversor analógico

ERROR DE CUANTIFICACIÓN El parámetro fundamental del muestreo digital es el intervalo de

muestreo ▲seg., o su equivalente frecuencia de muestreo 1/▲ Hz. cuanto menor sea ▲, mayor número de valores obtendremos de

la señal, y viceversa la obtención de una serie discreta ordenada {xr} = {x0, x1,

x3,..., xr,...}, en la que el índice r indica la posición de orden temporal del valor xr. Así, el valor de la señal original, en el tiempo t = ▲r, x (t), se representa por xr.

Page 6: Conversor analógico

temp ; This code if for the TC74A5-5.0VAT temperature sensor ; 1st. Check if temperature is ready to be read in config reg. ; 2nd. If ready, retireve temperatute in hex. ; If not ready, check config register again.

bankselTRISC;initialize MSSP module bsf TRISC,3 bsf TRISC,4 movlw B'00101000' bankselSSPCON movwf SSPCON bankselSSPSTAT bsf SSPSTAT,SMP movlw .5 movwf SSPADD

bankselPIR1 bcf PIR1,TMR1IF

Page 7: Conversor analógico

clrf TMR1H;load regs for 2 sec overflow

clrf TMR1L get_temp banksel cmd_byte movlw 0x01

;config register command byte movwf cmd_byte temp_now banksel SSPCON2

;write to TC74 bsf SSPCON2,SEN btfsc SSPCON2,SEN goto $-1 movlw B'10011010' ;send TC74

ADDRESS (write) banksel SSPBUF movwf SSPBUF call ssprw banksel SSPCON2 btfsc SSPCON2,ACKSTAT

;ack? goto $-1

banksel cmd_byte movf cmd_byte,w ;send

COMMAND byte (config) banksel SSPBUF movwf SSPBUF call ssprw banksel SSPCON2 btfsc SSPCON2,ACKSTAT

;ack? goto $-1

bsf SSPCON2,RSEN;send repeated start

btfsc SSPCON2,RSEN goto $-1 movlw B'10011011' ;send TC74

ADDRESS (read) banksel SSPBUF movwf SSPBUF call ssprw

;module idle? banksel SSPCON2 btfsc SSPCON2,ACKSTAT

;ack? goto $-1

bsf SSPCON2,RCEN;enable receive mode

btfsc SSPCON2,RCEN goto $-1

banksel SSPBUF;retrieve config reg or temp reg

movf SSPBUF,w

banksel SSPCON2;send NOT-ACK

bsf SSPCON2,ACKDT bsf SSPCON2,ACKEN btfsc SSPCON2,ACKEN goto $-1

bsf SSPCON2,PEN ;stop btfsc SSPCON2,PEN goto $-1

banksel cmd_byte ;config command OR temp command

btfss cmd_byte,0 goto convert_temp ;get

temperature ready for display

andlw 0x40 sublw 0x40 btfss STATUS,Z ;is temp

ready ?? goto get_temp ;NO, try

again movlw 0x00

;YES, send temp command banksel cmd_byte ;send temp

register command movwf cmd_byte goto temp_now

convert_temp movwf temperature call bin_bcd

;NO, get temp ready for LCD call LCDLine_1

movlw A'T';send "Temp=" to LCD

movwf temp_wr call d_write movlw A'e' movwf temp_wr call d_write movlw A'm' movwf temp_wr call d_write movlw A'p' movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write movlw A'=' movwf temp_wr call d_write

movlw 0x20;space

movwf temp_wr call d_write

movf MSD,w;send high digit

movwf temp_wr call d_write movf MsD,w

;send middle digit movwf temp_wr call d_write movf LSD,w

;send low digit movwf temp_wr call d_write movlw A'C'

;send "C" for Celsius movwf temp_wr call d_write

movlw 0x20;space

movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write

call LCDLine_2 ;send "RB0 = Exit" to LCD

banksel ptr_pos

movlw .144 movwf ptr_pos call stan_char_2

btfss select;wait for RB0 release

goto $-1 call delay_100ms btfss select

;exit ? goto menu_clock ;YES, goto

main menu btfsc PIR1, TMR1IF ;2 second

overflow occur ?? call write_eeprom ;YES goto get_temp ;NO, get

temperature again

call ssprw banksel SSPCON2 btfsc SSPCON2,ACKSTAT

;ack? goto $-1

bsf SSPCON2,RSEN;send repeated start

btfsc SSPCON2,RSEN goto $-1 movlw B'10011011' ;send TC74

ADDRESS (read) banksel SSPBUF movwf SSPBUF call ssprw

;module idle? banksel SSPCON2 btfsc SSPCON2,ACKSTAT

;ack? goto $-1

bsf SSPCON2,RCEN;enable receive mode

btfsc SSPCON2,RCEN goto $-1

banksel SSPBUF;retrieve config reg or temp reg

movf SSPBUF,w

banksel SSPCON2;send NOT-ACK

bsf SSPCON2,ACKDT bsf SSPCON2,ACKEN btfsc SSPCON2,ACKEN goto $-1

bsf SSPCON2,PEN ;stop btfsc SSPCON2,PEN goto $-1

banksel cmd_byte ;config command OR temp command

btfss cmd_byte,0 goto convert_temp ;get

temperature ready for display

andlw 0x40 sublw 0x40 btfss STATUS,Z ;is temp

ready ?? goto get_temp ;NO, try

again movlw 0x00

;YES, send temp command banksel cmd_byte ;send temp

register command movwf cmd_byte goto temp_now

convert_temp movwf temperature call bin_bcd

;NO, get temp ready for LCD call LCDLine_1

movlw A'T';send "Temp=" to LCD

movwf temp_wr call d_write movlw A'e' movwf temp_wr call d_write movlw A'm' movwf temp_wr call d_write movlw A'p' movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write movlw A'=' movwf temp_wr call d_write

movlw 0x20;space

movwf temp_wr call d_write

movf MSD,w;send high digit

movwf temp_wr call d_write movf MsD,w

;send middle digit movwf temp_wr call d_write movf LSD,w

;send low digit movwf temp_wr call d_write movlw A'C'

;send "C" for Celsius movwf temp_wr call d_write

movlw 0x20;space

movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write

call LCDLine_2 ;send "RB0 = Exit" to LCD

banksel ptr_pos

movlw .144 movwf ptr_pos call stan_char_2

btfss select;wait for RB0 release

goto $-1 call delay_100ms btfss select

;exit ? goto menu_clock ;YES, goto

main menu btfsc PIR1, TMR1IF ;2 second

overflow occur ?? call write_eeprom ;YES goto get_temp ;NO, get

temperature again

Page 8: Conversor analógico

bsf SSPCON2,ACKDT bsf SSPCON2,ACKEN btfsc SSPCON2,ACKEN goto $-1

bsf SSPCON2,PEN ;stop btfsc SSPCON2,PEN goto $-1

banksel cmd_byte ;config command OR temp command

btfss cmd_byte,0 goto convert_temp ;get

temperature ready for display

andlw 0x40 sublw 0x40 btfss STATUS,Z ;is temp

ready ?? goto get_temp ;NO, try

again movlw 0x00

;YES, send temp command banksel cmd_byte ;send temp

register command movwf cmd_byte goto temp_now

convert_temp movwf temperature call bin_bcd

;NO, get temp ready for LCD call LCDLine_1

movlw A'T';send "Temp=" to LCD

movwf temp_wr call d_write movlw A'e' movwf temp_wr call d_write movlw A'm' movwf temp_wr call d_write movlw A'p' movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write movlw A'=' movwf temp_wr call d_write

movlw 0x20;space

movwf temp_wr call d_write

movf MSD,w;send high digit

movwf temp_wr call d_write movf MsD,w

;send middle digit movwf temp_wr call d_write movf LSD,w

;send low digit movwf temp_wr call d_write movlw A'C'

;send "C" for Celsius movwf temp_wr call d_write

movlw 0x20;space

movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write

call LCDLine_2 ;send "RB0 = Exit" to LCD

banksel ptr_pos

movlw .144 movwf ptr_pos call stan_char_2

btfss select;wait for RB0 release

goto $-1 call delay_100ms btfss select

;exit ? goto menu_clock ;YES, goto

main menu btfsc PIR1, TMR1IF ;2 second

overflow occur ?? call write_eeprom ;YES goto get_temp ;NO, get

temperature again

call bin_bcd;NO, get temp ready for LCD

call LCDLine_1

movlw A'T';send "Temp=" to LCD

movwf temp_wr call d_write movlw A'e' movwf temp_wr call d_write movlw A'm' movwf temp_wr call d_write movlw A'p' movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write movlw A'=' movwf temp_wr call d_write

movlw 0x20;space

movwf temp_wr call d_write

movf MSD,w;send high digit

movwf temp_wr call d_write movf MsD,w

;send middle digit movwf temp_wr call d_write movf LSD,w

;send low digit movwf temp_wr call d_write movlw A'C'

;send "C" for Celsius movwf temp_wr call d_write

movlw 0x20;space

movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write

call LCDLine_2 ;send "RB0 = Exit" to LCD

banksel ptr_pos

movlw .144 movwf ptr_pos call stan_char_2

btfss select;wait for RB0 release

goto $-1 call delay_100ms btfss select

;exit ? goto menu_clock ;YES, goto

main menu btfsc PIR1, TMR1IF ;2 second

overflow occur ?? call write_eeprom ;YES goto get_temp ;NO, get

temperature again

Instrucción cambio de señal

Page 9: Conversor analógico

call d_write

movf MSD,w;send high digit

movwf temp_wr call d_write movf MsD,w

;send middle digit movwf temp_wr call d_write movf LSD,w

;send low digit movwf temp_wr call d_write movlw A'C'

;send "C" for Celsius movwf temp_wr call d_write

movlw 0x20;space

movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write movlw 0x20

;space movwf temp_wr call d_write

call LCDLine_2 ;send "RB0 = Exit" to LCD

banksel ptr_pos

movlw .144 movwf ptr_pos call stan_char_2

btfss select;wait for RB0 release

goto $-1 call delay_100ms btfss select

;exit ? goto menu_clock ;YES, goto

main menu btfsc PIR1, TMR1IF ;2 second

overflow occur ?? call write_eeprom ;YES goto get_temp ;NO, get

temperature again

call LCDLine_2 ;send "RB0 = Exit" to LCD

banksel ptr_pos

movlw .144 movwf ptr_pos call stan_char_2

btfss select;wait for RB0 release

goto $-1 call delay_100ms btfss select

;exit ? goto menu_clock ;YES, goto

main menu btfsc PIR1, TMR1IF ;2 second

overflow occur ?? call write_eeprom ;YES goto get_temp ;NO, get

temperature again

Page 10: Conversor analógico

Medidor de temperatura