Forum: Mikrocontroller und Digitale Elektronik Zustand eines Ausgangsportpins abfragen


von Holger (Gast)


Lesenswert?

Hallo,

ich setze bei einem ATMEGA32 einen Portpin auf high:

sbi porta.6

Frage: Wie kann ich im Programmverlauf abfragen, ob der Pin High oder 
Low gesetzt wurde?

sbis PINA.6 oder sbis PORTA.6 funktioniert bei mir nicht.


Holger

von Jens G. (jensig)


Lesenswert?

für längere Impulse einfach LED+Rv ran.
Für kurze Impulse mit Oszi anschauen.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Wie sieht der Codeteil nach dem sbis PORTA.6 aus?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Holger schrieb:
> Frage: Wie kann ich im Programmverlauf abfragen, ob der Pin High oder
> Low gesetzt wurde?
Als Denkanstoss: du (bzw. dein Programm) mußt das doch wissen, denn du 
hast den Pin doch selber auf diesen Pegel gesetzt...

> sbis PINA.6 ... funktioniert bei mir nicht.
Dann liegt das Problem woanders...
Evtl. wird der Port nur sehr kurz gesetzt und ist schon wieder '0', wenn 
du ihn abfragst...

von Holger (Gast)


Lesenswert?

also:

test: sbis PORTA.6
      jmp test0
      cbi PORTA.6
      ret

test0: sbi PORTA.6
       ret




Also ich möchte den PIN A.6 bei jedem Unterprogrammaufruf von test 
toggeln.

Holger

von Stefan B. (stefan) Benutzerseite


Lesenswert?

1
test: sbis PORTA , 6
2
      rjmp test0
3
      cbi PORTA , 6
4
      ret
5
6
test0: sbi PORTA , 6
7
       ret

> Also ich möchte den PIN A.6 bei jedem Unterprogrammaufruf von test
> toggeln.

PIN A.6 = Schreibfehler?

BTW. bei manchen modernen AVR kann man ein Bit im PORT Register 
tatsächlich toggeln, wenn man das betreffende Bit im PIN Register 1 
setzt. Ich weiss aber nicht, ob der Atmega32 das bereits kann (=> 
Datenblatt).

von Εrnst B. (ernst)


Lesenswert?

Holger schrieb:
> Also ich möchte den PIN A.6 bei jedem Unterprogrammaufruf von test
> toggeln.

Schau mal im Datenblatt deines AVRs, ob es zum toggeln nicht reicht, 
einfach eine "1" in das entsprechende Bit vom zugehörigen "PIN"-Register 
zu schreiben.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Holger schrieb:
> Also ich möchte den PIN A.6 bei jedem Unterprogrammaufruf von test
> toggeln.
Und das tut er nicht?
Hast du den schon auf Ausgang geschaltet (via DDRA)?

von Holger (Gast)


Lesenswert?

Ja klar:

ldi temp1,0xff
out ddra,temp1



Holger

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kannst du den Portpin mit cbi PORTA,6 und sbi PORTA,6 statisch 
umschalten?

von Peter R. (pnu)


Lesenswert?

wo sind die rcall, die zum ret gehören bzw. was sollen die rets

möglicherweise steckt das Programm in irgendeiner Schleife und kommt 
garnicht zur Ausführung dieser Befehle. So, wie oben nach "also:" 
geschrieben, kann das Programm garnicht laufen

ersetze erst einmal das "ret" jeweils durch "rjmp test"
und prüfe dann die Funktion

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.