/********************************************** * * Kitsch-Kompressor * * (C) Fingers elektrische Welt 2015 * PIC16F76 damit der alte Gammel mal wegkommt * **********************************************/ #include #include #include #include #include // Mach doch mal Pause *Gääähn* #define XTAL_FREQ 4MHZ // Crystal frequency in MHz #define MHZ *1000 // number of kHz in a MHz #define DelayUs(x) { unsigned int _dcnt; \ _dcnt = (x)/(12MHZ/(XTAL_FREQ))|1; \ while(--_dcnt != 0) \ continue; } __CONFIG(0x3f32); // Diverses volatile unsigned long Timerticks = 0; // Systemticker alle 10ms #define Druckschalter RB0 #define LED1 RB1 #define LED2 RB2 #define LED3 RB3 #define LED4 RB4 /************************** * * Kurze Pause *Schnarch* * **************************/ void Delayms (int wert) { int i; for (i=0; i < wert; i++) { DelayUs(100); CLRWDT (); } } /************************* * * Schreibt PWM-Wert * *************************/ void SetPWM (int wert) { int puffer; puffer = wert; puffer &= 0b0000001111111100; puffer = (puffer >> 2); CCPR1L = (char)(puffer); // Obere 8 Bits beschreiben CCP1CON &= 0b00001111; // Untere Bit auf Null } /****************************** * * Startklar machen den Eimer * ******************************/ void sysinit (void) { // Portpins klarmchen TRISA = 0b11111111; // 1 = Eingang, 0 = Ausgang TRISB = 0b00100001; TRISC = 0b11111011; // PortA als IO ADCON0 = 0; ADCON1 = 7; // PWM startklar machen PR2 =0xFF; // 19 Khz PWM SetPWM (0); // Ausgang 0 T2CON = 0b00000000; // Timer 2 Prescaler = 1:1 TMR2ON = 1; // Timer 2 einschalten CCP1CON = 0b00001100; // PWM einschalten SetPWM (0); // Erst einmal aus die Latüchten.... } /********************************* * * Langsam raus- und reindimmen * *********************************/ void langsamSchwellen (void) { int Pause; int i; LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0; //--------------------------- // Langsam auf- und abdimmen //--------------------------- #define LangsamePause 10 i = 10; while (i < 1023) { Delayms (LangsamePause); i++; SetPWM (i); CLRWDT (); if (Druckschalter) return; } Pause = 0; while (Pause < 50) { Pause++; Delayms (10); if (Druckschalter) return; } while (i > 10) { Delayms (LangsamePause); i--; SetPWM (i); CLRWDT (); if (Druckschalter) return; } Pause = 0; while (Pause < 50) { Pause++; Delayms (10); if (Druckschalter) return; } } /**************************** * * Mach mal Hektik hier!!!! * ****************************/ void Animation (void) { int l; LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0; #define Hektikpause 200 for (l=0; l < 10; l++) { LED1 = 1; Delayms (Hektikpause); LED1 = 0; Delayms (Hektikpause); if (!Druckschalter) return; LED2 = 1; Delayms (Hektikpause); LED2 = 0; Delayms (Hektikpause); if (!Druckschalter) return; LED3 = 1; Delayms (Hektikpause); LED3 = 0; Delayms (Hektikpause); if (!Druckschalter) return; LED4 = 1; Delayms (Hektikpause); LED4 = 0; Delayms (Hektikpause); if (!Druckschalter) return; } for (l=0; l < 5; l++) { LED1 = 1; LED2 = 1; LED3 = 1; LED4 = 1;Delayms (Hektikpause); if (!Druckschalter) return; LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0;Delayms (Hektikpause); if (!Druckschalter) return; } SetPWM (0); for (l=0; l < 10; l++) { LED4 = 1; Delayms (Hektikpause); LED4 = 0; Delayms (Hektikpause); if (!Druckschalter) return; LED3 = 1; Delayms (Hektikpause); LED3 = 0; Delayms (Hektikpause); if (!Druckschalter) return; LED2 = 1; Delayms (Hektikpause); LED2 = 0; Delayms (Hektikpause); if (!Druckschalter) return; LED1 = 1; Delayms (Hektikpause); LED1 = 0; Delayms (Hektikpause); if (!Druckschalter) return; } for (l=0; l < 5; l++) { LED1 = 1; LED2 = 1; LED3 = 1; LED4 = 1;Delayms (Hektikpause); if (!Druckschalter) return; LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0;Delayms (Hektikpause); if (!Druckschalter) return; } SetPWM (1023); } /*************************************** * * Hier geht das total los das Mopped ! * ***************************************/ void main (void) { int i,j; sysinit (); // Mach das hier mal, bis du kotzen musst while (1) { CLRWDT (); if (!Druckschalter) langsamSchwellen (); else Animation (); } // Von While (1) } // Thats all folks