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