TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: 16f en 12 de Mayo de 2008, 17:35:36
-
hola amigos , tengo que realizar un Gestionador de motores ...... es muy parecido a un rele de motres secuenciado.
como funciona , si tengo 1 2 3 o 4 motores, se activara o activaran los motores con menos tiempo de funcionamiento.
para esto requerimos un rtc (ds1307 o ds1302) para que nos de el tiempo real, con el 16f628a.
ejemplo: m1 3hrs
m2 20min
m3 1hrs
m4 50min
como existiran 4 sensores y la proxima vez que se active uno de ellos hara funcionar el que tenga menos tiempo , en este caso sera M2.
la cosa es como podemos guardar los tiempos de cada motor. y luego determinar .........cual actua?.
-
16F este tema ya lo has planteado muchas veces porque no sigues un solo hilo donde ya te han respondido.
Para que tu sistema sea muy preciso te recomiendo que uses ya sea la memoria interna de un PIC o una externa apoyada de un RTC, para que verifiques cuanto tiempo duro cada motor encendido y asi enciendas la proxima vez el que deseas.
El programa, pues si resultara algo complejo, como estoy en el trabajo dejame darte una explicacion de lo que yo haria. Cada motor es un salida del PIC por lo que al estar en bajo estos se encuentran apagados. Cuando encienda cada salida yo haria que el pic loggeara la hora en la que inicia y la hora en la que termina esto a traves del RTC y asi para cada uno. Cuando llegue la proxima vez de encender los motores, mediante una rutina evaluaria cada tiempo para cada pin y el menor seria el que se activara, repitiendo el logger del RTC.
-
Navaismo , te cuento he dividido los temas , segun la forma y requerimientos del programa, no es el afan de llenar y llenar con temas, y lo hice por que en muchos foros piden hacer otro hilo cuando el tema cambia de rumbo.
bueno te doy las gracias por tu tiempo, yo he ocupado el 1307 y el 1302 para un reloj despertador con el 16f628a
ahora a que le llamas logger
claro mas menos esta la idea pero la parte codigo es lo que falta. me imagino un pedaso de memoria para cada motor donde podre guardar el tiempo completo para cada motor , o por ejemplo solo minutos ( como ejemplo)
-
Le llamo logger, a un dato que se almacena dando su hora de inicio y su hora de termino, con eso puedes sacar la relacion.
-
mira con este programa he trabajado, la cosa es que modifico
DEVICE = 16F628A
XTAL = 4
LCD_DTPIN = PORTB.4
LCD_RSPIN = PORTB.3
LCD_ENPIN = PORTB.0
LCD_INTERFACE = 4 ' 4-bit Interface
LCD_LINES = 2 ' 2-Line LCD
LCD_TYPE = 0 ' Alphanumeric LCD type
CMCON=7
DIM RTCCMD AS BYTE
DIM TEMP AS BYTE
DIM TEMP1 AS BYTE
DIM TIMEDATA[6] AS BYTE
DIM OLDSECONDS AS BYTE
DIM SECONDS AS timedata#0
DIM MINUTES AS timedata#1
DIM HOURS AS timedata#2
DIM DATE AS timedata#3
DIM MONTH AS timedata#4
DIM YEAR AS timedata#5
'Define registers
SYMBOL SECREG = %00000
SYMBOL MINREG = %00001
SYMBOL HRSREG = %00010
SYMBOL DATEREG = %00011
SYMBOL MONREG = %00100
SYMBOL YRREG = %00110
SYMBOL CTRLREG = %00111
SYMBOL BRSTREG = %11111
SYMBOL CLK = PORTA.0
SYMBOL DTA = PORTA.1
SYMBOL RST = PORTB.6
' Time setup data held in eeprom memory
PRST EDATA $00,$00,$12,$20,$03,$02
ALL_DIGITAL = True
CLS
' Clear Write Protect bit in control register of DS1302
TEMP = $10
RTCCMD = CTRLREG
GOSUB DS1302_WRITE
' Pre-set the time registers using a data table stored in eeprom memory
FOR TEMP1 = 0 TO 5
TEMP = EREAD PRST + TEMP1
RTCCMD = TEMP1
GOSUB DS1302_WRITE
NEXT
TEMP = $80
RTCCMD = CTRLREG
GOSUB DS1302_READ
'Only Displays on the LCD if the seconds have changed
WHILE 1 = 1
GOSUB DS1302_READ
IF OLDSECONDS <> SECONDS THEN
PRINT AT 1,1, "TIME ", HEX2 HOURS,":",HEX2 MINUTES,":",HEX2 SECONDS
PRINT AT 2,1, "DATE ", HEX2 DATE,"/",HEX2 MONTH,"/",HEX2 YEAR
ENDIF
WEND
'-----------------------------------------------------------------------------------
' Write to DS1302 RTC
DS1302_WRITE:
HIGH RST
SHOUT DTA, CLK, LSBFIRST, [%0\1,RTCCMD\5,%10\2,TEMP\8]
LOW RST
RETURN
'-----------------------------------------------------------------------------------
' Read from the DS1302
DS1302_READ:
HIGH RST
SHOUT DTA, CLK, LSBFIRST, [%111111\6,%10\2]
OLDSECONDS = SECONDS
SHIN DTA, CLK, LSBPRE, [SECONDS,MINUTES,HOURS,DATE,MONTH,YEAR,YEAR]
LOW RST
RETURN
-
Esa rutina solo te sirve para configurar y ver la ora del RTC, necesitas agregar la parte del control de motores y las condiciones para que cada que los pines se activen leas el rtc y lo guardes en una variable y cuando se apague vuelva a leer el rtc lo guarde y compare.
-
eso me falta, comandar el motor no es problema , y dar las condiciones , el asunto donde estoy colgado es armar la grabacion del tiempo de cada motor.