ADC Mit Atmega48PA

OP #3111175
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

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