PIC16F84A discolight effect with bass beat control
External circuit converts bass beat of music into pulses.The motor is controlled by them.
If theres bass beat recognised then the motor rotates one direction(in full stepping) for a predefined time then stops. If the second beat comes in then it rotates again for the same time and so on.There is a random number generator (from 1 to 4) written into the code which tells how many times have the motor to rotate one direction.After that the PIC changes rotation direction of the motor.If the tempo is too fast (<400msec) then the direction is changed immediately.
When the motor stops after the predefined time period a counter is enabled.if beat doesnt come in for 15sec the motor starts to rotate slowly in half stepping.If a beat comes in the counter is disabled and the motor continues its normal rotation in full stepping.
(Half stepping is smoother but unfortunately the torque is less)
The PIC can control the motor after every beat or its possible to bypass some beats.It can be done by pushbuttons. Rotation speed and rotation lenght can be adjusted too.Settings are limited between values to prevent possible register overflow-underflow. These values are saved in EEPROM so after shut-down the settings dont lost.
A beat consist of a series of vibrations(dont know the correct english word for that-sorry) so the PIC gets a few interrupts.To prevent multi-triggering theres a counter written into the code which disables reaction to beat for
200msecs after the first interrupt. 180msec delay is enough if you are using amplifiers output (or line out) as music source. I had to increase it to 200msec because i use microphone and the rooms echo influences operation.
Programming the PIC – Adjustments
When programming the PIC16F84A you need to fill the first three EEPROM locations with the setting values.
I used these one: 01 14 E0
For more detail: PIC16F84A discolight effect with bass beat control