moin
15.05.2011, 17:51
Hallo,
ich habe Probleme den AnalogKomparator richtig einzusetzen. Mein Programm reagiert nicht auf einen Pegelwechsel.
Ein Pegelwechsel an PB2 (ADC1) soll vom Komparator erkannt werden. Bei jedem Pegelwechsel soll ein Relais wackeln (als Test). Verwendet werden soll die interne Referenz von 1,1V. Mein Pegel muss dann also deutlich größer oder kleiner 1,1V sein.
Wenn dass Programm die Mainloop erreicht hat, reagiert es nicht mehr :-(
Vielleicht könnt ihr den Fehler in meinem Programm entdecken.
Danke Jörn
'Pin1-PB5= Reset mit 100nF gegen Masse und 10k nach 5V
'Pin2-PB3= Relais
'Pin3-PB4= Relais
'Pin4= GND
'Pin5-PB0= (MOSI)
'Pin6-PB1= (MISO)
'Pin7-PB2= SCK und Analogeingang für den AnalogKomparator ADC1
'Pin8= VCC 5V
'
$regfile = "ATtiny13.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 2
$framesize = 5
Stop Timer0
Stop Watchdog
Stop Adc
Dim Test01 As Byte
Test01 = 0
Ddrb = &B00011000
Ddrb = &B00011000
Portb.4 = 1 'Relais als Test wackeln
Portb.3 = 0
Waitms 500
Portb.4 = 0
Portb.3 = 1
Waitms 500
Portb.4 = 1
Portb.3 = 0
Waitms 500
Ddrb = &B00000000
Config Aci = On , Compare = Off , Trigger = Toggle
Adcsrb.acme = 1 'Analoge Comparator Multiplexer Enable
Acsr.acbg = 1 'Referenzspannung eingeschaltet
'Adcsra.aden = 0
Admux = 1 'Analogeingang für den AC ist ADC1 d.h. PB2
Start Ac
On Aci On_aci
Enable Interrupts
Do
Loop
On_aci:
Test01 = Adcsr.aco
If Test01 = 0 Then
Ddrb = &B00011000
Portb.4 = 1
Portb.3 = 0 'Relais als Test wackeln
Waitms 500
Portb.4 = 0
Portb.3 = 1
Waitms 500
Portb.4 = 1
Portb.3 = 0
Waitms 500
Ddrb = &B00000000
Else
Ddrb = &B00011000
Portb.4 = 0
Portb.3 = 1 'Relais als Test wackeln
Waitms 500
Portb.4 = 1
Portb.3 = 0
Waitms 500
Portb.4 = 0
Portb.3 = 1
Waitms 500
Ddrb = &B00000000
End If
Return
ich habe Probleme den AnalogKomparator richtig einzusetzen. Mein Programm reagiert nicht auf einen Pegelwechsel.
Ein Pegelwechsel an PB2 (ADC1) soll vom Komparator erkannt werden. Bei jedem Pegelwechsel soll ein Relais wackeln (als Test). Verwendet werden soll die interne Referenz von 1,1V. Mein Pegel muss dann also deutlich größer oder kleiner 1,1V sein.
Wenn dass Programm die Mainloop erreicht hat, reagiert es nicht mehr :-(
Vielleicht könnt ihr den Fehler in meinem Programm entdecken.
Danke Jörn
'Pin1-PB5= Reset mit 100nF gegen Masse und 10k nach 5V
'Pin2-PB3= Relais
'Pin3-PB4= Relais
'Pin4= GND
'Pin5-PB0= (MOSI)
'Pin6-PB1= (MISO)
'Pin7-PB2= SCK und Analogeingang für den AnalogKomparator ADC1
'Pin8= VCC 5V
'
$regfile = "ATtiny13.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 2
$framesize = 5
Stop Timer0
Stop Watchdog
Stop Adc
Dim Test01 As Byte
Test01 = 0
Ddrb = &B00011000
Ddrb = &B00011000
Portb.4 = 1 'Relais als Test wackeln
Portb.3 = 0
Waitms 500
Portb.4 = 0
Portb.3 = 1
Waitms 500
Portb.4 = 1
Portb.3 = 0
Waitms 500
Ddrb = &B00000000
Config Aci = On , Compare = Off , Trigger = Toggle
Adcsrb.acme = 1 'Analoge Comparator Multiplexer Enable
Acsr.acbg = 1 'Referenzspannung eingeschaltet
'Adcsra.aden = 0
Admux = 1 'Analogeingang für den AC ist ADC1 d.h. PB2
Start Ac
On Aci On_aci
Enable Interrupts
Do
Loop
On_aci:
Test01 = Adcsr.aco
If Test01 = 0 Then
Ddrb = &B00011000
Portb.4 = 1
Portb.3 = 0 'Relais als Test wackeln
Waitms 500
Portb.4 = 0
Portb.3 = 1
Waitms 500
Portb.4 = 1
Portb.3 = 0
Waitms 500
Ddrb = &B00000000
Else
Ddrb = &B00011000
Portb.4 = 0
Portb.3 = 1 'Relais als Test wackeln
Waitms 500
Portb.4 = 1
Portb.3 = 0
Waitms 500
Portb.4 = 0
Portb.3 = 1
Waitms 500
Ddrb = &B00000000
End If
Return