Show Posts
Pages: [1]
1  Using Arduino / General Electronics / Re: Arduino Mega, Screw (Terminal) it on: October 11, 2012, 11:50:55 am
Any bds left?  I can place this board any where in the stack?  Using a touch screen and the driver sheild is the last one with maybe 2-3 bds in between .
 Thanks
 Skip
2  Using Arduino / Programming Questions / Re: Can you make an input go low even when it is high? on: June 28, 2012, 01:21:25 pm
Thanks WB

I tried to compile it, it errored because it had no setup so I changed the begin to setup and it compiled. Will check it out at more on bread brd to see if it all works.
Daka
3  Using Arduino / Programming Questions / Re: Can you make an input go low even when it is high? on: June 28, 2012, 08:03:51 am
THANKS
It gives me a place to start.
 And if anybody else has any ideas please jump in.
 I will also have to add a statment that says check for the problem that caused it to turn off by time instead of the switch.
4  Using Arduino / Programming Questions / Re: Can you make an input go low even when it is high? on: June 28, 2012, 07:43:32 am
Thanks majenko,
 Could you give me an example of the code, I have other simular type uses too. It would be a big help. I could just mod as needed.Just learning code.
 Thanks
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
6  Using Arduino / Programming Questions / Re: Change inverted fast PWM to fast pwm on: June 19, 2012, 08:18:08 pm
Still cant get this working Help please
7  Using Arduino / Motors, Mechanics, and Power / Re: Controlling PC cooling fan that has a PWM input on: June 12, 2012, 09:33:25 am
Hey,

Still not working, But I think it maybe the inverted fast PWM vs Fast PWM. How do you change it to just Fast PWM?
Thanks
8  Using Arduino / Programming Questions / Re: Change inverted fast PWM to fast pwm on: June 12, 2012, 07:13:11 am
Any help please!!
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
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  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 smiley-confuse ,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:
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.

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
12  Using Arduino / Motors, Mechanics, and Power / Re: Controlling PC cooling fan that has a PWM input on: June 10, 2012, 04:35:03 pm
DC,
 Thank you very much, I will set up eveything tonight and give it a try... Will report back Ya or Na.
 Thanks
 Daka
13  Using Arduino / Motors, Mechanics, and Power / Re: Controlling PC cooling fan that has a PWM input on: June 10, 2012, 04:09:39 pm
Thanks for the in formation.
 As I am new at this, which varible changes the speed, what are the 0% and 100% numbers, and will this work on a mega 2560 R3
 Thanks for you help.
14  Using Arduino / Motors, Mechanics, and Power / Re: Controlling PC cooling fan that has a PWM input on: June 10, 2012, 01:26:59 pm
Thanks, Now how do I program the clock/counter to 25kHz and what is the value I use to vary the speed...0-255?
What pin will this effect?
I have a mega 2560
 Thanks
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
Pages: [1]