Hallo zusammen,
ich bin ganz neu im Umgang mit MikroComputern und schaffe es einfach
nicht, in eine ISR zu springen. Ich befürchte, das es damit zusammen
hängt, dass ich mit Eclipse und dem AVR-Plugin arbeite (unter MacOSX).
Vielleicht zunächst einmal der Code für Atmega168
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | #include <stdint.h>
|
4 |
|
5 | // ------------------------ Ausgänge Benennen --------------------- //
|
6 |
|
7 | #define RFT1 PD0
|
8 | #define RFT2 PD1
|
9 | #define PR1 PD2
|
10 | #define PR2 PD3
|
11 | #define A0 PD4
|
12 | #define A1 PD5
|
13 | #define d0 PD6
|
14 | #define d1 PD7
|
15 |
|
16 |
|
17 | // ---------------------- Variablen definieren ----------------------- //
|
18 |
|
19 | volatile unsigned int ST;
|
20 |
|
21 |
|
22 | // ---------------------- Timer Interrupt Routine ------------------- //
|
23 |
|
24 |
|
25 | ISR (TIMER0_COMPA_vect)
|
26 | {
|
27 | PORTD = 0b00000000;
|
28 | }
|
29 |
|
30 |
|
31 | // ---------------------- Hauptschleife ------------------- //
|
32 |
|
33 |
|
34 |
|
35 | int main (void) {
|
36 |
|
37 |
|
38 | // -- Ports initialisieren -- //
|
39 |
|
40 |
|
41 | DDRB = 0b00000000; //Alle Pins an B als Eingang
|
42 | DDRD = 0b11111111; //Alle Pins an B als Ausgang
|
43 |
|
44 | PORTD = 0b11111111; //alle LEDs sind aus
|
45 |
|
46 |
|
47 | // -- Timer 0 konfigurieren -- //
|
48 |
|
49 |
|
50 | TCCR0A |= (1<<CS00)|(1<<CS02); //Prescaler einstellen: CPU-Takt/1024 = 18kHz
|
51 |
|
52 | TCCR0A |= (1<<WGM01); //Mode einstellen: Timer ist im Compare-Match-Mode
|
53 |
|
54 | OCR0A = 0xB4; //Compare-Wert Einstellen: 0xB4 = 180
|
55 | // 180*55,5us = alle 9,99ms ein Interrupt
|
56 |
|
57 | TIMSK0 |= (1<<OCIE0A); //Compare Interrupt A aktivieren
|
58 |
|
59 | sei(); //Globale Interrupts aktivieren
|
60 |
|
61 |
|
62 | // ---------------------- Endlosschleife ----------------------- //
|
63 |
|
64 |
|
65 | while(1)
|
66 | {
|
67 | // PORTD = 0b00000000; //Nur zum Überprüfen ob der Befehl in der ISR funktioniert
|
68 | }
|
69 | return 0;
|
70 | }
|
Ich habe schon ausgiebig hier im Forum recherchiert und dort wurde
erwähnt, dass solche Probleme bei dem Plugin auftreten können und nicht
am Code liegen müssen. Dabei wurde darauf verwiesen, dass in den Linker
Einstellungen der MikroComp definiert werden muss. Aber er ist bei mir
eingetragen.
Unter Project Properties -> C/C++ Build -> Settings -> Tool Settings ->
AVR-C-Linker steht:
Command: avr-gcc
Options: -Wl,-Map,Turntable.map -mmcu=atmega168
Was mich auch so ein wenig stuzig macht, ist, dass Eclipse die ISR
vollständig "Gelb-Ankreidet" und über Syntaxfehler berichtet. Aber ich
gehe mal davon aus, dass er einfach von der Syntaxprüfung nicht mit ISR
umgehen kann. Schreibe ich z.B. ein void davor, meckert die nicht mehr
rum.
Habt ihr vielleicht sonst noch eine Idee? Ich hoffe Ihr könnt mir
helfen, mich plagt das schon einige Tage und ich habe noch keine Lösung
finden können. Vielen Dank im Vorraus.
Gruß Jan