Problem mit ADC bei AtMega2560 (assembler)

Gast #2963129
Lesenswert?

Hallo Leute :)
Ich hab vor mir einen Atmega2560. Ich möchte an ADC0 analog die Spannung 
messen, und sie binär auf Port L ausgeben. An Port L sind LED's 
angeschlossen damit ich was sehen kann.
Relevant sind nur die 8 hochwertigsten bits.

Damit es kein Durcheinander gibt soll man ja die Register ADCL und ADCH 
erst auslesen wenn der ADC mit dem Messen Rechnen etc. fertig ist.
Mit einem AtMega 8 hab ich das schon oft gemacht und da sind auch keine 
Probleme aber bei dem 2560' tauchen immer wieder neue Befehle auf wie 
STS und LDS und alte Codes und Schleifen funktionieren nicht mehr.

Ich hab da mal was gebastelt und es sieht aus als würde es 
funktionieren, aber kann da mal einer drüber sehen und mir sagen ob der 
auch wirklich in der Schleife ADC_wait wartet bis die Register ADCL und 
ADCH updatet sind ?

Mfg Christian

1
/*
2
 * ADC_übung.asm
3
 *
4
 *  Created: 19.12.2012 09:59:55
5
 *   Author: *************
6
 */ 
7

8

9
         ldi r16, HIGH(RAMEND)            ; HIGH-Byte der obersten RAM-Adresse
10
         out SPH,r16
11
         ldi r16, LOW(RAMEND)             ; LOW-Byte der obersten RAM-Adresse
12
         out SPL,r16
13

14
     ldi r16,255                          ; PORT L als ausgang
15
     STS DDRL,r16
16

17
     ldi r16, (0<<REFS1) | (1<<REFS0) | (1<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0)
18
     STS ADMUX,r16           ;REFEREZNSPANNUNG 5V (VCC) / Ausgabe linksbündig / Kanal0
19

20
     ldi r16, (0<<ACME) | (0<<MUX5) |(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0)
21
     STS ADCSRB,r16
22

23
     ldi r16, (1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
24
     sts ADCSRA,r16              ;ENABLE /  Vorteiler 128
25

26

27
loop:
28

29
          ldi r16, (1<<ADEN) | (1<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
30
         sts ADCSRA,r16          
31

32
         wait_adc:
33
         LDS r16,ADCSRA
34
         andi r16,0b01000000
35

36
         cpi r16,0b01000000
37
         breq wait_adc
38

39

40
         LDS r16,ADCL
41
         lds r17,ADCH
42

43
         STS portl,r17
44

45
rjmp loop

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren