Hallo Leute Ich bin gerade dabei einen Logikanalysator zu programmieren/bauen und bin jedoch auf folgendes Problem gestoßen: Ich möchte INT0 und INT1 als Trigger benutzen die softwareeinstellungen(siehe Programm) stimmen soweit auch.(Level an +5V und GND) Das Problem: als Test habe ich mir einen Takt über ein paar IO-Pins erzeugt ... an manchen triggert er auch wie gewollt ... an anderen nicht (wie in den Oszi-Bilder sehr gut zu sehen. verwendet wurden: Ein belibiger PORTC pin -> triggert bei steigender Flanke an INT1(Oszi-Bild 0626) Bei allen PORTD-Pins ergibt sich nur ein komisches Signal(siehe Oszi-Bild 0624) Anstatt das sich das Signal nur bei steigender Flanke ändert, egal ob vorher HIGH oder LOW(in diesem Fall LOW), springt es sofort wieder zurück. Ich habe diesen Effect durch ein 100ms Delay besser sichtbar gemacht. Sonst wäre der Puls nur ca. 3us lang. Die Frage ist nun: Warum toggelt er bei ALLEN PORTD-Pins nun "nonsens" und bei ALLEN PORTC-Pins gehts anständig ??? Ich Danke für jede Hilfe :-)
1 | /*
|
2 | * TEST_1.c
|
3 | *
|
4 | * Created: 04.04.2012 13:42:59
|
5 | * Author: LD
|
6 | */
|
7 | |
8 | #ifndef F_CPU
|
9 | #define F_CPU 8000000UL //atmega8a mit internen 8MHz takt
|
10 | #endif
|
11 | |
12 | #include <avr/io.h> |
13 | #include <avr/interrupt.h> |
14 | #include <util/delay.h> |
15 | |
16 | void main(void) |
17 | {
|
18 | DDRD &=~(1<<PD2)|(1<<PD3); //interrupt_pins als input |
19 | DDRD |= (1<<PD0)|(1<<PD1)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7); //restlichen d-pins als ausgänge zum toggeln |
20 | DDRB |= 0xFF; //ebenfals als toggel-pins |
21 | DDRC |= 0xFF; //und noch mal toggel-pins zur interrupt-signal erzeugung |
22 | MCUCR |= (1<<ISC11)|(1<<ISC10)|(1<<ISC01); //int1 steigend, int0 fallend |
23 | GICR |= (1<<INT1)|(1<<INT0); //int0/1 freigeben |
24 | sei(); //global interrupt |
25 | |
26 | while(1) |
27 | {
|
28 | PORTD ^=(1<<PD0)|(1<<PD1)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);//d-pins als takt-quelle |
29 | PORTB ^=(1<<PB3); //einen b-pin toggeln als konntrolle ob programm läuft |
30 | PORTC ^=0xFF; //c-pins als takt-quelle |
31 | _delay_ms(1000); //noch nen delay für einen schön sichtbaren takt aller toggel-pins |
32 | }
|
33 | }
|
34 | |
35 | ISR(INT0_vect) //int0 routine |
36 | {
|
37 | PORTB ^=(1<<PB1); //für LED/Oszi |
38 | _delay_ms(100); |
39 | }
|
40 | |
41 | ISR(INT1_vect) //int1 routine |
42 | {
|
43 | PORTB ^=(1<<PB0); //für LED/Oszi |
44 | _delay_ms(100); |
45 | }
|