Hallo Zusammen,
Ich programmiere für die Schule an einem Projekt und bin ein bisschen am
verzweifeln. Ich muss einen Lichtsensor an unser Bord anschließen und
verstehe nicht ganz wie ich vom C-Code diesen Wert erreichen kann.
Als Board haben wir den Teach Dongle der FH Pforzheim.
An diesem Board kann ich den Lichtsensor an die Anschlüsse ADC0, ADC1
oder ADC3 anschließen.
Ich habe verstanden dass ich das Ergebnis der Umwandlung in den ADCDATA
Registern nachschauen kann, jedoch weiß ich nicht wie ich die Register
ADCCON1 (EFH) und ADCCON2 (D8H) beschalten muss damit es funktioniert.
Vielen Dank Lukas
Hallo
Lukas schrieb:> jedoch weiß ich nicht wie ich die Register> ADCCON1 (EFH) und ADCCON2 (D8H) beschalten muss damit es funktioniert.
Das hängt nunmal ganz davon ab, wie du die Wandler denn benutzen willst.
Die Informationen zu den einzelnen Bits findest du ja im Datasheet des
Controllers. Ich weiss nicht, ob dir das hilft, kann dir aber mal einen
Codeausschnitt von einem Projekt geben bei welchem ich den AduC7020
verwendet habe. Programmiert wurde mit Keil uVision 4.
1
/* Konfiguration Pin Funktion */
2
GP0CON=0x00101000;// Alle I/O, P0.3 als TRST
3
GP1CON=0x00000011;// P1.0 als RX, P1.1 als TX, rest I/O
4
GP2CON=0x00000000;// Alle als I/O Konfigurieren
5
GP3CON=0x00000000;// Alle als I/O Konfigurieren
6
GP4CON=0x22220000;// P4.4 bis P4.7 als AD-Wandler, Rest als I/O
7
8
/* Konfiguration Pin Direktion */
9
GP0DAT=0x00000000;// Default Value schreiben
10
GP1DAT=0x0E0C0000;// LED als Ausgänge definieren und auf 1 setzen, da Low aktiv
void schrieb:> @San:> Super nurzlose Antwort. Der von dir genannte Controller hat einen> komplett anderen AD-Wandler...
Macht die Antwort nicht automatisch nutzlos. Es ist bestimmt nicht meine
Aufgabe ihm einen Code zu posten, welchen er einfach kopieren kann und
passt. Das ganze dient lediglich als Information, um ihm eine ungefähre
Vorstellung zu ermöglichen.
@San:
Um eine ungefähre Vorstellung zu vermittel bedarf es gar keinem Code.
1) AD-Wandler Konfigurieren
2) AD-Wandlung starten
3) Warten bis AD-Wandlung fertig
4) Ergebnis von AD-Wandlung auslesen
Das macht man um eine ungefähre Vorstellung zu vermitteln.
Source Code mit Registern zu posten, welche ganz eindeutig nicht mal vom
Namen her zum verwendeten AD-Wandler / Controller passen ist einfach nur
dumm.
#Void:
Ja, wenn du meinst. Leute im Internet direkt als dumm zu bezeichnen
zeugt in meinen Augen auch nur von einem geistlichen Alter von ca. 13 ~
Aber das nur so am Rande. Solche Aussagen gehen auch mit anderen Worten,
ohne wieder direkt den Mund aufreissen zu müssen weil man sich die
Anonymität des Internets zu nutze machen will.
void schrieb:> Um eine ungefähre Vorstellung zu vermittel bedarf es gar keinem Code.>> 1) AD-Wandler Konfigurieren> 2) AD-Wandlung starten> 3) Warten bis AD-Wandlung fertig> 4) Ergebnis von AD-Wandlung auslesen
Ging mir auch eher um die ungefähre Vorstellung der Initialisierung,
nicht dem Ablauf einer AD Wandlung. Den Ablauf den du hier beschreibst
ist ja schön und gut, bringt den TO aber in dem Sinne genau so wenig
weiter wie mein Code.
San Lue schrieb:> nicht dem Ablauf einer AD Wandlung. Den Ablauf den du hier beschreibst> ist ja schön und gut, bringt den TO aber in dem Sinne genau so wenig> weiter wie mein Code.
Aber er vermittelt ihm zumindest nicht die Vorstellung, dass er da Code
hätte, der fast funktionieren würde, wenn er in seiner
Entwicklungsumgebung noch ein bischen drehen würde.
Insofern muss ich void schon recht geben.
Zumal solche Dinge durch die Angabe der direkten Hex-Zahlen
1
ADCCON=0x20;// Power aktivieren
2
ADCOF=0x200;// Offset Konfiguration
3
ADCCN=0x10;// Referenz auf GND beziehen
ohne Kenntnis des Datenblattes des konkreten Prozessors komplett nutzlos
sind.
Alles in allem kann sich der TO gerade mal an den Kommentaren
orientieren, dass er den ADC einschalten, einen Offset (was immer das
auch ist) konfigurieren und die Referenz einstellen muss. In solchen
Situationen sagt man als gelernter Österreicher: No na wird er das
machen müssen.
War halt meine Hilfe nicht so gut, verurteilt mich deswegen. Ich bin
fast täglich hier im Forum unterwegs und versuche oft Leuten zu helfen,
genau wie ihr auch. Müssen dann immer direkt Wörter wie "dumm" Fallen,
nur weil einmal eine Antwort nicht ganz so Optimal ist?
Ausserdem habe ich weder irgendwo behauptet er könnte diesen Code so
benutzen, noch habe ich gesagt es war der selbe Controller. Man versucht
hier zu helfen. Klar, meine Antwort war vielleicht etwas unpassend, da
stimme ich euch gerne zu. Allerdings steht da auch nirgends dass man in
diesem Forum seine Fragen stellen kann und danach Fixfertige "Produkte"
von den Usern hier zurückkriegt, welche man einfach kopieren kann.
Ich denke, wenn da schon steht es sei für einen anderen Controller, man
nicht wisse ob es ihm hilft, dann sehe ich das auch ein bisschen als
Teil des Geunden Menschenverstandes an dass man das ganze vielleicht
hinterfragt und nicht einfach wild drauflos kopiert.
Karl Heinz schrieb:> Alles in allem kann sich der TO gerade mal an den Kommentaren> orientieren
Welche ihm den Ablauf einer Initialisation durchaus näher bringen
können.
Karl Heinz schrieb:> einen Offset (was immer das> auch ist)
Kauf ich dir nicht ab, dass du noch nie von einem Offset bei einem
AD-Wandler in einem uC gehört hast. ;P
San Lue schrieb:> War halt meine Hilfe nicht so gut, verurteilt mich deswegen.
Nein, ist schon ok. Zumindest ich verurteile dich nicht deswegen.
Ich musste auch erst mal lernen, dass ich mich aus manchen Threads
einfach raushalten muss. Wenn ich keinen Code für einen PIC habe, dann
habe ich keinen. Und ein AVR Code, den ich problemlos produzieren kann,
hilft einem PIC-Programmierer nun mal nichts.
Nur so als Beispiel.
Du wist von mir kaum Antworten finden, die sich um PIC oder MSP oder
STF32 oder Parallax oder ARM oder dergleichen drehen, es sei denn es
sind allgemeine C Fragen. Ich hab diese Hardware nicht, ich kann im
Falle eines Falles nicht sagen, wo Fallen in der Konfiguration sind. Da
halte ich mich lieber raus, ehe ich mich in einen Wirbel reindrehe und
dem TO mehr schade als ihm helfe.
Karl Heinz schrieb:> Nein, ist schon ok. Zumindest ich verurteile dich nicht deswegen.
War auch nicht auf dich bezogen, sondern eher auf diese ganzen
Unregistrierten User die sich hier jeden Tag rumtreiben. (Gibt auch
viele tolle Leute von denen, aber manche bräuchte es nun wirklich
nicht.)
Muss auch zugeben, dass ich mich nicht sonderlich gross in den Tread
eingelesen hatte. Ich sah was von ADuC, hatte kein Bock das Datenblatt
des Teils aufzusuchen und mir entging die Information des TO im
Startpost dass es mehr als nur ADCCON Register gibt. Hätte ichs gesehen,
hätte ich den Code wohl auch nicht einfach so rausgehauen. Ging halt
davon aus, dass es bestimmt mehr oder weniger das selbe sein wird und
habe dann in der Eile mal den Code gepostet.
Mehr werd ich dazu nichtmehr sagen. :P
Karl Heinz schrieb:> Ich musste auch erst mal lernen, dass ich mich aus manchen Threads> einfach raushalten muss.
Genau das ist nun der Fall für mich :P
Karl Heinz schrieb:
> Nein, ist schon ok. Zumindest ich verurteile dich nicht deswegen.
Ich im übrigen auch nicht. Und deshalb dankeschön Karl Heinz für deine
gute Analyse der Situation. :-)
In der Tat ist es eben für Anfänger schwer zu hinterfragen, ob etwas
Beispiel-Code für Ihre Zielhardware passend ist oder nicht. Deshalb war
San's Beispiel eben unglücklich gewählt. Lukas hat eben schon durch
seine detailierte Frage (nach ADCCON1/2 konfiguration) gesunden
Menschverstand bewiesen, allerdings sollte man Ihn trotzdem als Schüler
behandeln und nicht überfordern...
Schade nur, dass Lukas hier nicht mehr geantwortet hat ob Ihm unsere
Ausführungen geholfen haben.