ATmega88PA: Analog Comparator will die interne referenz (bandgap) nicht nutzen

Gast #2334150
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe nun schon einige Stunden versucht, den Analog-Comparator meines 
ATmega88PA mit der Bandgap-Referenz (1.1V) zu verkuppeln - leider ohne 
Erfolg.

Zwar vergleicht der Comparator korrekt die Spannungen an AIN1 mit AIN0, 
aber er nutzt dabei das externen Beinchen (PD6) anstatt AIN0 mit der 
internen Bandgap zu verschalten.

Und was mich am meisten erstaunt:
Auf einem ATmega8 funktioniert es!

Sollte ich einem Hardware-Bug im ATmega88 aufgesessen sein?
Oder habe ich einfach nur einen banalen/kapitalen "Bock" geschossen?

Bitte seid so nett und schaut einmal über den Code.

Die beiden Code-Alternativen (für Atmega88 bzw. Atmega8) findet Ihr
jeweils zwischen BEGIN...END - Kommentaren im Code.

Danke schon einmal an jeden, der ein Auge in den Code 
riskiert/investiert.

Viele Grüße

Igel

------------------------------------------------
1
.list
2
.include  "m88PAdef.inc"          ; define processor type
3
;.include  "m8def.inc"            ; define processor type
4

5
                      ; program was tested on ATmega8 and ATmega88PA
6

7
.equ    XTAL  =  1000000          ; microprocessor's clock frequency
8
.def     akku = r16
9

10

11
rjmp  init
12

13

14
;-------------------------------------------------------------------
15
; Initialization
16
;-------------------------------------------------------------------
17

18
init:
19

20

21
  ; Configure a few ports to act as output-ports
22
  sbi     DDRB,   DDB5
23
  cbi     PORTB, PB5
24
  
25

26

27
  ; Configuration of the ATmega's internal analog comparator:
28
  ; Connect AIN1 (=PD7) to the negativ input channel of the analog comparator
29
  ; and connect the positive input channel to the internal bandgap reference
30

31
  ldi     akku, 0
32
  out     DDRD, akku
33
  out     PORTD,akku
34

35
/* 
36
; BEGIN (Code for ATmega8)
37
  cbi     ACSR, ACD
38
  sbi     ACSR, ACBG
39

40
  in     akku, SFIOR
41
  cbr     akku, ACME
42
  out      SFIOR, akku
43
; END   (Code for ATmega8)
44
*/  
45

46

47

48
; BEGIN    (Code for ATmega88)
49
  lds     akku, ACSR
50
  cbr     akku, (1<<ACD)    ; ACD=0 : Analog Comparator is enabled
51
  sbr     akku, (1<<ACBG)  ; ACBG=1: Analog Comparator Bandgap Select
52
  sts     ACSR, akku
53
  sts     OCR0A, akku
54

55
  lds     akku, ADCSRB    ; clear ACME-Bit in Register ADCSRB 
56
  cbr     akku, (1<<ACME)
57
  sts     ADCSRB, akku
58

59
  lds     akku, DIDR1
60
  sbr     akku, (1<<AIN1D)
61
  sbr     akku, (1<<AIN0D)
62
  sts     DIDR1, akku
63
; END      (Code for ATmega88)
64

65

66

67
 
68

69
main:
70

71
  in    akku, ACSR    ; read ACSR Register which contains ACO-Bit
72
              ; the ACO-Bit represents the output of the
73
              ; analog Comparator
74

75
  sbrs  akku, ACO    ; skip (if) bit (in) register (is) set
76
  cbi    PORTB, PB5    ; switch off LED on PB5 if ACO=0
77

78
  sbrc  akku, ACO    ; skip (if) bit (in) register (is) cleared
79
  sbi    PORTB, PB5    ; switch on LED on PB5 if ACO=1
80

81
    rjmp     main

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.