Forum: Mikrocontroller und Digitale Elektronik ADC mit 2 Poti


von PeterNoPlan (Gast)


Lesenswert?

Heyho!

Ich möchte 2 Potentiometer abfragen. Dafür habe ich mir ein assembler 
Programm geschrieben. Allerdings funktioniert damit nur einer der 
beiden.

Ich wollte die werte in die register 17-20 schreiben und dann per UART 
versenden.

Ich verwende einen atmega8 auf dem Bausatz AVR Board Light.
1
; Prozessor    : ATmega8
2
; Takt    : 3,6864 MHz
3
; Sprache    : Assembler
4
; Datum    : 26.10.2011
5
; Version    : 1.0
6
; Autor    : PeterNoPlan
7
;-------------------------------------------------------------------------
8
.include  "m8def.inc"
9
;----------------------------------------------------------------------
10
;Reset and Interruptvectoren  ;VNr.  Beschreibung
11
begin:
12
  rjmp  main  ; 1    POWER ON RESET
13
  reti    ; 2    Int0-Interrupt
14
  reti    ; 3    Int1-Interrupt
15
  reti    ; 4    TC2 Compare Match
16
  reti    ; 5    TC2 Overflow
17
  reti    ; 6    TC1 Capture
18
  reti    ; 7    TC1 Compare Match A
19
  reti    ; 8    TC1 Compare Match B
20
  reti    ; 9    TC1 Overflow
21
  reti    ;10    TC0 Overflow
22
  reti    ;11    SPI, STC Serial Transfer Complete
23
  reti    ;12    UART Rx Complete
24
  reti    ;13    UART Data Register Empty
25
  reti    ;14    UART Tx Complete
26
  reti    ;15    ADC Conversion Complete
27
  reti    ;16    EEPROM Ready
28
  reti    ;17    Analog Comperator
29
  reti    ;18    TWI (I²C) Serial Interface
30
  reti    ;19    Strore Program Memory Ready
31
;------------------------------------------------------------------------
32
;Start, Power ON, Reset
33
main:
34
  ldi  r16,high(RAMEND)
35
  out  SPH,r16
36
  ldi  r16,low(RAMEND)  ;Stack Initialisierung
37
  out  SPL,r16  ;Init Stackpointer
38
39
  sbi  UCSRB,3  ;USR=UCSRB=0x0A TXEN=Bit3 TX aktivieren
40
  ldi  r16,3686400/(9600*16)-1  ;Baudrate 9600 einstellen
41
  out  UBRRL,r16
42
43
  ldi  r16,0b00000000  ;PortC auf eingang
44
  out  DDRC,r16
45
46
  rjmp  mainloop
47
;----------------------------------------------------------------------
48
mainloop:
49
  ldi  r16,0b10000101  ;ADC an, CLK=8MHz/128
50
  out  ADCSRA,r16
51
  sbi  ADCSR,ADSC
52
  rcall  messung1
53
  rjmp  mainloop
54
messung1:
55
  ldi   r16,0b01000000
56
  out  ADMUX,r16
57
  sbis  ADCSR,ADIF  ;Warten bis Wandlung beendet ist
58
  rjmp  messung1
59
  in  r17,ADCL  ;Die unteren 8 Bit in r17 merken
60
  in  r18,ADCH
61
messung2:
62
  ldi   r16,0b01000001
63
  out  ADMUX,r16
64
  sbis  ADCSR,ADIF  ;Warten bis Wandlung beendet ist
65
  rjmp  messung2
66
  in  r19,ADCL  ;Die unteren 8 Bit in r17 merken
67
  in  r20,ADCH
68
;---------------------------------------------------------------------- Zum senden über die Serielle Schnittstelle
69
testsendenbyte1:
70
  sbis  UCSRA,UDRE
71
  rjmp  testsendenbyte1
72
  out  UDR,r17
73
testsendenbyte2:
74
  sbis  UCSRA,UDRE
75
  rjmp  testsendenbyte2
76
  out  UDR,r18
77
testsendenbyte3:
78
  sbis  UCSRA,UDRE
79
  rjmp  testsendenbyte3
80
  out  UDR,r19
81
testsendenbyte4:
82
  sbis  UCSRA,UDRE
83
  rjmp  testsendenbyte4
84
  out  UDR,r20
85
  rjmp  mainloop

Hat jemand eine Lösung parat?

von spess53 (Gast)


Lesenswert?

Hi

Für Messung2 fehlt das Starten des ADCs:  'sbi  ADCSR,ADSC'. Sinnvoll 
ist aber das Starten des ADCs nach dec Setzen des Multiplexers.

MfG Spess

von PeterNoPlan (Gast)


Lesenswert?

Ohhh! DANKEDANKEDANKE Spess!

Ich habs endlich geschafft!

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
Noch kein Account? Hier anmelden.