Control de Temperatura con atmega8

Hola amigos del foro, me pueden ayudar a entender este circuito, por que lo he implementado en laboratorio y no me sale, pero lo he simulado en proteus y me funciona normal, derrepente hay algun error en los valores, y la parte donde se conecta el foco y la corriente alterna (en la parte inferior derecha del circuito) como se conecta fisicamente, derrepente ahi esta el error.
 

Adjuntos

  • control temperatura atmega.jpg
    control temperatura atmega.jpg
    192.7 KB · Visitas: 46
El atmega8 tiene esta codificacion, habra algun error ahi?

'Control_temperatura.BAS
'--------------------------------------------------------------------
'Descripcion: Programa que implementa un control todo o nada con
' histeresis mediante Atmega8.
'--------------------------------------------------------------------
$regfile = "m8def.dat" 'indica al compilador el dispositivo a usar
$crystal = 1000000 'la frecuencia del reloj (1MHz)
'$hwstack = 32
'$swtack = 10
'$framesize = 16

Dim W0 As Word 'Voltaje de referencia o Set Point
Dim W1 As Word 'Senal de entrada
Dim Error As Long 'diferencia entre la entrada y la referencia (error)

Config Portb = Output 'Configura el puerto b como salida
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'configura el adc con conversiones unicas,
'maxima velocidad posible y Avcc como referencia
Start Adc 'Enciende el Adc
Config Timer1 = Counter , Prescale = 64 , Clear Timer = 1 'Configura el timer1 como contador, con preescalador
'de 64, y que se reinicie a luego de tomar el valor
'especifiado por Compare1A
Timer1 = 0 'inicializa el timer1 en cero.

On Compare1a Tiempo 'especifica que al alcanzar el valor especificado en
'Compare1A, se debera ejecutar la subrutina Tiempo
'que es la rutina de manejo de la interrupcion'


'T(us)=64*(Compare1A+1) =>
'Compare1A= (T(us)/64)-1
Compare1a = &H061A 'se contara hasta el valor 1562 para un T=0.1s
Enable Compare1a 'Habilita la interrupcion por comparacion de timer1
Enable Interrupts 'Habilita las interrupciones en general

'Rutina infinita que detecta temperaturas mayores o iguales a 35 grados y en tal caso activa la alarma.
'Tener en cuenta: ADC= (Vin*1024)/Vref , donde ADC: valor obtenido por el ADC, Vin: voltaje de entrada,
'Vref: voltaje de referencia.
'Ademas reemplazando Vin=0.1temp y Vref=5
'obtenemos: ADC=(0.1temp*1024)/5
'para temp=35 grados, ADC=716
Do
If W1 >= 716 Then
Set Portb.1 'La salida de alarma sera en el pin PB1
Else
Reset Portb.1
End If
Loop
End 'final del programa

'Rutina de interrrupcion (actualizar salida)

Tiempo:

W0 = Getadc(0) 'Voltaje de referencia o set point en ADC0
W1 = Getadc(1) 'Voltaje de entrada (temperatura) en ADC1
Error = W1 - W0 'Hallamos el error

'Algoritmo de control: Simplemente se encendera el foco cuando la temperatura baje de cieto umbral bajo la
'referencia y se apagara cuando sobrepase por ese msimo valor a la referencia.
'El valor de umbral dependerá del error y frecuencia de oscilacion requeridas.Las cuales dependeran tambien de
'la dinamica del proceso.

'Despreciando la inercia del proceso se puede utilizar la ecuacion:ADC=(0.1temp*1024)/5 para obtener el valor
'umbral de acuerdo al error deseado.

If Error < -2 Then Set Portb.0 'La salida de control es el pin PB0
If Error > 2 Then Reset Portb.0
Portb.2 = Not Portb.2 'Salida de prueba en PB2 para verificar la frecuencia
'de muestreo

Return 'fin de la rutina de interrupcion
 
Unas cuantas observaciones:
1 - Haz que los pines de los puertos por ejemplo PB7) trabaje drenando corriente y no entregando corriente, o sea alimenta el anodo del opto con los 5V, luego una R=aprox. 300ohms, y el catodo del opto va al PB7 y a través de éste a masa.
2 - No sé que hace R9 allí. (no mezcles la tierra de contínua con negativo (o neutro) de alterna.
3 - La conexión de la lámpara es: Fase AC -> luego Triac -> luego Lámpara -> Neutro AC (que no tiene nada que ver con GND)
4 - Para D2 vale lo mismo que para el Opto: VCC -> luego una R limitadora aprox. 220 ohms -> luego led -> luego Q1 y finalmente emisor de Q1 a GND.
La parte del control de la Temp. no la revisé, espero que te sirva de algo.
Saludos.
 
Bueno cuando hice la prueba junte la tierra alterna y continua, espero que ese sea el problema, respecto a las indicaciones que me dices el circuito debe quedar así (imagen), pero el led verde siempre estaría prendido.

gracias.
 

Adjuntos

  • control 2.jpg
    control 2.jpg
    125.6 KB · Visitas: 26
El led D2 está correcto, y lo controlas con el pin PB0 (no va a estar siempre encendido).
En cuanto al opto, veo que no está correcto, lo que te dije es:
VCC -> R limitadora -> Led opto -> Pin PB7 y desde acá internamente el ATmega lo manda a GND (si es que recibe el comando apropiado).
En realidad la R limitadora puede estar antes o después del opto, lo que importa es que sea el pin del ATmega el que mande la corriente a GND o no.
Saludos
 
Última edición:
he implementado en mi laboratorio y no me sale, alguien me puede ayudar a entender la codificacion, o será que mi atmega no funciona, como podría probarlo.
 
Atrás
Arriba