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.