Forum: Mikrocontroller und Digitale Elektronik ADC: Auslesen eines Sharp 2D120X in Bascom


von Peter P (Gast)


Lesenswert?

Servus,

habe den Sharp IR-Sensor und den Atmel ATMEGA a2560 an stabilisierte 5 V 
angeschlossen, außerdem das Signal vom Sharp an PinF.0 (ADC 0) gelegt.
Ab einer bestimmten Entfernung soll eine LED den Status anzeigen.. 
Leider passiert rein garnichts...
Mit der Variable W habe ich auch schon rumgespielt, umgewandelt, aber 
ohne Erfolg..

Wo liegt mein Denkfehler?

Quelltext:


$regfile = "m2560def.dat"
$hwstack = 82
$framesize = 68
$swstack = 68
$crystal = 16000000
Dim W As Word

Config Pind.5 = Output
Led Alias Portd.5

Config Adc = Single , Prescaler = Auto , Reference = Off

Start Adc


Do
  W = Getadc(0)

  If W > 500 Then Led = 1 Else Led = 0


  Waitms 500
Loop

End





Danke

von Marco (Gast)


Lesenswert?

Der Code sieht richtig aus. Wenn du mit den Werten für W schon 
rumgespielt hast, denke ich eher das es an der Hardware liegt. Wie ist 
der Sensor angeschlossen? Direkt der Ausgang des Sensors an den ADC ohne 
weitere Beschaltung?

Wenn ja, dann ist das falsch.

http://www.roboternetz.de/phpBB2/files/plan_772.gif
Im Prinzip so wie unter (1) zu sehen muss der Sensor angeschlossen 
werden.

von Peter P (Gast)


Lesenswert?

@MArco


Kannste mir das Schaltbild mal in Worten erklären?

Der Sharp machte auf Grund seiner großen Externbeschaltung den Eindruck, 
er wäre in der Lage an den MC angeschlossen zu werden..

+ - Signal

Sind die 3 Leitungen vom Sensor....




thx

von Marco (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe selbst mal einen Plan gezeichnet. Vielleicht sagt der das 
besser aus. Den Tiny25 musst du dir als deinen Mega2560 vorstellen und 
rechts der TSOP1736 kann man auf Grund seiner Anschlüsse wohl mit dem 
Sharp gleichstellen. Zumindest hat er auch einen Signalausgang.
Wenn das nicht hilft, muss ich es weiter in Worten probieren.

Die 10kOhm des Widerstands sind jetzt nur frei gewählt. Sollte der 
Wertebereich damit zu klein sein, muss man ihn ggf ändern.

von Peter P (Gast)


Lesenswert?

@Marco


Also mit dem Widerstand geht das auch nicht..

Welcher Wertebereich?



von Peter P (Gast)


Lesenswert?

ABER wenn ich den Sensor überbrücke, geht es..d.h. Quelltext etc alles 
richtig, aber der Sensor nicht...Gibt es da nen Trick beim anschließen? 
Oder ist der Sensor defekt?

von Peter P (Gast)


Lesenswert?

SO, aber eine SPannugsmessung ergab, dass der Sensor funktioniert, also 
muss es doch irgendwie an der AUSWERTUNG des Signals geben, evtl mit dem 
FORMAT, welches ADC zurückgibt?



hülfe, bittee^^

von Bobbelsche (Gast)


Lesenswert?

.......schon mal an Uref gedacht ???

von Peter P (Gast)


Lesenswert?

ha, hab sowohl die 2.56 als auch die externe , avcc getestet..
hab den chip schon aufm entsprechenden board, daher meistens mit den 5V 
avcc

von Peter P (Gast)


Lesenswert?

$regfile = "m2560def.dat"
$hwstack = 82                                               '80
$framesize = 68                                             ' 64
$swstack = 68                                               '44

$crystal = 16000000
Dim W As Word , Lev As Single 
'Quarzfrequenz

Config Pind.5 = Output
Led Alias Portd.5

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc


Do
  W = Getadc(0)

  If W > 800 Then Led = 1 Else Led = 0


  Waitms 1
Loop

End

von Marco (Gast)


Lesenswert?

Kannst du dir W nicht über RS232 ausgeben lassen oder auf einem LCD 
anzeigen lassen. Dann siehst du schonmal was du überhaupt passiert.

Ist GND vom Sensor mit GND vom Mega2560 verbunden?

Hast du ein Link zum Datenblatt des Sensors?

Wenn alles nicht hilft, fang eine Nummer kleiner an. Mit einem Poti.
Ein Anschluss der Widerstandsbahn auf GND, den anderen auf VCC/VRef und 
den Schleifer an den ADC. Je nach Auflösung des ADC (8 oder 10Bit) 
bekommst du dann beim drehen am Poti unterschiedliche Werte.

Ptot des Potis aber beachten! Sonst stinkt es unangenehm ;)

von Peter P (Gast)


Lesenswert?

nunja,

es kommen unterschiedliche SPannungen aus dem Sensor..

es sollen je nach Abstand 0.3 bis 3V rauskommen, und das tun sie auch..

http://www.technologicalarts.com/myfiles/data/gp2d120.pdf

Mit dem Quellcode oben, leuchtet die LED IMMER....



von Peter P (Gast)


Lesenswert?

Nur leuchtet die LED auch, wenn ich den Sensor rauszieh .. Wenn also NIX 
am port anliegt....

von Marco (Gast)


Lesenswert?

Was für ein Board hast du denn? Sind da parallen zu den ADC-Pins noch 
irgendwelche Widerstände wie genau ist das alles denn verdrahtet?

von Peter P (Gast)


Lesenswert?

http://www.shop.robotikhardware.de/shop/catalog/product_info.php?products_id=162

RN-Mega2560 Modul

Ich denke, die Verarbeitung des zurückgegebenen Wertes ist der Fehler, 
wenn ich aus

If W > 800

-->  If W < 800 mache, dann ist sie immer aus..

Evtl ne Einstellung an den Fusebits?

von Madget (Gast)


Lesenswert?

eventuell noch den adc port als input definieren ? nich, das der interne 
pullup dazwischenfunkt ;)

von Peter P (Gast)


Lesenswert?

nja reicht doch den ADC zu konfigurieren, also zu aktivieren, oder?

von Madget (Gast)


Lesenswert?

ja eigentlich schon aber nen versuch kann ja nicht schaden, oder?
miss doch mal die spannung am adc pin ob die sich auch ändert wenn der 
sensor angeschlossen ist. wenn ja ... dann weiß ich auch nicht. wenn sie 
sich nicht ändert und bei 5V bleibt, weißt du wo der fehler zu suchen 
ist.

In der Simulation funktioniert das programm jedenfalls.

von Marco (Gast)


Lesenswert?

Auch auf der Gefahr hin, das ich mich wiederhole...

Sind GND des Sensors und GND des Boards verbunden?
Wie genau ist der Sensor ans Board angeschlossen?

Hast du an den Fusebits was geändert? Steht der Chip auch auf externen 
Quarz?





$regfile = "m2560def.dat"
$hwstack = 82                                               '80
$framesize = 68                                             ' 64
$swstack = 68                                               '44

$crystal = 16000000

Config Pind.5 = Output
Led Alias Portd.5

Do

Led=1
waitms 3000

Led=0
waitms 3000

Loop

End




Probier den Code mal aus. Wenn die LED nicht 3 Sekunden an und 3 
Sekunden aus ist, stimmt mit der Taktfrequenz was nicht. Und die 
Frequenz ist für den ADC auch wichtig. Ich glaube zwar nicht, das es das 
ist, aber was anderes bleibt für eine Ferndiagnose z.Zt. nicht offen. 
Außer das messen der Spannung direkt am Pin.

von Madget (Gast)


Lesenswert?

hab das programm grade mal aufm mega8 getestet (nur das regfile 
geändert) und es funktioniert einwandfrei... muss an deiner hardware 
liegen.

von Madget (Gast)


Lesenswert?

nu ja, viel glück noch beim fehler suchen und gute nacht.

von Peter P (Gast)


Lesenswert?

also,


am Pin kommt die SPannung immer an,


GND ist natürlich verbunden.


Das Testprogramm mit Quarzfrequenz funzt einwandfrei..



was nun? -.-

von Peter P (Gast)


Lesenswert?

WARUM liegt an meinem ADC Pin ne Spannung von 5V an?^^ Ich dachte der 
Port soll messen, und keine Spannung abgeben?

von Peter P (Gast)


Lesenswert?

lol und jetzt liegen keinen 5V mehr an, aber wenn ich die ~2 V z.b. vom 
Sensor anlege, wird die Spannung neutralisiert, dann ergeben die 
Messungen nur noch 00V ?

von Peter P (Gast)


Lesenswert?

lol,


Achja, Lösung: Das Datasheet war fehlerhaft -.- geil....




thx@all

von m0gwai (Gast)


Lesenswert?

hi leute ich habe auch den mega2560 vom roboternetz und das gleiche 
problem! was stimmt den an dem datenblatt nicht? bin das gerade auch 
alles stück für stück am analysieren. mich wundert es, das pin 100 und 
99 nicht beschaltet sind. laut atmel doku zum mega2560 sollten die für 
AVCC (pin100), GND (pin99) und AREF (pin98).pin99 das ist en extra 
ground um masseschleifen zu verhindern. ich bin nun so schlau, dass ich 
folgendes festgestellt hab:

mega2560 ic selbst:
pin 100 = AVCC (Spannungsversorgung für Port F und den A/D-Wandler)
pin  99 = AGND
pin  98 = AREF (Referenzspannung für A/D-Wandler)

>>ATMEL Doku:
- AVCC is the supply voltage pin for Port F and the A/D Converter. It 
should be externally connected to VCC, even if the ADC is not used. If 
the ADC is used, it should be connected to VCC through a low-pass 
filter.
- AREF is the analog reference pin for the A/D Converter.

>>General:
As inputs, Port A-L pins that are externally pulled low will source
current if the pull-up resistors are activated.

des weiteren müsst ihr noch die registern ändern wenn ihr den 
a/d-wandler verwendet, wie das funktioniert könnt ihr ja in der atmel 
anleitung zum mega 2560 nachlesen. ich kann euch sowieso nur empfehlen 
die orginal hersteller anleitung als referrenz zu nehmen, hatte anfangs 
zwar auch erst keine lust da mir das zu viele seiten waren aber so 
schlimm ist das gar nicht wenn man es erst mal verstanden hat.

hoffe das ich einigen damit helfen konnte! schreibe gerade aber noch 
eine komplette anleitung zum rn-mega2560 weil die anleitung vom 
roboternetz total verbuggt ist! habe mich deswegen schon häufig genug 
aufgeregt und mir schon einige nächte um die ohren gehauen um als 
totaler elektronik anfänger da nun durchzusteigen. mache das erst 4 
wochen, aber in der zeit habe ich durch intensivstes lernen schon so 
viel neues entdeckt wovon ich vorher nicht den hauch einer ahnung hatte 
und muss nun doch leider feststellen, dass es auch beim robotikhardware 
bzw. dem roboternetz (werden ja wohl unter einer decke stecken) 
anscheinend doch auch wohl nur um das eine geht -> geld. es wird zwar 
sehr auf dem board viel geholfen jedoch muss ich auch immer wieder 
feststellen, dass es anfängern recht schwer gemacht wird! abgesehen 
davon was sich da manchmal für leute rumtreiben kann man das auch auf 
der einen seite verstehen. ich habe mich jedoch krampfhaft dazu 
gezwungen nicht auf irgendeinem board nach infos zu fragen sondern alles 
selber heraus zu finden.

der hintergrund an der sache ist wie man hier schön sehen konnte 
folgender: nicht auf den fehlern anderer vertrauen bzw. sie nicht mal 
als fehler zu erkennen und dadurch halt nicht weiter zu kommen. das kann 
man auch analog in der wissenschaft sehen wie auch in der schule und 
fast überall. die menschen verdummen und denken nicht mehr selber, 
sondern "lernen" (auswendig lernen aus frust und nicht 
verstehen/begreifen aus spaß an der freude) das was ihnen vorgegeben 
wird. was dabei raus kommt sieht man ja häufig genug in unserer 
gesellschaft.

naja, nun denn möchte ich euch mal nicht länger hiermit quälen da ich 
schon viel mehr geschrieben habe als ich eigentlich vor hatte.

mfg m0gwai

von xXx (Gast)


Lesenswert?

 If W > 500 Then Led = 1 Else Led = 0

mache versionen von bascom mögen den syntax nicht


 If W > 500 Then
Led = 1
Else
 Led = 0
end if

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.