-
        

Ergebnis 1 bis 5 von 5

Thema: Schalterprogrammierung funzt ned

  1. #1

    Schalterprogrammierung funzt ned

    Anzeige

    Hallo bin grad dabei mein AVR board mit WINAVR zu proggen und hätt eben probiert mit hilfe eines tasters eine led ein und auszuschalten, hab dazu des programm vom tutorial benutzt aber es geht ned... also der Ausgang wo die led sitzt wird ned auf high gezogen
    hier mal mein Programm
    #include <avr/io.h>
    #include <inttypes.h>
    #ifndef F_CPU
    #define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */
    #endif
    #include <avr/delay.h> /* definiert _delay_ms() ab avr-libc Version 1.2.0 */

    /* Einfache Funktion zum Entprellen eines Tasters */
    inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
    {
    if ( ! (*port & (1 << pin)) )
    {
    /* Pin wurde auf Masse gezogen, 100ms warten */
    _delay_ms(100);
    if ( ! (*port & (1 << pin)) )
    {
    /* Anwender Zeit zum Loslassen des Tasters geben */
    _delay_ms(100);
    return 1;
    }
    }
    return 0;
    }

    int main(void)
    {
    DDRD=0x0ff;
    PORTD=0x00;
    DDRB &= ~( 1 << PB0 ); /* PIN PB0 auf Eingang (Taster) */
    PORTB |= ( 1 << PB0 ); /* Pullup-Widerstand aktivieren */

    if (debounce(&PINB, PB0)) /* Falls Taster an PIN PB0 gedrueckt.. */
    PORTB = PINB ^ ( 1 << PB1 ); /* ..LED an Port PB1 an-
    bzw. ausschalten */

    }

    Jetzt is natürlich die frage was ned geht?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Ich seh da 2 mal "If (!...) ist das so beabsichtigt? Zudem wprd ich den Return-Wert am Angang merken in Abhängigkeit von PINx, und nicht erst am Ende besorgen.
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.09.2004
    Ort
    Bürstadt
    Alter
    30
    Beiträge
    383
    kenn mich mit WinAVR ned so aus..

    Was mir auffällt ist " DDRD = 0x0FF" Muss das nicht DDRD = 0xFF heißen??

    MfG
    Ringo
    Nobody is Perfect
    Visit www.ringo.roboterbastler.de last update: 23.05.2009

  4. #4
    also der code, der is so ausm tutorial hab ihn nur von D ports auf B ports umgeschrieben...
    das mit der 0 darf eigentlich nichts machen is ja nur a vornuller
    ...

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi,
    also ich würde das:

    if (debounce(&PINB, PB0)) /* Falls Taster an PIN PB0 gedrueckt.. */
    PORTB = PINB ^ ( 1 << PB1 ); /* ..LED an Port PB1 an-
    bzw. ausschalten */

    in ne Endlosschleife setzen, weil dein Programm aus ist bevor du überhaupt gedrückt hast!
    Des zweimal if ist ja net schlimm!
    Des 0xFF kann man so lassen man kann auch 0x00FF schreiben des isch genauso wie wenn man 0010 statt 10 schreibt!
    Gruß Michi

Berechtigungen

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