- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Taster interrupt

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2013
    Beiträge
    7

    Taster interrupt

    Anzeige

    Praxistest und DIY Projekte
    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

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Hallo,

    unabhängig davon das es anscheinend ASM und auf dem Asuro ist, von denen ich jeweils sehr wenig verstehe - muss PD3 nicht eher zum Eingang gemacht werden um Spannnung zum messen? Also eigentlich müsste es ja anderrum sein, denn es fliest ja etwas in den µC hinein...
    Und wenn man dann noch den PullUp benötigt wird der auf High geschaltet. Das nennt sich Tri-State. Allerdings ist das jetzt nicht der Ausgang, denn den Ausgang auf High schalten bedeutet er führt die Betriebsspannung.

    Ansonsten produzierst Du wohl ungewollt einen Kurzschluss zwischen PD3 und Batterien/Akkuspannung.

    EDIT:
    PD3 müsste wenn dann als Ausgang aber LOW sein? Vermute ich. Dann müsste es gehen über PC4(ADC4) die einfliessende Spannung (über den spannungsteiler) zu messen.
    Geändert von HeXPloreR (09.05.2013 um 20:18 Uhr)

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2013
    Beiträge
    7
    Zitat Zitat von HeXPloreR Beitrag anzeigen
    Hallo,
    muss PD3 nicht eher zum Eingang gemacht werden um Spannnung zum messen?
    Nein, der AD Wandler ist an einem Pin angeschlossen Deshalb muss ich verhindern, dass über den Port Spannung abfällt und alles zum AD Wandler "fließt".
    Ob da ein Kurzschluss ist kann ich nicht sagen, alles andere hat bisher aber immer funktioniert, würde also erstmal auf unschuldig tippen^^

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Ja, habe oben gleichzeitig zu Deiner Antwort editiert. Habe mir den Schaltplan angesehen (Seite 74)... allerdings wie gesagt habe den selber nicht.

    Bin der Meinung es müsste wenn es ein Ausgang sein soll mit Low klappen. Dann sollte der ADC die Messung in der ISR durchführen, insofern er dort eingestellt wird.
    Keine Gewähr

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2013
    Beiträge
    7
    Hab es getestet, mit LOW bei PD3 geht es leider nicht funktioniert es leider nicht. Man bekommt dann nur 0 vom ADC

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Als ich den Interrupt für die Schalter gesetzt habe...
    Welchen Interrupt hast du denn gesetzt? Wäre es nicht besser in der ISR ein Flag zu setzen und dann in der Hauptschleife den ADC-Wert zu ermitteln und zu senden?
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2013
    Beiträge
    7
    Der einzige gesetzte Interrupt ist INT1. Er wird ja auch richtig ausgelöst. Aber da ich für die Messung am AD Wandler den Port, auf dem der Interrupt ist, manipulieren muss lande ich dann in der endlosschleife von diesem Interrupt, obwohl ja beim Aufruf der ISR automatisch das Interrupt Flag auf 0 gesetzt wird. Später soll die ISR dann natürlich kleiner werden, ging jetzt erstmal grundsätzlich um den Test.

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Der Interupt ist auf PD3 ... ADC Messung ist auf PC4 (ADC4) - bedeutet, allein mit Portmanipulation auf PD3 wird es nicht funktionieren.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    09.05.2013
    Beiträge
    7
    Code:
    SET_BUMPER_TO_ADC_SOURCE
    stellt ein, das PC4 dann als Quelle für den ADC funktioniert. Eine Messung geht ja auch, nur hört die nicht mehr auf^^

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Zitat Zitat von Bastian90 Beitrag anzeigen
    Code:
    SET_BUMPER_TO_ADC_SOURCE
    stellt ein, das PC4 dann als Quelle für den ADC funktioniert. Eine Messung geht ja auch, nur hört die nicht mehr auf^^
    Code:
     ;SBI PORTD, PD3  ;if set the interrupt will not stop
    
       rcall delay_short ;give the capacitor a bit time
    Was bedeutet das? Welcher Capacitor soll geladen werden?
    Und wie lange?
    Wird hier die Aufladezeit gegengerechnet, um auf die Batteriespannung zuschliessen?
    Geändert von HeXPloreR (10.05.2013 um 16:10 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Screens wechseln mit 2 Taster (oder mit einem Taster)
    Von tordy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.07.2009, 14:39
  2. Taster per Interrupt nutzen
    Von lalas im Forum Assembler-Programmierung
    Antworten: 4
    Letzter Beitrag: 01.07.2008, 19:54
  3. Interrupt durch Taster ausgelöst
    Von Seppi1203 im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 05.03.2007, 22:25
  4. Mit Taster 1 auswählen und Taster 2 bestäti. " Menü aus
    Von Luppi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 07.04.2006, 22:07
  5. [ERLEDIGT] Interrupt waehrend Interrupt
    Von thomas05 im Forum PIC Controller
    Antworten: 7
    Letzter Beitrag: 08.11.2005, 07:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test