Lamont's PWM code
Jump to navigation
Jump to search
/*
* 2009-03-24, pager motor test, lamont lucas
*
*/
// define the pins used to run the shift registers
int enable_low = 5; //enable outputs, low = on
int serial_in = 6;
int ser_clear_low = 7; //pulse low to zero out the shift buffer
int RCK = 9; //RCK, push the serial buffer to the outputs
int SRCK = 10; //
// analog definitions.
// int potPin = 23; // select the input pin for the potentiometer
void setup() {
pinMode(enable_low, OUTPUT); // set shift register pins as outputs
pinMode(serial_in, OUTPUT);
pinMode(ser_clear_low, OUTPUT);
pinMode(RCK, OUTPUT);
pinMode(SRCK, OUTPUT);
//more test
//pinMode(11, OUTPUT);
// use some serial for debugging
Serial.begin(9600);
Serial.println("Setting up board");
// make sure we start out all off
digitalWrite(enable_low, HIGH);
// this should wipe out the serial buffer on the shift register
digitalWrite(ser_clear_low, LOW);
delay(100); //delay in ms
// the TPIC6b595 clocks work on a rising edge, so make sure they're low to start.
digitalWrite(RCK, LOW);
digitalWrite(SRCK, LOW);
digitalWrite(ser_clear_low, HIGH); //we are now clear to write into the serial buffer
Serial.println("Board is setup");
}
void loop() {
//test statement
analogWrite(17, 200);
//raise enable high to disable outputs
digitalWrite(enable_low, HIGH);
delayMicroseconds(100); //slow and steady
//shiftOut(serial_in, SRCK, LSBFIRST, B01010101);
shiftOut(serial_in, SRCK, LSBFIRST, B11111111);
//pulse RCK to pop that into the outputs
delayMicroseconds(100);
digitalWrite(RCK, HIGH);
delayMicroseconds(100);
digitalWrite(RCK, LOW);
for (int i=150; i <= 250; i += 10) {
Serial.print("Using PWM value of ");
Serial.println(i);
//pwm the enable (255 = 0v, 0 = 5v)
analogWrite(enable_low, i);
delay(250);
}
}