hunni
08.02.2012, 16:44
Hallo zusammen,
ich habe folgendes Problem: Für einen Kumpel habe ich eine Unterspannungsabschaltung gebaut, diese soll bei 11 Volt automatisch ein Relais betätigen. Nun habe ich einen Spannungsteiler mit 300 KOhm und 100 Kohm genommen um eine Spannung von max. 20V zu messen (bei 20V liegen 5V am ADC an). So sollte ja rechnerisch bei 11V ein Wert von 563 in der AD-Variable stehen. Doch stattdessen muss 730 in der Variable stehen, damit das Relais bei 11V schaltet. Ich habe das mit 3 Messgeräten nachgemessen. Woran kann das liegen?
Ich habe erste Überlegungen angestellt:
-Der Spannungsregler gibt nicht exat 5V aus.
-Die Toleranzen am Spannungsteiler sind zu hoch
-Die Widerstände sind zu groß, sodass der Strom für den µC zu wenig ist um vernünftig zu messen.
Aber ich kann da auch völlig auf dem Holzweg sein. Habt ihr vielleicht eine Idee.
Gruß Hunni
'--------------------------------------------------------------------------------
'Grundeinstellungen
$regfile "attiny45.dat"
$crystal = 8000000
'--------------------------------------------------------------------------------
'Konfiguration
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.3 = Output
Config Portb.4 = Output
'--------------------------------------------------------------------------------
'Variablen deklaration und ini
Dim Hysta As Bit
Dim Ad_wert As Integer
Dim A As Byte
Hysta = 1
'--------------------------------------------------------------------------------
'Hauptprogramm
For A = 1 To 30 'Warte 3 Sek, um Einschaltschwankungen abzufangen
Toggle Portb.3
Waitms 100
Next A
Portb.3 = 0
Do 'Starte Hauptprogramm
Portb.3 = 1 'ADC-Wert Channel 1 in Ad_wert
Ad_wert = Getadc(1) 'Ist Hystarese nicht gesetzt, überprüfe auf Unterspannung
If Hysta = 1 Then 'Wenn Wert unter 11 Volt, schalte Relais
If Ad_wert < 730 Then
Portb.4 = 1
Wait 2
Portb.4 = 0
Hysta = 0 'setze Hystarese
End If
Else
If Ad_wert > 750 Then Hysta = 1 'Wenn Hystarese gesetzt, überprüfe ob Spannung wieder über Schwellwert ist
End If
Portb.3 = 0
Wait 1
Loop
ich habe folgendes Problem: Für einen Kumpel habe ich eine Unterspannungsabschaltung gebaut, diese soll bei 11 Volt automatisch ein Relais betätigen. Nun habe ich einen Spannungsteiler mit 300 KOhm und 100 Kohm genommen um eine Spannung von max. 20V zu messen (bei 20V liegen 5V am ADC an). So sollte ja rechnerisch bei 11V ein Wert von 563 in der AD-Variable stehen. Doch stattdessen muss 730 in der Variable stehen, damit das Relais bei 11V schaltet. Ich habe das mit 3 Messgeräten nachgemessen. Woran kann das liegen?
Ich habe erste Überlegungen angestellt:
-Der Spannungsregler gibt nicht exat 5V aus.
-Die Toleranzen am Spannungsteiler sind zu hoch
-Die Widerstände sind zu groß, sodass der Strom für den µC zu wenig ist um vernünftig zu messen.
Aber ich kann da auch völlig auf dem Holzweg sein. Habt ihr vielleicht eine Idee.
Gruß Hunni
'--------------------------------------------------------------------------------
'Grundeinstellungen
$regfile "attiny45.dat"
$crystal = 8000000
'--------------------------------------------------------------------------------
'Konfiguration
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.3 = Output
Config Portb.4 = Output
'--------------------------------------------------------------------------------
'Variablen deklaration und ini
Dim Hysta As Bit
Dim Ad_wert As Integer
Dim A As Byte
Hysta = 1
'--------------------------------------------------------------------------------
'Hauptprogramm
For A = 1 To 30 'Warte 3 Sek, um Einschaltschwankungen abzufangen
Toggle Portb.3
Waitms 100
Next A
Portb.3 = 0
Do 'Starte Hauptprogramm
Portb.3 = 1 'ADC-Wert Channel 1 in Ad_wert
Ad_wert = Getadc(1) 'Ist Hystarese nicht gesetzt, überprüfe auf Unterspannung
If Hysta = 1 Then 'Wenn Wert unter 11 Volt, schalte Relais
If Ad_wert < 730 Then
Portb.4 = 1
Wait 2
Portb.4 = 0
Hysta = 0 'setze Hystarese
End If
Else
If Ad_wert > 750 Then Hysta = 1 'Wenn Hystarese gesetzt, überprüfe ob Spannung wieder über Schwellwert ist
End If
Portb.3 = 0
Wait 1
Loop