// ================================================================== // Include C Libriaries // ================================================================== #include #include #include #include // ================================================================== // Definition der Segmente pro Ziffer // ================================================================== #define zifferNull PORTA = (1<=60) && (interrupt_count<=90)){ startbit_ok=1; // TEST >> zaehler_phasen++; counts_pro_phase[zaehler_phasen]=interrupt_count; // << TEST signal_changed=0; interrupt_count=0;} if ((signal_changed==2) && (startbit_ok==1) && (interrupt_count>=20) && (interrupt_count<=50)){ startbit_ok=2; // TEST >> zaehler_phasen++; counts_pro_phase[zaehler_phasen]=interrupt_count; // << TEST signal_changed=0; interrupt_count=0;} sei(); //if ((zaehler_phasen>=20)) if ((interrupt_count>=2000) && (startbit_ok==2)) { modus=1; // Empfang beendet, Ergebnisse in Display anzeigen } } // Modus "Zahl auf Display anzeigen" if (modus==1) { cli(); // Kontroll-LED blinken lassen PORTB&=!(1< Wechsel An>Aus --> Ende/Dauer Pulse-Phase else { signal_changed=2; } // Eingang ist Low, d. h. Empfang am TSOP --> Wechsel Aus>An --> Ende/Dauer Pause-Phase } // ================================================================== // Helper Funktionen // ================================================================== void initPortsInterrupts() { // Ports initialisieren DDRB = (1< 0) { ziffer3 = zahl % 10; } else { ziffer3 = 10; } zahl = zahl / 10; // Hunderter if (zahl > 0) { ziffer2 = zahl % 10; } else { ziffer2 = 10; } zahl = zahl / 10; // Tausender if (zahl > 0) { ziffer1 = zahl % 10; } else { ziffer1 = 10; } zahl = zahl / 10; for (count = 1; count <= dauer; count++) { // alle Ziffern und Segmente ausschalten PORTA = 0; PORTB = 0b00000101; PORTD = 0; // Tausender PORTB = 0b00000101; aktiviereSegmente(ziffer1); PORTB |= (1<<7); // 3 + 4 _delay_us(200); // Hunderter PORTB = 0b00000101; aktiviereSegmente(ziffer2); PORTB |= (1<<6); // 3 + 3 _delay_us(200); // Zehner PORTB = 0b00000101; aktiviereSegmente(ziffer3); PORTB |= (1<<5); // 3 + 2 _delay_us(200); // Einser PORTB = 0b00000101; aktiviereSegmente(ziffer4); PORTB |= (1<<4); // 3 + 1 _delay_us(200); } // alle Ziffern und Segmente ausschalten PORTA = 0; PORTB = 0b00000101; PORTD = 0; } void aktiviereSegmente(uint8_t ziffer) { switch (ziffer) { case 0: zifferNull; break; case 1: zifferEins; break; case 2: zifferZwei; break; case 3: zifferDrei; break; case 4: zifferVier; break; case 5: zifferFuenf; break; case 6: zifferSechs; break; case 7: zifferSieben; break; case 8: zifferAcht; break; case 9: zifferNeun; break; case 10: zifferAus; break; } }