LED-Steuerung

OP #2071854
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
#2073369
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:
1
     
2
.include "m8def.inc"
3
   
4
       
5
   
6
            ldi r16, 0x00           ; setzt r16 als Eingang
7
            out DDRD, r16
8
                ;      
9
            ldi r17, 0xFF         ;
10
            out DDRB, r17     ;            setzt r17 als Ausgang
11

12
loop:
13
           in r16, PIND   ;            eingabe der Taster
14

15

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

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

22
            rjmp loop
#2073387
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
#2078493
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 ...
1
      .include "m8def.inc"
2
   
3
            ldi r16, 0x00           ; setzt r16 als Eingang
4
            out DDRD, r16
5
                                  ;      
6
            ldi r17, 0xFF         ;
7
            out DDRB, r17     ;            setzt r17 als Ausgang
8
   
9
      loop:
10
          ldi r17, 0b01011101
11
       in r16, PIND   ;            eingabe der Taster
12
            eor r16, r17
13
            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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren