www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED-Steuerung


Autor: Philipp S. (phibedy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend, ich spiele mich jetzt den zeiten tag mit meinem atmega, 
doch komme ich nun nicht weiter. http://pastebin.com/a5JxGkMH (Ich weiß, 
man könnte dies auch sehr verkürzt schreiben doch möchte ich mich mit 
den befehlen vertraut machen). Mit der Zeile ldi r18, 0b0.... lege ich 
fest welche LEDs ich durch tastendruck zum leuchten bringe und welche 
ohne drücken an sind. Mein Problem ist nun, dass sobald ich einer die 
ziffer 0 zuordne (in diesem fall PB0) leucht diese wie gewollt von 
anfang an, doch wenn ich nun PD0 drücke, schaltet sich diese nicht aus 
obwohl meines erachtens "AND" nicht mehr gegeben ist.

Liebe Grüße Philipp

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ohne die Hardware(Beschaltung LED/Taster) zu kennen, kann man auch 
nichts zum Programm sagen.

Dein Programm kannst du auch als Anhang mitschicken.

MfG Spess

Autor: Philipp S. (phibedy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vor PD0-3 jeweils ein Taster mit 10 k Pullup Widerstand
PB0-5 LEDs wobei die letzen beiden zu vernachlässigen sind

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Leds vom Portpin nach Masse oder VCC?

MfG Spess

Autor: Philipp S. (phibedy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LEDs sind nach vcc verbunden, hardware ist komplett richtig 
angeschlossen, das problem liegt im in den befehlen

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Noch was: Nimm mal ein or statt einem and.

MfG Spess

Autor: Philipp S. (phibedy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich "or" benutze, negiere ich sozusagen die jetztige schaltung, das 
problem bleibt dennoch bestehen, da ich so die anderen LEDs nicht 
einschalten kann

Autor: Philipp S. (phibedy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine frage konkretisiert:
http://pastebin.com/QFUZJDk1 warum geht die LED PB0, wenn ich den taster 
PD0 drücke nicht aus?

Autor: Michael D. (etzen_michi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ldi r18, 0b01111110    ;       setzt r18

Edit (Musst kurz wech):

Endlich darf ich auch mal jemanden bei Assembler helfen und bin nicht 
der welcher die Hilfe braucht.

mit deinem "and" Befehl setzt du (aufgrund des Wertes in r18) Bit 7 und 
0 auf 0,  wodurch dein Ausgang PORTB0 dauerhaft auf Low ist. ... einfach 
mal das 0b01111110 durch ob01111111 ersetzen und testen.

ggf würde ich noch mit

ldi r16, 0xFF
out PORTD, r16

die Pull Up Widerstände einschalten, um keine externen zu benötigen, 
wenn du auf Masse ziehst so wie ich das mitbekommen habe.


Zudem kannst du durch versetzen der Marke Loop verhindern das er immer 
die Eingänge neu Konfiguriert:
     
.include "m8def.inc"
   
       
   
            ldi r16, 0x00           ; setzt r16 als Eingang
            out DDRD, r16
                ;      
            ldi r17, 0xFF         ;
            out DDRB, r17     ;            setzt r17 als Ausgang

loop:
           in r16, PIND   ;            eingabe der Taster


            mov r17, r16        ;          lädt r16 nach r17
            ldi r18, 0b01111110    ;       setzt r18

            and r17, r18             ;     verknüfpft r17 und r18, speichert ergebnis nach r17
      out PORTB, r17           ;     gibt r17 an die LEDs aus

            rjmp loop


Autor: Michael D. (etzen_michi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grad noch ein zweites Mal gelesen.

Wenn du mit r18 bestimmen willst welche LED`s bei Tasterdruck an und 
welche aus sein sollen musst du anstatt "and" "eor" nehmen.




 eor  r16, r17

Die beiden Operanden werden miteinander XOR verknüpft, wobei jeweils die 
jeweils gleichwertigen Bits der Operanden laut Wahrheitstabelle 
unabhängig voneinander verknüpft werden.

Sei der Inhalt des Registers r16 = 0b11001100 und der Inhalt des 
Registers r17 = 0b01011010, so lautet die Verknüpfung eor r16, r17

      0b11001100
      0b01011010     xor
     -----------
      0b10010110
Das Ergebnis wird im ersten Operanden (r16) abgelegt.

Im Ergebnis werden diejenigen Bits umgedreht, an deren Bitposition in 
der Maske eine 1 vorhanden ist.

Da in der Maske

      0b01011010
an den Bitpositionen 1, 3, 4, 6 jeweils eine 1 steht, enthält das 
Ergebnis an eben diesen Bitpositionen die umgedrehten Bits aus der 
Ursprungszahl. Alle anderen Bits werden so wie sie sind aus der 
Ursprungszahl übernommen.


Quelle: http://www.mikrocontroller.net/articles/AVR-Tutorial:_Logik

Autor: Philipp S. (phibedy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so kann ich die eine zwar ausmachen, doch die anderen leuchten auch, 
doch die sollen aus sein, um sie mit tastern anschalten zu können ;-)

Autor: Philipp S. (phibedy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
deine antwort passt jetzt mit der meiner, auch wenn viele mitgewirkt 
haben überein ;-).

http://pastebin.com/f8zMpFNR (LEDbelegung ist eine andere)

Autor: Philipp S. (phibedy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun stellt sich mir noch eine weitere frage, wenn ich PD0 drücke, geht 
PB0 aus, warum gehen PB5 und Pb6 zeitlich mit aus und warum gehen sie 
obwohl ich den taster weiter gedrückt habe wieder an(schwächer), PB0 
bleibt aus solange wie ich den Taster drücke.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gewöhn dir eines an:
Wenn du Fragen zu einem Programm hast, dann ist es das mindeste, dass du 
das Programm auch herzeigst. Wir sitzen auf der anderen Seite deines 
Bildschirms und sehen nur die scharze Rückwand deines Monitors :-)

Autor: Philipp S. (phibedy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
steht auch im beitrag darüber ;-) http://pastebin.com/f8zMpFNR

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und warum kannst du deinen 7-Zeiler nicht einfach hier posten?

DU brauchst Hilfe. Also mach DU es den Helfern so einfach wie möglich an 
deinen Code zu kommen.

Nimm dein Assembler File und hänge es als Attachment im Posting an. 
Fertig. Dann brauchst du keinen externen Webspace und musst auch keinen 
Link per Copy Paste einfügen. So einfach kann die Welt sein.

PS: das ...
      .include "m8def.inc"
   
            ldi r16, 0x00           ; setzt r16 als Eingang
            out DDRD, r16
                                  ;      
            ldi r17, 0xFF         ;
            out DDRB, r17     ;            setzt r17 als Ausgang
   
      loop:
          ldi r17, 0b01011101
       in r16, PIND   ;            eingabe der Taster
            eor r16, r17
            out PORTB, r16           ;     gibt r17 an die LEDs aus
... kann nicht der vollständige Code sein. Da ist keine einzige Schleife 
drinn zu finden. Und selbst wenn ich mir da jetzt zum SChluss noch einen 
rjmp dazudenke, wundert es mich nicht, dass da LEDs auf Halbmast gehen. 
Du schaltest sie in rasend schneller Folge ein und aus.

Autor: Phibedy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Werde ich das nächste mal tun ;-),
stimmt, rjmp loop fehlt in dem link. Inwiefern muss ich das umändern, 
das es nicht so schnell schaltet? Nops dazwischen setzen?

Autor: Philipp S. (phibedy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
niemand eine passende lösung? ;-)

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.