Hallo zusammen, ich hoffe, dass mir hier jemand weiterhelfen kann. Ich möchte eine variable Spannung (von Poti) am Analogeingang1 (Pin24) einlesen und die höherwertigen 8 bits am PortD darstellen. Dieser steuert erst nur LEDS an, um zu sehen, ob sich etwas tut. Leider funktioniert hier gar nichts. Testweise Ansteuern der LEDs mittels Festwert funktioniert. Folgend der Assembler Code: .nolist .include "m8def.inc" .nolist main: ;PortD als Ausgang ldi r18,0xff out ddrd,r18 ;Einlesen Analogwert ldi r16,0x61 ;Avcc als Referenz, ADLAR ein, Mux1 (0110 0001) out ADMUX,r16 ldi r16,0xC7 ;ADEN auf 1, ADSC auf 1, ADC Prescaler auf 128 (1100 0111) out ADCSRA,r16 Warte: sbic ADCSRA,ADSC ;Warte bis ADSC auf 0 rjmp Warte in R16,ADCH ;ADCH an PortD out portd,r16 rjmp main Wie oben gesagt, es tut sich gar nichts an den Ausgängen. Über Tipps oder Hilfestellungen bin sehr dankbar
> ldi r16,0xC7 ;ADEN auf 1, ADSC auf 1, ADC Prescaler auf 128 (1100
Mit dieser Schreibweise vergraulst du potentielle Helfer. Nur wenige
haben Lust, hier die Steuerbits rauszufummeln.
So liest es sich besser:
ldi r16, 1<<ADEN|1<<ADPS2|1<<ADPS1|1<<ADPS0 ;ADEN auf 1, Prescaler 128
out ADCSRA,r16
;Das ADSC habe ich weggelassen Versuche es mal so:
ADC_loop:
sbi ADCSRA, ADSC ; den ADC starten
Warte:
sbic ADCSRA,ADSC ;Warte bis ADSC auf 0
rjmp Warte
in R16,ADCH
out portd,r16 ;ADCH an PortD
rjmp ADC_loop
Erstmal vielen Dank für die schnelle Antwort!!!! Es funktioniert jetzt. Mich interresiert jetzt natürlich auch, was dass Problem war.
Moin,
also 100%ig sicher bin ich nicht, aber ich vermute der ADC mag es nicht,
daß du ihn gleichzeitig aktivierst und startest:
> ldi r16,0xC7 ;ADEN auf 1, ADSC auf 1, ADC Prescaler auf 128 (1100
0111)
In dem Beispiel von Thomas wird das schön der Reihe nach gemacht. Also
erst konfigurieren und aktivieren, DANN starten.
Außerdem durchratterst du jedes mal ja die komplette Initialisierung
mit. Das ist überhaupt nicht gut.
Es reicht ja (so wie bei Thomas), wenn deine Endlosschleife nur den ADC
startet, wartet, Wert an Port übergibt, startet, wartet, usw...
Programmier es einfach nochmal, ich wette jetzt kriegst du das spontan
auch hin :)
Hab gerade mal die Endlosschleife weggenommen, so dass die
Initialisierung jedesmal mit durchläuft. Da dies auch funktioniert,
scheint wirklich das Problem gewesen sein, dass Aktivierung und starten
gleichzeitig stattgefunden hat.
> ldi r16,0xC7 ;ADEN auf 1, ADSC auf 1, ADC Prescaler auf 128 (1100
0111)
Nochmals vielen Dank für eure Antworten!!!!!!!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.