Forum: Mikrocontroller und Digitale Elektronik ADC Mit Atmega48PA


von A. B. (developer_x)


Lesenswert?

Sehr geehrtes Forum, ich habe folgendes Tutorial durchgearbeitet :
http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC

Und habe dementsprechend versucht das ganze umzusetzen.
Ich habe dafür an meinen Pin PC0 eine Spannung über einen drehbaren 
Potentiometer angeschlossen.

Mir ging es bei dem Test ermal darum zu sehen, ob er überhaupt etwas 
misst, die Spannungsberechnung etc wollte ich im folgenden machen.

Hier mein Code
1
.include "M48PAdef.inc"
2
3
; //////////////////////////////////////////////////////////////
4
;  LCD_COUNTER
5
;  Kevin Riehl - 01.04.2013
6
;  
7
;  Dieses Programm misst die Spannung von einem Spannungsteiler
8
;  und stellt den ermittelten Wert auf dem Bildschirm dar.
9
;  
10
; //////////////////////////////////////////////////////////////
11
; /////// Defintionen
12
; //////////////////////////////////////////////////////////////
13
.DEF STACK_LOW = R16
14
.DEF STACK_HIG = R17
15
.DEF OUTPUT    = R22
16
17
.DEF NUMBER    = R24
18
19
.DEF temp1 = R25
20
.DEF temp2 = R26
21
22
.DEF char1 = R23
23
.DEF char2 = R28
24
.DEF char3 = R27
25
26
; //////////////////////////////////////////////////////////////
27
; Stackpointerinitialisierung
28
  LDI STACK_LOW, LOW(RAMEND)    ;Stackpointer initialisieren
29
  OUT SPL, STACK_LOW
30
  LDI STACK_HIG, HIGH(RAMEND)   ;Stackpointer initialisieren
31
  OUT SPH, STACK_HIG
32
; //////////////////////////////////////////////////////////////
33
34
; LCD Konfigurieren
35
LDI NUMBER,0
36
RCALL Wait1000MS
37
RCALL LCD_INIT
38
39
; Willkommen heißen
40
LDI INFO,'H'
41
RCALL LCD_DATA
42
LDI INFO,'A'
43
RCALL LCD_DATA
44
LDI INFO,'L'
45
RCALL LCD_DATA
46
LDI INFO,'L'
47
RCALL LCD_DATA
48
LDI INFO,'O'
49
RCALL LCD_DATA
50
LDI INFO,'!'
51
RCALL LCD_DATA
52
RCALL WAIT1000MS
53
RCALL WAIT1000MS
54
55
; Messung ADC am Port C0 konfigurieren
56
LDI R16,0b01000000
57
STS ADMUX,R16
58
59
LDI R16,0b10000011
60
STS ADCSRA,R16
61
62
; Programm Beginnt
63
RCALL LCD_Home
64
LDI INFO,'S'
65
RCALL LCD_DATA
66
LDI INFO,'T'
67
RCALL LCD_DATA
68
LDI INFO,'A'
69
RCALL LCD_DATA
70
LDI INFO,'R'
71
RCALL LCD_DATA
72
LDI INFO,'T'
73
RCALL LCD_DATA
74
LDI INFO,'!'
75
RCALL LCD_DATA
76
RCALL WAIT1000MS
77
RCALL WAIT1000MS
78
RCALL LCD_CLEAR
79
main:
80
  RCALL LCD_Home
81
  LDS R16,ADCSRA
82
  SBR R16,ADSC       ;Start Conversion
83
  STS ADCSRA,R16
84
85
  waitconversion:      ; Darauf warten, dass Conversion abgeschlossen
86
    LDS R16,ADCSRA
87
    SBRC R16,ADSC   
88
    RJMP waitconversion
89
90
  ; ADC Low Byte ausgeben
91
  RCALL LCD_LINE1
92
  LDS NUMBER,ADCL
93
  RCALL lcd_number
94
95
  MOV INFO,char1
96
  RCALL LCD_DATA
97
98
  MOV INFO,char2
99
  RCALL LCD_DATA
100
101
  MOV INFO,char3
102
  RCALL LCD_DATA
103
104
  ; ADC High Byte ausgeben
105
  RCALL LCD_LINE2
106
  LDS NUMBER,ADCH
107
  RCALL lcd_number
108
109
  MOV INFO,char1
110
  RCALL LCD_DATA
111
112
  MOV INFO,char2
113
  RCALL LCD_DATA
114
115
  MOV INFO,char3
116
  RCALL LCD_DATA
117
118
  ; WARTEN
119
  RCALL Wait1000MS
120
121
RJMP main      
122
123
.include "LCD_Lib.asm"
Problem ist, auf meinem Bildschirm kommt für ADCL und ADCH immer der 
Wert 0 raus, das heißt das ganze misst irgendwie nichts.

Ich habe schon mehrmals das Rädchen gedreht, oder auch mit einem 
Multimeter nachgemessen, das ganze sollte eigentlich laufen.

Seht ihr da zufällig einen Softwarefehler, denn im Hardwarebereich sehe 
ich nach sorgfältigem Prüfen immer noch keinen.

(Beachtet, ich mach das anders als im Tutorial, an einigen Stellen, da 
ich auf ADCSRA und ADCMUX nicht einfach normal zugreifen kann, steht ja 
in der .INC Datei)

Danke für eure Hilfe,
m.f.G. Developer_X

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

versuchs mal so ...

  SBR R16,(1<<ADSC)       ;Start Conversion

in ADSC ist nur die Bitnummer gespeichert, sbr verlangt aber eine 
Bitmaske!

Sascha

von A. B. (developer_x)


Lesenswert?

Juhu! Danke es klappt, danke schön!
Ich bin ganz entzückt :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.