Hallo
danke erstmal für den Code!
Muss aber der | da wirklich hin?
Und was für eine Funktion hat der dann?
Druckbare Version
Hallo
danke erstmal für den Code!
Muss aber der | da wirklich hin?
Und was für eine Funktion hat der dann?
Hallo
Mit dem |= wird das Bit zusätzlich zu den eventuell bestehenden gesetzt, nur mit = würden alle anderen Bits gelöscht.
Der Grund, warum die BackLEDs mit dem Löschen der Daten- und Datenrichtungsregister nicht ausgeht, ist folgender:
Wenn alle Pins hochohmige Eingänge (ohne PullUp) sind, fließt ein geringer Strom von Vcc über R18-D15-R19 bwz. R20-D16-R21 nach IC1-Pin13(PD7) und von dort weiter über R22-D13-D14 (die Odo-LEDs) nach GND. Wenn nun der IC1-Pin13 als Ausgang geschaltet und der Ausgang gesetzt wird, liegt der Pin auf Vcc und es fließt kein Strom mehr über die BackLEDs. Allerdings leuchten dann unsichtbar die Odo-LEDs hell.
Gruß
mic
Achso danke für den Tipp ...
Werde ich mal ausprobieren ...
Nur das mit dem |= verstehe ich nicht ganz ... :D
ich erkläre es dir:
in dem register DDRD wird von allen pins am port d eingestellt in welche richtung die gehen (also eingang oder ausgang).
das sieht dann zB so aus: 00101101
wenn ich jetzt schrfeiben würde DDRD = 1<<3 dann wäre das register danach 00010000. alle anderen pins wären also umgeschaltet worden. schade.
mit dem | werden alle einsen erhalten, und nur die neue hinzugefügt. das ist besser. dann ist das register 00111101
Achso ...
Aber das mit dem 1<<3 kannte ich nicht mal ... :D
Kannst du das vielleicht nochmal näher erläutern?
Danke im Voraus!
Hallo H3llGhost!
Diese Operatoren "|=" und "<<" dienen in C der Bitmanipulation. Schau doch einfach mal hier:
http://www.galileocomputing.de/openbook/c_von_a_bis_z/
Im Bereich "Operatoren" gibts einen Unterbereich "Bit-Operatoren".
Gruß farratt
Aber ich will doch im Moment alles mit Assembler machen oder geht das da auch?
1<<3 bedeutet: nimm eine 1, und verschiebe sie 3 stellen nach links. also 00000001 -> 00001000
in assembler gibts dafür einen befehl. ivh kann sehr schlecht asm, deshalb musst du etwas warten...
Hallo
Also ihr stellt euch mal wieder unmöglich an. 1<<3 bedeutet schlicht 8. PD7 steht für den siebten Pin des Port D (Zählung beginnt bei 0!) und weil 2^7 zufällig 128 ist, kann man es auch so formulieren:
Das sollte auch mit wenigen Assemblerkenntnissen umsetzbar sein.Code:DDRD|=128; // Kathoden der BackLEDs haengen auf PD7
PORTD=128; // high an PD7 schaltet die BackLEDs aus
Ob man beim DDRD = oder |= verwendet hängt davon ab, ob man die anderen Pins zusätzlich beeinflußen möchte oder nicht.
Gruß
mic
unmöglich... du nuss :P
selbstverständlich ist 1<<3 = 8. allerdings soll H3llGhost ja cuh das prinzip dahinter verstehen, WARUM nun gerade 8.