PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC



Dominik009
13.05.2010, 19:28
Hallo

Ich bin seit längerer pause wieder aktiv.

Nun habe ich ein problem.

Ich habe eine RN-Control.
Wenn ich spannung messen will (den code hänge ich noch an) kommt immer 1023 und wenn ich dann - 5V mit einem wiederstand an port A0 hänge kommt 25.

Sollte es nicht so sein das 0 kommt wenn nichts drann ist und wenn 5Vdran sind 1023?

Gruß
Dominik

for_ro
13.05.2010, 19:41
Wenn ich spannung messen will (den code hänge ich noch an) kommt immer 1023 und wenn ich dann - 5V mit einem wiederstand an port A0 hänge kommt 25.
Du hast hoffentlich nicht wirklich -5V angeschlossen, sondern nur 0V. Kleiner darfst du nicht.


Sollte es nicht so sein das 0 kommt wenn nichts drann ist und wenn 5V dran sind 1023?
Nicht unbedingt.
Wenn nichts angeschlossen ist, wird der Eingang keinen definierten Pegel haben und deswegen bestimmt nicht 0 werden.
Bei welcher Eingangsspannung 1023 angezeigt wird, hängt von der Referenzspannung ab (Config ADC) und was du am Pin AVCC und AREF angeschlossen hast.
Zeige neben dem Code auch mal deine Verdrahtung.

Dominik009
14.05.2010, 08:58
Ne sorry,
nicht -5V sondern GND 5V mit nem wiederstand.

Wenn ich GND 5V mit nem wiederstand ranhänge bekomme ich ganz nierderige werte (56Ohm bei ADC=ca.22).
Bei VCC 5V kommt 1023 und bei 0V kommt auch 1023.

Wer kann helfen?
Der schaltpaln:
http://www.rn-wissen.de/images/c/c6/Rncontrol1.4schaltplan.gif
(ich habe einen kleineren angehängt wo nur das "zeug" für adc drauf ist)


Gruß Dominik

Dominik009
14.05.2010, 10:51
hier mal der code:


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600




Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP




'ADC Konfiguration
Const Ref = 5 / 1023 ' = 5.0 / 1024.0
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word
Dim Volt As Single









'Hautprogramm
Do
Porta.0 = 1
W = Getadc(0)
Volt = W * Ref


Print "ADC-Pin 0: Wert " ; W ; " Volt: " ; Volt




Wait 1



Loop

End


und hier mal die terminallogs:

an A0 nichts angeschlossen:



**** RN-CONTROL 1.4 *****
Programm: ADC-Test-1

ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517



An A0 5V VCC



**** RN-CONTROL 1.4 *****
Programm: ADC-Test-1

ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517



An A0 5V GND



**** RN-CONTROL 1.4 *****
Programm: ADC-Test-1

ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517
ADC-Pin 0: Wert 1023 Volt: 4.999999517




Die 5V sind immer die spannung mit der der MEGA arbeitet

Kampi
14.05.2010, 11:32
Du hast beim ADC konfigurieren vergessen die Referenzspannung anzugeben.
Das muss so lauten:

Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc

Dominik009
14.05.2010, 11:49
ner code:

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

Print
Print "**** RN-CONTROL 1.4 *****"
Print "Programm: ADC-Test-1"
Print



Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP




'ADC Konfiguration
Const Ref = 5 / 1023 ' = 5.0 / 1024.0
Config Adc = Single , Prescaler = Auto , Reference = Internal
Do
Start Adc
Dim W As Word
Dim Volt As Single









'Hautprogramm

Porta.0 = 1
W = Getadc(0)
Volt = W * Ref


Print "ADC-Pin 0: Wert " ; W ; " Volt: " ; Volt




Wait 1



Loop

End

keine besserung :(

Kampi
14.05.2010, 12:46
Und du hast zwischen Vcc und Gnd auch einen Spannungsteiler gemacht? Weil wenn da nur 1 Widerstand ist ist es klar warum der ADC nur 1023 ausgibt.

Dominik009
14.05.2010, 13:21
momentan stehe ich auf dem schlauch
wie spannungsteiler?

früher hatt es doch immer super so geklapt.

Kampi
14.05.2010, 13:26
Äh tschuldigung. Falsch gelesen. Poste mal bitte einen Schaltplan deiner Schaltung und sag was du damit anfangen willst. Steh nämlich gerade selber auf dem Schlauch

Dominik009
14.05.2010, 14:19
Äh tschuldigung. Falsch gelesen. Poste mal bitte einen Schaltplan deiner Schaltung und sag was du damit anfangen willst. Steh nämlich gerade selber auf dem Schlauch

lol

Also es ist so.
Ich will später eine schaltung auf basis eines kleineren controlers entwickenl (attiny....).

Diese schaltung soll via ADC eine spannung messen (bzw. erstaml einen korekkten adc wert ausgeben).

Da ich momentan die teile für die platine nicht habe dachte ich ich probiere es erstaml mit meiner rn-control.

Ich möchte gerne an die ADC pins bis zu 5V (vcc oder gnd ist egal) anlegen und der controler soll dann die spannung (bzw. den adc wert) in eine variable schreiben.

Kampi
14.05.2010, 14:33
Na dann. Mich hatte nur der Widerstand den du angeschlossen hast verwirrt. Mach's mal so:
Schließ mal zwischen dem ADC und GND einen Pull down Widerstand der 10k groß ist um den ADC wenn nichts angeschlossen ist auf den GND Pegel zu ziehen. Und an den Pin vom Widerstand der an den ADC angeschlossen ist hÄngst du nun deine Spannung. So hast du 5V an dem ADC und wenn die 5V weg sind hast du GND.

Dominik009
14.05.2010, 14:36
habe gerade keinen 10k wiederstand.

was mich halt verwird ist das es früher immer so geklapt hat (ohne zusätzliche beschaltng).

Mich wundert nur warum der adc wert wenn ich 5Vgnd anhänge immer 14 (oder sowas um den dreh) rauskommt nastat 1023

Kampi
14.05.2010, 14:48
Was mir gerade auffällt.....
Du hast
Porta.0 = 1 geschrieben aber benutzt a.0 auch für den ADC?
Also ist er jetzt als Ausgang defginiert und als Messeingang für den ADC

Dominik009
14.05.2010, 14:50
also soll ich Porta.0 = 1 rausachen.
Wird gemacht.

Sauerbruch
14.05.2010, 15:23
Was mir gerade auffällt.....
Du hast
Porta.0 = 1 geschrieben aber benutzt a.0 auch für den ADC?
Also ist er jetzt als Ausgang defginiert und als Messeingang für den ADC

Das stimmt nicht ganz - Porta.0=1 konfiguriert den Anschluss mitnichten als Ausgang. Wenn er aber als Eingang konfiguriert ist (und das ist nach dem Einschalten der Fall), aktiviert es aber den internen PullUp-Widerstand. Und das würde erklären, weshalb über einem 56Ohm-Widerstand nach GND noch eine kleine Spannung abfällt!

Bislang scheinen mir alle Befunde ziemlich logisch :-)

Kampi
14.05.2010, 15:34
Ahh ok. D.h er hat sich über diesen Befehl quasi selbst einen Dpannungsteiler aus Pull up Widerstand und den 560 Ohm gebaut und den Spannungsabfall an dem 560 Ohm Widerstand gemessen. Hab ich das richtig verstanden?

Sauerbruch
14.05.2010, 15:41
Genau so wäre es. Die PullUps haben Werte in der Größenordnung von etwa 50 kOhm. An einem 560 Ohm-Widerstand würde also ganz grob 1/100 der Spannung abfallen, was den ADC-Wert von etwa 14 gut erklären würde.

Ich muss allerdings gestehen dass ich nicht 100% weiß, ob sich die PullUps überhaupt aktivieren lassen, wenn ein I/O-Port als ADC-Eingang verwendet wird. Aber das müssten die Datenblätter hergeben...

Kampi
14.05.2010, 16:03
Naja deine Erklärung klingt schon schlüssig. Wenn es nicht gehen würde bräuchten wir eine andere Erklärung :D

Dominik009
14.05.2010, 16:07
habe ich geändert.

wenn ich auf 5V VCC gehe kommt 1023.
Bei 5V GND kommt 0.
Und wenn garnichts ist kommt sowas um 500 (+-200) schwankt.

Was muss den normal an die adc pins ?
VCC oder GND?

wenn ich einen sharp entfernungssensor anschließe wird die spannung wie auf meinem multimeter angezeigt.

ich habe Porta.0 =1 rausgelöscht

edit: ich sehe gerade die vielen posts.
Danke leute für eure hilfe.
Finde ich echt super :mrgreen:

Kampi
14.05.2010, 16:15
Generell kannst du an die ADC Anschlüsse alles von 0V - VRef machen und messen.

Dominik009
14.05.2010, 16:16
Ok.

OV bis RevV

wie hoch ist den bei der rn-contol die ref-spannung?
müssten doch 5V sein?

ich sehe die anschlüsse AVCC AGND und AREF.

Per 265Ohm auf Gnd kommt immernoch 0 raus.
Obwohl ich den internen pullup deaktiviert habe.

Kampi
14.05.2010, 16:31
Ja genau.
AVcc ist die Spannungsversorgung für den ADC
AGND dementsprechend der Ground
ARef ist der Anschluss wo du die Referenzspannung für den ADC anlegst. Laut Schaltplan liegen da beim RN Control 5V an.

Dominik009
14.05.2010, 18:11
Das mit AVcc und AGnd hatte ich auch so in erinnerung.

Bei A Ref muss dann die Referenzspannung rein.

Bei der RN-Control 5V.

Dann währen ja 1V = 204,6

Dann müsste doch normal wenn ich die A0 auf die Referenzspannung lege (5V GND sehe ich das richtig?) und den internen Pullup deaktiviere müsste doch normal ziemlich genau 1023 rauskommen oder ?

Die Beschaltung währe so:

AGND = 5V GND
AVCC = 5V VCC
AREF = 5V GND?

???

edit: habe mal gemessen: bei aref liegen 5V VCC am.
ist das richtig so?

und bei den ADC ports,
kann ich damit bis zu 5V (alo Ref) VCC oder bis zu 5V GND messen?

Kampi
14.05.2010, 19:03
Du kannst bei einer Referenzspannung von 5V nur bis 5V (wird durch die Referenzspannung beschränkt) messen. Alles andere dadrüber misst der ADC nicht richtig (hoffe ich hab das richtig in erinnerung). Aber die Referenzspannung darf auch nicht über der Versorgungsspannung liegen das mögen die Controller nicht.
Aber du kannst trotz 5V Versorgungsspannung auch höhere Spannungen messen lassen. Dies bewerkstelligst du durch einen Spannungsteiler.
Wenn du z.B. 50V messen willst bauste einen Spannungsteiler aus 9MOhm und aus 1MOhm. An dem 1MOhm Widerstand liegt dann 1/10 der Gesamtspannung an (Herr Ohm lässt grüßen) was 5V entsprechen und im Programm multiplizierst du die 5V dann wieder mit 10, weil die 5V nur 1/10 der Gesamtspannung sind und so kannste selbst mit 5V Referenzspannung quasi alles messen was du willst.

Dominik009
14.05.2010, 19:09
jo, thx.
einen spannungsteiler brauche ich nicht.
Ich muss nur werte messen die unter der referenzspannung von 5V liegen.

Aber das mit dem code läuft nicht!

Ich sehe es doch richtig das wenn ich 5V gnd an Porta.0 gebe (die selbe spannung wie die ref-spannung) 1023 rauskommen muss.
Bei mir kommt aber 0!

Kann vieliecht einer von euch mal einen einfachen code machen.

Früher war das für mich kein prob, aber jetzt will er einfach nichtmehr :(

Kampi
14.05.2010, 20:00
mmmh hab atm kein Board zur Hand deswegen hab ich es nur simuliert......aber in der Simulation spuckt der die richtigen Werte aus... . Überprüf mal deine Hardware, weil das Programm scheint richtig zu sein.

Dominik009
14.05.2010, 21:16
also bei der hardware kann es eigentlich nur am mega liegen oder?
ich habe noch einen alten hier aber dem traue ich nicht ;)

Sonst kann ja nicht viel kaputt sein.

mein ihr ich soll morgen einen neuen kaufen?

Kampi
14.05.2010, 21:23
Das glaub ich eher weniger....... . Weil dann würd der gar nicht mehr arbeiten. Klappt das auch nicht wenn du direkt eine Batterie an den ADC hängst?

Dominik009
14.05.2010, 21:32
also ich habe momentan ein NT am board.

Wie meinst du baterie an den adc?
einfach ne batterie mit GND an den ADC?

das kann doch normal nicht gehen oder?

Kampi
14.05.2010, 21:36
Nein...... du nimmst ne Batterie oder einen Draht den du mit deinen Netzteil verbindest und legst den Plus Anschluss an den ADC und GND an den GND Anschluss vom Board

Rone
15.05.2010, 00:30
Hallo!

Hoffentlich hat der arme Kerl die Misshandlung überstanden!
Frage: Wie ist der Zustand des Jumper "UREF"?
Wahrscheinlich gejumpert, d.h. Du knallst 5V an den AREF Pin.
Im Code schreibst Du "Reference = Internal".
Das ist beim ATM32 ca. 2,5V(Datenblatt lesen hilft ungemein, ich habs nicht gelesen) die auch am AREF Pin anliegen.
Na fällt Dir schon was auf?
Probiers mal mit "Reference = AVCC", wenn der Controller
noch lebt sollte es helfen.
Übrigens es gibt auch eine Bascom-Hilfe.

Lesen und nachdenken sollen meinem Wissen nach noch zu
keinen unerwünschten Nebenwirkungen geführt haben.

MfG
Rone

Dominik009
15.05.2010, 09:12
Habe auf Reference = AVCC umgestellt.
Keine besserung

Meinst du der controler ist kaput?

Kampi
15.05.2010, 11:20
Naja selbst wenn die Referenz auf Intern eingestellt ist und eine externe anliegt zeigt der Controller immernoch mehr als 0 an soweit ich recht in Erinnerung habe.

Dominik009
15.05.2010, 11:39
ja.
ich bin am verzweifeln ich weiss einfach nicht mehr weiter.

wenn ich a0 auf gnd lege kommt immer 0.
wenn ich nen wiederstand nehme kommt auch 0.
Manchmal 2.

wenn ich auf vcc 5V lege kommt 1023.
5V VCC + wiederstand = immernoch 1023.

Mir ist zum heulen.

Kann mir den keiner helfen???

Che Guevara
15.05.2010, 13:57
Nimm nen Wiederstand zwischen GND und A.0 und einen anderen zwischen VCC und A.0 - GLEICHZEITIG

Dominik009
15.05.2010, 14:20
dann schreibt er immer 554

man. früher ging das immer ohne probleme einfhahc wiederstand dran und die korrekten werte werden angzezeigt.

An den fuse bits kann es nicht leigen oder?

Che Guevara
15.05.2010, 15:16
hast du zwei gleich große wiederstände genommen?
Bei dir liegen nämlich an A.0 ca. 2,7V (5V*554/1024) an. Nur mit einem Wiederstand bekommst du keine andere Spannung, dabei wird nur der Strom verändert (I = U/R). Um eine andere Spannung zu "erzeugen", brauchst du einen Spannungsteiler, also zwei (oder mehr) Wiederstände gleichzeitig!

Gruß
Chris

Rone
15.05.2010, 16:21
Hallo!

Wenn Du ein Poti (z.B. 10K) an die 5V - Gnd hängst und den Schleifer
an den Analogeingang anschliest und Du nun den Schleifer langsam
von Anschlag zu Anschlag drehst, was passiert dann?

MfG
Rone