Show Posts
|
|
Pages: [1] 2
|
|
5
|
Using Arduino / Programming Questions / Can you make an input go low even when it is high?
|
on: June 28, 2012, 07:32:55 am
|
|
IThis is what I am trying to do: I what to start a pump when a input goes high from a water level switch (5v). When it does I will output a 5v to a relay which will turn on the pump. When the input pin goes low(water is filled) the output will go low and turn offf the pump. NOW i want a back up. When the Input goes High I want a timer (seconds) to start, I will know the how long it takes for the water to fill. If the input has not gone low in that certain amount of time(failure of the switch) I want the pump to stop so I dont get an overflow. Can this be done? I am a noobie so all help would be great. Thabks in advance. Daka
|
|
|
|
|
9
|
Using Arduino / Programming Questions / Change inverted fast PWM to fast pwm
|
on: June 11, 2012, 07:05:42 pm
|
Trying to figure out how to change from inverted fast PWM to Fast PWM in the following sketch. It was written to be used with a transistor, but I am going straight from the pin to connector. The total sketch is to change the PWM freq to 25kHz. This what the fan needs per the intel spec sheet. Then vary the speed. Please take alook and see if there are anymore problem. It is for a Mega 2560 Only second week working with an Arduino.... A real Noobie..... Thanks Daka / Analog output (i.e PWM) pins. These must be chosen so that we can change the PWM frequency without affecting the millis() // function or the MsTimer2 library. So don't use timer/counter 1 or 2. See comment in setup() function. // THESE PIN NUMBERS MUST NOT BE CHANGED UNLESS THE CODE IN setup(), setTransistorFanSpeed() AND setDiodeFanSpeed() IS CHANGED TO MATCH! // On the Mega we use OC1B and OC1C const int transistorFanPin = 12; // OC1B const int diodeFanPin = 13; // OC1C
// Definitions for PWM fan control const unsigned char maxFanSpeed = 80; // this is calculated as 16MHz divided by 8 (prescaler), divided by 25KHz (target PWM frequency from Intel specification)
void setup() { // Set up the PWM pins for a PWM frequency close to the recommended 25KHz for the Intel fan spec. // We can't get this frequency using the default TOP count of 255, so we have to use a custom TOP value.
// Only timer/counter 1 is free because TC0 is used for system timekeeping (i.e. millis() function), // and TC2 is used for our 1-millisecond tick. TC1 controls the PWM on Arduino pins 9 and 10. // However, we can only get PWM on pin 10 (controlled by OCR1B) because we are using OCR1A to define the TOP value. // Using a prescaler of 8 and a TOP value of 80 gives us a frequency of 16000/(8 * 80) = 25KHz exactly.
// On the Mega we use TC1 and OCR1B, OCR1C TCCR1A = (1 << COM1B1) | (1 << COM1B0) | (1 << COM1C1) | (1 << COM1C1) | (1 << WGM11) | (1 << WGM10); // OC1A disconnected, OC1B = OC1C fast PWM TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11); // TOP = OCR1A, prescaler = 8 TCCR1C = 0; OCR1AH = 0; OCR1AL = 79; // TOP = 79
OCR1BH = 0; OCR1BL = maxFanSpeed; OCR1CH = 0; OCR1CL = maxFanSpeed; TCNT1H = 0; TCNT1L = 0;
// We have to enable the ports as outputs before PWM will work. pinMode(transistorFanPin, OUTPUT); pinMode(diodeFanPin, OUTPUT); }
// Set the transistor fan speed, where 0 <= fanSpeed <= maxFanSpeed void setTransistorFanSpeed(unsigned char fanSpeed) { OCR1BH = 0; OCR1BL = fanSpeed; }
// Set the diode fan speed, where 0 <= fanSpeed <= maxFanSpeed void setDiodeFanSpeed(unsigned char fanSpeed) {
OCR1CH = 0; OCR1CL = fanSpeed;
} void loop() { setTransistorFanSpeed(80); delay(30000); // run for 30 seconds at maximum fan speed setTransistorFanSpeed(0); delay(30000); // run for 30 seconds at low fan speed }
|
|
|
|
|
10
|
Using Arduino / Motors, Mechanics, and Power / Re: Controlling PC cooling fan that has a PWM input
|
on: June 11, 2012, 09:26:38 am
|
The code would not compile, so I removed the parts that refered to the Uno. Had a Compile error about a loop being called in the main.ccp, Found an answer to that, Just added a void loop. I will change the fast PWM. Sorry for the lame questions  ,but just started working with the arduino last week. REally enjoy it. But which varible do you change for the speed, I believe the params are 0 -80. Thanks again for your help.
|
|
|
|
|
11
|
Using Arduino / Programming Questions / What does this error mean and how doI fix it
|
on: June 10, 2012, 09:39:16 pm
|
This is the error message and the code that caused it. The code is for getting a PWM frequ. of 25kHz to run a fan with a PWM wire core.a(main.cpp.o): In function `main': C:\Users\Skip\Desktop\arduino1\arduino-1.0.1\hardware\arduino\cores\arduino/main.cpp:15: undefined reference to `loop' This is the code: / Analog output (i.e PWM) pins. These must be chosen so that we can change the PWM frequency without affecting the millis() // function or the MsTimer2 library. So don't use timer/counter 1 or 2. See comment in setup() function. // THESE PIN NUMBERS MUST NOT BE CHANGED UNLESS THE CODE IN setup(), setTransistorFanSpeed() AND setDiodeFanSpeed() IS CHANGED TO MATCH!
// On the Mega we use OC1B and OC1C const int transistorFanPin = 12; // OC1B const int diodeFanPin = 13; // OC1C
// Definitions for PWM fan control const unsigned char maxFanSpeed = 80; // this is calculated as 16MHz divided by 8 (prescaler), divided by 25KHz (target PWM frequency from Intel specification)
void setup() { // Set up the PWM pins for a PWM frequency close to the recommended 25KHz for the Intel fan spec. // We can't get this frequency using the default TOP count of 255, so we have to use a custom TOP value.
// Only timer/counter 1 is free because TC0 is used for system timekeeping (i.e. millis() function), // and TC2 is used for our 1-millisecond tick. TC1 controls the PWM on Arduino pins 9 and 10. // However, we can only get PWM on pin 10 (controlled by OCR1B) because we are using OCR1A to define the TOP value. // Using a prescaler of 8 and a TOP value of 80 gives us a frequency of 16000/(8 * 80) = 25KHz exactly.
// On the Mega we use TC1 and OCR1B, OCR1C TCCR1A = (1 << COM1B1) | (1 << COM1B0) | (1 << COM1C1) | (1 << COM1C1) | (1 << WGM11) | (1 << WGM10); // OC1A disconnected, OC1B = OC1C inverted fast PWM TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11); // TOP = OCR1A, prescaler = 8 TCCR1C = 0; OCR1AH = 0; OCR1AL = 79; // TOP = 79
OCR1BH = 0; OCR1BL = maxFanSpeed; OCR1CH = 0; OCR1CL = maxFanSpeed; TCNT1L = 0;
// We have to enable the ports as outputs before PWM will work. pinMode(transistorFanPin, OUTPUT); pinMode(diodeFanPin, OUTPUT); }
// Set the transistor fan speed, where 0 <= fanSpeed <= maxFanSpeed void setTransistorFanSpeed(unsigned char fanSpeed) { OCR1BH = 0; OCR1BL = fanSpeed; }
// Set the diode fan speed, where 0 <= fanSpeed <= maxFanSpeed void setDiodeFanSpeed(unsigned char fanSpeed) {
OCR1BH = 0; OCR1BL = fanSpeed;
OCR1CH = 0; OCR1CL = fanSpeed;
} The original code was for a UNO or Mega, I have the mega so I deleted the UNO code. I was getting a whole bunch of errors. Here is the original code. // Definition of Arduino type #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) #define IS_MEGA (1) #define IS_UNO (0) #else #define IS_MEGA (0) #define IS_UNO (1) #endif
// Analog output (i.e PWM) pins. These must be chosen so that we can change the PWM frequency without affecting the millis() // function or the MsTimer2 library. So don't use timer/counter 1 or 2. See comment in setup() function. // THESE PIN NUMBERS MUST NOT BE CHANGED UNLESS THE CODE IN setup(), setTransistorFanSpeed() AND setDiodeFanSpeed() IS CHANGED TO MATCH! #if IS_UNO // On the Uno we can only use the OC1B pin, so these pin numbers are both 10 const int transistorFanPin = 10; // OC1B const int diodeFanPin = 10; // OC1B #else // On the Mega we use OC1B and OC1C const int transistorFanPin = 12; // OC1B const int diodeFanPin = 13; // OC1C #endif
// Definitions for PWM fan control const unsigned char maxFanSpeed = 80; // this is calculated as 16MHz divided by 8 (prescaler), divided by 25KHz (target PWM frequency from Intel specification)
void setup() { // Set up the PWM pins for a PWM frequency close to the recommended 25KHz for the Intel fan spec. // We can't get this frequency using the default TOP count of 255, so we have to use a custom TOP value. #if IS_UNO
// Only timer/counter 1 is free because TC0 is used for system timekeeping (i.e. millis() function), // and TC2 is used for our 1-millisecond tick. TC1 controls the PWM on Arduino pins 9 and 10. // However, we can only get PWM on pin 10 (controlled by OCR1B) because we are using OCR1A to define the TOP value. // Using a prescaler of 8 and a TOP value of 80 gives us a frequency of 16000/(8 * 80) = 25KHz exactly. TCCR1A = (1 << COM1B1) | (1 << COM1B0) | (1 << WGM11) | (1 << WGM10); // OC1A (pin 9) disconnected, OC1B (pin 10) = inverted fast PWM #ifdef FAN_AUDIO_TEST // test code to get 440Hz output (= concert A) to test the logic OCR1AH = 0; OCR1BL = 71; // 50% duty cycle TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS12); // TOP = OCRA, prescaler = 256
OCR1AL = 141; // TOP = 141, 16000000 / (256 * 142) = 440.014 OCR1BH = 0; #else OCR1AH = 0; OCR1AL = 79; // TOP = 79 TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11); // TOP = OCR0A, prescaler = 8
OCR1BH = 0; OCR1BL = maxFanSpeed; // max fan speed (i.e. pin 5 initially low all the time) #endif
TCNT1H = 0; TCNT1L = 0; #else
// On the Mega we use TC1 and OCR1B, OCR1C TCCR1A = (1 << COM1B1) | (1 << COM1B0) | (1 << COM1C1) | (1 << COM1C1) | (1 << WGM11) | (1 << WGM10); // OC1A disconnected, OC1B = OC1C inverted fast PWM TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11); // TOP = OCR1A, prescaler = 8 TCCR1C = 0; OCR1AH = 0; OCR1AL = 79; // TOP = 79
OCR1BH = 0; OCR1BL = maxFanSpeed; OCR1CH = 0; OCR1CL = maxFanSpeed; TCNT1H = 0; TCNT1L = 0; #endif // We have to enable the ports as outputs before PWM will work. pinMode(transistorFanPin, OUTPUT); pinMode(diodeFanPin, OUTPUT); }
// Set the transistor fan speed, where 0 <= fanSpeed <= maxFanSpeed void setTransistorFanSpeed(unsigned char fanSpeed) { OCR1BH = 0; OCR1BL = fanSpeed; }
// Set the diode fan speed, where 0 <= fanSpeed <= maxFanSpeed void setDiodeFanSpeed(unsigned char fanSpeed) { #if IS_UNO OCR1BH = 0; OCR1BL = fanSpeed; #else OCR1CH = 0; OCR1CL = fanSpeed; #endif
Thanks any help would be great
|
|
|
|
|
15
|
Using Arduino / Motors, Mechanics, and Power / Controlling PC cooling fan that has a PWM input
|
on: June 10, 2012, 10:49:55 am
|
|
Hey Everyone, I am trying to control an arctic F12 Pro PWM with my Mega 2560. It is a four wire fan, Vc, grd, sensor/tach and PWM. When I plugged it in it runs at high. I Tried to run a fading led sketch, but it had no affect on it. I am using this to cool a LED light over a Reef tank. It will be contolled by the out put of a DS18b20. Right now would love to just get it to change speed with different numbers in the Sketch. WARNING...I am aNoobie...lol Any help would be great. Also if you do know of a sketch that interfaces with a DS18B20 please add that too.... Basic Temp a =25% b= 50%, c= 75% and d =100%. Thanks in advance Daka
|
|
|
|
|