Forum: Mikrocontroller und Digitale Elektronik Lichtsensor und ADC - Bascom


von Tobias (Gast)


Lesenswert?

Hallo,

habe hier ein myavr board mit einem lichtsensor drauf.
Bisher hat alles geklappt sprich led leuchten und blinken
lassen und taster abfragen. Nun will ich den lichtsensor
mit ins spiel bringen nur es funktioniert nicht. Hier mal
der Quellcode in Bascom geschrieben.

$regfile = "m8def.dat"
$crystal = 3686400

Config Portc.0 -1 = Output
Const Adc_multi = 0.0048828125
CONFIG ADC = SINGLE, PRESCALER = AUTO, REFERENCE = AVCC
START ADC
DIM messergebnis AS WORD
DIM volt AS SINGLE
Messergebnis = Getadc(5)
Volt = Messergebnis * Adc_multi

Do
If Volt >= 2 Then
 Portc.0 = 1
Else
 Portc.1 = 1
End If
Waitms 100
Loop

Danke Für Die Hilfe.!

von Helmut -. (dc3yc)


Lesenswert?

Und wann werden die beiden Ports in der Schleife mal auf 0 gesetzt?

von Tobias (Gast)


Lesenswert?

Stimmt^^
Ist erledigt.
Aber was mach ich da falsch?
Kann man den lichtsensor auch falsch herum einbauen?

von Karl H. (kbuchegg)


Lesenswert?

Tobias schrieb:
> Stimmt^^
> Ist erledigt.
> Aber was mach ich da falsch?

Zum Beispiel fragst du den ADC innerhalb der Schleife gar nicht mehr ab.

> Kann man den lichtsensor auch falsch herum einbauen?

Kann man sicherlich.
Was für ein Sensor ist es denn, und wie hast du ihn eingebaut?

von Tobias (Gast)


Lesenswert?

Ach man sorry für die fehler bin noch anfänger in sachen 
mikrocontroller.

Hab den Lichtsensor von dem myavr board lpt hab ihn jetzt mit einem 
multimeter gemessen und es zeigte -2,.. volt an jetzt hab ich ihn 
andresrum draufgelötet jetzt zeigts mir 2,.. volt an kanns es an dem 
liegen?
Und ich hab das adc jetzt in die schleife geschrieben jetzt 
funktionierts auch. Aber es sind bestimmt noch einige fehler im 
quellcode drin oder?

$regfile = "m8def.dat"
$crystal = 3686400

Config Portc.0 -1 = Output
Const Adc_multi = 0.0048828125
CONFIG ADC = SINGLE, PRESCALER = AUTO, REFERENCE = AVCC
START ADC
DIM messergebnis AS WORD
DIM volt AS SINGLE



Do
If Volt >= 2 Then
 Portc.1 = 0
 Portc.0 = 1
Else
 Portc.0 = 0
 Portc.1 = 1
End If
Messergebnis = Getadc(5)
Volt = Messergebnis * Adc_multi
Waitms 100
Loop

von Karl H. (kbuchegg)


Lesenswert?

Tobias schrieb:
> Ach man sorry für die fehler bin noch anfänger in sachen
> mikrocontroller.

Gerade dann solltest du dir eine gewisse äussere Form des Quellcodes 
aneignen. Dazu géhören zb Einrückungen, die dir zeigen von wo bis wo 
eine Schleife geht. Auch hilft eine Strukturierung mit einzelnen 
Leerzeilen optische Funktionsblöcke im Code zu erhalten und so das Auge 
zu führen.

> funktionierts auch. Aber es sind bestimmt noch einige fehler im
> quellcode drin oder?

Ja. Zb. Wie kannst du im ersten Schleifendurchlauf ein Messergebnis 
auswerten, das du noch gar nicht hast, weil es erst nach dem Auswerten 
eingelesen wird?

1
$regfile = "m8def.dat"
2
$crystal = 3686400
3
 
4
Config Portc.0 -1 = Output
5
Const Adc_multi = 0.0048828125
6
CONFIG ADC = SINGLE, PRESCALER = AUTO, REFERENCE = AVCC
7
8
DIM messergebnis AS WORD
9
DIM volt AS SINGLE
10
11
START ADC
12
13
Do
14
  Messergebnis = Getadc(5)
15
  Volt = Messergebnis * Adc_multi
16
17
  If Volt >= 2 Then
18
    Portc.1 = 0
19
    Portc.0 = 1
20
  Else
21
    Portc.0 = 0
22
    Portc.1 = 1
23
  End If
24
25
  Waitms 100
26
Loop

Dann könnte man noch darüber diskutieren, ob es wirklich notwendig ist, 
den µC eine für ihn komplexe Floating Point Operation durchzuführen.

Ob du jetzt Volt mit 2.0 oder Messergebnis (der Wert vom ADC) mit 409 
als Grenzwert vergleichst, kommt aufs selbe raus. Nur macht der µC 
letzteres mindestens 50 mal schneller, weil nichts rumgerechnet werden 
muss :-)


> Hab den Lichtsensor von dem myavr board lpt hab ihn jetzt mit einem
> multimeter gemessen und es zeigte -2,.. volt

Sicher, dass du das Voltmeter nicht einfach nur verkehrt herum 
angeklemmt hast? Ich bin mir fast ziemlich sicher, dass auf dem MyAvr 
Board mit Ausnahme des RS232 Teiles nirgends negative Spannungen 
vorkommen.

von Tobias (Gast)


Lesenswert?

Oke danke.
Mir wurde jetzt einiges klarer dargestellt.
Jetzt funktionierts auch einwandfrei was ich
machen wollte. :)
Danke für die Tipps und für die hilfe.

Und ja ich hab das Voltmeter richtigrum angeklemt :)

Mfg

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.