Sehr geehrte Forum-Mitglieder,
ich habe dieses Mal eine Frage bezüglich Stimuli. Ich experimentiere
gerade etwas mit Stimuli herum, da ich mir dieses Werkzeug aneignen
möchte, bevor ich mein eigentliches Projekt starte. Das
Experiment-Programm wartet
auf fallende Flanken die am ICP3 hevorgerufen werden. Wenn eine fallende
Flanke vorliegt, wird die entsprechende Interrupt Service Routine
gestartet und als Test-Code wird in dieser ISR der Ausgang PB1 auf High
gesetzt. Das Programm funktioniert auch soweit, wenn ich den Interrupt
manuell hervorrufe, also indem in der CheckBox des Ports E den PE7 Port
auf High setze. (PE7 ist der ICP3 beim Atmega128). Das Programm
verzweigt in die ISR und der Test-Code wird hervorgerufen. Nun habe ich
dieses mit Hilfe der Stimuli Datei versucht, habe aber festgestellt,
dass zwar der PE7 in der PINE Checkbox auf High gesetzt wird, aber
leider nicht in der Checkbox PORTE, was anscheinend erforderlich ist, um
das Interrupt auszulösen, da es zumindestens in der manuellen Ausführung
so war. Der Interrupt löst mit der Stimuli Datei leider nicht aus.
Hier ist das Experiment-Programm:
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 |
|
4 | int main()
|
5 | {
|
6 |
|
7 |
|
8 | sei(); // Globale Interrupts erlauben
|
9 |
|
10 | DDRE = 0x00;
|
11 | /* Interrupt Capture Pin einstellen */
|
12 | TCCR3B |= (1<<ICES3) | (1<<CS30); // Steigende Flanke, Takt=Systemtakt/1
|
13 | ETIMSK |= (1<<TICIE3);
|
14 |
|
15 | while(1)
|
16 | {
|
17 | asm volatile ("nop"); //Endlosschleife
|
18 | }
|
19 | return 0;
|
20 |
|
21 | }
|
22 |
|
23 |
|
24 | /* Interrupthandler vom ICP3 am Timer3 */
|
25 | ISR(TIMER3_CAPT_vect)
|
26 | {
|
27 |
|
28 | DDRB |=(1<<PB1);
|
29 | PORTB |=(1<<PB1);
|
30 |
|
31 | // Zum testen wird der PB1 auf High gesetzt
|
32 | }
|
und hier ist die Stimuli Datei:
1 | 000000250:80
|
2 | 000000280:00
|
3 | 000000300:80
|
4 | 000000320:00
|
5 | 999999999:FF
|
Wünsche ein schönes Wochenende.
mfGruß,
opcode