'******************************************
'* Monitor de Bateria para Auto 12 Voltio *
'* con ATtiny45 *
'* 3 Estado con -LEDs para ver sus voltage *
'***********************************************
$regfile = "attiny45.dat"
$crystal = 8000000
$hwstack = 60
$swstack = 60
$framesize = 60
'configuracion de los Puertos
Config Portb.0 = Output ' LED1 < 11.80 V
Config Portb.1 = Output ' LED2 >11.8 V..12.5 V
Config Portb.2 = Output ' LED3 crgando
Config Portb.4 = Output ' Led3 control de carga encendida/apagada
Portb.0 = 0 'LED1 verde Bateria en estado bajos 11,80 voltio
Portb.1 = 0 'LED2 amarillo Bateria en estado 12,50 voltio
Portb.2 = 0 'LED3 rojo Bateria en estado Cargando
Portb.4 = 0 ' Relais para activar cargador de Bateria
Dim W As Word
Dim Channel As Byte
Channel = 0
Config Adc = Single , Prescaler = Auto , Reference = Avcc ' Voltage de referencia externo con Pote
'inicio del Programa
Do
Start Adc
W = Getadc(3) ' pin3 ADC para Leer el Voltage del Pote
Stop Adc
'Voltage bajos 11,80 voltios
If W <= 863 And W < 863 Then ' si el voltage en menor o igual que 11.80 V (1024 / 14 * 11,80 = 863)
Portb.0 = 1 ' LED Rojo Encendido indica Bateria baja y salta para cargar
Portb.1 = 0 ' LED amarillo Apagado
Portb.2 = 0 ' LED rojo apagado
Portb.4 = 1 ' Batteria cargando
End If
If W >= 853 And W > 863 Then ' si el voltage es 12,50 Voltio
Portb.0 = 0 'Led Rojo
Portb.1 = 1 'LED Amaraillo encendido indica cargando
Portb.2 = 0 'LED Verde
Portb.4 = 1 'Reles Activado
End If
If W >= 863 And W > 950 Then
Portb.0 = 0
Portb.1 = 0
Portb.2 = 1
Portb.4 = 0 'Relay desactivado
End If
Loop Stop Adc
'Voltage bajos 11,80 voltios
If W <= 863 And W < 863 Then ' si el voltage en menor o igual que 11.80 V (1024 / 14 * 11,80 = 863)
Portb.0 = 1 ' LED Rojo Encendido indica Bateria baja y salta para cargar
Portb.1 = 0 ' LED amarillo Apagado
Portb.2 = 0 ' LED rojo apagado
Portb.4 = 1 ' Batteria cargando
End IfIf W >= 512 And W > 863 Then 'De 7V a 12.5V la bateria carga
'Cargo
End If
If W>= 950 Then ' 13V para de cargar
'Paro de cargar
End iF '******************************************
'* Monitor de Bateria para Auto 12 Voltio *
'* con ATtiny45 *
'* 3 Estado con -LEDs para ver sus voltage *
'***********************************************
$regfile = "attiny45.dat"
$crystal = 8000000
$hwstack = 60
$swstack = 60
$framesize = 60
'configuracion de los Puertos
Config Portb.0 = Output ' LED1 < 11.80 V
Config Portb.1 = Output ' LED2 >11.8 V..12.5 V
Config Portb.2 = Output ' LED3 crgando
Config Portb.4 = Output ' Led3 control de carga encendida/apagada
Portb.0 = 0 'LED1 verde Bateria en estado bajos 11,80 voltio
Portb.1 = 0 'LED2 amarillo Bateria en estado 12,50 voltio
Portb.2 = 0 'LED3 rojo Bateria en estado Cargando
Portb.4 = 0 ' Relais para activar cargador de Bateria
Dim W As Word
'Dim Channel As Byte
'Channel = 0
Config Adc = Single , Prescaler = Auto , Reference = Avcc ' Voltage de referencia externo con Pote
'Programmstart
Start Adc
Do
W = Getadc(3) ' pin3 ADC para Leer el Voltage del Pote
' Stop Adc
'Voltage bajos 11,80 voltios
If W <= 863 And W < 863 Then ' si el voltage en menor o igual que 11.80 V (1024 / 14 * 11,80 = 863)
Portb.0 = 1 ' LED verde Encendido
Portb.1 = 0 ' LED amarillo Apagado
Portb.2 = 0 ' LED rojo apagado
Portb.4 = 1 ' Rele activo Batteria cargando
End If
If W >= 863 And W > 924 Then ' if battery voltage is 12.50
Portb.0 = 0 'Led Rojo
Portb.1 = 1 'LED Amaraillo
Portb.2 = 0 'LED Verde
Portb.4 = 1 'Rele activado
End If
If W <= 924 And W > 950 Then
Portb.0 = 0
Portb.1 = 0
Portb.2 = 1
Portb.4 = 0 'Rele apagado
End If
If W > 995 Then 'si voltage es 14 voltio
Portb.0 = 0
Portb.1 = 0
Portb.2 = 1 'led verde encendido
Portb.4 = 0 'rele desactivado
End If
Loop '$sim
$regfile = "m8def.dat" ' Atmega32
$crystal = 4000000 '4Mhz
$hwstack = 40
$swstack = 40
$framesize = 40
'_______________Configuracion del LCD ________________________________
Config Lcdpin = Pin , Rs = Portd.5 , E = Portd.4 , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0
Config Lcd = 16 * 2
Cursor = Off
Cls
'---------------Configuracion del ADC---------------------------------
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Config Portb.0 = Output : Rele Alias Portb.0 'Rele SSR
Config Portb.1 = Output : Ledamarillo Alias Portb.1 ' bateria baja led intermitente
Config Portb.2 = Output : Ledrojo Alias Portb.2 'indicador de voltage bajo 12,20 voltio
Config Portc.0 = Input ' pin para ADC
Dim A As Byte 'calculo de 15volt x ADC
Dim Valueadc As Word 'Voltage bateria
Dim Voltage As Word 'calculo del valor ADC
Dim Displayvolt As String * 5 'convertir string a decimal
Dim Status As Byte
Const X = 0
Const Cargando = 1
Const Descargada = 2
'### inicio de Programa ###
Do
Valueadc = 0
For A = 1 To 15
Valueadc = Valueadc + Getadc(0)
Next A
Select Case Status
'despues del inciar
Case X
Select Case Valueadc
Case 0 To 12000
Home : Lcd "No hay bateria "
Case 12226 To 13800
Home : Lcd "Cargando... "
Status = Cargando
Set Rele
Case 13801 To 15421
Home : Lcd "Bateria cargada"
Status = Descargada
End Select 'fin despues de iniciar
' si la bateria esta cargando
Case Cargando
Select Case Valueadc
Case 0 To 12000
Home : Lcd "No hay bateria "
Reset Rele
Status = X
Case 13801 To 15421
Home : Lcd "Bateria llena"
Status = Descargada
Reset Rele
End Select 'end select when charging
Case Descargada
Select Case Valueadc
Case 0 To 12000
Home : Lcd "No hay bateria "
Status = X
Case 11001 To 12225
Home : Lcd "Cargando... "
Status = Cargando
Set Rele
End Select 'end select when waiting for discharge
End Select 'end select STATUS
If Valueadc < 12250 Then
Ledrojo = 1
Waitms 50
Ledrojo = 0
Else
Ledrojo = 0
End If
If Valueadc > 12226 Then
Ledamarillo = 1
Else
Ledamarillo = 0
End If
Voltage = Valueadc / 10 '100
Displayvolt = Str(voltage)
Displayvolt = Format(displayvolt , "00.00") '" 0.0")
Lowerline : Lcd Displayvolt ; "V "
Wait 1
Loop
End
'****Fin de programa
Select Case Valueadc
Case 0 To 12000
Home : Lcd "No hay bateria "
Status = X
Case 11001 To 12225
Home : Lcd "Cargando... "
Status = Cargando
Set ReleSelect Case Valueadc
Case 0 To 12000
Home : Lcd "No hay bateria "
Status = X
Case 11001 To 12225
Home : Lcd "Cargando... "
Status = Cargando
Set Rele a mi se me hace complicado de explicartelo.If Valueadc < 12250 Then
Ledrojo = 1
Waitms 50
Ledrojo = 0
Else
Ledrojo = 0
End If
If Valueadc > 12226 Then
Ledamarillo = 1
Else
Ledamarillo = 0
End Ifen la primera Sentencia pongo un LED que me indica o bateria baja de corriente o a pinto de cargar, que seria el LED amarilloAhora que me pongo a pensar.... si el circuito se alimenta de la bateria. Por que tener algo que te avise que no tiene bateria ?, Si cuando esto ocurra el circuito no va a estar funcionando xDpues lo hice asi para saber el estado de la bateria. siendo asi podria poner bateria baja o lo que se no?
Hola Genaro!
Te sugiero que no borre tus mensaje, porque si ya solucionaste el problema, a otro como tu le puede servir.
aqui estamos para aprender de los demas, aunque sea una burrada. ;-)
Saludos
:P ok,
haber, por donde esta atascado? si hay algo que no comprende, preguntala, que yo lo aprendi´tambien preguntando.
Saludos
si esta usando el mismo codigo o el ADC , pues ponlo aqui mismo, asi hacemos una Sopas :D
Saludos
$regfile = "m8adef.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Pinb.0 = Input : Inicio Alias Pinb.0
Config Portc = Input
Config Portd = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Leds As Word
Dim Inicio As Word
Do
Leds = Getadc(0)
'Fin carga
If Leds > 895 Then
Portd = &B11111101
End If
'Se inicia las carga con temporizador (15 hrs)
If Leds > 383 And Leds < 895 Then
Portd = &B11111100
Wait 1
Portd = &B11111110
Wait 1
End If
'se inicia las descarga cuando impulsa un boton
If Leds < 383 Then
Portd = &B11111011
End If
LoopHola a todos!!
Este es mi codigo las estoy probando con unos de 4.32 de las fuente incluido stk500 con un potenciometro de 10 k a las entrada adc estos es una prueba de experimento ya despues los alimento en 15 voltios con divisor de voltaje con unas bateria de 12 voltios y cambiar valores ADC.
Solo falta introducir un boton de inicio y carga durante 10 hrs.
Mi funcion es cuando aprieto el boton de inicio se descarga las bateria cuando llegue bajo salta a cargar las bateria los activa por medio de mosfet y un led de indicador blinkeando cuando llega durante 10 hrs se desconecta las bateria y queda prendido led en ON.Código: [Seleccionar]$regfile = "m8adef.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Pinb.0 = Input : Inicio Alias Pinb.0
Config Portc = Input
Config Portd = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Leds As Word
Dim Inicio As Word
Do
Leds = Getadc(0)
'Fin carga
If Leds > 895 Then
Portd = &B11111101
End If
'Se inicia las carga con temporizador (15 hrs)
If Leds > 383 And Leds < 895 Then
Portd = &B11111100
Wait 1
Portd = &B11111110
Wait 1
End If
'se inicia las descarga cuando impulsa un boton
If Leds < 383 Then
Portd = &B11111011
End If
Loop
Hasta ahi funciona a las perfecion mi pregunta como los agrego el temporizador de 10 hrs?
Saludos!!
Gracias por preguntar al instante :D pues segun lei que las C/1 que es las carga rapida durante una hora si es C/10 entonce las carga es lenta para proteger las bateria y vida util.
Por ejemplo si mi bateria es 3000mah seria 300 ma durante 10 horas de carga porque no es necesario? Yo he visto un cargador trabajando asi.
No los quiero para un sotano porque ya es otras cosa.... :D :D :D :D
No los quiero reloj gracias por las informacion los tendre que leer tu codigo para adaptarlo a mi cargador pero veo que necesito mas tiempo para estudiarlos apena estoy aprendiendo timer0,timer1,timer,2 y falta muchos.
Cuando se inicia el boton se carga durante 10 hrs estos es los que yo quiero amigo.
Gracias por preguntar al instante :D pues segu lei que las C/1 que es las carga rapida durante una hora si es C/10 entonce las carga es lenta para proteger las bateria y vida util.
Por ejemplo si mi bateria es 3000mah seria 300 ma durante 10 horas de carga porque no es necesario? Yo he visto un cargador trabajando asi.
No los quiero para un sotano porque ya es otras cosa.... :D :D :D :D
No los quiero reloj gracias por las informacion los tendre que leer tu codigo para adaptarlo a mi cargador pero veo que necesito mas tiempo para estudiarlos apena estoy aprendiendo timer0,timer1,timer,2 y falta muchos.
Cuando se inicia el boton se carga durante 10 hrs estos es los que yo quiero amigo.
'--------------------------------------------------------------------------'
'
' Control de Insoladora V 0.1
'
' Rafael Jimenez, 09.06.2001
'
'
'
' calculos para el Timer1 Timer1
' 65535 - (Oscilador_Fr / prescaler)
' 65535 - (16000000 Hz / 256)
' = 3035
'
'
' pines del Encoder Port A, Pin 0 und 1
' pulsador del encoder Port A, Pin 2
'
' Pines del LCD Port D, Db4 = Pin 0
' Db5 = Pin 1
' Db6 = Pin 2
' Db7 = Pin 3
' E = Pin 5
' Rs = Pin 4
'
' Reles Port A, Pin 7
'
'
'
'
'--------------------------------------------------------------------------'
$regfile = "m32def.dat" ' usaremos el Atmega 32 o otros
$crystal = 16000000 ' 16 Mhz Crystal
$hwstack = 32
$swstack = 8
$framesize = 24
$sim 'para simular
'------------------------------------------------------------------------------
' Configuracion del LCD
'
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4 ' en 4 Bit Modo
Cls
Cursor Off Noblink
'
'------------------------------------------------------------------------------
'Variables para usar
'
'
Dim B As Byte ' Variable para leer el Encoder
Dim Columna As Byte ' Posicion de la Columna en el LCD
Dim C As Integer
Dim Ce As Eram Integer 'EEprom para las variables (Tiempo de iluminacion)
Config Pina.0 = Input 'Pin B del Encoder
Config Pina.1 = Input 'Pin A del Encoder
Config Pina.2 = Input 'pulsador del Encoder
Config Pina.6 = Output 'Salida para el Buzzer)
Config Pina.7 = Output 'salida para el Relee
Porta = &B0000111 'activacion Port A: 0,1,2 Pull-Up
Porta.6 = 0 'Alarma Buzzer
Porta.7 = 0 'Relee apagado
C = Ce 'aqui llamamos el tiempo programado en la EEprom
If C < 0 Then
C = 0
Columna = 11
End If
If C >= 0 Then Columna = 11
If C >= 10 Then Columna = 10
If C >= 100 Then Columna = 9
'------------------------------------------------------------------------------
' aqui leemos el preajuste del Encoder
' para el tiempo de desactivacion el Relee
'
Leer_enc:
B = Encoder(pina.0 , Pina.1 , Izquierda , Derecha , 0)
Locate 1 , 2 : Lcd "Tiempo:" :
Locate 1 , Columna : Lcd C
Locate 1 , 13 : Lcd "segundo."
Locate 2 , 2 : Lcd "iniciamos?"
If Pina.2 = 0 Then Goto Countdown
Goto Leer_enc
End
'------------------------------------------------------------------------------
' Rotacion subroutine
'
Izquierda:
C = C - 5 ' valor del cambio en paso de - 5 Segundo.
If C <= 1 Then C = 0
If C < 100 Then Columna = 10
If C < 10 Then Columna = 11
Cls
Return
Derecha:
C = C + 5 ' Valor del cambio en paso de + 5 Segundo.
If C >= 10 Then Columna = 10
If C >= 100 Then Columna = 9
Cls
Return
'
'------------------------------------------------------------------------------
'
' Countdown - sub - routine
'
Countdown: ' cuentas atras
Ce = C 'duracion de encendido para escribir en la Eeprom
Locate 2 , 1 : Lcd " " ' LCD borrar linia 2
On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 256 ' division para el Timer1
Enable Timer1
Enable Interrupts
Porta.7 = 1 'Relee activado
'---------------------------------------------------------
Timer1 = 3035
Do
If C = 0 Then Goto Countdown_stop
If C < 100 Then
Columna = 10
Locate 1 , 9 : Lcd " "
End If
If C < 10 Then
Columna = 11
Locate 1 , 10 : Lcd " "
End If
Locate 1 , Columna : Lcd C
Loop
'---------------------------------------------------------
Ontimer1:
Timer1 = 3035
C = C - 1
Return
'---------------------------------------------------------
'
' Countdown parado
'
Countdown_stop:
Porta.7 = 0 'Relee Apagado
Porta.6 = 1 'Alarma encendida
Cls ' aviso de parada
Locate 1 , 1
Lcd "luz apagada"
Locate 2 , 1
Lcd "Press RESET" ' presiona para comenzar RESET
'---------------------------------------------------------
'
' Final de rutina....
'
Stop
End
'--------------------------------------------------------- calculos para el Timer1 Timer1
' 65535 - (Oscilador_Fr / prescaler)
' 65535 - (16000000 Hz / 256)
' = 3035Saludos y somos tu y yo y nadie mas participa. :D :D :D :D :D :D
Hola stk500 creo que no me estas entendiendo verdad? :( :(
En el post que comentaste hace tiempo en las respuesta #7:
como puede ver en la Fotos el voltage 12,30 voltio ,es calculado que consume ,eso 0,05mA cada dias, me dio cuenta porque cada dia el voltage desciende en Milivoltio tambien.Hola killer,
los otros codigo claro que funcionan, pero no como es debido, cuando uso la setencia de condiciones.
Quizas tu no me comprendiste y te repito
cuando la bateria esta un tiempo guardada su carga va bajando, eso lo he comprobado osea
que la bateria cuando esta a plena carga el voltage llega a 14, 10 voltio y luego poco a poco va bajando hasta 12,30 voltio mas o menos
y es aqui donde estuve el primer problema con las condiciones de IF THEN sin que me haga Hysterie. con los codigo de arriba la bateria siempre me carcaba entre 12,30 y 14,40 voltio, con el mi ultimo programa me vuelve a cargar cuando la bateriaa este en 12,20 voltio que estoy haciendo la prueba solo con la carga del circuito de control que consume 0.05 mA o sea 0,065 Mw, llevo ya 2 semana con el cargador, desde que descargue la bateria y volver a cargarla asi la he dejado y estoy esperando que me vuelve a caragar para asi saber cuantos tiempo duras la cargas de 0,05mA.
En este caso es porque no estas cargada por hora por eso que cuando llegue el voltaje a 14.2 voltios las corriente baja ahi es donde se corta el tiempo de carga durante 10 horas las bateria estas full.
Saludos y somos tu y yo y nadie mas participa. :D :D :D :D :D :D
Bascom AVR, es por eso.