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