PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : brauch Hilfe zum ADC



molleonair
09.03.2006, 18:31
Hallo
ich will den ADC über die register steuern um code im tiny26 zu sparen
wenn ich die config adc und getadc befehle nutze funktioniert es allerdings brauchts viel mehr platz aufm flash
also hab ich folgenden einfachen code geschrieben:

dim Adchoch As Byte
Dim Adcniedrig As Byte
Dim Adcergebniss As Word

Admux = &B10000000 'referenz =2,56V intern
Adcsr = &B11000110 'adc enable , adc starten , Prescaler 64

Do
Set Adcsr.6 'einen ADC Vorgang starten

Do
Loop Until Adcsr.6 = 0 'warten bis adc abgeschlossen ist

Adchoch = Adch 'auslesen des ADCH
Adcniedrig = Adcl 'auslesen des ADCL
Adcergebniss = Adchoch * 256 'aus den beiden wird
Adcergebniss = Adcergebniss + Adcniedrig 'ein ergebniss erechnet
Locate 1 , 1
Lcd Adcergebniss ; " "
Waitms 200
Loop

End


im simulator läuft es auch allerdings aufm chip wird nur ein einziger ADC vorgang gestartet denn die ausgabe bleibt immer gleich

was mach ich falsch
bitte helft mir
Gruß Daniel

ruediw
09.03.2006, 23:30
.......

Locate 1 , 1
Lcd Adcergebniss ; " "
Waitms 200
Loop

End

....


im simulator läuft es auch allerdings aufm chip wird nur ein einziger ADC vorgang gestartet denn die ausgabe bleibt immer gleich

was mach ich falsch
bitte helft mir
Gruß Daniel

Du hast eine Endlosschleife programmiert... Wann meinst Du wird das
"Loop" nach "Waitms200" wieder verlassen ?

ähM_Key
09.03.2006, 23:49
Das Loop gehört zu dem oberen Do, was du unterschlagen hast!
...und End ist einfach nur das Ende des Programms.

Ansonten kann ich aber ni weiterhelfen...ich kenn nicht mal die Sprache *oops*

MK

molleonair
10.03.2006, 16:27
ich versteh nicht was ihr mir sagen wollt

das programm soll auch ne endlosschleife sein
eine schleife in der endlos der adc kanal 0 abgefragt wird
und das ergebniss aufs display kommt

@ruediw das loop soll den avr wieder zum obersten do springenlassen und somit erneut adc samplen

oder meint ihr das eine do-loop schleife in einer anderen nicht läuft ?

Gruß Daniel

felack
10.03.2006, 17:07
Hallo molleonair,
schreib mal unten vor dem End noch ein

Loop

hin, dann kommt das Programm auch wieder zu dem oberen 'Do ' und startet einen neuen Wandlervorgang. So wie du das Programm geschrieben hast, hört es nach dem ersten Wandlervorgang bei 'End' auf.
Eigentlich sollte der Compiler aber einen Fehler anzeigen, wenn das zweite 'loop' fehlt.

felack

molleonair
10.03.2006, 17:12
ich verstehs echt nicht ..
vor dem end steht ein loop
es sind genau zwei do und zwei loop
wo soll denn da ein loop fehlen ???????????

felack
11.03.2006, 14:30
Hallo Mollionair,

Tausch mal die beiden Zeilen:
Adchoch = Adch 'auslesen des ADCH
Adcniedrig = Adcl 'auslesen des ADCL

Das hat folgenden Grund:
Wenn ADCL gelesen wird, wird ADCL und ADCH solange blockiert, bis ADCH gelesen wird. Damit wird verhindert, dass während des Auslesens eine neue Wandlung in die Register eingetragen und das Ergebnis verfälscht wird.

felack

molleonair
12.03.2006, 17:56
ja ich glaub daran könnte es liegen ..werd es morgen mal gleich testen

Danke Felack war n super Tip

molleonair
13.03.2006, 14:17
also es läuft
felack lag genau richtig man muß natürlich erst das adcl und dann das adch auslesen
Das steht auch irgendwo im datenblatt aber ich habs vergessen

Also nochmal Danke
Gruß Daniel