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


von Manga (Gast)


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:
1
.equ PIN_STROBE_OUT = PB3
2
.equ PORT_STROBE_OUT = PORTB
3
4
...
5
6
int_t1cap:
7
 PUSH r16
8
 in r16, SREG
9
 PUSH r16
10
 
11
      [ ... ]
12
  in r16, PORT_STROBE_OUT
13
  andi r16, 1<<PIN_STROBE_OUT
14
  breq .... 
15
      [ ... ]
16
 
17
 POP r16
18
 out SREG, r16
19
 POP r16
20
 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

von Gast (Gast)


Lesenswert?

>.equ PORT_STROBE_OUT = PORTB

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

von Gast (Gast)


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.

von Manga (Gast)


Lesenswert?

super danke schön :)

mfg Manga

von Sinusgeek (Gast)


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.

~

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.