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