Forum: Mikrocontroller und Digitale Elektronik Taster an eigener Schaltung wirkungslos


von Tobias K. (finswimmer)


Angehängte Dateien:

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

von Johannes M. (johnny-m)


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.

von spess53 (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.