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 |