/***************************************************** ACCOUPHENE FIRMWARE v.0.02 Uses an ATTINY26 with speakers hooked to PA0..PA7 and PB0..PB4 The frequencies are generated by various duty cyles defined by vars A..M Vincent Leclerc, XS Labs, January 2006 v@xslabs.net (CC) Attribution-NonCommercial-ShareAlike 2.0 http://creativecommons.org/licenses/by-nc-sa/2.0/ ******************************************************/ #include #include #include // duty cycles #define A 2 #define B 5 #define C 8 #define D 10 #define E 15 #define F 20 #define G 25 #define H 30 #define I 35 #define J 40 #define K 45 #define L 50 #define M 55 // functions declarations void vibrate(void); void sweep(uint16_t max); // main int main(void){ // declare vars uint8_t l; uint16_t i,j,k,m; uint8_t state_A = 0; uint8_t state_B = 0; uint8_t state_C = 0; uint8_t state_D = 0; uint8_t state_E = 0; uint8_t state_F = 0; uint8_t state_G = 0; uint8_t state_H = 0; uint8_t state_I = 0; uint8_t state_J = 0; uint8_t state_K = 0; uint8_t state_L = 0; uint8_t state_M = 0; DDRA = 0xFF; DDRB = 0xFF; while(1){ // GENERATE DIFFERENT FREQUENCIES BY MODING i WITH VARIOUS CONSTANTS // TO TOGGLE AN OUTPUT PIN ON AND OFF AT SPECIFIC DUTY CYCLES for(i=0;i<0xFFFF;i++){ if (!(i % A)) { if (state_A) PORTA |= 0x01; else PORTA &= ~0x01; state_A = 1 - state_A; } if (!(i % B)) { if (state_B) PORTA |= 0x02; else PORTA &= ~0x02; state_B = 1 - state_B; } if (!(i % C)) { if (state_C) PORTA |= 0x04; else PORTA &= ~0x04; state_C = 1 - state_C; } if (!(i % D)) { if (state_D) PORTA |= 0x08; else PORTA &= ~0x08; state_D = 1 - state_D; } if (!(i % E)) { if (state_E) PORTA |= 0x10; else PORTA &= ~0x10; state_E = 1 - state_E; } if (!(i % F)) { if (state_F) PORTA |= 0x20; else PORTA &= ~0x20; state_F = 1 - state_F; } if (!(i % G)) { if (state_G) PORTA |= 0x40; else PORTA &= ~0x40; state_G = 1 - state_G; } if (!(i % H)) { if (state_H) PORTA |= 0x80; else PORTA &= ~0x80; state_H = 1 - state_H; } if (!(i % I)) { if (state_I) PORTB |= 0x01; else PORTB &= ~0x01; state_I = 1 - state_I; } if (!(i % J)) { if (state_J) PORTB |= 0x02; else PORTB &= ~0x02; state_J = 1 - state_J; } if (!(i % K)) { if (state_K) PORTB |= 0x04; else PORTB &= ~0x04; state_K = 1 - state_K; } if (!(i % L)) { if (state_L) PORTB |= 0x08; else PORTB &= ~0x08; state_L = 1 - state_L; } if (!(i % M)) { if (state_M) PORTB |= 0x10; else PORTB &= ~0x10; state_M = 1 - state_M; } } } return 0; } // functions void vibrate(void){ uint16_t j; for (j=0;j<0x1800;j++) PORTA = 0xAA; for (j=0;j<0x1800;j++) PORTA = 0x55; return; } void sweep(uint16_t max){ // ****USES INPUT ON PORTB uint16_t i,j,k; for (i=0;i 0) i=0; for (j=0;j