Tasten Problem

Gast #482884
Lesenswert?
• ▲
▼
Hallo,

ich habe diese Taster in meiner Schaltung verbaut: TASTER 3301D
Bei Reichelt: 
http://www.reichelt.de/?SID=20Ctu806wQARQAAEeXKgY3321b41fe5c8c98f266acc75369ce10d;ACTION=3;LA=4;GROUP=C223;GROUPID=3278;ARTICLE=27894;START=0;SORT=artnr;OFFSET=1000


Ich habe den Taster gegen GND verbaut und das andere Ende an PD0.

Wenn ich jetzt:
1
DDRD &= ~(1 << PD0); //Input
2
PORTD |= (1 << PD0);  // Pull-Up Widerstand aktivieren
3

4
  if ( !(PIND & (1<<PIND0)) ) {
5
    //Mach was
6
  }

abfrage ... passiert nichts. :-(

Darf ich den Taster nicht ohne ein Widerstand einbauen? Ich dachte es 
reicht der interne Pull-Up Widerstand.
Gast #482913
Lesenswert?
• ▲
▼
@Richard Brose

>Ich habe den Taster gegen GND verbaut und das andere Ende an PD0.

Soweit so gut.

>Wenn ich jetzt:
>DDRD &= ~(1 << PD0); //Input
>PORTD |= (1 << PD0);  // Pull-Up Widerstand aktivieren

>  if ( !(PIND & (1<<PIND0)) ) {
>    //Mach was
>  }

>abfrage ... passiert nichts. :-(

Ähh, sollte das nicht heissen

 if ( !(PIND & (1<<PD0)) ) {

???

>Darf ich den Taster nicht ohne ein Widerstand einbauen? Ich dachte es
>reicht der interne Pull-Up Widerstand.

Das reicht auch.

MfG
Falk

Gast #482937
Lesenswert?
• ▲
▼
@Falk:
> Ähh, sollte das nicht heissen

> if ( !(PIND & (1<<PD0)) ) {

> ???
Das ist in dem Falle gehopst wie gesprungen. Sowohl PD0 als auch PIND0 
sind durch ein "#define <hier entweder PD0 oder PIND0 einsetzen> 0" 
definiert. Ich vermute mal eher, da fehlt eine Entprellung...
Gast #482945
Lesenswert?
• ▲
▼
Mit der Entprellung geht es auch nicht, gleiches Verhalten:
1
/* Einfache Funktion zum Entprellen eines Tasters */
2
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
3
{
4
    if ( ! (*port & (1 << pin)) )
5
    {
6
        /* Pin wurde auf Masse gezogen, 100ms warten   */
7
        _delay_ms(100);
8
        if ( *port & (1 << pin) )
9
        {
10
            /* Anwender Zeit zum Loslassen des Tasters geben */
11
            _delay_ms(100);
12
            return 1;
13
        }
14
    }
15
    return 0;
16
}
17

18
int main(void) 
19
{
20
 // port init
21
 DDRB = 0xff;   //output
22
 PORTB = 0x00;    //GND
23
 
24
 DDRD |= (1 << PD3) | (1 << PD4);   //PD3 und PD4 7-SEG Ein/aus
25
 DDRD &= ~(1 << PD0); //Input
26
 DDRD &= ~(1 << PD1); //Input
27

28
 PORTD |= (1 << PD0) | (1 << PD1);  // Pull-Up Widerstand aktivieren
29

30
 //aktive 7-SEG nr. 2
31
 PORTD |= (1 << PD4);
32
  
33
 
34
 uint8_t i=0;
35
 
36

37
 while(1) 
38
 {
39

40
        
41
  if (debounce(&PIND, PD0)) {
42
    PORTB = pgm_read_byte(&c_led[1]);
43
  }
44
    
45

46
 }
47
 return 1;
48
}

  
#482964
Lesenswert?
• ▲
▼
> while(1)
> {
>  if (debounce(&PIND, PD0)) {
>    PORTB = pgm_read_byte(&c_led[1]);
>  }
> }

lass doch den ganzen Kram mit 'lesen aus Flash' mal weg.
Testprogramme sollen so einfach wie möglich sein.

while(1)
{
  PORTB = PIND;
}

Was sagen jetzt deine LED am B-Port. Wenn du am Taster
rumdrückst, sollte sich was tun.

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.