Hallo,
ich probiere mich am Analog Comparator des Attiny2313 und
will ihn erstmal nur zum Laufen kriegen.
Das Datenblatt liest:
1 | When the voltage on the positive pin AIN0 is higher than the voltage on the negative pin
|
2 | AIN1, the Analog Comparator output, ACO, is set
|
Mein (Test-)Programm:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 | #define F_CPU 8000000UL
|
4 |
|
5 | int main(void) {
|
6 | DDRD |= (1<<PD5);
|
7 | ACSR &= ~(1<<ACD); //eigentlich nutzlos, ist ja auf 0
|
8 | DIDR = (1<<AIN1D) | (1<<AIN0D); //nur zum Stromsparen oder?
|
9 | while (1) {
|
10 | if((ACSR & (1<<ACO)) == 1){
|
11 | //AIN0 voltage higher than AIN1
|
12 | PORTD &= ~(1<<PD5); //aus
|
13 | _delay_ms(500);
|
14 | PORTD |= (1<<PD5); //an
|
15 | }
|
16 | else{
|
17 | PORTD |= (1<<PD5);
|
18 | }
|
19 | }
|
20 | }
|
Ein einfaches Programm wie:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 | #define F_CPU 8000000UL
|
4 |
|
5 | int main(void) {
|
6 | DDRD |= (1<<PD5);
|
7 | while (1) {
|
8 | PORTD ^= (1<<PD5);
|
9 | _delay_ms(1000);
|
10 | }
|
11 | }
|
funktioniert einwandfrei.
Compiliert wird mit Optimierung -Os,
allerdings funktioniert -O0 auch nicht.
Ich hab die hex-Datei mal angehangen.
Spannungsversorgung sind 5V aus einem Labornetzteil,
ansonsten hab ich parallel 5 22nF Keramikkondensatoren zwischen
VCC und GND mangels 100nF Kondensator.
VCC und Reset sind mit einem 48k Widerstand verbunden,
wobei es keinen Unterschied macht ob er da ist oder nicht.
Wenn ich mit dem Oszi mein PD5 messe, dann ist der auf HIGH und
zwar die ganze Zeit, egal welchen Spoekes ich mit Pin12 und Pin13,
also AIN0 und AIN1 mache.
Zum Test habe ich AIN0 und AIN1 ueber 1,8k Widerstand auf GND und
probiere ueber 1,8k von VCC eine Reaktion aus dem attiny rauszukriegen.
Das sollte ja theoretisch einen Spannungsteiler mit 2,5V erzeugen,
welcher auf AIN0 angelegt in die erste if-Bedingung springt und
ein Signal erzeugt was an und aus geht.
Der 1,8k Widerstand auf AIN1 soll sicherstellen, dass AIN1 wirklich
auf 0 ist, ist aber auch sonst auf 0 mit minimalem rauschen.
Was mache ich falsch?
Was sind noch moegliche Fehlerquellen?
lg Robert