Hallo,
Bin ziemlich neu in der Mikrocontrollerprogrammierung und bin gerade
dabei, das Verhalten des Analogkomparators beim Atmega48 mit Hilfe einer
einfachen Schaltung zu studieren.
Und dabei stoße ich schon auf mir eigentlich unerklärliche Dinge.
Ich habe auf der Schaltung einen Spannungsteiler, welcher mir meine
Betriebsspannung von ca. 10V auf etwa 3V runter teilt, parallel zu R2
befindet sich ein 100nF-Kondensator.
Diese Spannung liegt am nicht-invertierenden Eingang des Komparators an.
Der mega wird von einem 7805 versorgt. Am invertierenden Eingang habe
ich einen 47K Poti angeschlossen, der zwischen VCC und GND die Spannung
einstellt.
Am PortB befinden sich zwei LED, eine rote an PB6, eine grüne an PB7,
mit denen ich den Ausgang des Komparators anzeigen möchte.
Das realisiert der folgende Quelltext:
1 | .include "m48def.inc"
|
2 |
|
3 | .equ led_gn = 7
|
4 | .equ led_rd = 6
|
5 |
|
6 | .org 0x000 ;Reset
|
7 | rjmp main
|
8 | .org 0x017 ;Analog Comparator
|
9 | rjmp AC_handler
|
10 |
|
11 | main:
|
12 |
|
13 | ldi r16, low(RAMEND) ; Stackpointer
|
14 | out SPL, r16
|
15 | ldi r16, high(RAMEND)
|
16 | out SPH, r16
|
17 |
|
18 | ldi r16, (1<<led_gn) | (1<<led_rd)
|
19 | out DDRB, r16
|
20 |
|
21 | ;----Abfrage des Zustandes beim Einschalten----
|
22 |
|
23 | in r16, ACSR
|
24 | sbrc r16, ACO
|
25 | sbi PortB, led_rd
|
26 | sbrs r16, ACO
|
27 | sbi PortB, led_gn
|
28 |
|
29 | ldi r16, (1<<ACI) ;Interrupt-Flag rücksetzen
|
30 | out ACSR, r16
|
31 |
|
32 | in r16, ACSR
|
33 | sbr r16, (1<<ACIE)
|
34 | out ACSR, r16 ;Interrupt bei Ausgangsänderung aktivieren
|
35 |
|
36 | sei
|
37 |
|
38 | loop:
|
39 | rjmp loop
|
40 |
|
41 |
|
42 | AC_handler:
|
43 | cbi PortB, led_rd
|
44 | cbi PortB, led_gn
|
45 | in r16, ACSR
|
46 | sbrc r16, ACO
|
47 | sbi PortB, led_rd
|
48 | sbrs r16, ACO
|
49 | sbi PortB, led_gn
|
50 | reti
|
Nun der Teil den ich nicht verstehe:
Wenn an beiden Komparatoreingängen annähernd die gleiche Spannung
anliegt, leuchten beide LEDs. In der näheren Umgebung wird die eine
dunkler, die andere etwas heller. Erst ab einer gewissen Differenz ist
tatsächlich nur eine an.
Habe mal mit dem Oszi die Ausgänge für die LEDs beobachtet, und wie
erwartet dort eine Art PWM gesehen.
Mein erster Gedanke war, dass evtl. die Spannung am nicht-invertierenden
Eingang schuld sein könnte, weil ich die Betriebsspannung von einem
PWM-Netzgerät bekomme, aber als ich auch diese mit dem Oszi beobachtet
habe war diese glatt wie die See.
Nun zum einen die Frage, warum sich der Komparator so verhält.
Und zum anderen wie man das beheben oder umgehen kann, da ich für
weitere Anwendungen nur ein einziges Mal eine Ausgangsänderung des
Komparators beim Nulldurchgang haben möchte.
Danke schon mal im Vorraus