Hallo Com,
hier mein erster Beitrag.
Baord: MyAvr mk2
Problem:
Ich habe ein ganz einfaches Programm in den Flash geschrieben nur es tut
nur bedingt was ich möchte bzw. was ich erwarte.
Quellcode:
.include "m8def.inc"
ldi r16, 0xFF
out DDRB, r16
; Richtungsregister DDRB als Ausgang
ldi r16, 0x00
out DDRD, r16
; Richtungsregister DDRD als Eingang
ldi r16,0xFF ;Alle LEDs aus
out PORTB,r16
loop:
in r16, PIND ; an Port D anliegende Werte(Taster) nach r16
com r16 ; Bits umdrehen -> LEDs an
out PORTB, r16 ; Inhalt von r16 an Port B ausgeben
rjmp loop ; Sprung zu "loop:" -> Endlosschleife
Meine Erwartung:
Wenn der Taster gedrückt wird "schickt" er eine 0 an den Pin wo er
angeschlossen wurde. Taser sagen wir bei Pin2 angeschlossen.
PORTD jetzt also: 00100000 jetzt wird "com" angewendet und in PORTB
geschrieben. PORTB : 11011111 Lampe an PIN3 von PORTB müsste jetzt
ausgehen. Sie geht aber an.
Meine Vermutung:
Ich bringe 0 und 1 durcheinander. Bin mir unsicher wenn ich Taster
drücke was dann an dem Pin passiert, auch was passiert wenn wenn eine 1
an einer LED ist. Oder liegt es an Pull-Up-Widerständen?
Gruß,
AllForOne
Gast
#2487119
Jan R. schrieb: > Quellcode: > > .include "m8def.inc" > > ldi r16, 0xFF > out DDRB, r16 ; Richtungsregister DDRB als Ausgang > > ldi r16, 0x00 > out DDRD, r16 ; Richtungsregister DDRD als Eingang ldi r16, 0xFF out PORTD, r16 ; Pull-Up-Widerstände einschalten
Gast
#2487151
Hi Nun zuerst einmal solltest du wissen, ob die Taster gegen GND geschaltet sind. In der Regel wird das so gemacht, weil dann die internen Pull-p-Widerstände benutzt werdenkönnen. Zur Erklärung: Ein Taster hat einen Kontakt. Wird dieser geschlossen, so wird auch das Potential durchgeschaltet. Ist er aber offen, so gibt es kein Potential, also, keine 5V aber auch kein GND. Damit nun der Eingang weiß, es ist der Kontakt offen, wird über einen Widerstand das "andere" Potential auf den Eingang geleitet. Intern hat ein Controller nun Widerstände, die diese Aufgabe übernehmen können. Manche haben sogar die Möglichkeit, die Widerstände auch nach GND zu schalten. geleitet. Nun zu deinem Code
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
Ich habe mal einwenig kommentiert. Vielleicht wird es so etwas verständlich. Gruß oldmax
Jan R. schrieb: Neben den Pullups > Ich bringe 0 und 1 durcheinander. Bin mir unsicher wenn ich Taster > drücke was dann an dem Pin passiert, auch was passiert wenn wenn eine 1 > an einer LED ist. Dann solltest du diese Unsicherheit erst mal beseitigen: Was bewirkt eine 1 an einem Portpin: Led an oder Led aus? Was es tatsächlich bewirkt hängt davon, ab wie die LED angeschlossen ist. Und wenn du das nicht aus dem Schaltplan ersehen kannst, dann probiers halt einfach aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
leuchtet die LED am Pin 2 oder leuchtet sie nicht? Und schon weißt du es und hast zumindest in diesem Punkt deine Unsicherheit in Gewissheit verwandelt. (Auch den Gegentest machen! 0-Bit ausgeben, dann muss die LED das Gegenteil tun)
Herzlichen Dank für die hilfreichen Antworten. Ich habe es nun getestet und es funktioniert wie ich es wollte. Es kann weiter gehen. Viele Grüße, allforone
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.