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.
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
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.
Wenn ich aber
Code:
SBI PORTD, PD3
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.
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