PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Analogwert einlesen



scream!!!!
30.08.2005, 17:32
Hallo,
ich habe da ein Problem mit dem Einlesen eines Analogwertes mit Bascom.
Das Programm sollte eigendlich den Wert am Port c0.0 einlesen und am Terminalfenster ausgeben. Mein Problem ist halt, das überhaupt keinen Wert einlesen kann, als wenn der Port nicht aktiviert ist, aber ich weiss einfach nicht weshalb. Kann das was mit den Fusebits zu tun haben?

Ich selber habe das Board von Myavr.de und den Mega8.


Kann mir da vielleicht jemand einen heissen Tip geben, was das Problem sein könnte?



$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600


Dim Result As Word
Dim Sresult As Single
Dim Channel As Byte

Config Portb = Output
Portb = &HFF

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Set Sfior.adhsm

Channel = 0

Start Adc

Do
Gosub Flash
Result = Getadc(channel)
Print "Ch:" ; Channel ; "count:" ; Result ;
Sresult = Result * 5
Sresult = Result / 1024
Print "Volt: " ; Fusing(sresult , "#.###")
Waitms 50

Loop


End


Flash:
Reset Portb.0
Waitms 10
Set Portb.0.0
Return

uwegw
30.08.2005, 17:46
im simulator läuft das ganze einwandfrei... ist mit der hardware alles in ordnung? hast du die zu messende spannung am richtigen pin angeschlossen?

scream!!!!
30.08.2005, 18:09
hi,
bei mir läufts auch, aber die simulation zeigt bei mir immer 0.0 Volt an. habe auch schon aus verzeifung alle es an alle ports angeschossen, ohne jeglichen erfolg. Habs auch mal bei jemand anderes mit dem mega 32 probiert, aber da gings auch nicht.

uwegw
30.08.2005, 18:19
[quote="scream!!!!"]hi,
bei mir läufts auch, aber die simulation zeigt bei mir immer 0.0 Volt an.[quote]

regler im "hardware simulation" fenster hochgedreht?


ansonsten teste mal, ob der port überhaupt eingermaßen in ordnung ist, indem du ihn zb als ausgang schaltest und ne led blinken lässt, bzw als eingang und nen taster dran...

Marco78
30.08.2005, 18:22
Avcc ist auch angeschlossen?
Lass mal den Teil Reference = Avcc weg und probier es nochmal.
Die zu messende Spannung liegt am ADC als Spannungsteiler zu Masse an? (Nicht direkt die Spannung auf den ADC geben. Das funktioniert nicht)

Geht es am AVR nicht oder im Simulator nicht? Soll es nur am Simulator laufen?

hrei
30.08.2005, 19:02
Hallo,

muss mich dann doch noch mal einmischen:

Sresult = Result * 5
Sresult = Result / 1024
Print "Volt: " ; Fusing(sresult , "#.###")

Da kann dann ja nur 0,0 rauskommen.

gemeint ist vermutlich:

result = Result * 5
result = Result / 1024
sresult = result
Print "Volt: " ; Fusing(sresult , "#.###")

edit: Besser..

Sresult = result * 5
Sresult = Sresult / 1024
Print "Volt: " ; Fusing(sresult , "#.###")

Das Reference = Avcc sollte beim Mega8 wirklich weggelassen werden, dürfte aber auch keine negativen Auswirkungen haben.

Henrik

Marco78
30.08.2005, 19:15
Sehr guter Einwand ;)

Ist nur die Frage ob Word und Single und Fusing dann einfach so zusammenarbeiten. Ist auch eine weitere mögliche Fehlerquelle, die man ausschliessen sollte wenn es so noch nicht funktioniert.

Noch ein Tipp:
Da du mehrmals messen willst empfiehlt es sich ADC nicht als "Single" sondern als "Free" laufen zu lassen. Damit werden die Messungen etwas schneller durchgeführt.

hrei
30.08.2005, 19:27
Sehr guter Einwand ;)

Ist nur die Frage ob Word und Single und Fusing dann einfach so zusammenarbeiten. Ist auch eine weitere mögliche Fehlerquelle, die man ausschliessen sollte wenn es so noch nicht funktioniert.


Das funktioniert, keine Bange. Solange das Word vor der formatierten Ausgabe in eine Single-Variabe gewandelt wird (und das passiert durch einfache Zuweisung - vergl. Hilfe) gibt es da keine Probleme.

Henrik

PicNick
30.08.2005, 19:42
Ich glaub', du kannst noch ein's draufsetzen und die const-Zahl vom Compiler vorher ausrechnen lassen (oder vom Taschenrechner), damit er zur Laufzeit nicht zweimal Floatrechnen muß
const fact = 5 / 1024
sResult = result ' konversion in Float
sResult = sResult * fact ' rechnen

scream!!!!
01.09.2005, 14:27
HI, danke für eure Hilfe. Nun läuft es auch.