Forum: Mikrocontroller und Digitale Elektronik AtTiny13A - umgekehrtes Verhalten beim Taster


von Nikolai W. (beginner007)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Habe endlich Zeit gefunden um einen AtTiny13A zu programmieren.
Mit LED blinken lassen hat es ja ganz gut geklappt, aber beim Taster 
scheiter ich.

Trotz Verwendung der internen Pull-Ups, wird PINB als High gelesen, wenn 
der Taster offen ist (et vice versa). Es ist definitv kein Öffner und 
gegen Masse geschaltet.

Hier der Code:
1
#define F_CPU 1000000UL // 1MHz ist Default-Takt
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
7
void on()
8
{
9
  PORTB |= (1 << PB3);
10
}
11
12
void off()
13
{
14
  PORTB &= ~(1 << PB3);
15
}
16
17
#define TASTER PB2
18
uint8_t tasterOn;
19
20
int main(void)
21
{
22
  // Init
23
  DDRB = 0;
24
    DDRB |= (1 << PB3); // LED Ausgang
25
  PORTB |= (1 << TASTER); // Taster Pullup
26
  
27
  // Start (Testblinken)
28
  for(uint8_t i = 0; i < 3; i++)
29
  {
30
    on();
31
    _delay_ms(500);
32
    off();
33
    _delay_ms(500);    
34
  }
35
36
    while(1)
37
  {
38
    // Taster gedrück?
39
    if ( PINB & ( 1 << TASTER ) )
40
    {
41
      tasterOn = 1;
42
      
43
      // entprellen
44
      for(uint8_t i = 0; i<100; i++)
45
      {
46
        _delay_ms(3);
47
        
48
        if ((PINB & ( 1 << TASTER )) == 0)
49
        {
50
          tasterOn = 0;
51
          break;
52
        }
53
      }
54
      
55
      // Taster über längere Zeit gedrückt?
56
      if(tasterOn == 1)
57
      {
58
        on();
59
        _delay_ms(1000);
60
      }
61
      
62
      off();
63
    }
64
    
65
    _delay_ms(10);
66
    }
67
}


Wenn ich ein Proggi gefunden habe, werde ich den Schaltplan posten. 
Erstmal in Textform:
- Reset über 10k Widerstand an VCC
- LED an PB3 gegen VCC (funzt auch)
- Taster (Schließer) an PB2 ohne Widerstand gegen Masse
- Spannungsversorgung aus 9V Batterie, geregelt auf 5V über LP2950 mit 
2x Kondensatoren ohne Elko
- Breadboard, ISP 6x

Verwende den mkII und AVR Studio 6.1

PS: Geht natürlich etwas kürzer, aber ich dachte entprellen würde nicht 
schaden.
Im Debugger funzt es einwandfrei.

von Peter II (Gast)


Lesenswert?

Nikolai W. schrieb:
> Trotz Verwendung der internen Pull-Ups, wird PINB als High gelesen, wenn
> der Taster offen ist (et vice versa).

warum wird das wohl so sein? Was macht der PullUP denn so?

von Frank L. (hermastersvoice)


Lesenswert?

uppullen vielleicht?

von c-hater (Gast)


Lesenswert?

Nikolai W. schrieb:

> Trotz Verwendung der internen Pull-Ups, wird PINB als High gelesen, wenn
> der Taster offen ist

Das ist doch genau, was zu erwarten ist.

Wenn du willst, dass bei offenem Taster Low gelesen wird, musst du einen 
externen Pulldown gegen GND verwenden und den Taster gegen Vcc schalten.

von Nikolai W. (beginner007)


Lesenswert?

Ok, wenn man's durchdenkt macht's natürlich Sinn schäm

Hatte mir das Schaltbild ohne externen Widerstand aus dem 
Assembler-Tutorial geschnappt und den Code aus dem GCC-Tutorial 
verwendet. Aber dort gibt's keine Schaltbilder mit internen.

Danke euch!

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.