▷ RTC DS1307 con PIC y LCD - Programado en Microcode

MATERIALES:

  • PIC 16F628A
  • Modulo RTC DS1307
  • LCD 16x2
  • Crystal de 32768KHz
  • Potenciometro de 1k
  • Resistencia de 4.7k
  • Pila de 3v

DIAGRAMA DE CONEXIONES:


Conexión PIC/LCD 16x2:

Conectamos los pines del PIC con los del lcd de la siguiente manera:


PORTB.0 con RS

PORTB.1 con E

PORTA.0 con D4

PORTA.1 con D5

PORTA.2 con D6

PORTA.3 con D7


Conexión RTC BOARD/PIC


PORTB.6 con SDA

PORTB.7 con SCL


CÓDIGO EXPLICADO:

  1. cmcon = 7; convertimos los pines analógicos en digitales
  2.  
  3. ;Definimos los pines en donde ira conectado el LCD
  4. define LCD_DREG PORTA
  5. define LCD_DBIT 0
  6. define LCD_RSREG PORTB
  7. define LCD_RSBIT 0
  8. define LCD_EREG PORTB
  9. define LCD_EBIT 1
  10.  
  11. DEFINE I2C_SCLOUT 1 ;para que no necesite resistencia pull-up en SCL
  12.  
  13. CPIN VAR Portb.7 ;pin señal de reloj I2C
  14. DPIN VAR Portb.6 ;pin de datos I2C
  15. segu VAR BYTE ;definir tamaño de variable segundos 1 a 255
  16. minu VAR BYTE ;variable para los minutos
  17. hora VAR BYTE ;variable para las horas
  18. diaS VAR BYTE ;variable día de la semana
  19. diaF VAR BYTE ;variable día fecha del mes
  20. mes VAR BYTE ;variable mes
  21. anio VAR BYTE ;variable año de 2 dígitos
  22. actualizado VAR BIT ;variable para almacenar un 1 o 0
  23. EEPROM 0,[0] ;memoria 0 con el valor inicial 0, sirve para
  24. ;indicar que nunca ha corrido este programa
  25. READ 0,actualizado ;carga el valor de la memoria EEPROM dirección 0
  26. IF actualizado =0 THEN grabarRTC ;si es la 1ra vez que corre ir a grabar RTC
  27. ;caso contrario sólo leer el RTC
  28.  
  29. INICIO:
  30.  
  31.     I2CREAD DPIN,CPIN,%11010000,0,[segu] ;leer los datos de mem. 0,
  32.     I2CREAD DPIN,CPIN,%11010000,1,[minu] ;1,2,..y guardarlos en sus
  33.     I2CREAD DPIN,CPIN,%11010000,2,[hora] ;respectivas variables
  34.     I2CREAD DPIN,CPIN,%11010000,3,[diaS]
  35.     I2CREAD DPIN,CPIN,%11010000,4,[diaF]
  36.     I2CREAD DPIN,CPIN,%11010000,5,[mes]
  37.     I2CREAD DPIN,CPIN,%11010000,6,[anio]
  38.  
  39.     LCDOUT $fe,1 , $fe,2
  40.     ;mostrar día de la semana
  41.     IF diaS=$1 THEN LCDOUT "Dom."
  42.     IF diaS=$2 THEN LCDOUT "Lun."
  43.     IF diaS=$3 THEN LCDOUT "Mar."
  44.     IF diaS=$4 THEN LCDOUT "Mie."
  45.     IF diaS=$5 THEN LCDOUT "Jue."
  46.     IF diaS=$6 THEN LCDOUT "Vie."
  47.     IF diaS=$7 THEN LCDOUT "Sab."
  48.  
  49.     lcdout hex2 diaf ;mostrar día del mes
  50.     LCDOUT "/"
  51.  
  52.     ;mostrar el mes
  53.     IF mes=$1 THEN LCDOUT "ene"
  54.     IF mes=$2 THEN LCDOUT "feb"
  55.     IF mes=$3 THEN LCDOUT "mar"
  56.     IF mes=$4 THEN LCDOUT "abr"
  57.     IF mes=$5 THEN LCDOUT "may"
  58.     IF mes=$6 THEN LCDOUT "jun"
  59.     IF mes=$7 THEN LCDOUT "jul"
  60.     IF mes=$8 THEN LCDOUT "ago"
  61.     IF mes=$9 THEN LCDOUT "sep"
  62.     IF mes=$10 THEN LCDOUT "oct"
  63.     IF mes=$11 THEN LCDOUT "nov"
  64.     IF mes=$12 THEN LCDOUT "dic"
  65.  
  66.     LCDOUT "/20"
  67.     lcdout hex2 anio ; mostrar año /20 + 21
  68.     LCDOUT $fe,$c0,HEX2 hora,":", HEX2 minu,":", HEX2 segu ;mostrar la hora
  69.     ; min y segs. en 2 dígitos (HEX2)
  70.  
  71.     PAUSE 500
  72.  
  73. GOTO inicio ;volver a leer los datos
  74. ; ************************ subrutina grabar *********************
  75. grabarRTC:
  76.  
  77.     I2CWRITE DPIN,CPIN,%11010000,0,[$00] ;setear 00 segundos
  78.     PAUSE 10 ;retardo para finalizar grabación
  79.     I2CWRITE DPIN,CPIN,%11010000,1,[$32] ;setear 32 minutos
  80.     PAUSE 10
  81.     I2CWRITE DPIN,CPIN,%11010000,2,[$15] ;setear las 15 horas
  82.     PAUSE 10
  83.     I2CWRITE DPIN,CPIN,%11010000,3,[$5] ;setear día jueves, D=1,L=2
  84.     PAUSE 10 ;M=3, M=4, J=5, V=6, S=7
  85.     I2CWRITE DPIN,CPIN,%11010000,4,[$21] ;setear día 21 del mes
  86.     PAUSE 10
  87.     I2CWRITE DPIN,CPIN,%11010000,5,[$1] ;setear mes enero
  88.     PAUSE 10
  89.     I2CWRITE DPIN,CPIN,%11010000,6,[$21] ;setear año 21
  90.     PAUSE 10
  91.     WRITE 0,1 ;escribe en la memoria 0 el valor de 1 para que no
  92.     ;se vuelva a grabar otra vez estos datos en el RTC
  93.  
  94. GoTo INICIO

DESCARGA EL CÓDIGO Y SIMULACIÓN

0/Post a Comment/Comments