Gast
#45533
Hi!
Ich versuche, einen Ultraschallsensor über den Analog-Comparator des
ATmega8535 auszuwerten. D.h., wenn er etwas empfängt, soll der AC in
der entsprechenden Frequenz (40 kHz) Interrupts auslösen.
Ich habe den negativen Eingang auf Masse gelegt, den positiven Eingang
mit dem Sensor, und dann auch mal mit einem Funktionsgenerator,
verbunden. Da müßte er doch bei der geringsten
Gelegenheit zucken, oder?! Es wird aber kein Interrupt ausgelöst. Was
mache ich falsch?
Bisher:
PortB als Input, Pull-ups ausgeschaltet (laut Atmel-Doku, an PortB
liegen die Eingänge des AC: AIN0 und AIN1)
AC mit IRQ enabled und IRQ bei toggle gestartet
globale IRQ enabled, Endlosschleife
in der Routine (SIG_COMPARATOR) soll später ein Zähler inkrementiert
werden
Passiert aber nix... bitte helft mir. Habe ich einen Denkfehler?
QUELLTEXT:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define START_AC 0xAB /* 10001011 (ACSR)*/
/* INTERRUPTHANDLER Analog Comparator */
SIGNAL(SIG_COMPARATOR)
{
sbi(PORTA,PA0); /* LED anschalten */
}
void main(void)
{
outp(0xFF,DDRA); /* Port A as output */
cbi(PORTA,PA0); /* eine LED ausschalten, die beim
Ausführen des IRQ Handlers
angeschaltet wird */
outp(0x00,DDRB); /* Port B as input */
outp(0x00,PORTB);/* switch internal pull-up's off*/
/* Comparator starten */
outp(START_AC,ACSR);
/* globaler Interrupt enable */
sei();
/* neverending loop */
for(;;);
}