Autor Tema: PIC12F675 con Pic Basic del Pic Simulator IDE  (Leído 39566 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #45 en: 19 de Julio de 2009, 21:48:45 »
una pregunta dogflu, como utilizo los comparadores en el pic, no como los habilito si no como puedo utilizarlos dentro de un programa..gracias :)

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #46 en: 20 de Julio de 2009, 20:39:57 »
Dejo este ejemplo recién confeccionado para que lo analicéis, lo he probado y aparentemente funciona bien.
Más adelante le echare otro rato y expondré como lo he realizado. De todas formas como están indicados los
nombres de los registros es posible seguirlos sobre el datasheet del micro.

Código: Visual Basic
  1. Define CONF_WORD = 0x31c4  'Palabra de configuracion (Fuses)
  2. Define CLOCK_FREQUENCY = 4  'Frecuencia del reloj en Mhz
  3. '********************************************************************************
  4. 'NOMBRE: 12F675_Ejemplo_2_COMPARADOR MODE
  5. 'MICRO: PIC12F675, 4Mhz Interno
  6. 'DESCRIPCION: Uso del comparador analogico
  7. 'FECHA/AUTOR: By COS, 07/09
  8. 'Version 1.0
  9. 'Lectura de la entrada analogica AN2 y se asigna su valor
  10. 'a la cvref interna del modulo comparador.
  11. 'Se utiliza como entrada para comparar la CIN-
  12. 'VRR =1 : CVREF = (VR3:VR0 / 24) * VDD, uso esta configuracin en el modulo comparador
  13. '********************************************************************************
  14. 'Define SEROUT_DELAYUS = 0  'Serout sin demoras entre bytes
  15. Symbol adc_ok = ADCON0.GO  'adc_ok = 0 -> el modulo ADC tiene una lectura lista
  16. '************************ Declaracion de variables ******************
  17. Dim adc_and2 As Word
  18. Dim cvref_in As Word
  19. Dim c_out As Byte
  20. '***************** Asignacion de valores a las variables *******
  21. adc_and2 = 0
  22. c_out = 0
  23. cvref_in = 0
  24. '************* Configuracion modulos generales (E/S) *********
  25. CMCON = %00000100  'comparator CN1=ON
  26. VRCON = %10100000  'vref ON, vrr = 1 (cvref -> min. =0 y max. = 3.125V)
  27. ANSEL = %00010110  'fosc/8 (4Mhz=2uSeg.), an2 y an1 en mode analogico, resto de pin digitales
  28. ADCON0 = %00001001  'adc a 8bit, vdd reference, adc On
  29. 'ADCON0.ADFM = 1  '10BIT ADC
  30. ADCON0.GO = 1  'Inicia conversion ADC
  31. OSCCAL = 0x47  'calibracion del oscilador interno
  32. TRISIO = 0xff  'tri-state pins, entradas
  33. TRISIO.4 = 0  'GP4 pin, como salida, Tx puerto serie
  34. TRISIO.5 = 1  'GP5 pin, como entrada
  35. '*********************Configuracion del Timer1*****************************
  36. T1CON.TMR1CS = 0  'bit de seleccion de reloj para el timer1, interno Fosc/4
  37. T1CON.T1CKPS0 = 0  'bit de seleccion del prescaler para el reloj del timer1
  38. T1CON.T1CKPS1 = 0  'bit de seleccion del prescaler para el reloj del timer1
  39. T1CON.TMR1ON = 0  'parado el contador del TMR1
  40. PIE1.TMR1IE = 0  'desactiva las interrupciones del timer1
  41. '--------------------------------------Main Programa------------------------------
  42. WaitMs 500  'espera 5Seg.
  43. main:  'Rutina del programa principal (inicio)
  44.         If adc_ok = 0 Then Gosub lectura_adc  'Comprueba si el ADC tiene lectura
  45.         Gosub v_ref_in  'Calcula tension de referencia interna modulo comparador
  46.         c_out.0 = CMCON.COUT  'Resultado comparacion
  47.         Serout GPIO.4, 2400, CrLf, "ADC_AND2: ", #adc_and2, " CVREF: ", #cvref_in, CrLf
  48.         Serout GPIO.4, 2400, #c_out, CrLf
  49.         WaitMs 200
  50. Goto main  'Redirecciona el flujo del programa al inicio
  51. End  'Fin del programa                            
  52. lectura_adc:  'Asigna lectura del ADC
  53.                 'adc_and2.HB = ADRESH  'Asigna valor ADC alto, 10bit
  54.                 'adc_and2.LB = ADRESL  'Asigna registro ADC valor bajo 10bit
  55.                 adc_and2 = ADRESH  'Para 8bit
  56.                 ADCON0.GO = 1  'Activa lectura del ADC
  57. Return                                            
  58. v_ref_in:  'Asigna volor de cvref segun la entrada analogica an2
  59.         cvref_in = (15 * adc_and2) / 255  'Convierte entrada analogica 8bit a 4bit
  60.         VRCON.VR3 = cvref_in.3
  61.         VRCON.VR2 = cvref_in.2
  62.         VRCON.VR1 = cvref_in.1
  63.         VRCON.VR0 = cvref_in.0
  64.         cvref_in = 0
  65.         cvref_in.3 = VRCON.VR3
  66.         cvref_in.2 = VRCON.VR2
  67.         cvref_in.1 = VRCON.VR1
  68.         cvref_in.0 = VRCON.VR0
  69. 'VRR = 0: cvref = vdd/4 + (VR3:VR0 / 32) * vdd
  70. 'VRR =1 : CVREF = (VR3:VR0 / 24) * VDD, USO ESTA CONFIGURACION
  71. Return

PD:
Donde dice "'Se utiliza como entrada para comparar la CIN+"
Ahora dice "'Se utiliza como entrada para comparar la CIN-"

Donde dice "ANSEL = %00010101  'fosc/8 (4Mhz=2uSeg.), an2 en mode analogico, resto de pin digitales"
Ahora dice "ANSEL = %00010110  'fosc/8 (4Mhz=2uSeg.), an2 y an1 en mode analogico, resto de pin digitales"

Los cambios no afectan al funcionamiento del programa.
« Última modificación: 21 de Julio de 2009, 19:40:31 por dogflu66 »
Saludos desde Granada, España.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #47 en: 21 de Julio de 2009, 02:45:00 »
gracias lo voy a checar.. :)

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC12F675 con Pic Basic del Pic Simulator IDE
« Respuesta #48 en: 15 de Febrero de 2011, 22:08:36 »
Para los que estaban interesados en este hilo, por el momento lo estoy continuando en mi pagina, más adelante lo pasare por aquí también.

http://www.pickey.es/proyectos.html
Saludos desde Granada, España.


 

anything