Fab15 Workshop

Here is the video explaining the intention of the workshop:

https://vimeo.com/336378467

New idea of using 0ohm jumpers to isolate sub sections of the circuit. This allowed me to test the RF side independent of the LTC3105 side which turned out to be very useful.

Took about 5 or 6 passes on the lasercutter, 20 minutes per pass as it was 100x60mm in size.

BIG things to change:

1.) I am seeing a short between Vin and GND of the LTC3105…which them magically is no longer a short. The resistance I measure between Vin and GND changes between around 100K, to a few hundred ohms, to a handful of ohms. I notice the same thing on other LTC3105 boards I have soldered. When I plug in the IC to a power supply it shorts. I fear I may have destroyed the IC during soldering, though I limited the soldering iron temperature to 300C and never applied it for more than a few seconds at a time. I have built this circuit about 5 times over the years and have varied the circuit layout -it has never worked-, I wonder if the entire stock of ICs has been compromised at some point.

Rereading the datasheet, it says that an internal N-channel MOSFET connects SW and GND in certain modes while waiting for the inductor current to reach its limit. The inductor is a short to Vin so this might explain the apparent short observed between Vin and GND. The datasheet explains that this mode is reached when Vin is greater than the voltage on the driven output (Vout or Vaux), or when the driven output is less than 1.2V (typical). Essentially it would appear that this device temporarily stores energy inside the inductor, and therefore connecting Vin to GND for short moments is part of its normal operating behavior.

Is it possible that the voltage that the multimeter is using to test conductivity is causing the IC to enter this mode?

Why does my power supply thing there is a short circuit? If the circuit is waiting for the inductor to charge and it is not charging is this because the inductor is broken?

Do I need to attach a load to see this thing working?

2.) the goshdarn ICSP header is mirrored somehow 3.) replace the switch with a button (because it’s RESET silly) 4.) get some Attiny2313V packages 5.) the RFM12B is depreciated, I need to get started on the RFM69…

SMALL things to change:

1.) get rid of double highway exchange of wires with 0 ohm jumpers 2.) be able to isolate ground of ltc3105 (need one more zero jumper where I cut with the exacto) 3.) I should make this thing fit on the board stock size, so I don’t need to cut it down. 4.) it should be WAY smaller and possible modular and stacking 5.) there is no RF12B power LED!! 6.) There should be one function per board, with jumpers that allow for stacking. So much easier to trouble shoot.

Working with the LTC3105

Rereading the datasheet some suggestions I missed the first time around:

-The most efficient Vin possible is around 2.3V with Vout at 3V, Iload at 10mA and LDO at 2.2V. So I should chose solar cells that produce this voltage at normal operating light levels. -The MAX Vin is 5V.

-Suggested components: Low ESR output capacitor between Vout and GND Low DC resistance power inductor of 10uH with a “sufficient saturation current rating”. (Saturation current rating = The value of D.C. current when the inductance decreases to 65% of it’s nominal value.) The coil they use on their demo board is the SUMIDA CDRH3D18NP-100N which has:

Courant CC max.: 900 mA Résistance CC max.: 205 mOhms

D.C.R. of max 205mOhm (typical 164Ohm) and a saturation current of 0.90A at 20C.

4.7uF or larger between LDO and GND 10uF or larger ceramic decoupling cap between Vin and GND 10uF or larger cap between Vout and GND 1uF between AUX and GND

-Special Traces: Vin and Vout pins and decoupling cap: wide and as short as possible. GND traces should be lowest impedance path possible. SW and Vin and inductor traces should be as short and possible.

![](https://gitlab.com/fablabdigiscope/fablabdigiscope.gitlab.io/raw/master/themes/beautifulhugo/static/img/circuit schematic image bw higher res.png)

![](https://gitlab.com/fablabdigiscope/fablabdigiscope.gitlab.io/raw/master/themes/beautifulhugo/static/img/circuit board image bw higher res.png)

![](https://gitlab.com/fablabdigiscope/fablabdigiscope.gitlab.io/raw/master/themes/beautifulhugo/static/img/FINAL IMAGE 1 bw.jpg)

![](https://gitlab.com/fablabdigiscope/fablabdigiscope.gitlab.io/raw/master/themes/beautifulhugo/static/img/FINAL IMAGE 1.jpg)

![](https://gitlab.com/fablabdigiscope/fablabdigiscope.gitlab.io/raw/master/themes/beautifulhugo/static/img/FINAL IMAGE 2.jpg)

![](https://gitlab.com/fablabdigiscope/fablabdigiscope.gitlab.io/raw/master/themes/beautifulhugo/static/img/final image 3.jpg)

The TX code (for Attiny2313), thank you to http://dlehard.narod.ru/quick_start.pdf :


/*
 * Attiny2313 RFM12B.c
 *
 * Created: 5/16/2019 12:54:04 PM
 * Author : FablabDigiscope
 */

#include <avr/io.h>

/* RFM12B INTERFACE */
#define SCK 7 // SPI clock
#define SDO 6 // SPI Data output (RFM12B side)
#define SDI 5 // SPI Data input (RFM12B side)
#define CS 4 // SPI SS (chip select)
#define NIRQ 2 // (PORTD)

/* IO CONTROL */
#define HI(x) PORTB |= (1<<(x))
#define LO(x) PORTB &= ~(1<<(x))


/* LED */
#define LED 4
#define LED_OFF() PORTD &= ~(1<<LED)
#define LED_ON() PORTD |= (1<<LED)



void portInit() {
	HI(CS);
	HI(SDI);
	LO(SCK);
	DDRB = (1<<CS) | (1<<SDI) | (1<<SCK);
	DDRD = (1<<LED);
}

unsigned int writeCmd(unsigned int cmd) {
	unsigned char i;
	unsigned int recv;
	recv = 0;
	LO(SCK);
	LO(CS);

	for(i=0; i<16; i++) {
		if(cmd&0x8000) HI(SDI); else LO(SDI);
		HI(SCK);
		recv<<=1;
		if( PINB&(1<<SDO) ) {
			recv|=0x0001;
		}
		LO(SCK);
		cmd<<=1;
	}
	HI(CS);
	return recv;
}


void rfInit() {
	writeCmd(0x80E7); //EL,EF,868band,12.0pF
	writeCmd(0x8239); //!er,!ebb,ET,ES,EX,!eb,!ew,DC
	writeCmd(0xA640); //frequency select
	writeCmd(0xC647); //4.8kbps
	writeCmd(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
	writeCmd(0xC2AC); //AL,!ml,DIG,DQD4
	writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR
	writeCmd(0xCED4); //SYNC=2DD4 ,AG
	writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
	writeCmd(0x9850); //!mp,90kHz,MAX OUT
	writeCmd(0xCC17); //OB1,ACOB0, LPX,Iddy,CDDIT,CBW0
	writeCmd(0xE000); //NOT USED
	writeCmd(0xC800); //NOT USED
	writeCmd(0xC040); //1.66MHz,2.2V
}


void rfSend(unsigned char data){
	while(PIND&(1<<NIRQ));
	writeCmd(0xB800 + data);
}



int main() {
	volatile unsigned int i,j;
	asm("cli");
	for(i=0;i<1000;i++)for(j=0;j<123;j++);
	portInit();
	rfInit();
	while(1){
		LED_ON();
		writeCmd(0x0000);
		rfSend(0xAA); // PREAMBLE
		rfSend(0xAA);
		rfSend(0xAA);
		rfSend(0x2D); // SYNC
		rfSend(0xD4);
		for(i=0; i<16; i++) {
			rfSend(0x30);
		}
		rfSend(0xAA); // DUMMY BYTES
		rfSend(0xAA);
		rfSend(0xAA);
		LED_OFF();
		for(i=0; i<10000; i++) // some not very
		for(j=0; j<123; j++); // sophisticated delay
	}
}

Continued in Fablab15 part deux…