Warum muss es Assembler sein?
Warum muss es Assembler sein?
Grüße
Thomas
Hallo Thomas,
gute Frage.
nun, das Projekt ist bereits aufgebaut und im Einsatz (Test).
Ich habe es in Assembler geschrieben, so gut ich es eben konnte. Dabei habe ich die ADC-Sache testweise durch
einen Komparator hardewareseitig ersetzt. Das soll nun in der Finalvariante wegfallen.
Außerdem wäre es auch ein kleiner Lerneffekt für mich, schließlich kann es zu einem späteren Zeitpunkt zu Änderungen kommen,
die ich dann selbst erledigen könnte.
Ich weiß, in C dürfte es wesentlich besser zu programmieren sein.
Grüße
leoner
Bei Bascom hätt ich helfen können...
Grüße
Thomas
Es sind 4 Messungen, da man dann keine Divisionsroutine benötigt, sondern nur zweimal rechts schieben muss.
Den Rest solltest Du selbst zusammenbringen.
Code:.include "m8def.inc" .equ chan = 0 ; adc-channel .cseg .org 0 rjmp start reti .org 0x13 start: ldi r16, high(RAMEND) out SPH, r16 ldi r16, low(RAMEND) out SPL, r16 rcall adc_init mainloop: rcall get_adc ; do something rjmp mainloop get_adc: ; returns averaged result out of 4 samples clr r18 ; result in r18/r19 clr r19 ldi r17, 4 ; count of samples in r16, ADMUX andi r16, ~(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0) ori r16, chan out ADMUX, r16 get_sample: sbi ADCSRA, ADSC ; start conversion wait_adc: sbic ADCSRA, ADSC rjmp wait_adc ; wait for conversion ready in r16, ADCL ; get result low byte add r18, r16 ; add in r16, ADCH ; get high byte adc r19, r16 ; add with carry dec r17 ; decrease sample counter brne get_sample lsr r19 ; shift result right = divide by 2 ror r18 lsr r19 ; same again, now divided by 4 ror r18 ret adc_init: ldi r16, (1<<ADEN)|(1<<ADPS2)|(1<<ADPS0) ; enable adc, adc-prescaler 32 out ADCSRA, r16 ldi r16, (1<<REFS0) ; ref is AVCC out ADMUX, r16 ret
Geändert von MagicWSmoke (01.09.2012 um 21:34 Uhr)
Hallo MagicWSmoke,
danke für den Code. Muss mich da aber erst mal reindenken. Aber die Ergebnisse im Reg. R18/19 müssen ja auch
ausgewertet werden. Das nächste Problem (für mich). Und in der knappen zur Verfügung stehenden Zeit wird das für mich
zu eng und letztendlich auch zu unsicher.
Also noch mal meine Bitte:
Wer kann dies programmieren? Genaue Details (Auswertung der Register etc.) müssen dann am besten per tel. Kontakt
ausgetauscht werden.
Grüße
leoner
Bitte.
Macht man mit CPI/CPC.Aber die Ergebnisse im Reg. R18/19 müssen ja auch ausgewertet werden.
Die Hoffnung auf und Suche nach Jemanden der's Dir schreibt, wird Dich auch Zeit kosten.Und in der knappen zur Verfügung stehenden Zeit wird das für mich zu eng
Lesezeichen