V-USB und Taster

Gast #3015700
Lesenswert?
• ▲
▼
Guten Tag alle zusammen,

Mein Problem dreht sich um V-USB. Allerdings nicht wie die meisten 
Threads hier um den Grundaufbau. Das habe ich alles und läuft auch 
wunderbar. Allerdings treten bei mir Probleme auf, wenn ich zusätzlich 
zur USB Schnittstelle noch 2 Taster einbaue.

Mein Code sieht wie folgt aus:
1
char buttonState(uint8_t pin)
2
{
3
    static unsigned char zustand[3];
4
    char rw = 0;
5
    
6
    if(zustand[pin] == 0 && !(PINB & (1<<pin)))   //Taster wird gedrueckt (steigende Flanke)
7
    {
8
        zustand[pin] = 1;
9
        rw = 1;
10
        _delay_ms(10);
11
    }
12
    else if (zustand[pin] == 1 && !(PINB & (1<<pin)))   //Taster wird gehalten
13
    {
14
        zustand[pin] = 2;
15
        rw = 0;
16
    }
17
    else if (zustand[pin] == 2 && (PINB & (1<<pin)))   //Taster wird losgelassen (fallende Flanke)
18
    {
19
        zustand[pin] = 3;
20
        rw = 0;
21
        _delay_ms(10);
22
    }
23
    else if (zustand[pin] == 3 && (PINB & (1<<pin)))   //Taster losgelassen
24
    {
25
        zustand[pin] = 0;
26
        rw = 0;
27
    }
28
    
29
    return rw;
30
}
31

32
int main(void)
33
{
34
    // Set the registers
35
    DDRB |= (1 << PB1) | (1 << PB2); // The LEDs
36
    DDRB |= (0 << PB3) | (0 << PB4); // The Buttons
37
    PORTB |= (1 << PB3) | (1 << PB4); // Activate PullUps
38
    
39
    wdt_enable(WDTO_1S);    // Enable 1s watchdog timer
40
    
41
    // Initialize USB
42
    usbInit();
43

44
    // Turn LEDs on while initialization
45
    PORTB |= (1 << PB1) | (1 << PB2);
46

47
 
48
    /*  Block */
49
    usbDeviceDisconnect();
50
    wdt_reset();
51
    _delay_ms(500);
52
    usbDeviceConnect();
53
    /* Block */
54
    
55
    // Initialization finished. turn LEDs off.
56
    PORTB &= ~((1 << PB1) | (1 << PB2));
57
 
58
    
59
    // Enable Interrupts
60
    sei();
61
    
62
    while(1) {
63
        
64
        usbPoll();
65
        wdt_reset();
66
        
67
        if (buttonState(PB3)) { // The right button
68
            status ^= (1 << 1);
69
            PORTB ^= (1 << PB1);
70
        }
71
        
72
        if (buttonState(PB4)) { // The left button
73
            status ^= (1 << 0);
74
            PORTB ^= (1 << PB2);
75
        }
76
        
77
        PORTB ^= (1 << PB1);
78
    }
79
    
80
    return 0;
81
}

Wenn ich den Block der mit zwei Kommentarblöcken umschlossen ist (in 
main()) auskommentiere funktionieren die beiden Taster mit den LEDs 
wunderbar. Ein Druck auf die Taste bringt die LED zum leuchten und ein 
weiterer Druck auf die Taste löscht die LED wieder aus. Sobald ich aber 
den Block nicht mehr auskommentiere. Wird das Gerät wunderbar als USB 
Device erkannt. Allerdings funktionieren meine Taster nicht mehr. Ich 
kann mir dieses Verhalten nicht erklären.

Kann mir jemand weiterhelfen? Oder muss ich die Taster an einem anderen 
Ort als in der Main schlaufe überprüfen und ggf. die LEDs 
an/ausschalten.
Ich bin um jede Hilfe sehr dankbar. Ich weiss wirklich nicht wo der 
Fehler liegen könnte.
Gast #3015991
Lesenswert?
• ▲
▼
Ah stimmt. Dimensionierung stimmt natürlich nicht. Das habe ich 
angepasst.

Die andere Zeile ist für mich, damit ich weiss wo die Buttons sind. Sie 
bringt natürlich gar nichts. Das ist mir bewusst.

Das Problem lag nicht nur bei der Software. Zusammen mit der Anpassung 
der Dimensionierung des Arrays war auch noch eine Lötstelle nicht ganz 
korrekt.

Vielen Dank für die Hilfe.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.