Hallo,
als Neueinsteiger würde ich gern wissen, ob es möglich ist
ein Portregister gleichzeitig für eine Ausgabe und eine Eingabe
zu nutzen?
Also ich würde gern das untere Nibble als Ausgang und das obere Nibble
des selben Port als Eingang (Tasterabfrage) nutzen.
Kann mir jemand ein kleines Beispiel in Assembler darstellen?
Dank im Voraus
Gruß Willy
Willy schrieb:> Kann mir jemand ein kleines Beispiel in Assembler darstellen?
Die Antwot ist: NEIN! Wenn Du es nichtmal für nötig hälst, die
verwendete Hardware zu nennen, hast Du wohl auch nicht die notwendige
Ahnung von Technik.
Willy schrieb:> Also ich würde gern das untere Nibble als Ausgang und das obere Nibble> des selben Port als Eingang (Tasterabfrage) nutzen.
Dann Stell das im entsprechenden Data Direction Register ein.
Mewa (Gast) schrieb:
>Wenn Du es nichtmal für nötig hälst, die>verwendete Hardware zu nennen, hast Du wohl auch nicht die notwendige>Ahnung von Technik.
Sorry, die verwendete Hardware ist ein Atmega8
Fummler schrieb:>Dann Stell das im entsprechenden Data Direction Register ein.
Würde das denn so funktionieren?
ldi r16,0b00001111
out DDRC, r16
ldi r16,0b11110000
out DDRC
sbi PortC, 5
.
.
.
.
.
.
sbic PINC,PINC5
Gruß Willy
Willy schrieb:> Würde das denn so funktionieren?>> ldi r16,0b00001111> out DDRC, r16> ldi r16,0b11110000> out DDRC> sbi PortC, 5> .> .> .> .> .> .> sbic PINC,PINC5>> Gruß Willy
Warum denn zweimal etwas in den Register schreiben? Schreib einfach das
Byte rein welches du möchtest. 0 für Eingang, 1 für Ausgang.
Mach erstmal das AVR-Tutorial und dann komm wieder.
Hi
> ldi r16,0b00001111> out DDRC, r16> ldi r16,0b11110000> out DDRC
Mit dem zweiten out überschreibst du aber die erste Einstellung. Oder
hast du ein anderes Register gemeint?
MfG Spess
spess53 schrieb:> Hi> ldi r16,0b00001111> out DDRC, r16> ldi r16,0b11110000> out
DDRCMit dem zweiten out überschreibst du aber die erste Einstellung. Oderhast du
ein anderes Register gemeint?MfG Spess
Hallo Spess53,
in der Tat habe ich hier zuviel geschrieben.
ldi r16, 0b00001111 ; unteres Nibble Ausgang, oberes Eingang
out DDRC, r16 ; Werte ins Datenrichtungsregister
Unteres Nibble Bit 0 - 3 ist Ausgang
Jetzt möchte ich auf Bit 4 den Taster Abfragen:
sbic PINC, PINC4 - wird hier der Taster abgefragt ?
Habe aber auch einen Hinweis auf ein Tutorial erhalten, welches ich
vorher nicht gesehen habe. War wohl eine vorschnell gestellte Frage.
Ich wusste nicht, dass man das Tutorial erst intus haben muss um hier
eine Antwort zu erhalten. Also auf zum Tutorial :-)
Gruß Willy
Hi
>Habe aber auch einen Hinweis auf ein Tutorial erhalten, welches ich>vorher nicht gesehen habe.
Bedingt richtig. Dein wichtigstes Arbeitsmittel ist aber erst mal das
Datenblatt deines Controllers und das Instruction Set:
http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf>Jetzt möchte ich auf Bit 4 den Taster Abfragen:> sbic PINC, PINC4 - wird hier der Taster abgefragt ?
Hängt von der Beschaltung deines Tasters und dem Befehl, der nach 'sbic'
kommt ab. 'sbic PINC, PINC4' überspringt den nächsten Befehl wenn PINC4
L ist.
MfG Spess
Willy schrieb:> Ich wusste nicht, dass man das Tutorial erst intus haben muss um hier> eine Antwort zu erhalten.
Intus haben müssen ist übertrieben.
Aber wozu sollen wir hier seitenlange Abhandlungen schreiben, die
bereits im Tutorial (wie wir denken) ausführlich erläutert sind. Und
dann kommt dazu: Das wird ja nicht die letzte Frage sein.
Hi
Ich habe auch damals, als ich mit µC's gestartet bin mit dem Tuorial
angefangen und fand es gut. Ok, hab ein wenig Vorkenntnisse, aber
trotzdem waren die Controller Neuland.
Dann gleich noch einen Hinweis:
Fragst du externe Kontakte ab, bedenke, das diese "prellen". Dein
Controller ist ziemlich fix und es könnt sein, das er den Wechsel
Gedrückt/ nicht gedrückt mehrfach auswertet.
Ein weiteres Thema: Schalter nach GND schalten. Das erspart externe
Pull-Down Widerstände, denn im Controller kannst du interne Pull-Up
Widerstände zuschalten. Ein "offener" Kontakt hat demnach eine "1" durch
den Widerstand und betätigt eine "0" durch Kontakt nach GND. Damit du
später trotzdem mit einem "1" Signal bei gedrücktem Taster arbeiten
kannst, mußt du die Signallage im µC drehen.
Gruß oldmax