Forum: Mikrocontroller und Digitale Elektronik ADC zieht Spannung runter?


von Oliver H. (snatch)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe ein größeres Problem mit meiner Strommessung (s. Anhang).

Funktiosbeschreibung:
Am Knotenpunkt R62, R62 und D24 messe ich eine Spannung, die dem Strom 
entspricht der über GND -> K1 nach "Zur Kaskade" fließt. Der Filter R62, 
L2 und C41 dient zum Filtern der doch sehr unsauberen Spannung. Danach 
siehst aber sehr gut aus.

Das funktioniert soweit auch, messe ich mit einem Multimeter am 
Knotenpunkt, dann messe ich genau die Spannung im gleichen Verhältniss 
zum Strom. Wenn 200 µA fließen also 200 mV.

Sobald ich aber nun den ADC "Zum ADC0" des ATMega128 drann hänge, zieht 
dieser mir die Spannung total in den Keller. Kann mir das jemand 
erklären? Ich steig da nämlich gerade garnicht durch.

Gruß
Snatch

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wie sieht denn der Rest der Schaltung aus?
Welche Masse hat der uC?

> zieht dieser mir die Spannung total in den Keller.
Hast du dazu auch einen Wert?
Ist der uC richtig konfiguriert (ADC-Eingang)?

von T. C. (tripplex)


Lesenswert?

Wahrscheinlich ist der Port als Ausgang Initialisiert welcher auf Low
steht und dann halt die Spannung "runterzieht"

von Bensch (Gast)


Lesenswert?

> Wahrscheinlich ist der Port als Ausgang Initialisiert welcher auf Low
steht und dann halt die Spannung "runterzieht"

...oder dem ADC fehlt die Betriebsspannung

von Oliver H. (snatch)


Lesenswert?

Hallo,

ich arbeite mit Bascom.
1
Ddrf.0 = 0                                                  
2
portf.0 = 0

Das was ihr schreibt ist richtig. Hatte den Fehler am Anfang auch 
gemacht, weil ich vom A16 auf den A128 portiert habe und den Code nicht 
dazu angepasst habe. Aber jetzt ist alles korrekt. Port F als eingang 
und Pullups aus. Er zieht die Spannung zwar nicht mehr so weit runter 
aber immer noch weit genug (in einem Beispiel von 100 mV auf 70 mV)

Gibt es noch etwas zu beachten?

Was mit aufgefallen ist, wenn ich den Filter weglasse, also R62 abtrenne 
und den ADC direkt an R63 am Knotenpunkt hänge, dann zieht der die 
Spannung nicht mehr runter, sondern sie geht ums 4 fache hoch.

Nun ist aus mit Verständniss :(

Gruß
Snatch

von Peter D. (peda)


Lesenswert?

Da ist entweder was faul in Deiner Hardware oder Software.
Die ADCs sind sehr hochohmig. Ich hab am ATmega8 nen 1M in Reihe und 
100nF gegen GND am ADC und der mißt ohne Probleme.

Die Drossel kannste weglassen, hat keinerlei Wirkung.
Der 1k hat auch kaum Wirkung, ich würde mindestens 10k..100k nehmen.


Peter

von Oliver H. (snatch)


Angehängte Dateien:

Lesenswert?

Hallo,

ja, da ist was faul, ich weis nur nicht was. Den ATmega habe ich bereits 
3x getauscht. Die Software ist gerade sehr minimal (s. unten).
Die Schaltung der Platine ist auch sehr minimal da dies nur ein 
Testboard ist (s. Anhang).

Die Schaltung ist auch sehr minimal, da dies nur ein Testboard ist (s. 
Anhang) Aber vielleicht seht ihr ja was was ich nicht sehe. Im Prinzip 
hängt der ADC direkt am Pin aus dem Anhamg im ersten Posting.

1
$regfile = "m128def.dat"
2
$crystal = 16000000                                   
3
4
Dim Adcwert2 As Word
5
6
Ddrf.0 = 0
7
Portf.0 = 0
8
Ddrf.1 = 0
9
Portf.1 = 0
10
Ddrf.2 = 0
11
Portf.2 = 0
12
Ddrf.3 = 0
13
Portf.3 = 0
14
Ddrf.4 = 0
15
Portf.4 = 0
16
Ddrf.5 = 0
17
Portf.5 = 0
18
Ddrf.6 = 0
19
Portf.6 = 0
20
Ddrf.7 = 0
21
Portf.7 = 0
22
23
Config Adc = Single , Prescaler = Auto , Reference = Avcc
24
Enable Adc
25
26
Do
27
28
Adcwert2 = Getadc(1)
29
30
Loop
31
End

von MWS (Gast)


Lesenswert?

> zieht dieser mir die Spannung total in den Keller. Kann mir das jemand
> erklären?

Mit dem Multimeter am ADC0 gemessen ?

Ansonsten wäre es ziemlich ratsam auch ADC0 auszulesen, und nicht ADC1 
wie in Deinem Code. :D

> ...Getadc(1)

von Oliver H. (snatch)


Lesenswert?

Hallo,

sorry, ich lese den richtigen aus. Mir gehts auch weniger ums auslesen, 
sondern ich messe den Spannungsabfall mit dem Multimeter direkt am Pin.
Ob ich den nun in der Software auslese oder nicht ist ja egal, er würde 
ja die zu niedere Spanung auslesen die ich auch mit dem Multimeter am 
Pin messe.

Gruß
Snatch

von MWS (Gast)


Lesenswert?

> er würde ja die zu niedere Spanung auslesen die ich auch mit dem
> Multimeter am Pin messe.

Das ist richtig, nur war aus Deinem Post nicht ersichtlich, ob auch per 
Multmeter gemessen wurde.

So kurz der Code auch ist, so hast Du es doch geschafft zwei massive 
Fehler reinzuschreiben, einmal falscher Pin, und dann noch Enable Adc, 
das erlaubt den ADC Interrupt, nur ist keiner definiert, dafür sind 
wenigstens die Interrupts global auch nicht erlaubt.

Wenn sich diese Sorgfalt in der Hardware fortsetzt, dann ist mir klar 
warum das nicht hinhaut, da ist irgendein Murks in der Schaltung.

Die Eingänge des PortA sind auf jeden Fall sehr hochohmig und werden, 
falls korret beschaltet, das Messergebnis nicht beeinflussen.

von Oliver H. (snatch)


Lesenswert?

Hallo,

sorry, ich bin schon Sorgfälltig. Das kommt nur, vom hin und her 
kompieren und schnell schnell machen weil ich ne Antwort will. Ich sehe 
das wie du, es sollte das Messergebniss nicht beeinflussen, tut es aber 
dennoch.

Ich habe heute keine Zeit mehr, werde morgen mal den kompletten 
schaltplan posten.

GRuß
Snatch

von Oliver H. (snatch)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe mal den Schaltplan eben für hier ins Forum neu dahingezeichnet. 
Ist nur eine Skizze soll aber die Schaltung im groben zeigen.

Problem ist auch Schaltplan beschrieben. Bitte keine nicht verbundenen 
Kontakte bemängeln, soll mehr zum Verständniss dienen :D

Die Frage lautet, warum zeigt das Voltmeter die Spannung richtig an, und 
sobald der µC drann kommt steigt diese. Was macht das Voltmeter richtig, 
dass der µC falsch macht.

hier noch der Abgespekte CODE
1
$regfile = "m128def.dat"
2
$crystal = 16000000
3
4
Config Lcdmode = Port                                       
5
Config Lcd = 16 * 2                                         
6
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.3 , Db6 = Portc.2 , Db7 = Portc.1 , E = Portc.4 , Rs = Portc.5       
7
Initlcd                                                    
8
Config Lcdbus = 4                                          
9
10
Waitms 150
11
Cursor Off Noblink                                          
12
Cls
13
14
Dim Adcwert2 As Word
15
16
Ddrf.0 = 0
17
Portf.0 = 0
18
19
Config Adc = Single , Prescaler = Auto , Reference = Avcc  Referencespannung Avcc = 5 V
20
Enable Adc                                                  
21
22
Do
23
Adcwert2 = Getadc(0)
24
25
Locate 1 , 1
26
Lcd Adcwert2
27
Waitms 500
28
Cls
29
30
Loop
31
32
End

Danke und Gruß
Snatch

von Otto (Gast)


Lesenswert?

gehört beim BASCOM nicht ein "Start Adc" mit dazu ???
In den Beispielen ist es immer mit drin...

von Simon K. (simon) Benutzerseite


Lesenswert?

Lies doch mal, was die Leute schreiben.

MWS schrieb:
> und dann noch Enable Adc,
> das erlaubt den ADC Interrupt, nur ist keiner definiert, dafür sind
> wenigstens die Interrupts global auch nicht erlaubt.

von Oliver H. (snatch)


Lesenswert?

Also, nochmals zu software. Auch so bleibt das Problem bestehen.
Selbst wenn ich den ADC-Teil weg lasse geht es nicht.
Problem wie oben beschrieben bleibt bestehen.

Es sollte nicht an der Software hängen.
1
$regfile = "m128def.dat"
2
$crystal = 16000000
3
4
Config Lcdmode = Port                                       
5
Config Lcd = 16 * 2                                         
6
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.3 , Db6 = Portc.2 , Db7 = Portc.1 , E = Portc.4 , Rs = Portc.5       
7
Initlcd                                                    
8
Config Lcdbus = 4                                          
9
10
Waitms 150
11
Cursor Off Noblink                                          
12
Cls
13
14
Dim Adcwert2 As Word
15
16
Ddrf.0 = 0
17
Portf.0 = 0
18
19
Config Adc = Single , Prescaler = Auto , Reference = Avcc  Referencespannung Avcc = 5 V
20
Enable Adc                                                  
21
22
Do
23
Adcwert2 = Getadc(0)
24
25
Locate 1 , 1
26
Lcd Adcwert2
27
Waitms 500
28
Cls
29
30
Loop
31
32
End

Auch mit dieser Verion geht es nicht.
1
$regfile = "m128def.dat"
2
$crystal = 16000000
3
4
Ddrf.0 = 0
5
Portf.0 = 0
6
                                        
7
8
Do
9
10
Loop
11
12
End

von Route_66 (Gast)


Lesenswert?

Wenn ich den Schaltplan richtig lese, dann liegt am Widerstand 
WECHSELspannung an. Das kann der ATMega nicht!

von Oliver H. (snatch)


Lesenswert?

Route_66 schrieb:
> Wenn ich den Schaltplan richtig lese, dann liegt am Widerstand
> WECHSELspannung an. Das kann der ATMega nicht!

Ja, könnte man denken, aber ist nicht so. Das Oszi zeigt eine fast 
Saubere gleichspannung an. Des weiteren liegt der ADC ja im Pfad der 
Ausgangsspannung der Kaskade und somit wieder in einem 
Gleichspannungspfad.
Das Multimeter an diesem Punkt ist auch auf Gleichspannungsmessung 
eingestellt und mist ohne den µC ja den richtigen Wert.

Komisch oder?

Was macht das Multimeter denn so anders?

Gruß
Snatch

von Karl H. (kbuchegg)


Lesenswert?

Denis H. schrieb:

> Was macht das Multimeter denn so anders?


Wie jetzt?
Steigt die Spannung, oder fällt sie, wenn du den µC anklemmst
Am Anfang war von 'die Spannung fällt, sobald der AVR drannhängt' die 
Rede. Irgendwo in einem der letzten Posts wars dann plötzlich 'die 
Spannung steigt, sobald der AVR drannhängt'

von Oliver H. (snatch)


Lesenswert?

Ja, im Moment steigt sie an, am Anfang fiel sie.
Ich habe nun herrausgefunden, dass es etwas mit der Masse zu tun haben 
muss.
Jenadem wo ich die Masse (ERDE) verbinde, bekomme ich unterschiedliche 
Werte. Obwohl ich alle ERDEN am Netzteil an einem Kotenpunkt 
zusammengeführt habe.

GRuß
Snatch

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Denis H. schrieb:
> Ich habe nun herrausgefunden, dass es etwas mit der Masse zu tun haben
> muss.
Du schliesst also nicht "nur" den Pin an, sondern die ganze uC-Schaltung 
incl. deren Masse? Was kommt raus, wenn du den Pin ablötest und 
hochbiegst?

von MWS (Gast)


Lesenswert?

> Jenadem wo ich die Masse (ERDE) verbinde, bekomme ich unterschiedliche
> Werte. Obwohl ich alle ERDEN am Netzteil an einem Kotenpunkt
> zusammengeführt habe.

Da fehlen im Schaltplan die Details, Masse kann man nur einmal 
verbinden, µC Masse muss natürlich gleich Masse an der Kaskade/Fuß von 
R1 sein, sonst fehlt der Bezugspunkt.

Das hört sich alles so an, als ob eine Ableitung über den µC ergfolgt, 
da der Massepunkt nicht richtig definiert ist.

Würde man aber auch rausbekommen, indem man die Verbindung zwischen 
PortA.0 und Strommeßwiderstand öffnet und dort das Voltmeter reinhängt, 
bzw. zwischen µC Masse und Strommeßwiderstand.

von MWS (Gast)


Lesenswert?

Natürlich PortF.0, nicht A.

von Oliver H. (snatch)


Lesenswert?

MWS schrieb:
>> Jenadem wo ich die Masse (ERDE) verbinde, bekomme ich unterschiedliche
>> Werte. Obwohl ich alle ERDEN am Netzteil an einem Kotenpunkt
>> zusammengeführt habe.
>
> Da fehlen im Schaltplan die Details, Masse kann man nur einmal
> verbinden, µC Masse muss natürlich gleich Masse an der Kaskade/Fuß von
> R1 sein, sonst fehlt der Bezugspunkt.
>
> Das hört sich alles so an, als ob eine Ableitung über den µC ergfolgt,
> da der Massepunkt nicht richtig definiert ist.
>
> Würde man aber auch rausbekommen, indem man die Verbindung zwischen
> PortA.0 und Strommeßwiderstand öffnet und dort das Voltmeter reinhängt,
> bzw. zwischen µC Masse und Strommeßwiderstand.

So ist es. Ich habe das ganze Board an der Stromklemme mit ERDE 
verbunden. Habe also einen geerdeten -. Alle Masseflächen auf dem Board 
sind Sternförmig mit diesem Punkt verbunden. Und genau so sieht es nun 
auch besser aus. Hatte vorher die Schaltung auf einem Steckbrett und die 
Masse (ERDE) wo anders her geholt.

Jetzt funktioniert es soweit. Weder geht die Spannung hoch noch runter, 
wenn ich den µC Dranhänge.

Teste jetzt gerade die ergebnisse in allen Lastbereichen und lasse Sie 
auf dem LCD anzeigen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.