Issues with runnning TEA5767 and nixies at same time
hi guys!
just have brief overview of project, i'm making retro-style radio using tea5767 fm radio chip connected arduino via i2c. using arduinix shield power 4 in-17 nixie tubes. right now, arduino running program uses nixie tubes display time. i'll able use nixie tubes display station tea5767 tuned to. each part (the radio , nixie tubes) works fine itself, when combine 2 codes, nixie tubes flash on , off rapidly, , radio chip no longer tunes properly.
i used code fm radio chip: http://www.instructables.com/id/tea5767-fm-radio-breakout-board-for-arduino/step5/conclusion/
the original code driving nixie tubes can found here: http://arduinix.com/main/code/anx-4tube-clock-crossfade.txt
and finally, combined code:
thanks! appreciated!
just have brief overview of project, i'm making retro-style radio using tea5767 fm radio chip connected arduino via i2c. using arduinix shield power 4 in-17 nixie tubes. right now, arduino running program uses nixie tubes display time. i'll able use nixie tubes display station tea5767 tuned to. each part (the radio , nixie tubes) works fine itself, when combine 2 codes, nixie tubes flash on , off rapidly, , radio chip no longer tunes properly.
i used code fm radio chip: http://www.instructables.com/id/tea5767-fm-radio-breakout-board-for-arduino/step5/conclusion/
the original code driving nixie tubes can found here: http://arduinix.com/main/code/anx-4tube-clock-crossfade.txt
and finally, combined code:
code: [select]
// fading transitions sketch 4-tube board default connections.
// based on 6-tube sketch emblazed
// 4-tube-itized dave b. 16 june 2011
// shows minutes , seconds only
// sn74141 : truth table
//d c b #
//l,l,l,l 0
//l,l,l,h 1
//l,l,h,l 2
//l,l,h,h 3
//l,h,l,l 4
//l,h,l,h 5
//l,h,h,l 6
//l,h,h,h 7
//h,l,l,l 8
//h,l,l,h 9
#include <wire.h>
unsigned char frequencyh = 0;
unsigned char frequencyl = 0;
unsigned int frequencyb;
double frequency = 0;
int ledpin_0_a = 2;
int ledpin_0_b = 3;
int ledpin_0_c = 4;
int ledpin_0_d = 5;
int ledpin_1_a = 6;
int ledpin_1_b = 7;
int ledpin_1_c = 8;
int ledpin_1_d = 9;
int ledpin_a_1 = 10;
int ledpin_a_2 = 11;
int ledpin_a_3 = 12;
void setup()
{
pinmode(ledpin_0_a, output);
pinmode(ledpin_0_b, output);
pinmode(ledpin_0_c, output);
pinmode(ledpin_0_d, output);
pinmode(ledpin_1_a, output);
pinmode(ledpin_1_b, output);
pinmode(ledpin_1_c, output);
pinmode(ledpin_1_d, output);
pinmode(ledpin_a_1, output);
pinmode(ledpin_a_2, output);
pinmode(ledpin_a_3, output);
// note:
// grounding on virtual pins 14 , 15 (analog pins 0 , 1) set hour , mins.
pinmode( 14, input ); // set vertual pin 14 (pin 0 on analog inputs )
digitalwrite(14, high); // set pin 14 pull resistor.
pinmode( 15, input ); // set vertual pin 15 (pin 1 on analog inputs )
digitalwrite(15, high); // set pin 15 pull resistor.
wire.begin();
frequency = 93.0; //starting frequency
setfrequency();
serial.begin(9600);
}
}
void setsn74141chips( int num2, int num1 )
{
int a,b,c,d;
// set defaults.
a=0;b=0;c=0;d=0; // display zero.
// load a,b,c,d.. send sn74141 ic (1)
switch( num1 )
{
case 0: a=0;b=0;c=0;d=0;break;
case 1: a=1;b=0;c=0;d=0;break;
case 2: a=0;b=1;c=0;d=0;break;
case 3: a=1;b=1;c=0;d=0;break;
case 4: a=0;b=0;c=1;d=0;break;
case 5: a=1;b=0;c=1;d=0;break;
case 6: a=0;b=1;c=1;d=0;break;
case 7: a=1;b=1;c=1;d=0;break;
case 8: a=0;b=0;c=0;d=1;break;
case 9: a=1;b=0;c=0;d=1;break;
default: a=1;b=1;c=1;d=1;
break;
}
// write output pins.
digitalwrite(ledpin_0_d, d);
digitalwrite(ledpin_0_c, c);
digitalwrite(ledpin_0_b, b);
digitalwrite(ledpin_0_a, a);
// load a,b,c,d.. send sn74141 ic (2)
switch( num2 )
{
case 0: a=0;b=0;c=0;d=0;break;
case 1: a=1;b=0;c=0;d=0;break;
case 2: a=0;b=1;c=0;d=0;break;
case 3: a=1;b=1;c=0;d=0;break;
case 4: a=0;b=0;c=1;d=0;break;
case 5: a=1;b=0;c=1;d=0;break;
case 6: a=0;b=1;c=1;d=0;break;
case 7: a=1;b=1;c=1;d=0;break;
case 8: a=0;b=0;c=0;d=1;break;
case 9: a=1;b=0;c=0;d=1;break;
default: a=1;b=1;c=1;d=1;
break;
}
// write output pins
digitalwrite(ledpin_1_d, d);
digitalwrite(ledpin_1_c, c);
digitalwrite(ledpin_1_b, b);
digitalwrite(ledpin_1_a, a);
}
////////////////////////////////////////////////////////////////////////
//
// displaynumberstring
// use: passing array 4 elements long display numbers
// on 4 nixie bulb setup.
//
////////////////////////////////////////////////////////////////////////
float fadein = 0.0f;
float fadeout = 8.0f;
float fademax = 8.0f;
float fadestep = 1.0f;
int numberarray[4]={0,0,0,0};
int currnumberarray[4]={0,0,0,0};
float numberarrayfadeinvalue[4]={0.0f,0.0f,0.0f,0.0f};
float numberarrayfadeoutvalue[4]={8.0f,8.0f,8.0f,8.0f};
void displayfadenumberstring()
{
// nixie setup..
// note: if of bulbs need blend will
// in time seconds bulbs. because change happens
// on 1 second interval.
// 1 (0,3)
setsn74141chips(currnumberarray[0],currnumberarray[3]);
digitalwrite(ledpin_a_1, high);
delay(numberarrayfadeoutvalue[0]);
setsn74141chips(numberarray[0],numberarray[3]);
delay(numberarrayfadeinvalue[0]);
digitalwrite(ledpin_a_1, low);
// 2 (1,2)
setsn74141chips(currnumberarray[1],currnumberarray[2]);
digitalwrite(ledpin_a_2, high);
delay(numberarrayfadeoutvalue[1]);
setsn74141chips(numberarray[1],numberarray[2]);
delay(numberarrayfadeinvalue[1]);
digitalwrite(ledpin_a_2, low);
// loop thru , update arrays, , fades.
for( int = 0 ; < 4 ; ++ )
{
if( numberarray[i] != currnumberarray[i] )
{
numberarrayfadeinvalue[i] += fadestep;
numberarrayfadeoutvalue[i] -= fadestep;
if( numberarrayfadeinvalue[i] >= fademax )
{
numberarrayfadeinvalue[i] = 0.0f;
numberarrayfadeoutvalue[i] = fademax;
currnumberarray[i] = numberarray[i];
}
}
}
}
// defines
long mins = 60; // 60 seconds in min.
long hours = 60 * mins; // 60 mins in hour.
long days = 24 * hours; // 24 hours in day. > note: change 24 12 non millitary time.
long runtime = 0; // time when started.
// default time sets. clock start @ 12:59:00
long clockhourset = 7;
long clockminset = 6;
int hourbuttonpressed = false;
int minbuttonpressed = false;
////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////
void loop()
{
int reading = analogread(0);
//frequency = map((float)reading, 0.0, 1024.0, 87.5, 108.0);
frequency = ((double)reading * (108.0 - 87.5)) / 1024.0 + 87.5;
frequency = ((int)(frequency * 10)) / 10.0;
setfrequency();
serial.println(frequency);
// milliseconds.
runtime = millis();
int hourinput = digitalread(14);
int mininput = digitalread(15);
if( hourinput == 0 )
hourbuttonpressed = true;
if( mininput == 0 )
minbuttonpressed = true;
if( hourbuttonpressed == true && hourinput == 1 )
{
clockhourset++;
hourbuttonpressed = false;
}
if( minbuttonpressed == true && mininput == 1 )
{
clockminset++;
minbuttonpressed = false;
}
// time in seconds.
long time = (runtime) / 1000;
// set time based on offset..
// long hbump = 60*60*clockhourset;
long hbump = 60*60*clockhourset;
long mbump = 60*clockminset;
time += mbump + hbump;
// convert time days,hours,mins,seconds
long days = time / days; time -= days * days;
long hours = time / hours; time -= hours * hours;
long minutes = time / mins; time -= minutes * mins;
long seconds = time;
// high , low order values hours,min,seconds.
int lowerhours = hours % 10;
int upperhours = hours - lowerhours;
int lowermins = minutes % 10;
int uppermins = minutes - lowermins;
int lowerseconds = seconds % 10;
int upperseconds = seconds - lowerseconds;
if( upperseconds >= 10 ) upperseconds = upperseconds / 10;
if( uppermins >= 10 ) uppermins = uppermins / 10;
if( upperhours >= 10 ) upperhours = upperhours / 10;
// fill in number array used display on tubes.
numberarray[3] = upperhours;
numberarray[2] = lowerhours;
numberarray[1] = uppermins;
numberarray[0] = lowermins;
// display.
displayfadenumberstring();
}
void setfrequency()
{
frequencyb = 4 * (frequency * 1000000 + 225000) / 32768;
frequencyh = frequencyb >> 8;
frequencyl = frequencyb & 0xff;
delay(100);
wire.begintransmission(0x60);
wire.write(frequencyh);
wire.write(frequencyl);
wire.write(0xb0);
wire.write(0x10);
wire.write((byte)0x00);
wire.endtransmission();
delay(100);
}
thanks! appreciated!
quote
any appreciated!
some links hardware using good.
code: [select]
int ledpin_0_a = 2;
int ledpin_0_b = 3;
int ledpin_0_c = 4;
int ledpin_0_d = 5;
int ledpin_1_a = 6;
int ledpin_1_b = 7;
int ledpin_1_c = 8;
int ledpin_1_d = 9;
int ledpin_a_1 = 10;
int ledpin_a_2 = 11;
int ledpin_a_3 = 12;
i thought said have nixie tubes. why don't these names reflect that?
this code:
code: [select]
// note:
// grounding on virtual pins 14 , 15 (analog pins 0 , 1) set hour , mins.
pinmode( 14, input ); // set vertual pin 14 (pin 0 on analog inputs )
digitalwrite(14, high); // set pin 14 pull resistor.
pinmode( 15, input ); // set vertual pin 15 (pin 1 on analog inputs )
digitalwrite(15, high); // set pin 15 pull resistor.
is not compatible code:
code: [select]
int reading = analogread(0);
analog pin 1 , digital pin 14 same pin, on 328-based arduinos. 1 purpose want use for?
Arduino Forum > Using Arduino > Programming Questions > Issues with runnning TEA5767 and nixies at same time
arduino
Comments
Post a Comment