hallo zusammen, ich habe frage über power save mode und habe schon diesem artikel über ***sleep mode*** gelesen aber noch nicht wirklich verstanden. Beitrag "Power Down Atmega32" meine frage lautet: - wenn ich meinen uc im power-down-mode setzen und durch externe int aufwecken, heisst es doch i.A. in aufgewecktem zustand ein active-mode, oder nicht? - und in active mode laufen alle module wie adc uart mit externe oszillator wieder, oder nicht? danke im voraus. tommi
@ tommi (Gast) >- wenn ich meinen uc im power-down-mode setzen und durch externe int >aufwecken, heisst es doch i.A. in aufgewecktem zustand ein active-mode, Komischer Satzbau. Aber ja, der AVr ist nach dem Aufwecken im Active Mode. >- und in active mode laufen alle module wie adc uart mit externe >oszillator wieder, Ja, siehe Sleep Mode. MFG Falk
vielen dank an euch beide nun ich habe ein testprogram wie folgt geschrieben
1 | /********************************************************************************/
|
2 | |
3 | #define F_CPU 1843200UL
|
4 | #define BAUD 9600
|
5 | #define MYUBRR F_CPU/16/BAUD-1
|
6 | |
7 | #include <avr/io.h> |
8 | #include <avr/interrupt.h> |
9 | #include <avr/sleep.h> |
10 | |
11 | /********************************************************************************/
|
12 | |
13 | void timer0_aktivieren (void) |
14 | {
|
15 | ASSR |= (1 << AS0); |
16 | TCCR0 |= (1 << CS02) | (1 << CS00); |
17 | TIMSK |= (1 << TOIE0); |
18 | }
|
19 | |
20 | void USART_Init1 (void) |
21 | {
|
22 | uint8_t ubrr = MYUBRR; |
23 | UBRR1H = (unsigned char) (ubrr >> 8); |
24 | UBRR1L = (unsigned char) ubrr; |
25 | UCSR1B = (1 << RXEN1) | (1 << TXEN1); |
26 | }
|
27 | |
28 | void USART_Transmit1 (char data) |
29 | {
|
30 | while (! (UCSR1A & (1 << UDRE1))); |
31 | UDR1 = data; |
32 | }
|
33 | |
34 | void USART_Transmit_String1 (char *s) |
35 | {
|
36 | while (*s) |
37 | USART_Transmit1 (*s++); |
38 | }
|
39 | |
40 | /********************************************************************************/
|
41 | |
42 | ISR (TIMER0_OVF_vect) |
43 | {
|
44 | USART_Transmit_String1 ("0\n\r"); |
45 | }
|
46 | |
47 | ISR (INT1_vect) |
48 | {
|
49 | timer0_aktivieren (); |
50 | }
|
51 | |
52 | /********************************************************************************/
|
53 | |
54 | int main (void) |
55 | {
|
56 | USART_Init1 (); |
57 | |
58 | MCUCR |= (1 << SE) | (1 << SM1) | (1 << SM0); |
59 | |
60 | EIMSK |= (1 << INT1); |
61 | EICRA |= (1 << ISC11); |
62 | |
63 | sei (); |
64 | |
65 | while (1) |
66 | {
|
67 | sleep_mode (); |
68 | }
|
69 | |
70 | return 0; |
71 | }
|
und es soll wie folgt arbeiten. - beim einschalten geht der uc in sleep mode ein. - nach dem int-eingang soll der uc wieder aufwecken und zeichenkette ausgeben. danach wieder in power save mode gehen und wiederholt bei timeroverflow sich diese aktion jeder sekunde. und habe es getestet aber irgendwas stimmt noch nicht. statt "0\n\r" auszugeben, gibt es vollig andere zeichenkette aus und diese zeichen sind nicht mal auf dem ascii-tabelle. weisst jenmand wie so? oh my test platine hat ein 1,84 Mhz externe quartz und ein rtc 32 khz am tosc-eingänge vg tommi
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.