-
Hey
Also ich hab das Poti natürlich nur so weit aufgedreht das zwischen ADCO und ADC1 max 2,56V an liegen da ich ja auch die interne RefU benutze und da ich ja ADCO auf Masse lege (ist in der Zeichnung falsch seh ich grade also ADC0 liegt an Masse und an ADC1 liegt die + Spannung) sollte doch der ADC nich wirklich an 24V liegen da er ja keine Verbindung zur Masse des einstellbaren Netzteils hat. Oder?! Seh ich das falsch?
das Programm sieht wie folgt aus:
Code:
$regfile = "m32def.dat" 'Konfiguration auf ATmega 32
$crystal = 16000000 'Quarztakt 16MHz
'-----------------------------Configuration-------------------------------------
Config Portb = Output
Config Portd = Output
Dim Anz1u2 As Byte
Dim Anz3u4 As Byte
Dim Var1 As Byte
Dim Var2 As Byte
Dim Adcvar As Long
Dim X As Word
Dim V24 As Long
Admux = &B11101001
Adcsr = &B11100111
'-----------------------------Dimensionierung-----------------------------------
'----------------------------Hauptprogramm--------------------------------------
Do
Var1 = 0
Var2 = 0
Adcvar = Adch
V24 = Adcvar
Rotate V24 , Left , 2
Adcvar = Adcl
Rotate Adcvar , Right , 6
V24 = V24 + Adcvar
'V24 = V24 * 1000
'V24 = V24 / 4391
Adcvar = V24
'Waitms 100
For X = 1 To Adcvar Step 1
Var1 = Var1 + 1
If Var1 = 100 Then
Var2 = Var2 + 1
Var1 = 0
End If
Next
Anz1u2 = Makebcd(var1)
Anz3u4 = Makebcd(var2)
Portb = Anz1u2
Portd = Anz3u4
Loop
End
-
hallo dämmi,
warum nun dein uC abstürzt weiss ich derzeit nicht.
allerdings // und ich weise nochmals daruf hin, dass ich bisher nix mit "adc-differentiell" gemacht habe, da sich mir der sinn nicht erschliesst//
ja .. allerdings kommt mir deine schaltung merkwürdig vor.
wie soll denn der adc etwas messen können, wenn du die massen nicht verbindest ?
andererseits ist es ja so, dass, wenn du sie verbindest, der atmega wohl angesichts deiner 24 volt den hut heben wird.
du benötigst also spannungsteiler jeweil vor dem shunt und dahiner.
dieser muss so ausgelegt sein, dass die spannung an den adc-in bei deinen angestrebten 12-15volt auf highside niemals mehr als avcc wird.
idealerweise sollte sie bei 2 A natürlich unterhalb deiner Aref bleiben.
aus den genannten gründen verstehe ich bisher auch wirklich nicht, warum man das nun differentiell messen sollte.
das spart doch meines erachtens nach nur eine einzige subtraction bei der auswertung.
also denk nochmal drüber nach.
gruss klaus
-
Hey
Also ich hab Natürlich AdcVcc auf 5V gelegt und auch AdcGnd verbunden.
Ich hab ja den AdcGND auf 12V glegt und damit diese 12V ja als GND bestimmt und auf den AdcIn gebe ich nie mehr als 14,56V. Daher hab ich auch nie mehr als ne Differenz von 2,56V und das sollte den Adc nicht killen oder? Ich will den Diff Eingang benutzen weil ich dort nen Gain von x10 hab und daduch Spannungen von 0 - 0,256V voll messen kann ohne sie extern zu verstärken.
Die beiden Spannungsquellen also die die den µC mit 5V versorgt und die Einstellbare Spannungsquelle sind Natürlich Galvanisch getrennt. Daher sollte es ja auch klappen die 12V am AdcGnd als 0V zu bestimmen oder bin ich da grade falsch vor?! Ich kann doch auch z.B. einen µC mit 20V Acc und mit 15V Gnd verbinden und dieser sollte nicht Schlappmachen.
Gruß dämmi
-
adc gnd ist immer auch uc-gnd und nicht irgendwas anderes.
du killst den uc wenn du das so machst, wie es sich gerade darstellt.
nimm endlich die spannungsteiler !
gruss klaus
-
Hm .... Also ich habs ja schon so gemacht und der Adc ist noch ok und mir scheint das auch unlogisch weil der µC ja nirgends mehr als 5V abbekommt die massen der beiden Spannungsquellen sind absolut unabhängig und wenn ich die Masse vom µC einfach auf 12V der anderen Spannungsquelle lege und dann andere Eingänge wie den ADC0 an 14,5V lege hab ich ja eigl nur 2,5V zur Masse das sacht dann ja auch das Messgerät. Also sollte da nichts passieren und das tut es ja auch also bis auf das er sich aufhängt aber ich werd das einfach noch einmal mit den Spannungsteilern versuchen und schauen was dann passiert. Aber das mach ich dann Morgen. Aber sehr vielen Dank für die Hilfe.
lg dämmi
-
eff-eff Alarmanalgen machen das ähnlich, die 5 V für den
µC hängen + an 12V und GND an +7V. Die Relais werden dann
mit PNP Transistoren gegen 12V GND geschaltet. Das hat den Vorteil,
die 5V "schwimmt" auf den 12V, Netzschwankungen kommen da
überhaupt nicht an. :-)
Gruß Richard
-
Über den Shunt sollte man mit zwei Teilern, die differentiellen Eingangssignale erzeugen! So haben beide den Massebezug!
Der Teiler muss so demensioniert sein, dass die Spannung nicht URef übersteigt! Sonst kann der µC sich aufhängen.
Code:
___
o----------------o---|___|----o--------o
| Shunt |
| |
| |
| |
.-. .-.
| | | |
| | | |
'-' '-'
___ | |
<-------|___|----)------------o <--
zum | | max Uref
ADC ___ | |
<-------|___|----o |
| |
.-. .-.
| | | max | | | max
| | | URef | | | Uref
'-' V '-' V
| |
GND GND
-
@johnes
genau so hatte ich mir das auch vorgestellt und versucht dem fragesteller
das mitzuteilen.
so , wie ich das sehe , stellt der fragesteller aber mitlerweile die gleichen fragen im micrcont.net.
nunja
gruss klaus
-
Wenn du mich als Fragesteller meinst:
Hatte diese Frage nur hier her rein gestellt..
Aber die Idee werde ich in mein nexten Versuch mal umsetzen...
-
Moin
Nach langer Zeit kann ich mich endlich wieder diesem Problem zu wenden hatte mit einem Schulprojekt den ganzen Monat zu tun.
Also hab das behoben bekommen mit dem aufhängen hab einfach waitms 2 gleich in den anfang gesetzt.
Code:
$regfile = "m32def.dat" 'Konfiguration auf ATmega 32
$crystal = 16000000 'Quarztakt 16MHz
'-----------------------------Configuration-------------------------------------
Config Portb = Output
Config Portd = Output
Dim Anz1u2 As Byte
Dim Anz3u4 As Byte
Dim Var1 As Byte
Dim Var2 As Byte
Dim Adcvar As Long
Dim X As Word
Dim V24 As Long
Admux = &B11101001
Adcsr = &B11100111
'-----------------------------Dimensionierung-----------------------------------
'----------------------------Hauptprogramm--------------------------------------
Do
Waitms 2
Var1 = 0
Var2 = 0
Adcvar = Adch
V24 = Adcvar
Rotate V24 , Left , 2
Adcvar = Adcl
Rotate Adcvar , Right , 6
V24 = V24 + Adcvar
'V24 = V24 * 1000
'V24 = V24 / 4391
Adcvar = V24
'Waitms 100
For X = 1 To Adcvar Step 1
Var1 = Var1 + 1
If Var1 = 100 Then
Var2 = Var2 + 1
Var1 = 0
End If
Next
Anz1u2 = Makebcd(var1)
Anz3u4 = Makebcd(var2)
Portb = Anz1u2
Portd = Anz3u4
Loop
End
Allerdings messe ich nur bis 511 das wäre aber 9bittig gemessen....
Was mach ich falsch beim Bits drehen? Ich komme einfach nicht auf 1023.....
Zum testen hab ich den adc auch über einen Spannungsteiler an die Versorgungsspannung gelegt um einfach einmal dieses 24V Problem beseitigen.
Danke für die Beschaltung des Shunt werde das so einmal Probieren.
Gruß Jonas