Hi,
ich habe hier einen ATtiny84 mit einem simplen Taster dran:
http://www.mikrocontroller.net/wikifiles/8/8a/Taster.gif
Ich habe folgenden simplen Code zum Testen geschrieben und lasse mir das
alles per Serial ausgeben:
1 | #include <JeeLib.h>
|
2 | #include <avr/sleep.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | #define DIO1 10 // d10
|
6 |
|
7 | static void setPrescaler (uint8_t mode) {
|
8 | cli();
|
9 | CLKPR = bit(CLKPCE);
|
10 | CLKPR = mode;
|
11 | sei();
|
12 | }
|
13 | int buttonState = 0;
|
14 | ISR(WDT_vect) { Sleepy::watchdogEvent(); }
|
15 |
|
16 | ISR (PCINT0_vect) {
|
17 |
|
18 | Serial.println("Ubt");
|
19 |
|
20 | }
|
21 |
|
22 |
|
23 | void setup() {
|
24 | setPrescaler(0); // div 1, i.e. speed up to 8 MHz
|
25 | Serial.begin(38400);
|
26 | Serial.print("ack13 \n");
|
27 |
|
28 | pinMode(DIO1, INPUT); //set the pin to input
|
29 | PCMSK0 |= (1<<PCINT2); // tell pin change mask to listen to (DIO1)
|
30 | digitalWrite(DIO1, LOW);
|
31 | GIMSK |= (1<<PCIE0); // enable PCINT interrupt in the general interrupt mask
|
32 |
|
33 | //sei();
|
34 |
|
35 | }
|
36 |
|
37 | void loop() {
|
38 | buttonState = digitalRead(DIO1);
|
39 |
|
40 | // check if the pushbutton is pressed.
|
41 | // if it is, the buttonState is HIGH:
|
42 | if (buttonState == HIGH) {
|
43 | // turn LED on:
|
44 | Serial.print("1 \n");
|
45 | }
|
46 | else {
|
47 | // turn LED off:
|
48 | Serial.print("2 \n");
|
49 | }
|
50 | //Serial.println(inttime);
|
51 | delay (500);
|
52 |
|
53 |
|
54 |
|
55 |
|
56 | }
|
Mein Output in hterm sieht nun so aus:
1 | ack13
|
2 | 2
|
3 | 2
|
4 | 2
|
5 | 2
|
6 | 2
|
7 | 2
|
8 | UUbt
|
9 | bt
|
10 | 2
|
11 | 2
|
12 | 2
|
13 | 2
|
14 | UUUUUbtUUbUUUUUUaUUbUUUbt
|
15 | bt
|
16 | bt
|
17 | t
|
18 | bt
|
19 | 2
|
20 | 2
|
Was mich nun stört ist das egal ob der Schalter betätigt ist oder nicht
er immer nur LOW ist und nie HIGH ist. Aber ich jeden Interrupt auf dem
Pin angezeigt bekomme. Was mache ich falsch?
Gruß kami