Autor Tema: temporizador programable  (Leído 2213 veces)

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

Desconectado neosud

  • PIC12
  • **
  • Mensajes: 51
temporizador programable
« en: 02 de Mayo de 2004, 15:16:00 »
hola amigos estoy por emprender un nuevo proyecto, les explico:
quisiera realizar un temporizador programable para ello voy a trabajar con un pic16f873/6, teclado hexadecimal, pantalla lcd con luz (aun no he trabajado con estos lcd, cuales son los pines para el manejo de la luz, tienen algun circuito?, como caracteres crear los nuevos caracteres en  la memoria cgram?), 2 relay 12vdc/30A.
lo que deseo hacer es programar a traves del teclado hexadecimal la hora a la cual se debe activar cada uno de los realys pudiendo ser tiempos diferentes.
para ello sé q debo tener control del tiempo real y si por ejemplo:
son la 1:20 pm y quisiera q uno de los relay se active a las 7:00 pm se debe mostrar el tiempo como va avanzando en la pantalla lcd, sé q ello se puede hacer con chips de tiempo real como el ds1320 creo, pero en mi caso quisiera hacerlo con el pic y aprovechar el tmr1 y trabajar para ello con un cristal de 32.768 KHz, el problema q tengo es q aun no trabajado con este timer solo lo he hecho con el TMR0, alguien ha realizado alguna aplicacion parecida a esta?
por favor podrian ayudarme al respecto, gracias desde ya por atención.
la programación de los pic lo hago en asembler, pero me gustaria trabajar con el pbplus, ya tengo el software pero me seria de gran  ayuda tener el manual del mismo en español, si alguien lo tiene y sabe de donde puedo descargarlo por favor hacermelo saber, gracias.

mi correo es: jcotrinamatta@eresmas.com
                     jcotrinamatta@hotmail.com

podrian enviarme informacion del manual en español a este mail?
gracias

Desconectado MasterD

  • PIC10
  • *
  • Mensajes: 10
RE: temporizador programable
« Respuesta #1 en: 10 de Mayo de 2004, 11:22:00 »
Segun mis concocimientos si quieres usar tiempo real lo mejor es
un RTC Externo. con su alimentación de energia aislada. Los Timer
de los micros aunque muy exactos. Sin embargo cuando se comparten tareas como leer un teclado e imprimir datos en una LCD. Las cosas no marchan bien. de todos modos toma este ejemplo de MeLabs:

" LCD clock program using On Interrupt
"  Uses TMR0 and prescaler.  Watchdog Timer should be
"  set to off at program time and Nap and Sleep should not be used.
"  Buttons may be used to set hours and minutes

Define  LCD_DREG        PORTD   " Define LCD connections
Define  LCD_DBIT        4
Define  LCD_RSREG       PORTE
Define  LCD_RSBIT       0
Define  LCD_EREG        PORTE
Define  LCD_EBIT        1

hour    var     byte    " Define hour variable
dhour   var     byte    " Define display hour variable
minute  var     byte    " Define minute variable
second  var     byte    " Define second variable
ticks   var     byte    " Define pieces of seconds variable
update  var     byte    " Define variable to indicate update of LCD
i       var     byte    " Debounce loop variable

        ADCON1 = 7      " PORTA and E digital
        Low PORTE.2     " LCD R/W low = write
        Pause 100       " Wait for LCD to startup

        hour = 0        " Set initial time to 00:00:00
        minute = 0
        second = 0
        ticks = 0

        update = 1      " Force first display

" Set TMR0 to interrupt every 16.384 milliseconds
        OPTION_REG = $55        " Set TMR0 configuration and enable PORTB pullups
        INTCON = $a0            " Enable TMR0 interrupts
        On Interrupt Goto tickint


" Main program loop - in this case, it only updates the LCD with the time
mainloop:
        PORTB = 0       " PORTB lines low to read buttons
        TRISB = $f0     " Enable all buttons

        " Check any button pressed to set time
        If PORTB.7 = 0 Then decmin
        If PORTB.6 = 0 Then incmin      " Last 2 buttons set minute
        If PORTB.5 = 0 Then dechr
        If PORTB.4 = 0 Then inchr       " First 2 buttons set hour

        " Check for time to update screen
chkup:  If update = 1 Then
                Lcdout $fe, 1   " Clear screen

                " Display time as hh:mm:ss
                dhour = hour    " Change hour 0 to 12
                If (hour // 12) = 0 Then
                        dhour = dhour + 12
                Endif

                " Check for AM or PM
                If hour < 12 Then
                        Lcdout dec2 dhour, ":", dec2 minute, ":", dec2 second, " AM"
                Else
                        Lcdout dec2 (dhour - 12), ":", dec2 minute, ":", dec2 second, " PM"
                Endif

                update = 0      " Screen updated
        Endif

        Goto mainloop   " Do it all forever


" Increment minutes
incmin: minute = minute + 1
        If minute >= 60 Then
                minute = 0
        Endif
        Goto debounce

" Increment hours
inchr:  hour = hour + 1
        If hour >= 24 Then
                hour = 0
        Endif
        Goto debounce

" Decrement minutes
decmin: minute = minute - 1
        If minute >= 60 Then
                minute = 59
        Endif
        Goto debounce

" Decrement hours
dechr:  hour = hour - 1
        If hour >= 24 Then
                hour = 23
        Endif

" Debounce and delay for 250ms
debounce: For i = 1 to 25
        Pause 10        " 10ms at a time so no interrupts are lost
        Next i

        update = 1      " Set to update screen

        Goto chkup


" Interrupt routine to handle each timer tick
        disable         " Disable interrupts during interrupt handler
tickint: ticks = ticks + 1      " Count pieces of seconds
        If ticks < 61 Then tiexit       " 61 ticks per second (16.384ms per tick)

" One second elasped - update time
        ticks = 0
        second = second + 1
        If second >= 60 Then
                second = 0
                minute = minute + 1
                If minute >= 60 Then
                        minute = 0
                        hour = hour + 1
                        If hour >= 24 Then
                                hour = 0
                        Endif
                Endif
        Endif

        update = 1      " Set to update LCD

tiexit: INTCON.2 = 0    " Reset timer interrupt flag
        Resume

        End

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: temporizador programable
« Respuesta #2 en: 11 de Mayo de 2004, 07:18:00 »
Hola:
las patas correspondientes al backlight son la 15 y 16 y estan marcadas como catodo y anodo de un diodo por ende al anodo debes ingresarle a travez de una R de 270ohms ,5 volts y el catodo a masa ,si la luz es muy tenue puedes bajar el valor de la R
Algunos son directos a 5 volts pero no te lo aconsejo de entrada mandar 5 directos al anodo.
Suerte
khasitos
Manual =2.6mg/hay lugar?

Desconectado neosud

  • PIC12
  • **
  • Mensajes: 51
RE: temporizador programable
« Respuesta #3 en: 15 de Mayo de 2004, 12:23:00 »
gracias amigo por su sugerencia, intentare probarlo, sabes tengo un pequeño inconveniente q no cuento con el software pb pro o el pb pro compiler, acabo de bajar el tutorial en españal del pb pro compiler del Sr Frino, lo poco q he leido veo q es muy potente, podria enviarme informacion de donde puedo descargar este software por favor.
gracias desde ya por su ayuda, saludos.

Desconectado neosud

  • PIC12
  • **
  • Mensajes: 51
RE: temporizador programable
« Respuesta #4 en: 15 de Mayo de 2004, 12:26:00 »
sorry, no lo habia visto, si tengo el espacio suficiente en el correo jcotrinamatta@eresmas.com
gracias por su ayuda

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: temporizador programable
« Respuesta #5 en: 15 de Mayo de 2004, 22:39:00 »
A mi, mas o menos utilizando un programa algo parecido al que comentais arriba, pero trabajando con la interrupción exclusivamente en ASM, me funciona el timer muy bien....Pero tengo un pequeño problemilla....
Al activar la interrupción de la usart, el timer no funciona...
Y el pic se vuelve loco...



 

anything