Gast
#3355201
Hallo zusammen, mir ist bewusst, dass ein ATMEGA128 nicht unbedingt der optimale uC ist um mit dem uC programmieren zu beginnen. Da ich aber ein funktionstüchtiges Testboard vorliegen habe versuch ichs damit trotzdem. Leider scheine ich schon an einem externen Interrupt zu scheitern. Zunächst zum Prog.: An einem funktionstüchtigem Testboard mit einem ATMEGA128 soll an PortC eine RGB LED ansteuert werden. Nach Programmstart soll eine Farbe leuchten. Nach einem externen Interrupt an PORTD0 (INT0) der bei einer fallenden Flanke ausgelöst werden soll, soll sich die Farbe ändern. Mein Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
Nach dem Starten des Programms leuchtet es wie gewollt gelb. Das es zwischendrin mal rot war ist natürlich nicht zu sehen. Wenn ich jetzt aber einen Interrupt an INT0 auslöse indem ich INT0 extern auf Masse ziehe, leuchtet es nicht blau, sondern immer rot, d.h. das der uC nach dem sei() ununterbrochen resettet so lange INT0 auf Masse liegt. Leider habe ich in den anderen Beiträgen keine passenden Beiträge gefunden, die mir weitergeholfen haben. Sobald ich einen externen Interrupt auslöse wird dieser abgearbeitet und danach das Programm neu gestartet. Dies hab ich gestestet indem ich in dierkt in die ISR() eine Farbfolge ablaufen lies, was auch geklappt hat. Danach wurde aber nicht an die reichtige Stelle zurückgesprungen sondern das Prog. neu gestartet. Was ist falsch? Bitte um Hinweise bzw. Verbesserungen des Codes. Danke im voraus Andreas