Taster an eigener Schaltung wirkungslos

OP #944336
Lesenswert?

Hallo!

Bei meiner selbstgebauten Schaltung klappt wieder etwas nicht.
Mit dem gleichem Chip auf dem Entwicklungsboard geht alles.

Ich habe einen Taster an PD5 angeschlossen:
VCC -> Taster -> PD5
1
//#include <TINY2313.h>                            // ATtiny2313 MCU
2
#define F_CPU 7372800UL
3

4

5
#include <avr/io.h>
6
#include <util/delay.h>                               // Delay functions
7
#include <inttypes.h>
8

9
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
10
{
11
    if ( ! (*port & (1 << pin)) )
12
    {
13
        /* Pin wurde auf Masse gezogen, 100ms warten   */
14
        _delay_ms(30);  // max. 262.1 ms / F_CPU in MHz
15
        _delay_ms(30);
16
        if ( *port & (1 << pin) )
17
        {
18
            /* Anwender Zeit zum Loslassen des Tasters geben */
19
           _delay_ms(30);
20
           _delay_ms(30);
21
           return 1;
22
        }
23
    }
24
        return 0;
25
}
26

27
int main(void)
28
{
29

30
   DDRD=0x40;           /* PIN PD5 auf Eingang (Taster)=0,PD6 auf Ausgang=1            */
31
   PORTD=0x10;          /* Pullup-Widerstand aktivieren, fÃŒr PD5            */
32

33
while(1)
34
{
35

36
if (debounce(&PIND, PD5))             /* Falls Taster an PIN PB6 gedrueckt..    */
37
   {
38
   PORTD ^= (1<<PD6);  /* ..LED an Port PD6 an-bzw. ausschalten */
39
   }
40
}
41
return 0;
42
}
So. Nun ist das Problem, dass sich die LED im Halb-Sekundentakt
an/ausschaltet.
Für mich sieht es so aus, als ob "irgendeine" Restspannung die Routine
veranlasst immer die LED zu schalten.
Wenn ich nun aber mein Multimeter zwischen GND und PD5 klemme, dann habe
ich diese Probleme nicht mehr.
Der Taster funktioniert dann so wie er soll (evtl. ein bisschen langsam
in der Reaktion, aber er geht wenigstens).
Habe ich den Taster nun gar nicht angeschlossen, also an PD5 nichts
angebracht, so schaltet die LED auch munter vor sich hin.

Nun gehe ich davon aus, dass ich irgendein Bauteil vor dem Taster
vergessen habe.

Könnt ihr mir (mal wieder) auf die Sprünge helfen?

Vielen Dank

Tobi
Angehängte Dateien:
#944342
Lesenswert?

Logo, wenn Du den Taster an VCC anschließt und einen Pull-Up 
aktivierst, dann ändert sich bei Tastendruck der Zustand des Pins auch 
nicht. Entweder einen externen Pull-Down-Widerstand einbauen (und den 
Pull-Up deaktivieren) oder (und besser, weil ohne Zusatzhardware) den 
Taster gegen GND anschließen. In der Software musst Du dann natürlich 
berücksichtigen, dass ein gedrückter Taster eine 0 am Pin verursacht, 
was aber auf den meisten kommerziellen Experimentierboards genau so 
gemacht wird.
Gast #944349
Lesenswert?

Hi

Das ist aber nicht im Ernst dein Schaltplan?

Nur zur Information: Einen Schalter legt man am besten zwischen Portpin 
und Masse. Das Portpin verbindet man über einen Widerstand (z.B. 10k) 
mit VCC. Schalter offen Portpin=H, Schalter gedrückt Portpin=L.
In deinem Fall ist das Portpin bei offenen Schalter unbeschaltet. 
Dadurch fängt er alle möglichen Ladungen ein und arbeitet 
unkontrolliert. Mit dem Multimeter wird er Hochohmig auf Masse gelegt 
und bekommt dadurch ein stabiles Potential.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren