Sehr geehrte Damen und Herren dieses Forums, leider stehe ich vor einem kleinem Problem, ich bekomme nicht hin das der ATTiny 45 in Sleepmode geht. Ich hab versucht es nach bessten wissen und meinem Verständniss hinzubekommen aber es will nicht gehen. Ich bin gerade dabei mich einzuarbeiten in das Programmieren eines Controllers aber das mit dem Sleep mode verstehe ich nicht auch nicht was das datenblatt mir sagen will :( Ich habe hinbekommen eine LED mit einem Knopf an und auszuschalten, wie ein Schalter. nun habe ich das Problem wenn ich die LED einschalte und den taster gedrückt halte, die LED anfängt zu blinken. Kann man das auch abstellen, so dass es egal ist wie lange ich drücke einfach an ist und nicht nach net zeit anfängt zu blinken. Programmieren tu ich es in Atmel Studio 7 und C++
1 | #define F_CPU 1000000UL
|
2 | #include <avr/io.h> |
3 | #include <util/delay.h> |
4 | #include <avr/sleep.h> |
5 | #include <avr/interrupt.h> |
6 | |
7 | #define LED1 3
|
8 | #define BUT1 2
|
9 | |
10 | typedef int bool TOP; |
11 | |
12 | |
13 | int main(void) |
14 | {
|
15 | DDRB = 0b00001000; |
16 | PORTB = 0b00000100; |
17 | |
18 | bool TOP; |
19 | |
20 | TOP = 0; |
21 | |
22 | while(1) |
23 | {
|
24 | if ((!(PINB & (1<<BUT1))) & TOP == 0) |
25 | {
|
26 | PORTB |= (1<<LED1); |
27 | TOP = 1; |
28 | _delay_ms(250); |
29 | }
|
30 | else if (!(PINB & (1<<BUT1)) & TOP == 1) |
31 | {
|
32 | PORTB &= ~(1<<LED1); |
33 | TOP = 0; |
34 | _delay_ms(250); |
35 | }
|
36 | }
|
37 | }
|
38 | void sleep() { |
39 | |
40 | GIMSK |= _BV(PCIE); |
41 | PCMSK |= _BV(PCINT3); |
42 | ADCSRA &= ~_BV(ADEN); |
43 | set_sleep_mode(SLEEP_MODE_PWR_DOWN); |
44 | {
|
45 | sleep_enable(); |
46 | sei(); |
47 | sleep_cpu(); |
48 | }
|
49 | cli(); |
50 | PCMSK &= ~_BV(PCINT3); |
51 | sleep_disable(); |
52 | ADCSRA |= _BV(ADEN); |
53 | |
54 | sei(); |
55 | } // sleep |