/* Beeps Fuses LHE C2 DD FF + -------o------------------------------. | | ATtiny85 | _____|______ | | Vcc | | .-------------------| PB5/Reset | | | .-------------| PB2 PB1|---. === | | .-------| PB3 | #< Lautsprecher | o o o o-| PB4 PB0|---' | | | | | |____________| | o o o o GND| | | | | | | GND -----o----o-----o-----o-----o-------' Mute 0 0 Beep3 0 1 Beep2 1 0 Beep3 1 1 Beep1 Mute = lo --> Reset --> Stille Tastenton Beep4 PB2 100ms..150ms low Stundenton Beep5 PB2 150ms..230ms low Alarm Beep1 PB2 230ms..300ms low PB3 high PB4 high Beep2 PB2 230ms..300ms low PB3 low PB4 high Beep3 PB2 230ms..300ms low PB3 high PB4 low Beep3 PB2 230ms..300ms low PB3 low PB4 low */ #include #define F_CPU 8000000L #include void A (void) { for(int i=0; i<100; i++) { // A: 2kHz, 50ms PORTB = 0b11101; _delay_us(250); PORTB = 0b11110; _delay_us(250); } } void B (void) { for(int i=0; i<160; i++) { // B: 3k2Hz, 50ms PORTB = 0b11101; _delay_us(155); PORTB = 0b11110; _delay_us(156); } } void Beep1(void) { // 50ms Ton an, 20ms Pause Tonfrequenz A: 2000Hz Tonfrequenz B: 3200Hz // Die Sequenz ist: A,A,B,still,B,A Das ganze dauert 6*70ms = 420ms A(); _delay_ms(20); // kurze Pause A(); _delay_ms(20); // kurze Pause B(); _delay_ms(20); // kurze Pause _delay_ms(50); // still _delay_ms(20); // kurze Pause B(); _delay_ms(20); // kurze Pause A(); } void Beep2 (void) { // Sweep mit 83 Pulsen von 80Hz/12ms nach 166Hz/6ms --> 6ms/83 = 72µs for(int i=83; i>0; i--) { PORTB = 0b11101; _delay_us(5000); for (int j=0; j Störung, nichts tun else if (cntms < 150) Beep4(); // mindestens 100ms, aber weniger als 150ms low else if (cntms < 230) Beep5(); // mindestens 150ms, aber weniger als 230ms low else if (cntms < 300) { // mindestens 230ms, aber weniger als 300ms low if ((PINB&0b11000)==0b00000) Beep3(); // ==> Ton entsprechend PB3+4 ausgeben if ((PINB&0b11000)==0b10000) Beep2(); if ((PINB&0b11000)==0b01000) Beep3(); if ((PINB&0b11000)==0b11000) Beep1(); } PORTB = 0b11100; // Gegentaktausgänge abschalten } }