Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage Portregister


von Willy (Gast)


Lesenswert?

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

von Mewa (Gast)


Lesenswert?

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.

von Fummler (Gast)


Lesenswert?

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.

von Willy (Gast)


Lesenswert?

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

von Cyblord -. (cyblord)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Willy (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von oldmax (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.