Forum: Mikrocontroller und Digitale Elektronik Einsteigerfrage


von Stefan T. (_distance_07)


Lesenswert?

Guten Abend,

meine Frage ist, ob ich einen Port gleichzeitig als Ein - und 
Ausgangsport verwenden kann...

Ginge es dann so ?

...

   ldi r16, 0b11111100   ; Pin 0,1 = Eingang  PIN 2-7 = Ausgang
   out DDRD, r16

   in r16, PIND
   out PORTD, r16


Würde das so gehen ?

Programm soll auf dem ATMEGA8515L laufen.


MfG

Stefan

von Paul Baumann (Gast)


Lesenswert?

Ja, das geht. Man kann die Portleitungen unabhängig voneinander als 
Ein-oder Ausgang festlegen.

MfG Paul

von Stefan T. (_distance_07)


Lesenswert?

..Okay, ich hab mal meinen Code angehängt, der leider nicht 
funktioniert...

Wenn mir jemand zeigen könnte, was falsch ist, wäre ich sehr dankbar.


MfG

Stefan



CODE:



; ************** einige Testversuche! **********

; 25.November,2007



.include "m8515def.inc"


.def temp = r16


  ldi temp, 0b11111100
  out DDRD, temp

  in temp, PIND
  out PORTD, temp

von Karl H. (kbuchegg)


Lesenswert?

Stefan T. wrote:

> Wenn mir jemand zeigen könnte, was falsch ist, wäre ich sehr dankbar.

Kann es sein, dass hier ein Missverständnis vorliegt.
Du kannst nicht gleichzeitig ein und denselben Pin
sowohl als Eingang als auch als Ausgang benutzen.
Du kannst aber sehr wohl:
* an einem kompletten Port einige Pins als Eingang und
  einige Pins als Ausgang schalten.
* denselben Pin wahlweise jederzeit auf entweder Eingang
  oder Ausgang schalten lassen.

>
>
> ; ************** einige Testversuche! **********
> ; 25.November,2007
> .include "m8515def.inc"
>
> .def temp = r16
>
>   ldi temp, 0b11111100
>   out DDRD, temp
>
>   in temp, PIND
>   out PORTD, temp

Woran machst du fest, dass dieser Code nicht funktioniert?
(Jetzt mal abgesehen davon, dass am Ende eines Codes
immer eine Endlosschleife sein soll, damit der Prozessor
nicht Unsinn treibt. Der Prozessor braucht immer was
zu tun!)

von Karl H. (kbuchegg)


Lesenswert?

Karl heinz Buchegger wrote:

> Woran machst du fest, dass dieser Code nicht funktioniert?

Das soll heissen: Was soll deiner Meinung nach passieren, was
passiert statt dessen und warum ist das dann falsch?

von Falk B. (falk)


Lesenswert?

@ Stefan T. (_distance_07)

>..Okay, ich hab mal meinen Code angehängt, der leider nicht
>funktioniert...

Was funktioniert denn nicht?

>Wenn mir jemand zeigen könnte, was falsch ist, wäre ich sehr dankbar.

Dein Verstämdlins von Ports und Digitalen IOs.

Ausgangsstufen Logik-ICs

1
  ldi temp, 0b11111100
2
  out DDRD, temp
3
4
  in temp, PIND
5
  out PORTD, temp

Wenn dein Port als Augang definiert ist, kanns du von aussen nix mehr 
anlegen. Das Lesen von PIND liefert das, was du in PORTD reingeschrieben 
hast. Und das wieder in PORTD reinschreiben ist wenig sinnvoll.

Was willst du denn wirklich machen?

MFG
Falk

von Stefan T. (_distance_07)


Lesenswert?

Erstmal danke für alle Antworten,

ich hab seit Donnerstag das STK500 und führe einfach ein paar Versuche 
durch um mich etwas mit der Materie Vertraut zu machen.

Und in diesem Versuch ging es darum, über einen Port, Ausgang und 
Eingang zu benutzen.

Ich wollte 2 Taster anschließen und 2 LED´s damit ein und ausschalten.


@ Karl Heinz Buchegger ... Es passiert garnichts !


MfG

Stefan

von Karl H. (kbuchegg)


Lesenswert?

Stefan T. wrote:


> Und in diesem Versuch ging es darum, über einen Port, Ausgang und
> Eingang zu benutzen.
>
> Ich wollte 2 Taster anschließen und 2 LED´s damit ein und ausschalten.
>
>
> @ Karl Heinz Buchegger ... Es passiert garnichts !

Schau einfach mal ins Tutorial.
Da steht das meiste ausführlich drinnen

http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

von Karl H. (kbuchegg)


Lesenswert?

Und was nicht drinnen steht:

Wenn deine Taster an den Pins PD0 und PD1 hängen, die Leds
an den Pins PD2 und PD3, dann wirst du wohl irgendeine Form
von Programmlogik brauchen, die PD2 abhängig vom Zustand von
PD0 auf entweder 0 oder 1 setzt. Von alleine geht der Portpin
sicher nicht auf 1 oder 0.

von spess53 (Gast)


Lesenswert?

Hi

Was soll da auch Passieren? Mit deinem Code schaltest bestenfalls die 
internen Pull-Up-Widerstände ein und aus.

Teste mal:
    in temp, PIND
    lsl temp
    lsl temp
    out PORTD, temp

Leds müssten an PortD 2 und 3.

Mfg Spess

von Alexander L. (lippi2000)


Lesenswert?

Na logisch funktioniert in deinen Augen nichts. Wenn du meinetwegen PIN7 
nen Schalter verpasst(als Eingang definiert) und PIN0 ne LED(als Ausgang 
definiert),dann liest du zwar die Schalterstellung ein. Aber dein 
Register beinhaltet für den PIN0 keinen neuen Wert.

Was dich weiterbringt ist:

Pins einlesen-->Prüfen ob Schalter offen oder geschlossen und dann in 
Abhängigkeit des Wertes von PIN7 den PIN0 einen Wert verpassen.

Das Tutorial müsste aber alles sagen.

Gruß Alex

von spess53 (Gast)


Lesenswert?

Hi

Noch was vergessen

aaa:     in temp, PIND
         lsl temp
         lsl temp
         out PORTD, temp
         rjmp aaa

MfG Spess

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.