mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik einfacher Polling-Betrieb ?


Autor: D.M.Meyer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich arbeite mich gerade in die Programmierung des ATMega16 von Atmel
ein. Dazu habe ich ein Interrupt-gesteuertes Programm erstellt, welches
LED0 auf dem STK500 an(IRQ0) bzw. ausschaltet (IRQ1), realisiert über
die Taster SW2 und SW3. Klappt prima.

Anschließend wollte ich das gleiche mal per Polling durchführen. In der
Simulation gehts auch wunderbar, nur in Realitas nicht... Dort tut sich
gar nichts.
Kann mir jemand einen Tipp geben?

Bin noch blutiger Anfänger im Bereich uP.


Besten Dank


Die wesentlichen Codeteile (voller Quelltext siehe Anhang):

START:  in akku, PIND;  Status der Taster einlesen
    ;wenn Taster SW2 (Pin3) gedrueckt wurde, LED0 AUSschalten
    ldi temp, 0b00000100;
    cp akku, temp;
    breq LED0_AUSschalten;
    ;wenn Taster SW3 (Pin4) gedrueckt wurde, LED0 ANschalten
    ldi temp, 0b00001000;
    cp akku, temp;
    breq LED0_ANschalten;
    rjmp START;    Endlosschleife

;--- Sprunglogik ---
LED0_AUSschalten:  rcall sub_LED0_AUSschalten;
      rjmp START;
LED0_ANschalten:  rcall sub_LED0_ANschalten;
      rjmp START;

;---Eventhandler
sub_LED0_AUSschalten:  sbi PORTB, 0;
      ret;
sub_LED0_ANschalten:  cbi PORTB, 0;
      ret;

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aus welcher Controller-Familie hast du denn dein vVorkenntnisse? Siehht
irgendwie nach Z80-Programmiererei aus :-), aber das ist ja erstmal
egal.
Wahrscheinlich wirds daran liegen, dass du die pullups an PortD nicht
aktiviert hast.
Also:
ldi r16, 0xff
out PortD, r16

Autor: Irgwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

beim STK500 geben nicht gedrückte Taster den Wert 1 zurück. Nachdem du
PIND komplett in akku einliest, steht dort z.B bei gedrücktem Taster
SW2 der Wert 0b11111011.

Die Überüfung einzelner Bits der I/O-Register geht übrigens mit den
Befehlen SBIC bzw. SBIS wesentlich einfacher. Schaut dir die doch
einfach mal an.

Autor: D.M.Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Irgwer,

daran langs. Im Simulator liefert ein gedrückter Taster eine 1, daher
kam ich nicht drauf... Oh mann ey, so ein Schitt.. Na ja, Lehrgeld :-)

Besten Dank!

Autor: D.M.Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das Programm nochmal mit dem Befehlen SBIC realisiert. Das
funktioniert auch, nur leuchtet die LED0 nun ständig, der Schalter SW3
schaltet sie nur aus wenn ich ihn gedrückt halte und beim
"anschalten" über SW2 der eh schon leuchtenden LED wird diese nur
heller. Die An-Aus Funktionalität ist nicht mehr gegeben.

Wieso das?

Verständnis: Wie lange bleibt die Portbelegung erhalten? Drücke ich
etwa einen Taster habe ich ja eine Signatur der Art 11110111. Drücke
ich danach einen Taster müsste ich ja 11111110 erhalten, denn ich kann
nur einen Taster zu einer Zeit gleichzeitig drücken, oder nicht? Wird
der Port irgendwann zurückgesetzt (kein Schalter gedrückt --> alles
"1" auf den 8 Leitungen).

Besten Dank.



...
  ldi akku, 0b11111110;  0=0V, 1=VCC --> Dioden schalten bei 0
  out PORTB, akku;
START:  sbic PIND, 2
  rcall sub_LED0_AUSschalten;
  sbic PIND, 3
  rcall sub_LED0_ANschalten

  rjmp START;    Endlosschleife

;---Eventhandler
sub_LED0_AUSschalten:  sbi PORTB, 0;
      ret;
sub_LED0_ANschalten:  cbi PORTB, 0;
      ret;

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.