/* Leuchte Ü-Eier-Kapseln. //Hat noch Fehler: Licht zittert, in einigen Positionen flackert es, Lässt 16 leds auf und ab-faden, inwechselnden Mustern. // nicht per taster umschaltbar Bei Knopfdruck 1x=alles an,2x alles aus ,3x auf und ab Ausgaenge PB 0,3-7, PC 0-5, PD 0,1, 4-7 Eingaenge PB0,3,4,5,6,7, PC0,1,2,3,4,5, D4,5.6,7 insgesamt 18 Ausgaenge, 2 Eingänge/ */ //--------------------------------------------------------------------------- #ifndef F_CPU #define F_CPU 4000000 #endif #include #include #include //für Zufallsgenerator volatile uint16_t lauf=10200; volatile uint8_t isrlauf=0; uint8_t laufup; volatile uint8_t tasttime; volatile uint8_t tastdruck; //volatile uint8_t tasttime2; volatile uint8_t tastdruck2; uint8_t schalt=0; volatile uint8_t tastschalt=0; volatile uint16_t isrschalt=0; int srand(); //-------------------------------------------------------------------- // TIMER2_COMP_vect - Timer2 Interrupt bei Vergleichswert // aktuelle Einstellung: 200.321 Hz 4.992 ms //-------------------------------------------------------------------- ISR(TIMER2_COMP_vect) //(vorher: timer2_comp_vect) { tasttime++; //tasttime2++; isrlauf=1; isrschalt++; } //------------------------------------------------------------------------ // INT0 Tastenabfrage //------------------------------------------------------------------------ ISR (INT0_vect){ tasttime=0; tastdruck=1; } //------------------------------------------------------------------------ ISR (INT1_vect){ tasttime=0; tastdruck2=1; } //------------------------------------------------------------------------ // Initialisierungen //------------------------------------------------------------------------ void init() { // Ports initialisieren DDRB |= 0xff; // PORTB auf Ausgang DDRC |= 0xff; //PORTC auf Ausgang DDRD |=(1<=10200){ laufup=0; } if(laufup==1){ lauf++; } else{ lauf--; } OCR1A=lauf; isrlauf=0; } //-------------------------------------// Taster an D2 //------------------------------------ //automatische weiterschaltung if(isrschalt>=18000){ //zeit bis zum Umschalten 60000 entspr 3 phasen if(lauf>=10180){ //20000 entspr 1 Phase isrschalt=0; schalt++; if (schalt >=25){ //zahl der schaltsstellungen schalt =0;} } } //------------------------------------- weiterschaltung per tastendruck 1 if(tastdruck){ if(tasttime >=50){ //geht ganz gut tasttime=0; tastschalt++; tastdruck =0; lauf=10200; if (tastschalt >=3){ //zahl der schaltsstellungen tastschalt =0; } } } //------------------------------------------weiterschaltung per tastendruck2 /* if(tastdruck2){ if(tasttime>=50){ //geht ganz gut tasttime=0; tastdruck2 =0; lauf=10200; if (schalt==0){ schalt=2; } else if (schalt==2){ schalt=0; } else if(schalt!=0,schalt!=2){ schalt=0; } if (schalt >=4){ //zahl der schaltsstellungen schalt =0; } } } */ //-----------------------------------------------------//zufallsweiterschaltung -geht noch nicht- /*int zufall=rand()%4; //Zufallszahl 0-3// if(isrschalt>=15000){ //zeit bis zum Umschalten 60000 entspr 3 phasen if(lauf==10200){ isrschalt=0; if (zufall==0){schalt=0;} if (zufall==1){schalt=1;} if (zufall==2){schalt=2;} if (zufall==3){schalt=3;} if (schalt >=4){schalt =0;} //zahl der schaltsstellungen }}*/ //-------------------------------------------taster an D2 // while(tastschalt==0){ //-------------------------------------------0 if(schalt==0){ if (PINB &(1<