im simulator läuft das ganze einwandfrei... ist mit der hardware alles in ordnung? hast du die zu messende spannung am richtigen pin angeschlossen?
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?
Code:$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
im simulator läuft das ganze einwandfrei... ist mit der hardware alles in ordnung? hast du die zu messende spannung am richtigen pin angeschlossen?
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.
[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...
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?
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
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.
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.Zitat von Marco78
Henrik
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
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
HI, danke für eure Hilfe. Nun läuft es auch.
Lesezeichen