Hallo zusammen,
ich beschäftige mich gerade mit µP und arbeite mit einem Asuro für einige Tests.
Als ich den Interrupt für die Schalter gesetzt habe hat das auch alles wunderbar funktioniert. Wenn ich jetzt aber versuche über den AD Wandler zu bestimmen, welcher Taster gedrückt wurde läuft das ganze in eine Endlosschleife.
Folgendes Problem. Um die Spannung erfassen zu können muss ich PD3 ja zum Ausgang machen und auf High setzen und nach der Ermittlung das ganze wieder rückgängig machen.Code:taster_interrupt:
push R16
push R17
in R16, SREG ;statusreg saven
push R16
MOTOR_BREAK
SET_BUMPER_TO_ADC_SOURCE
SBI DDRD, PD3
;SBI PORTD, PD3 ;if set the interrupt will not stop
rcall delay_short ;give the capacitor a bit time
GET_ADC_VALUE R17, R16 ;r17=high, r16=low
CBI PORTD, PD3
CBI DDRD, PD3
TRANSMIT R17 ;and send the high result
TRANSMIT R16 ; and send the low result
pop R16
out SREG, R16; restore status bits
pop R17
pop R16
reti
Wenn ich aber
mache läuft die ISR in einer Endlosschleife und sendet durchgehend Werte, obwohl ich den Wert ja wieder zurücksetze und Interrupts solange deaktiviert sein sollten.Code:SBI PORTD, PD3
Setze ich das Bit nicht funktioniert alles aber der ADC gibt natürlich nur 0 zurück.
In der asuro.h steht in PollSwitch() oder so auch, das PD3 so gesetzt werden muss.
Kann mir bitte jemand sagen, wo mein Fehler liegt?
Vielen Dank im Voraus
Bastian