- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Wie bekomme ich die Backleds ganz aus?

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Anzeige

    Praxistest und DIY Projekte
    Hallo

    danke erstmal für den Code!

    Muss aber der | da wirklich hin?
    Und was für eine Funktion hat der dann?

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    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
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Achso danke für den Tipp ...
    Werde ich mal ausprobieren ...

    Nur das mit dem |= verstehe ich nicht ganz ...

  4. #14
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    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
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Achso ...
    Aber das mit dem 1<<3 kannte ich nicht mal ...
    Kannst du das vielleicht nochmal näher erläutern?
    Danke im Voraus!

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    23.08.2007
    Beiträge
    61
    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

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Aber ich will doch im Moment alles mit Assembler machen oder geht das da auch?

  8. #18
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    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...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #19
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    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:

    Code:
    DDRD|=128; // Kathoden der BackLEDs haengen auf PD7 
    PORTD=128; // high an PD7 schaltet die BackLEDs aus
    Das sollte auch mit wenigen Assemblerkenntnissen umsetzbar sein.

    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
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #20
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    unmöglich... du nuss :P

    selbstverständlich ist 1<<3 = 8. allerdings soll H3llGhost ja cuh das prinzip dahinter verstehen, WARUM nun gerade 8.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests