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:
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

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62