/* -------------------------------------------------------------------------------------------------- Master Clock Generator for Pitch control setup: By: Gijs Gieskes 2009 http://gieskes.nl Trigger out on Pins: 13 and 1. LSDj Clock out on Pins: Analog 1 and Analog 2. LSDj extra Clock out on Pins: 10 to 12. LED on Pin: 4 and 5. Button on Pin: 2 and 3. Potentiometer on Pin: Analog 0 Extra info: Use the buttons to slow down the left or the right LSDj Clock pulses. -------------------------------------------------------------------------------------------------- */ unsigned long McM = 0; unsigned long LcM = 0; unsigned long RcM = 0; boolean ledA = LOW; //lsdj L&R clock pins byte LPin = 15; byte RPin = 16; byte TrACounter = 0; byte triggerA = 1; byte triggerB = 13; boolean TrAB = LOW; int analogValueA = 0; int ledOnOff = 4; int ledPin = 5; boolean BRead[2] = {HIGH, HIGH}; //http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1208715493/11 #define FASTADC 1 //defines for setting and clearing register bits #ifndef cbi #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #endif #ifndef sbi #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) #endif void setup(){ #if FASTADC // set prescale to 16 sbi(ADCSRA,ADPS2) ; cbi(ADCSRA,ADPS1) ; cbi(ADCSRA,ADPS0) ; #endif //lsdj clock internal pins pinMode(LPin, OUTPUT); pinMode(RPin, OUTPUT); //lsdj clock external pins pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); //trigger pins pinMode(triggerA, OUTPUT); pinMode(triggerB, OUTPUT); //LEDs pinMode(ledPin, OUTPUT); // speed indication pinMode(ledOnOff, OUTPUT); // on off indication digitalWrite(ledOnOff, HIGH); //buttons pinMode(2, INPUT); // start pinMode(3, INPUT); // stop digitalWrite(2, HIGH); // turn pullup on digitalWrite(3, HIGH); // turn pullup on } void loop(){ analogValueA = map(analogRead(0), 0, 1023, 10230, 30000); // delay settings BRead[0] = digitalRead(2); BRead[1] = digitalRead(3); MClockerLSDj(); LClockerLSDj(); RClockerLSDj(); } //master clock LSDj void MClockerLSDj(){ if(micros() - McM > analogValueA){ McM = micros(); //master lsdj out pulses for (int i=0; i <= 7; i++){ digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); delayMicroseconds(61); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); delayMicroseconds(61); } //speed indicator LED ledA = !ledA; digitalWrite(ledPin, ledA); triggerPulses(); } } //R clock LSDj void RClockerLSDj(){ int tunerDelay = 0; if(BRead[1] == LOW){ tunerDelay = 800; } if(micros() - RcM > (analogValueA + tunerDelay)){ RcM = micros(); //master lsdj out pulses for (int i=0; i <= 7; i++){ digitalWrite(RPin, LOW); delayMicroseconds(61); digitalWrite(RPin, HIGH); delayMicroseconds(61); } } } //L clock LSDj void LClockerLSDj(){ int tunerDelay = 0; if(BRead[0] == LOW){ tunerDelay = 800; } if(micros() - LcM > (analogValueA + tunerDelay)){ LcM = micros(); //master lsdj out pulses for (int i=0; i <= 7; i++){ digitalWrite(LPin, LOW); delayMicroseconds(61); digitalWrite(LPin, HIGH); delayMicroseconds(61); } } } byte triggerPulses(){ TrACounter++; if(TrACounter > 2){ TrACounter = 0; TrAB = !TrAB; digitalWrite(triggerA, TrAB); digitalWrite(triggerB, TrAB); } }