mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Tiny2313 Pinzustand PB3(OCI) in ISR abfragen


Autor: Manga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich habe folgendes Probelm. Und zwar weiß ich nicht, wie ich den Zustand 
eines bestimmten Pins innerhalb einer ISR abfrage ... bzw. ich weiß 
nicht warum es nicht funktioniert. Es handelt sich explizit um den Pin 
PB3(OCI) eines ATTiny2313. An IRs nutzte ich den Capture-, Match-, sowie 
den Timer1-Overflow-IR. Ich möchte jetzt innerhalb der Cap-ISR den 
Zustand meines Ausganges (PB3(OCI)) abfragen um entsprechend reagieren 
zu können. Genau diese Abfrage funktioniert aber nicht. Andere 
Pin-Zustände in der ISR abzufragen klappt hingegen. Ich stehe z.zt. voll 
auf dem Schlauch :/ ... Vllcht kann mir ja hier wer weiterhelfen. Und so 
versuche ich den Pin-Zustand zu ermitteln:

.equ PIN_STROBE_OUT = PB3
.equ PORT_STROBE_OUT = PORTB

...

int_t1cap:
 PUSH r16
 in r16, SREG
 PUSH r16
 
      [ ... ]
  in r16, PORT_STROBE_OUT
  andi r16, 1<<PIN_STROBE_OUT
  breq .... 
      [ ... ]
 
 POP r16
 out SREG, r16
 POP r16
 reti

Der Sprung bei breq wird stets ausgeführt, was nicht sein kann. Ich seh 
den Verlauf des Ausgangssignal aufm Oszi und weiß daher dass dies nicht 
stets "Low" ist.

vielen Dank schonmal vorab
mit feundlichem Gruß
Manga

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>.equ PORT_STROBE_OUT = PORTB

Pins einlesen mit PIN, nicht mit PORT. Siehe Datenblatt oder hiesiges 
Tutorial.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich seh den Verlauf des Ausgangssignal aufm Oszi und weiß daher dass dies
>nicht stets "Low" ist.

Vorsicht: Möglicherweise wird die ISR auch immer nur dann aufgerufen, 
wenn das Signal gerade L ist.

Autor: Manga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super danke schön :)

mfg Manga

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst also durch Lesen von PORTB und Auswerten von PB3 den Zustand 
von OC1A ermitteln...

Das geht so nicht, da die Sonderfunktionen (hier der PWM-Pin) um das 
Portregister herum angesteuert werden. Der Port wird also vom 
Portregister getrennt und mit der Sonderfunktion verbunden. Das 
Portregister merkt also nichts davon, was die Timer-Compare-Einheit mit 
dem Portpin anstellt.

Inwieweit es durch Lesen von PINB funktioniert, habe ich jetzt nicht 
recherchiert.

~

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.