<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="bbPress/1.0.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>LeafLabs Garden &#187; Topic: spi not working</title>
		<link>http://forums.leaflabs.com/topic.php?id=9913</link>
		<description>A place to share, learn, and grow...</description>
		<language>en-US</language>
		<pubDate>Fri, 22 Jan 2016 00:20:48 +0000</pubDate>
		<generator>http://bbpress.org/?v=1.0.2</generator>
		<textInput>
			<title><![CDATA[Search]]></title>
			<description><![CDATA[Search all topics from these forums.]]></description>
			<name>q</name>
			<link>http://forums.leaflabs.com/search.php</link>
		</textInput>
		<atom:link href="http://forums.leaflabs.com/rss.php?topic=9913" rel="self" type="application/rss+xml" />

		<item>
			<title>stafil on "spi not working"</title>
			<link>http://forums.leaflabs.com/topic.php?id=9913#post-21730</link>
			<pubDate>Wed, 19 Dec 2012 14:58:57 +0000</pubDate>
			<dc:creator>stafil</dc:creator>
			<guid isPermaLink="false">21730@http://forums.leaflabs.com/</guid>
			<description>&#60;p&#62;Thanks to all who answered me. I've solved it. I do not know why must be NSS pin after setting up spi.begin. But that's no longer the case. Well it would be if it was mentioned in the documentation.&#60;/p&#62;
&#60;p&#62;this-&#38;gt; spi-&#38;gt; begin (SPI_281_250KHZ, MSBFIRST, SPI_MODE_0);&#60;br /&#62;
   pinMode (this-&#38;gt; spi-&#38;gt; nssPin (), OUTPUT);&#60;/p&#62;
&#60;p&#62;  Thank you
&#60;/p&#62;</description>
		</item>
		<item>
			<title>stafil on "spi not working"</title>
			<link>http://forums.leaflabs.com/topic.php?id=9913#post-21687</link>
			<pubDate>Mon, 17 Dec 2012 01:40:26 +0000</pubDate>
			<dc:creator>stafil</dc:creator>
			<guid isPermaLink="false">21687@http://forums.leaflabs.com/</guid>
			<description>&#60;p&#62;here is a simple code. &#60;a href=&#34;https://gist.github.com/3bf4afa7b8eba06fca1e&#34; rel=&#34;nofollow&#34;&#62;https://gist.github.com/3bf4afa7b8eba06fca1e&#60;/a&#62;
&#60;/p&#62;</description>
		</item>
		<item>
			<title>gbulmer on "spi not working"</title>
			<link>http://forums.leaflabs.com/topic.php?id=9913#post-21683</link>
			<pubDate>Sun, 16 Dec 2012 13:38:49 +0000</pubDate>
			<dc:creator>gbulmer</dc:creator>
			<guid isPermaLink="false">21683@http://forums.leaflabs.com/</guid>
			<description>&#60;p&#62;starfil - Have you got a simpler example program which still has the bug? &#60;/p&#62;
&#60;p&#62;When you try to reduce the program, you might identify the bug anyway.&#60;br /&#62;
By showing us a shorter program, it is more likely to someone will read it and try to help.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>stafil on "spi not working"</title>
			<link>http://forums.leaflabs.com/topic.php?id=9913#post-21682</link>
			<pubDate>Sun, 16 Dec 2012 13:00:05 +0000</pubDate>
			<dc:creator>stafil</dc:creator>
			<guid isPermaLink="false">21682@http://forums.leaflabs.com/</guid>
			<description>&#60;p&#62;I have a maple rev 5 is connected to 5V via a usb dupe program. The program communicates with SA9904 spi2 correctly. when I unplug the USB and press RESET and communication after spi2 not work. Please advise me.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>gbulmer on "spi not working"</title>
			<link>http://forums.leaflabs.com/topic.php?id=9913#post-21681</link>
			<pubDate>Sun, 16 Dec 2012 12:33:49 +0000</pubDate>
			<dc:creator>gbulmer</dc:creator>
			<guid isPermaLink="false">21681@http://forums.leaflabs.com/</guid>
			<description>&#60;p&#62;stafil - would you please take note of the &#34;Guidelines for Posting&#34; &#60;a href=&#34;http://forums.leaflabs.com/topic.php?id=994&#34; rel=&#34;nofollow&#34;&#62;http://forums.leaflabs.com/topic.php?id=994&#60;/a&#62;&#60;br /&#62;
Specifically it asks:&#60;/p&#62;
&#60;p&#62;&#60;strong&#62;When posting code:&#60;/strong&#62;&#60;/p&#62;
&#60;ul&#62;
&#60;li&#62;Don't post long (multi-page) code listings directly into the forum.  Use something like &#60;a href=&#34;http://pastebin.com&#34;&#62;Pastebin&#60;/a&#62; or &#60;a href=&#34;https://gist.github.com/&#34;&#62;GitHub Gists&#60;/a&#62; instead.&#60;/li&#62;
&#60;/ul&#62;
&#60;p&#62;I think your example is so long and complex that people might find it quite difficult to give help. Have you got a shorter and simpler example which has the bug?
&#60;/p&#62;</description>
		</item>
		<item>
			<title>stafil on "spi not working"</title>
			<link>http://forums.leaflabs.com/topic.php?id=9913#post-21680</link>
			<pubDate>Sun, 16 Dec 2012 11:19:52 +0000</pubDate>
			<dc:creator>stafil</dc:creator>
			<guid isPermaLink="false">21680@http://forums.leaflabs.com/</guid>
			<description>&#60;p&#62;code is here:&#60;/p&#62;
&#60;p&#62;//#include &#38;lt;string.h&#38;gt;&#60;/p&#62;
&#60;p&#62;#include &#38;lt;Wire.h&#38;gt;   // For some strange reasons, Wire.h must be included here&#60;br /&#62;
#include &#38;lt;FRAM.h&#38;gt;&#60;br /&#62;
#include &#38;lt;LiquidCrystal.h&#38;gt;&#60;/p&#62;
&#60;p&#62;char MSG_DEVICE_NAME[] __FLASH__ =						&#34;PowerMeter&#34;;&#60;br /&#62;
char MSG_DEVICE_NAME1[] __FLASH__ =						&#34;Graviton, SF&#34;;&#60;br /&#62;
char MSG_DEVICE_NAME2[] __FLASH__ =						&#34;Poprad, Slovakia&#34;;&#60;br /&#62;
char MSG_DEVICE_VER[] __FLASH__ =							&#34;V.: &#34;; &#60;/p&#62;
&#60;p&#62;HardwareSPI spiSA9904(2);&#60;/p&#62;
&#60;p&#62;#define _DeviceAddress_I2C_FRAM B1010000&#60;br /&#62;
FRAMClass fram = FRAMClass(_DeviceAddress_I2C_FRAM, FRAM_24C64);&#60;/p&#62;
&#60;p&#62;unsigned long opozdenie = millis();&#60;br /&#62;
unsigned long oldmillis = millis();&#60;/p&#62;
&#60;p&#62;int CountSamples = 0;&#60;br /&#62;
const int nSamples = 1;&#60;/p&#62;
&#60;p&#62;long zlepackety = 0;&#60;br /&#62;
long vsetkypackety = 0;&#60;/p&#62;
&#60;p&#62;//#define SPI_DEBUG //Set this to 1 for SPI debug to enable&#60;/p&#62;
&#60;p&#62;struct sCAL&#60;br /&#62;
{&#60;br /&#62;
  int volt;    //voltage correction&#60;br /&#62;
};&#60;/p&#62;
&#60;p&#62;struct sSetup&#60;br /&#62;
{&#60;br /&#62;
  float v_nom;     //applied volatge      [V]&#60;br /&#62;
  float i_max;	 //max load current     [A]&#60;br /&#62;
}; &#60;/p&#62;
&#60;p&#62;//chip-related constants&#60;br /&#62;
const long RATE = 320000;		//register update rate&#60;br /&#62;
const long CLOCKFREQ = 3579545;	//clock frequency&#60;br /&#62;
const float CRYSTAL_DIV256 = (float)CLOCKFREQ / 256.0f;	//constant in frequency calculation, see application note.&#60;br /&#62;
const unsigned long LAST_10 = 0x3FF; 	//mask for last 10 bits in 24 bit number&#60;br /&#62;
const unsigned long LIMIT = 0xFFFFFF; 			//upperlimit for 24 bits  &#60;/p&#62;
&#60;p&#62;const int PHASE = 3;		//3phase device&#60;br /&#62;
float epc; 		  //energy per count&#60;br /&#62;
sSetup Setup;&#60;br /&#62;
sCAL CAL[PHASE];  &#60;/p&#62;
&#60;p&#62;float energy_A; // Ws&#60;br /&#62;
float energy_R; // Vars&#60;br /&#62;
//float aWs; // Ws skutocne po prepocitani casu&#60;br /&#62;
//float aVars; // Vars skutocne po prepocitani casu&#60;br /&#62;
float A;// kW/h&#60;br /&#62;
float R;// kVar/h&#60;br /&#62;
float U;&#60;br /&#62;
float I;&#60;br /&#62;
float f;&#60;br /&#62;
float Fi;&#60;br /&#62;
float cosFi;&#60;br /&#62;
float sinFi;&#60;br /&#62;
bool ph_cross0; // Voltage zero crossover&#60;br /&#62;
bool ph_seq; // Phase sequence error&#60;br /&#62;
bool ph_err; // Missing phase&#60;br /&#62;
bool ph_errph[3]; // Missing phases&#60;br /&#62;
long cas_merania; &#60;/p&#62;
&#60;p&#62;void setup_meter()&#60;br /&#62;
{&#60;br /&#62;
  epc = (Setup.v_nom * Setup.i_max) / RATE;&#60;/p&#62;
&#60;p&#62;  //if(VycitajDataZIC() == true)&#60;br /&#62;
  //	set_volt_cal();&#60;/p&#62;
&#60;p&#62;  //  first = true;&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;void defaults()&#60;br /&#62;
{&#60;br /&#62;
  Setup.v_nom = 230.0f;&#60;br /&#62;
  Setup.i_max = 50.0f;&#60;/p&#62;
&#60;p&#62;  CAL[0].volt = 810;//795;&#60;br /&#62;
  CAL[1].volt = 826;//795;&#60;br /&#62;
  CAL[2].volt = 827;//795;&#60;/p&#62;
&#60;p&#62;  //  MinW = 4.5;&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;bool sample = false;&#60;/p&#62;
&#60;p&#62;const uint8 nRows = 4;      //number of rows on LCD&#60;br /&#62;
const uint8 nColumns = 20;   //number of columns on LCD&#60;br /&#62;
const byte LCD_backlight_pin = 29; &#60;/p&#62;
&#60;p&#62;LiquidCrystal lcd(23, 24, 25, 26, 27, 28); &#60;/p&#62;
&#60;p&#62;void setup()&#60;br /&#62;
{&#60;br /&#62;
  Wire.begin(0x00, PORTI2C2, I2C_FAST_MODE &#124; I2C_DUTY_16_9);&#60;br /&#62;
  //  spiSA9904.begin(SPI_281_250KHZ, MSBFIRST, SPI_MODE_0); &#60;/p&#62;
&#60;p&#62;  //  lcd.setBacklightPin(LCD_backlight_pin, POSITIVE);&#60;br /&#62;
  lcd.begin(nColumns, nRows);&#60;br /&#62;
  //  lcd.createChar(0, arrow_up);&#60;br /&#62;
  //  lcd.createChar(1, arrow_down);&#60;br /&#62;
  //  lcd.createChar(3, bell);&#60;br /&#62;
  //  lcd.setBacklight(LCDbackLightON); &#60;/p&#62;
&#60;p&#62;  lcd.setCursor(0, 0);&#60;br /&#62;
  lcd.print(MSG_DEVICE_NAME);&#60;br /&#62;
  lcd.setCursor(0, 1);&#60;br /&#62;
  lcd.print(MSG_DEVICE_NAME1);&#60;br /&#62;
  lcd.setCursor(0, 2);&#60;br /&#62;
  lcd.print(MSG_DEVICE_NAME2);&#60;br /&#62;
  lcd.setCursor(0, 3);&#60;br /&#62;
  lcd.print(MSG_DEVICE_VER);&#60;br /&#62;
  lcd.print(__DATE__);&#60;/p&#62;
&#60;p&#62;  delay(2000);&#60;br /&#62;
  defaults();&#60;br /&#62;
  setup_meter();&#60;/p&#62;
&#60;p&#62;  //  SerialUSB.println(&#34;Starting...&#34;);&#60;/p&#62;
&#60;p&#62;  pinMode(BOARD_LED_PIN, OUTPUT);&#60;/p&#62;
&#60;p&#62;  pinMode(spiSA9904.nssPin(), OUTPUT);&#60;br /&#62;
  digitalWrite(spiSA9904.nssPin(), LOW); &#60;/p&#62;
&#60;p&#62;  const int interruptPinSA9904B = 35;&#60;br /&#62;
  pinMode(interruptPinSA9904B, INPUT_FLOATING);&#60;br /&#62;
  attachInterrupt(interruptPinSA9904B, _F50sampleSA9904, FALLING);&#60;/p&#62;
&#60;p&#62;  lcd.clear();&#60;/p&#62;
&#60;p&#62;}&#60;/p&#62;
&#60;p&#62;unsigned long iLCDLoop = millis(); &#60;/p&#62;
&#60;p&#62;void loop()&#60;br /&#62;
{&#60;br /&#62;
  if(sample) //read all registers starting from active&#60;br /&#62;
  {&#60;br /&#62;
    int F50time = millis()-oldmillis;&#60;br /&#62;
    oldmillis = millis();&#60;br /&#62;
    //    lcd.setCursor(10, 0);&#60;br /&#62;
    //    lcd.print(F50time);&#60;br /&#62;
    //#ifdef SPI_DEBUG&#60;br /&#62;
    //    SerialUSB.print(&#34;F50 time:;&#34;);&#60;br /&#62;
    //    SerialUSB.print(F50time);&#60;br /&#62;
    //    SerialUSB.print(&#34;; &#34;);&#60;br /&#62;
    //#endif&#60;br /&#62;
    //   if(F50time &#38;lt; 18 &#124; F50time &#38;gt; 22)&#60;br /&#62;
    //     SerialUSB.println(&#34;;ERR F50time;&#34;);&#60;/p&#62;
&#60;p&#62;    F50sampleSA9904();&#60;br /&#62;
    //#ifdef SPI_DEBUG&#60;br /&#62;
    //   SerialUSB.println(&#34;&#34;);&#60;br /&#62;
    //#endif&#60;br /&#62;
    ZobrazDataLCD();&#60;br /&#62;
    sample = false;&#60;br /&#62;
  }&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;void ZobrazDataLCD()&#60;br /&#62;
{&#60;br /&#62;
  if( millis() &#38;gt; iLCDLoop + 800 )&#60;br /&#62;
  {&#60;br /&#62;
    //    SerialUSB.print(&#34;lcd s:&#34;);&#60;br /&#62;
    //    SerialUSB.print(millis());&#60;br /&#62;
    LCDClearRow(0);&#60;br /&#62;
    lcd.setCursor(0, 0);&#60;br /&#62;
    lcd.print(vsetkypackety,DEC);&#60;br /&#62;
    LCDClearRow(1);&#60;br /&#62;
    lcd.setCursor(0, 1);&#60;br /&#62;
    lcd.print(zlepackety,DEC);&#60;/p&#62;
&#60;p&#62;    for(int i = 0; i&#38;lt; 20; i++)&#60;br /&#62;
    {&#60;br /&#62;
      //     byte read1 = fram.read_byte(i);&#60;br /&#62;
      //     lcd.print(char(read1));&#60;br /&#62;
    }&#60;br /&#62;
    //    SerialUSB.print(&#34;lcd k:&#34;);&#60;br /&#62;
    //    SerialUSB.println(millis());&#60;/p&#62;
&#60;p&#62;    LCDClearRow(2);&#60;br /&#62;
    lcd.setCursor(0, 2);&#60;br /&#62;
    lcd.print(U,3);&#60;br /&#62;
    LCDClearRow(3);&#60;br /&#62;
    lcd.setCursor(0, 3);&#60;br /&#62;
    lcd.print(f,3);&#60;/p&#62;
&#60;p&#62;    iLCDLoop = millis();&#60;br /&#62;
  }&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;void LCDClearRow(byte row)&#60;br /&#62;
{&#60;br /&#62;
  lcd.setCursor(0, row);&#60;br /&#62;
  for(byte i = 0; i &#38;lt; nColumns; i++)&#60;br /&#62;
    lcd.print(&#34; &#34;);&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;void _F50sampleSA9904() // F50 impulse&#60;br /&#62;
{&#60;br /&#62;
  CountSamples++;&#60;br /&#62;
  if(CountSamples == nSamples)&#60;br /&#62;
  {&#60;br /&#62;
    sample = true;&#60;br /&#62;
    CountSamples = 0;&#60;br /&#62;
  }&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;void F50sampleSA9904()&#60;br /&#62;
{&#60;br /&#62;
  byte rx[37] = {};&#60;br /&#62;
  unsigned long reg1[4] = {};&#60;/p&#62;
&#60;p&#62;  readSA9904B(0, rx, 36);&#60;br /&#62;
  vsetkypackety++;&#60;/p&#62;
&#60;p&#62;  reg1[0] = convertbutolong(rx, 0);&#60;br /&#62;
  reg1[1] = convertbutolong(rx, 3);&#60;br /&#62;
  reg1[2] = convertbutolong(rx, 6);&#60;br /&#62;
  reg1[3] = convertbutolong(rx, 9);&#60;/p&#62;
&#60;p&#62;  A = SamplesA(0, reg1[0]);&#60;br /&#62;
  R = SamplesR(0, reg1[1]);&#60;br /&#62;
  U = SamplesU(0, reg1[2]);&#60;br /&#62;
  f = SamplesFregvency(reg1[3]);&#60;/p&#62;
&#60;p&#62;  //#ifdef SPI_DEBUG&#60;br /&#62;
  //  SerialUSB.print(&#34;;A=;&#34;);&#60;br /&#62;
  //  SerialUSB.print(A,3);&#60;/p&#62;
&#60;p&#62;  //  SerialUSB.print(&#34;;R=;&#34;);&#60;br /&#62;
  //  SerialUSB.print(R,3);&#60;/p&#62;
&#60;p&#62;  //  SerialUSB.print(&#34;;U=;&#34;);&#60;br /&#62;
  //  SerialUSB.print(U,3);&#60;/p&#62;
&#60;p&#62;  //  SerialUSB.print(&#34;;f=;&#34;);&#60;br /&#62;
  //  SerialUSB.print(f,3);&#60;br /&#62;
  //#endif&#60;/p&#62;
&#60;p&#62;  if(f &#38;lt; 40 &#124;&#124; f &#38;gt; 60)&#60;br /&#62;
  {&#60;br /&#62;
    //    SerialUSB.println(&#34;;ERR;&#34;);&#60;br /&#62;
    zlepackety++;&#60;br /&#62;
  }&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;float SamplesA(byte ph, long regA)&#60;br /&#62;
{&#60;br /&#62;
  float a = 0;&#60;br /&#62;
  a = float(wrap(regA));&#60;/p&#62;
&#60;p&#62;  return a;&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;float SamplesR(byte ph, long regR)&#60;br /&#62;
{&#60;br /&#62;
  float r = 0;&#60;br /&#62;
  r = float(wrap(regR));&#60;br /&#62;
  return r;&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;float SamplesU(byte ph, long regU)&#60;br /&#62;
{&#60;br /&#62;
  float u = 0;&#60;br /&#62;
  if (CAL[ph].volt != 0 &#38;amp;&#38;amp; Setup.v_nom != 0)&#60;br /&#62;
    u = (float)(regU / (float)CAL[ph].volt * Setup.v_nom); &#60;/p&#62;
&#60;p&#62;  return u;&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;float SamplesFregvency(long regFregvency)&#60;br /&#62;
{&#60;br /&#62;
  long fmr = regFregvency &#38;amp; LAST_10;&#60;br /&#62;
  float ff = 0;&#60;br /&#62;
  if (fmr != 0)&#60;br /&#62;
    ff = (float)(CRYSTAL_DIV256 / fmr);&#60;/p&#62;
&#60;p&#62;  return ff;&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;long wrap(long value)&#60;br /&#62;
{&#60;br /&#62;
  int sign = 1;&#60;br /&#62;
  if( abs(value) &#38;gt; 0x7FFFFF)    	 	 //val&#38;gt;8388607?&#60;br /&#62;
  {&#60;br /&#62;
    if(value&#38;gt;0)&#60;br /&#62;
      sign=-1;&#60;br /&#62;
    value=(0x1000000+(sign*value))*sign; //(16777216(+or-)value)*(+or-)&#60;br /&#62;
  }&#60;br /&#62;
  return (value);&#60;br /&#62;
} &#60;/p&#62;
&#60;p&#62;void readSA9904B(byte startreg, byte *data, byte bytesreq)&#60;br /&#62;
{&#60;br /&#62;
  spiSA9904.begin(SPI_281_250KHZ, MSBFIRST, SPI_MODE_0); &#60;/p&#62;
&#60;p&#62;  digitalWrite(spiSA9904.nssPin(), HIGH);&#60;br /&#62;
  spiSA9904.transfer(0x01);&#60;br /&#62;
  spiSA9904.transfer(startreg &#124; 0x80);&#60;br /&#62;
  spiSA9904.begin(SPI_281_250KHZ, MSBFIRST, SPI_MODE_1);&#60;br /&#62;
  for(byte i = 0; i &#38;lt; bytesreq; i++)&#60;br /&#62;
    data[i]=spiSA9904.transfer(0x00);&#60;br /&#62;
  digitalWrite(spiSA9904.nssPin(), LOW);&#60;br /&#62;
  spiSA9904.end();&#60;/p&#62;
&#60;p&#62;#ifdef SPI_DEBUG&#60;br /&#62;
  SerialUSB.print(&#34;;registers; &#34;);&#60;br /&#62;
  for(byte i=0;i&#38;lt;bytesreq;i++)&#60;br /&#62;
  {&#60;br /&#62;
    SerialUSB.print(data[i], HEX);&#60;br /&#62;
    SerialUSB.print(&#34;;&#34;);&#60;br /&#62;
  }&#60;br /&#62;
#endif&#60;br /&#62;
}&#60;/p&#62;
&#60;p&#62;unsigned long convertbutolong(byte *buf, int idx)&#60;br /&#62;
{&#60;br /&#62;
  return ((unsigned long)buf[idx]&#38;lt;&#38;lt;16 &#124; (unsigned long)buf[idx+1]&#38;lt;&#38;lt;8 &#124; (unsigned long)buf[idx+2])  &#38;amp; LIMIT;&#60;br /&#62;
}
&#60;/p&#62;</description>
		</item>
		<item>
			<title>stafil on "spi not working"</title>
			<link>http://forums.leaflabs.com/topic.php?id=9913#post-21675</link>
			<pubDate>Sun, 16 Dec 2012 07:11:42 +0000</pubDate>
			<dc:creator>stafil</dc:creator>
			<guid isPermaLink="false">21675@http://forums.leaflabs.com/</guid>
			<description>&#60;p&#62;hi,&#60;/p&#62;
&#60;p&#62;why spi not working after detach usb. maple rev 5 is powered with external 5v. i used maple ide 12. lcd 4x20 works well.&#60;/p&#62;
&#60;p&#62;thx
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>
