Lichtsensor und ADC - Bascom

Gast #1451693
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.!
#1451722
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?
Gast #1451739
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
#1451747
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.
Gast #1451750
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren