www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tasten Problem


Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe diese Taster in meiner Schaltung verbaut: TASTER 3301D
Bei Reichelt: 
http://www.reichelt.de/?SID=20Ctu806wQARQAAEeXKgY3...


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

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

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

abfrage ... passiert nichts. :-(

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

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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


Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit der Entprellung geht es auch nicht, gleiches Verhalten:
/* 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) 
{
 // port init
 DDRB = 0xff;   //output
 PORTB = 0x00;    //GND
 
 DDRD |= (1 << PD3) | (1 << PD4);   //PD3 und PD4 7-SEG Ein/aus
 DDRD &= ~(1 << PD0); //Input
 DDRD &= ~(1 << PD1); //Input

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

 //aktive 7-SEG nr. 2
 PORTD |= (1 << PD4);
  
 
 uint8_t i=0;
 

 while(1) 
 {

        
  if (debounce(&PIND, PD0)) {
    PORTB = pgm_read_byte(&c_led[1]);
  }
    

 }
 return 1;
}

  

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was sagt denn dein Voltmeter, wenn du es an den µC Pin
hältst und den Taster drückst?

Vielleicht ist ja auch der Taster defekt. Soll schon
vorgekommen sein.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.