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
Hallo,
versuchs mal so ...
SBR R16,(1<<ADSC) ;Start Conversion
in ADSC ist nur die Bitnummer gespeichert, sbr verlangt aber eine
Bitmaske!
Sascha
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.
|