Forum: Mikrocontroller und Digitale Elektronik Analog digital converter wie? AVM


von PeterNoPlan (Gast)


Lesenswert?

Hey!

Also ich habe mir das Lernboard MyAVR Board Light gekauft und möchte nun 
die 2 Potentiometer abgreifen. Ich habe sie jeweils an den PortC-0 und 1 
angeklemmt. Das ganz würde ich gerne in Assembler machen. Hat da jemand 
ein Beispielcode für mich, wie ich beide werte Potentiometer auslesen 
kann und per serieller Schnittstelle an den PC senden kann?

Ich habe bereit ein kleinen code gebastelt, allerdings geht der nur für 
1 Potentiometer...
1
;-------------------------------------------------------------------------
2
; Titel    : myAVR Beispiel "UART senden" für den ATmega8
3
;-------------------------------------------------------------------------
4
; Funktion    : sendet den String "Test" mit 9600 Baud per serieller
5
;    : Schnittstelle
6
; Schaltung    : Nullmodemkabel an PC & AVR-Board
7
;-------------------------------------------------------------------------
8
; Prozessor    : ATmega8
9
; Takt    : 3,6864 MHz
10
; Sprache    : Assembler
11
; Datum    : 09.11.2007
12
; Version    : 1.0
13
; Autor    : Renaldo Badke
14
; Programmer  :
15
; Port    :
16
;-------------------------------------------------------------------------
17
.equ  F_CPU = 3686400
18
.include  "m8def.inc"
19
;----------------------------------------------------------------------
20
;Reset and Interruptvectoren  ;VNr.  Beschreibung
21
begin:
22
  rjmp  main  ; 1    POWER ON RESET
23
  reti    ; 2    Int0-Interrupt
24
  reti    ; 3    Int1-Interrupt
25
  reti    ; 4    TC2 Compare Match
26
  reti    ; 5    TC2 Overflow
27
  reti    ; 6    TC1 Capture
28
  reti    ; 7    TC1 Compare Match A
29
  reti    ; 8    TC1 Compare Match B
30
  reti    ; 9    TC1 Overflow
31
  reti    ;10    TC0 Overflow
32
  reti    ;11    SPI, STC Serial Transfer Complete
33
  reti    ;12    UART Rx Complete
34
  reti    ;13    UART Data Register Empty
35
  reti    ;14    UART Tx Complete
36
  reti    ;15    ADC Conversion Complete
37
  reti    ;16    EEPROM Ready
38
  reti    ;17    Analog Comperator
39
  reti    ;18    TWI (I²C) Serial Interface
40
  reti    ;19    Strore Program Memory Ready
41
;------------------------------------------------------------------------
42
;Start, Power ON, Reset
43
main:
44
  ldi  r16,high(RAMEND)
45
  out  SPH,r16
46
  ldi  r16,low(RAMEND)  ;Stack Initialisierung
47
  out  SPL,r16  ;Init Stackpointer
48
49
  sbi  UCSRB,3  ;USR=UCSRB=0x0A TXEN=Bit3 TX aktivieren
50
  ldi  r16,3686400/(9600*16)-1  ;Baudrate 9600 einstellen
51
  out  UBRRL,r16
52
  
53
  ldi  r16,0b01000000  ;Messbereich 0-5V, Kanal 0
54
  out  ADMUX,r16
55
  ldi  r16,0b10000111  ;ADC an, CLK=8MHz/128
56
  out  ADCSRA,r16
57
;------------------------------------------------------------------------
58
mainloop:
59
  sbi  ADCSR,ADSC
60
61
subloop:
62
  sbis  ADCSR,ADIF  ;Warten bis Wandlung beendet ist
63
  rjmp  subloop
64
  in  r17,ADCL  ;Die unteren 8 Bit in r17 merken
65
  in  r18,ADCH
66
  rcall  warte3  ;EDIT-----------------------auf warte 2 setzen für größere werte
67
  rjmp  mainloop
68
69
;------------------------------------------------------------------------
70
warte2:  sbis  UCSRA,UDRE  ;Warten bis Senderegister frei ist
71
  rjmp  warte2
72
  out  UDR,r18  ;dann die oberen 2 Bit senden
73
warte3:  sbis  UCSRA,UDRE  ;Warten bis Senderegister frei ist
74
  rjmp  warte3
75
  out  UDR,r17  ;dann die unteren 8 Bit senden
76
  rjmp  mainloop  ;dann die unteren 8 Bit senden
77
78
;-----------------------------------------------------------------------

von PeterNoPlan (Gast)


Lesenswert?

Bump :D

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.