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
Ja, das geht. Man kann die Portleitungen unabhängig voneinander als Ein-oder Ausgang festlegen. MfG Paul
..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
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!)
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?
@ 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
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
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.