-
        

Ergebnis 1 bis 7 von 7

Thema: Led einschalten

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

    Led einschalten

    Anzeige

    Hallo Leute,

    ich wollte heute mal was ganz simples machen.
    Ich schalte eine Led auf einen Board mit dem µC ATmega168 ein.
    Dazu folgender Code:

    [php:1:4ed1cc49a1]
    #include <avr/io.h>

    int main()
    {
    PORTD |= (1<<PD7);
    while(1)
    {

    }
    return 0;
    }
    [/php:1:4ed1cc49a1]

    Resultat davon ist es leuchtet nichts.
    Derselbe Code in Assembler funktioniert.

    Deswegen frage ich euch nach einem Rat:
    Was mache ich falsch?

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Datenrichtung von PD7 auf Ausgang setzen:

    DDRD |= (1<<PD7);

    Vorwiderstand für die LED nicht vergessen!

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Verdammter Mist ...
    Hätte ich auch selber drauf kommen können ...
    Weil so unerfahren bin ich ja auch nicht, aber ich dachte ...

    Danke!

    EDIT:

    Mal so ne andere Frage:
    Wenn ich einen Schalter habe der direkt am µC angeschlossen ist und gegen Masse, wie kann ich überprüfen, ob der betätigt wird?

    Ich lege eine Spannung an und überprüfe mit einem weiteren Eingang ob es einen Spannungsabfall gibt?
    Oder liege ich damit total falsch?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    63
    Beiträge
    622
    Zitat Zitat von H3llGhost
    ...Wenn ich einen Schalter habe der direkt am µC angeschlossen ist und gegen Masse, wie kann ich überprüfen, ob der betätigt wird?
    1. internen Pullup aktivieren (entsprechendes PORTPinBit setzen)
    2. PORTPin als Eingang schalten (entsprechendes DDRX-Bit = 0 )
    3. PINX lesen, Bit testen: http://www.mikrocontroller.net/artic...den_.C2.B5C.29 und
    http://www.roboternetz.de/wissen/ind...r-Abfrage_in_C

    Eventuell muss entprellt werden!

    Gruß

    Fred
    Only entropy comes easy. - Anton Checkhov

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    1. internen Pullup aktivieren (entsprechendes PORTPinBit setzen)
    2. PORTPin als Eingang schalten (entsprechendes DDRX-Bit = 0 )
    Unbedingt zuerst den Pin auf Eingang schalten und erst dann den PullUp aktivieren. Sonst gibt es einen Kurzschluss wenn gleichzeitig der Taster geschlossen ist!

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Danke für eure Hilfe!
    Habe es nun so gelöst:

    [php:1:2361967651]

    #include <avr/io.h>

    int main()
    {
    DDRD &= ~(1<<PD6);
    PORTD |= (1<<PD6);

    DDRD |= (1<<PD7);

    while (1)
    {
    if ( !(PIND & (1<<PIND6)) )
    PORTD |= (1<<PD7);
    else
    PORTD &= ~(1<<PD7);
    }

    return 0;
    }

    [/php:1:2361967651]

    Also ich würde sagen so ist es richtig oder?

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Es fehlt noch:
    Code:
    DDRD |= (1<<PD7);
    Ansonsten sieht es gut aus, bis auf einen Fehler:
    Code:
    if ( !(PIND & (1<<PIND6)) )
    // Ändern zu:
    if ( !(PIND & (1<<PD6)) )

Berechtigungen

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