Initial Commit
This commit is contained in:
commit
d5b282ec58
|
@ -0,0 +1,4 @@
|
|||
# TinyLoRa Case
|
||||
|
||||
A 3D-Printable Case for the TinyLora SMD PCB.
|
||||
OpenSCAD Design and STL for direct 3D-Printing
|
|
@ -0,0 +1,34 @@
|
|||
$fn=100;
|
||||
|
||||
translate([5,43.5,50])rotate(a=[270,0,270]) union() {
|
||||
difference() {
|
||||
minkowski() {
|
||||
cube(size=[36,47,16]);
|
||||
translate([1,1,0]) sphere(2);
|
||||
}
|
||||
translate([1,1,6]) cube(size=[36,47,16]);
|
||||
translate([1,21.5,1]) cube(size=[36,25.5,16]);
|
||||
for(y=[20:+3:40]) {
|
||||
translate([9.5,y,-5]) rotate(a=[-45,0,0]) cube(size=[9,0.9,10]);
|
||||
translate([20,y,-5]) rotate(a=[-45,0,0]) cube(size=[9,0.9,10]);
|
||||
}
|
||||
translate([0.55,-1.5,14.5]) cube(size=[37.1,50,1]);
|
||||
translate([1,-2,15.4]) cube(size=[36,50,1.2]);
|
||||
translate([-4,-4,16.5]) cube(size=[60,60,2]);
|
||||
}
|
||||
translate([14.5,0.1,13.7]) rotate(a=[45,0,0]) cube(size=[9,1,1]);
|
||||
}
|
||||
|
||||
translate([25,0,0]) difference() {
|
||||
union() {
|
||||
translate([0,0,0]) cube(size=[37,49.5,0.8]);
|
||||
translate([0.6,0,0.8]) cube(size=[35.8,49,1.2]);
|
||||
}
|
||||
translate([13.5,0.9,-0.8]) rotate(a=[45,0,0]) cube(size=[10,1.1,1.1]);
|
||||
translate([7,10,-2]) cylinder(r=1.75,h=5);
|
||||
translate([7,10,-0.1]) cylinder(r1=3.5,r2=1.75,h=1.4);
|
||||
translate([29.5,40,-2]) cylinder(r=1.75,h=5);
|
||||
translate([29.5,40,-0.1]) cylinder(r1=3.7,r2=1.75,h=1.4);
|
||||
translate([0,48,-1]) rotate(a=[0,0,60]) cube(size=[2,2,4]);
|
||||
translate([37,48,-1]) rotate(a=[0,0,30]) cube(size=[2,2,4]);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,5 @@
|
|||
.pio
|
||||
.vscode/.browse.c_cpp.db*
|
||||
.vscode/c_cpp_properties.json
|
||||
.vscode/launch.json
|
||||
.vscode/ipch
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||
// for the documentation about the extensions.json format
|
||||
"recommendations": [
|
||||
"platformio.platformio-ide"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"terminal.integrated.env.linux": {
|
||||
"PATH": "/home/seiichiro/.platformio/penv/bin:/home/seiichiro/.platformio/penv:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl",
|
||||
"PLATFORMIO_CALLER": "vscode"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
# TinyLoRa Firmware
|
||||
|
||||
Example Sensor Node Firmware with a BMP/E280 Sensor.
|
||||
Please Change the Values in src/secconfig.h to your Keys from https://console.thethingsnetwork.org. Device has to be set to ABP Mode.
|
|
@ -0,0 +1,157 @@
|
|||
#include <Arduino.h>
|
||||
#include <i2cmaster.h>
|
||||
#include <stdint.h>
|
||||
#include "BME280.h"
|
||||
|
||||
BME280::BME280() {
|
||||
i2c_init();
|
||||
getCalData();
|
||||
}
|
||||
|
||||
void BME280::getCalData() {
|
||||
dig_T1 = read16_LE(0x88);
|
||||
dig_T2 = readS16_LE(0x8A);
|
||||
dig_T3 = readS16_LE(0x8C);
|
||||
|
||||
dig_P1 = read16_LE(0x8E);
|
||||
dig_P2 = readS16_LE(0x90);
|
||||
dig_P3 = readS16_LE(0x92);
|
||||
dig_P4 = readS16_LE(0x94);
|
||||
dig_P5 = readS16_LE(0x96);
|
||||
dig_P6 = readS16_LE(0x98);
|
||||
dig_P7 = readS16_LE(0x9A);
|
||||
dig_P8 = readS16_LE(0x9C);
|
||||
dig_P9 = readS16_LE(0x9E);
|
||||
|
||||
dig_H1 = read8(0xA1);
|
||||
dig_H2 = readS16_LE(0xE1);
|
||||
dig_H3 = read8(0xE3);
|
||||
dig_H4 = (read8(0xE4) << 4) | (read8(0xE5) & 0xF);
|
||||
dig_H5 = (read8(0xE6) << 4) | (read8(0xE5) >> 4);
|
||||
dig_H6 = (int8_t)read8(0xE7);
|
||||
}
|
||||
|
||||
int32_t BME280::compensate_t(int32_t adc_T)
|
||||
{
|
||||
int32_t var1, var2, T;
|
||||
var1 = ((((adc_T>>3) - ((int32_t)dig_T1<<1))) * ((int32_t)dig_T2)) >> 11;
|
||||
var2 = (((((adc_T>>4) - ((int32_t)dig_T1)) * ((adc_T>>4) - ((int32_t)dig_T1))) >> 12) * ((int32_t)dig_T3)) >> 14;
|
||||
t_fine = var1 + var2;
|
||||
T = (t_fine * 5 + 128) >> 8;
|
||||
return T;
|
||||
}
|
||||
|
||||
int32_t BME280::compensate_p(int32_t adc_P)
|
||||
{
|
||||
int32_t var1, var2;
|
||||
uint32_t p;
|
||||
|
||||
var1 = (((int32_t)t_fine)>>1) -(int32_t)64000;
|
||||
var2 = (((var1>>2) * (var1>>2)) >> 11 ) * ((int32_t)dig_P6);
|
||||
var2 = var2 + ((var1*((int32_t)dig_P5))<<1);var2 = (var2>>2)+(((int32_t)dig_P4)<<16);
|
||||
var1 = (((dig_P3 * (((var1>>2) * (var1>>2)) >> 13 )) >> 3) + ((((int32_t)dig_P2) * var1)>>1))>>18;
|
||||
var1 =((((32768+var1))*((int32_t)dig_P1))>>15);
|
||||
if (var1 == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
p = (((uint32_t)(((int32_t)1048576)-adc_P)-(var2>>12)))*3125;
|
||||
if (p < 0x80000000) {
|
||||
p = (p << 1) / ((uint32_t)var1);
|
||||
} else {
|
||||
p = (p / (uint32_t)var1) * 2;
|
||||
}
|
||||
var1 = (((int32_t)dig_P9) * ((int32_t)(((p>>3) * (p>>3))>>13)))>>12;
|
||||
var2 = (((int32_t)(p>>2)) * ((int32_t)dig_P8))>>13;
|
||||
p = (uint32_t)((int32_t)p + ((var1 + var2 + dig_P7) >> 4));
|
||||
return p;
|
||||
}
|
||||
|
||||
int32_t BME280::compensate_h(int32_t adc_H)
|
||||
{
|
||||
int32_t v_x1_u32r;
|
||||
v_x1_u32r=(t_fine-((int32_t)76800));
|
||||
v_x1_u32r=(((((adc_H<<14)-(((int32_t)dig_H4)<<20)-(((int32_t)dig_H5)*v_x1_u32r))+
|
||||
((int32_t)16384))>>15)*(((((((v_x1_u32r*((int32_t)dig_H6))>>10)*
|
||||
(((v_x1_u32r*((int32_t)dig_H3))>>11)+((int32_t)32768)))>>10)+
|
||||
((int32_t)2097152))*((int32_t)dig_H2)+8192)>>14));
|
||||
v_x1_u32r=(v_x1_u32r-(((((v_x1_u32r>>15)*(v_x1_u32r>>15))>>7)*((int32_t)dig_H1))>>4));
|
||||
v_x1_u32r=(v_x1_u32r < 0 ? 0 : v_x1_u32r);
|
||||
v_x1_u32r=(v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r);
|
||||
return (uint32_t)((v_x1_u32r>>12)/10);
|
||||
}
|
||||
|
||||
void BME280::getData(int32_t *t, int32_t *p, int32_t *h) {
|
||||
|
||||
int32_t UP, UT, UH;
|
||||
int32_t rawP, rawT;
|
||||
|
||||
// Trigger Measurement
|
||||
// Set Sensor Config
|
||||
write8(0xF2, 0b00000001); // 1x Oversampling for Humidity
|
||||
write8(0xF4, 0b00100101); // 1x Oversampling for Temperature, Pressure, Forced Mode
|
||||
|
||||
delay(10);
|
||||
|
||||
// Read Pressure
|
||||
rawP = read16(0xF7);
|
||||
rawP <<= 8;
|
||||
rawP |= read8(0xF9);
|
||||
UP = rawP >> 4;
|
||||
|
||||
// Read Temperature
|
||||
rawT = read16(0xFA);
|
||||
rawT <<= 8;
|
||||
rawT |= read8(0xFC);
|
||||
UT = rawT >> 4;
|
||||
|
||||
// Read Humidity
|
||||
UH = read16(0xFD);
|
||||
|
||||
// Compensate Values and Return
|
||||
*t = compensate_t(UT);
|
||||
*p = compensate_p(UP);
|
||||
*h = compensate_h(UH);
|
||||
}
|
||||
|
||||
uint8_t BME280::read8(uint8_t addr) {
|
||||
i2c_start_wait(BME280_I2CADDR_WRITE);
|
||||
i2c_write(addr);
|
||||
i2c_rep_start(BME280_I2CADDR_READ);
|
||||
uint8_t ret = i2c_readNak();
|
||||
i2c_stop();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint16_t BME280::read16(uint8_t addr) {
|
||||
i2c_start_wait(BME280_I2CADDR_WRITE);
|
||||
i2c_write(addr);
|
||||
i2c_rep_start(BME280_I2CADDR_READ);
|
||||
uint16_t ret = i2c_readAck();
|
||||
ret <<= 8;
|
||||
ret |= i2c_readNak();
|
||||
i2c_stop();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint16_t BME280::read16_LE(uint8_t addr) {
|
||||
uint16_t temp = read16(addr);
|
||||
return (temp >> 8) | (temp << 8);
|
||||
}
|
||||
|
||||
int16_t BME280::readS16(uint8_t addr) {
|
||||
return (int16_t)read16(addr);
|
||||
}
|
||||
|
||||
int16_t BME280::readS16_LE(uint8_t addr) {
|
||||
return (int16_t)read16_LE(addr);
|
||||
}
|
||||
|
||||
void BME280::write8(uint8_t addr, uint8_t data) {
|
||||
i2c_start_wait(BME280_I2CADDR_WRITE);
|
||||
i2c_write(addr);
|
||||
i2c_write(data);
|
||||
i2c_stop();
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
#ifndef BME280_H
|
||||
#define BME280_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define BME280_I2CADDR_READ 0xED
|
||||
#define BME280_I2CADDR_WRITE 0xEC
|
||||
|
||||
class BME280
|
||||
{
|
||||
private:
|
||||
// Variables for Calibration Values
|
||||
uint8_t dig_H1, dig_H3;
|
||||
int8_t dig_H6;
|
||||
uint16_t dig_T1, dig_P1;
|
||||
int16_t dig_T2, dig_T3, dig_P2, dig_P3, dig_P4, dig_P5, dig_P6, dig_P7, dig_P8, dig_P9, dig_H2, dig_H4, dig_H5;
|
||||
|
||||
// Helper Variable
|
||||
int32_t t_fine;
|
||||
|
||||
// Functions for Calculation compensated Values
|
||||
int32_t compensate_t(int32_t);
|
||||
int32_t compensate_p(int32_t);
|
||||
int32_t compensate_h(int32_t);
|
||||
|
||||
// Helper Functions for Reading / Writing I2C Data
|
||||
uint8_t read8(uint8_t addr);
|
||||
uint16_t read16(uint8_t addr);
|
||||
uint16_t read16_LE(uint8_t addr);
|
||||
int16_t readS16(uint8_t addr);
|
||||
int16_t readS16_LE(uint8_t addr);
|
||||
void write8(uint8_t addr, uint8_t data);
|
||||
|
||||
public:
|
||||
BME280(void);
|
||||
|
||||
// Get Calibration Data from Sensor
|
||||
void getCalData(void);
|
||||
// Read Pressure From Sensor
|
||||
void getData(int32_t *t, int32_t *p, int32_t *h);
|
||||
|
||||
};
|
||||
#endif
|
|
@ -0,0 +1,689 @@
|
|||
/*
|
||||
LoRaWAN.cpp - Library for LoRaWAN protocol, uses RFM95W module
|
||||
Created by Leo Korbee, March 31, 2018.
|
||||
Released into the public domain.
|
||||
@license Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
|
||||
Thanks to all the folks who contributed on the base of this code.
|
||||
(Gerben den Hartog, et al - Ideetron.nl)
|
||||
*/
|
||||
|
||||
#include "Arduino.h"
|
||||
#include "LoRaWAN.h"
|
||||
|
||||
|
||||
// constructor
|
||||
LoRaWAN::LoRaWAN(RFM95 &rfm95)
|
||||
{
|
||||
_rfm95 = &rfm95;
|
||||
}
|
||||
|
||||
|
||||
void LoRaWAN::setKeys(unsigned char NwkSkey[], unsigned char AppSkey[], unsigned char DevAddr[])
|
||||
{
|
||||
_NwkSkey = NwkSkey;
|
||||
_AppSkey = AppSkey;
|
||||
_DevAddr = DevAddr;
|
||||
}
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Description : Function contstructs a LoRaWAN package and sends it
|
||||
*
|
||||
* Arguments : *Data pointer to the array of data that will be transmitted
|
||||
* Data_Length nuber of bytes to be transmitted
|
||||
* Frame_Counter_Up Frame counter of upstream frames
|
||||
*
|
||||
*****************************************************************************************
|
||||
*/
|
||||
void LoRaWAN::Send_Data(unsigned char *Data, unsigned char Data_Length, unsigned int Frame_Counter_Tx)
|
||||
{
|
||||
//Define variables
|
||||
unsigned char i;
|
||||
|
||||
//Direction of frame is up
|
||||
unsigned char Direction = 0x00;
|
||||
|
||||
unsigned char RFM_Data[64];
|
||||
unsigned char RFM_Package_Length;
|
||||
|
||||
unsigned char MIC[4];
|
||||
|
||||
/*
|
||||
@leo:
|
||||
https://hackmd.io/s/S1kg6Ymo-
|
||||
|
||||
7…5 bits 4…2 bits 1…0 bits
|
||||
MType RFU Major
|
||||
|
||||
MType Description
|
||||
000 (0x00) Join Request
|
||||
001 (0x20) Join Accept
|
||||
010 (0x40) Unconfirmed Data Up
|
||||
011 (0x60) Unconfirmed Data Down
|
||||
100 (0x80) Confirmed Data Up
|
||||
101 (0xA0) Confirmed Data Down
|
||||
110 (0xC0) RFU
|
||||
111 (0xE0) Proprietary
|
||||
*/
|
||||
|
||||
|
||||
// Unconfirmed data up
|
||||
unsigned char Mac_Header = 0x40;
|
||||
|
||||
// Confirmed data up
|
||||
// unsigned char Mac_Header = 0x80;
|
||||
|
||||
unsigned char Frame_Control = 0x00;
|
||||
unsigned char Frame_Port = 0x01;
|
||||
|
||||
//Encrypt the data
|
||||
Encrypt_Payload(Data, Data_Length, Frame_Counter_Tx, Direction);
|
||||
|
||||
|
||||
//Build the Radio Package
|
||||
RFM_Data[0] = Mac_Header;
|
||||
|
||||
RFM_Data[1] = _DevAddr[3];
|
||||
RFM_Data[2] = _DevAddr[2];
|
||||
RFM_Data[3] = _DevAddr[1];
|
||||
RFM_Data[4] = _DevAddr[0];
|
||||
|
||||
RFM_Data[5] = Frame_Control;
|
||||
|
||||
RFM_Data[6] = (Frame_Counter_Tx & 0x00FF);
|
||||
RFM_Data[7] = ((Frame_Counter_Tx >> 8) & 0x00FF);
|
||||
|
||||
RFM_Data[8] = Frame_Port;
|
||||
|
||||
//Set Current package length
|
||||
RFM_Package_Length = 9;
|
||||
|
||||
//Load Data
|
||||
for(i = 0; i < Data_Length; i++)
|
||||
{
|
||||
RFM_Data[RFM_Package_Length + i] = Data[i];
|
||||
}
|
||||
|
||||
//Add data Lenth to package length
|
||||
RFM_Package_Length = RFM_Package_Length + Data_Length;
|
||||
|
||||
//Calculate MIC
|
||||
Calculate_MIC(RFM_Data, MIC, RFM_Package_Length, Frame_Counter_Tx, Direction);
|
||||
|
||||
//Load MIC in package
|
||||
for(i = 0; i < 4; i++)
|
||||
{
|
||||
RFM_Data[i + RFM_Package_Length] = MIC[i];
|
||||
}
|
||||
|
||||
//Add MIC length to RFM package length
|
||||
RFM_Package_Length = RFM_Package_Length + 4;
|
||||
|
||||
//Send Package
|
||||
_rfm95->RFM_Send_Package(RFM_Data, RFM_Package_Length);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Encryption stuff after this line
|
||||
*/
|
||||
void LoRaWAN::Encrypt_Payload(unsigned char *Data, unsigned char Data_Length, unsigned int Frame_Counter, unsigned char Direction)
|
||||
{
|
||||
unsigned char i = 0x00;
|
||||
unsigned char j;
|
||||
unsigned char Number_of_Blocks = 0x00;
|
||||
unsigned char Incomplete_Block_Size = 0x00;
|
||||
|
||||
unsigned char Block_A[16];
|
||||
|
||||
//Calculate number of blocks
|
||||
Number_of_Blocks = Data_Length / 16;
|
||||
Incomplete_Block_Size = Data_Length % 16;
|
||||
if(Incomplete_Block_Size != 0)
|
||||
{
|
||||
Number_of_Blocks++;
|
||||
}
|
||||
|
||||
for(i = 1; i <= Number_of_Blocks; i++)
|
||||
{
|
||||
Block_A[0] = 0x01;
|
||||
Block_A[1] = 0x00;
|
||||
Block_A[2] = 0x00;
|
||||
Block_A[3] = 0x00;
|
||||
Block_A[4] = 0x00;
|
||||
|
||||
Block_A[5] = Direction;
|
||||
|
||||
Block_A[6] = _DevAddr[3];
|
||||
Block_A[7] = _DevAddr[2];
|
||||
Block_A[8] = _DevAddr[1];
|
||||
Block_A[9] = _DevAddr[0];
|
||||
|
||||
Block_A[10] = (Frame_Counter & 0x00FF);
|
||||
Block_A[11] = ((Frame_Counter >> 8) & 0x00FF);
|
||||
|
||||
Block_A[12] = 0x00; //Frame counter upper Bytes
|
||||
Block_A[13] = 0x00;
|
||||
|
||||
Block_A[14] = 0x00;
|
||||
|
||||
Block_A[15] = i;
|
||||
|
||||
//Calculate S
|
||||
AES_Encrypt(Block_A, _AppSkey); //original
|
||||
|
||||
|
||||
//Check for last block
|
||||
if(i != Number_of_Blocks)
|
||||
{
|
||||
for(j = 0; j < 16; j++)
|
||||
{
|
||||
*Data = *Data ^ Block_A[j];
|
||||
Data++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Incomplete_Block_Size == 0)
|
||||
{
|
||||
Incomplete_Block_Size = 16;
|
||||
}
|
||||
for(j = 0; j < Incomplete_Block_Size; j++)
|
||||
{
|
||||
*Data = *Data ^ Block_A[j];
|
||||
Data++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LoRaWAN::Calculate_MIC(unsigned char *Data, unsigned char *Final_MIC, unsigned char Data_Length, unsigned int Frame_Counter, unsigned char Direction)
|
||||
{
|
||||
unsigned char i;
|
||||
unsigned char Block_B[16];
|
||||
|
||||
unsigned char Key_K1[16] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
unsigned char Key_K2[16] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
//unsigned char Data_Copy[16];
|
||||
|
||||
unsigned char Old_Data[16] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
unsigned char New_Data[16] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
|
||||
unsigned char Number_of_Blocks = 0x00;
|
||||
unsigned char Incomplete_Block_Size = 0x00;
|
||||
unsigned char Block_Counter = 0x01;
|
||||
|
||||
//Create Block_B
|
||||
Block_B[0] = 0x49;
|
||||
Block_B[1] = 0x00;
|
||||
Block_B[2] = 0x00;
|
||||
Block_B[3] = 0x00;
|
||||
Block_B[4] = 0x00;
|
||||
|
||||
Block_B[5] = Direction;
|
||||
|
||||
Block_B[6] = _DevAddr[3];
|
||||
Block_B[7] = _DevAddr[2];
|
||||
Block_B[8] = _DevAddr[1];
|
||||
Block_B[9] = _DevAddr[0];
|
||||
|
||||
Block_B[10] = (Frame_Counter & 0x00FF);
|
||||
Block_B[11] = ((Frame_Counter >> 8) & 0x00FF);
|
||||
|
||||
Block_B[12] = 0x00; //Frame counter upper bytes
|
||||
Block_B[13] = 0x00;
|
||||
|
||||
Block_B[14] = 0x00;
|
||||
Block_B[15] = Data_Length;
|
||||
|
||||
//Calculate number of Blocks and blocksize of last block
|
||||
Number_of_Blocks = Data_Length / 16;
|
||||
Incomplete_Block_Size = Data_Length % 16;
|
||||
|
||||
if(Incomplete_Block_Size != 0)
|
||||
{
|
||||
Number_of_Blocks++;
|
||||
}
|
||||
|
||||
Generate_Keys(Key_K1, Key_K2);
|
||||
|
||||
//Preform Calculation on Block B0
|
||||
|
||||
//Preform AES encryption
|
||||
AES_Encrypt(Block_B, _NwkSkey);
|
||||
|
||||
//Copy Block_B to Old_Data
|
||||
for(i = 0; i < 16; i++)
|
||||
{
|
||||
Old_Data[i] = Block_B[i];
|
||||
}
|
||||
|
||||
//Preform full calculating until n-1 messsage blocks
|
||||
while(Block_Counter < Number_of_Blocks)
|
||||
{
|
||||
//Copy data into array
|
||||
for(i = 0; i < 16; i++)
|
||||
{
|
||||
New_Data[i] = *Data;
|
||||
Data++;
|
||||
}
|
||||
|
||||
//Preform XOR with old data
|
||||
XOR(New_Data,Old_Data);
|
||||
|
||||
//Preform AES encryption
|
||||
AES_Encrypt(New_Data, _NwkSkey);
|
||||
|
||||
//Copy New_Data to Old_Data
|
||||
for(i = 0; i < 16; i++)
|
||||
{
|
||||
Old_Data[i] = New_Data[i];
|
||||
}
|
||||
|
||||
//Raise Block counter
|
||||
Block_Counter++;
|
||||
}
|
||||
|
||||
//Perform calculation on last block
|
||||
//Check if Datalength is a multiple of 16
|
||||
if(Incomplete_Block_Size == 0)
|
||||
{
|
||||
//Copy last data into array
|
||||
for(i = 0; i < 16; i++)
|
||||
{
|
||||
New_Data[i] = *Data;
|
||||
Data++;
|
||||
}
|
||||
|
||||
//Preform XOR with Key 1
|
||||
XOR(New_Data,Key_K1);
|
||||
|
||||
//Preform XOR with old data
|
||||
XOR(New_Data,Old_Data);
|
||||
|
||||
//Preform last AES routine
|
||||
// read NwkSkey from PROGMEM
|
||||
AES_Encrypt(New_Data, _NwkSkey);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Copy the remaining data and fill the rest
|
||||
for(i = 0; i < 16; i++)
|
||||
{
|
||||
if(i < Incomplete_Block_Size)
|
||||
{
|
||||
New_Data[i] = *Data;
|
||||
Data++;
|
||||
}
|
||||
if(i == Incomplete_Block_Size)
|
||||
{
|
||||
New_Data[i] = 0x80;
|
||||
}
|
||||
if(i > Incomplete_Block_Size)
|
||||
{
|
||||
New_Data[i] = 0x00;
|
||||
}
|
||||
}
|
||||
|
||||
//Preform XOR with Key 2
|
||||
XOR(New_Data,Key_K2);
|
||||
|
||||
//Preform XOR with Old data
|
||||
XOR(New_Data,Old_Data);
|
||||
|
||||
//Preform last AES routine
|
||||
AES_Encrypt(New_Data, _NwkSkey);
|
||||
}
|
||||
|
||||
Final_MIC[0] = New_Data[0];
|
||||
Final_MIC[1] = New_Data[1];
|
||||
Final_MIC[2] = New_Data[2];
|
||||
Final_MIC[3] = New_Data[3];
|
||||
}
|
||||
|
||||
void LoRaWAN::Generate_Keys(unsigned char *K1, unsigned char *K2)
|
||||
{
|
||||
unsigned char i;
|
||||
unsigned char MSB_Key;
|
||||
|
||||
//Encrypt the zeros in K1 with the NwkSkey
|
||||
AES_Encrypt(K1,_NwkSkey);
|
||||
|
||||
//Create K1
|
||||
//Check if MSB is 1
|
||||
if((K1[0] & 0x80) == 0x80)
|
||||
{
|
||||
MSB_Key = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
MSB_Key = 0;
|
||||
}
|
||||
|
||||
//Shift K1 one bit left
|
||||
Shift_Left(K1);
|
||||
|
||||
//if MSB was 1
|
||||
if(MSB_Key == 1)
|
||||
{
|
||||
K1[15] = K1[15] ^ 0x87;
|
||||
}
|
||||
|
||||
//Copy K1 to K2
|
||||
for( i = 0; i < 16; i++)
|
||||
{
|
||||
K2[i] = K1[i];
|
||||
}
|
||||
|
||||
//Check if MSB is 1
|
||||
if((K2[0] & 0x80) == 0x80)
|
||||
{
|
||||
MSB_Key = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
MSB_Key = 0;
|
||||
}
|
||||
|
||||
//Shift K2 one bit left
|
||||
Shift_Left(K2);
|
||||
|
||||
//Check if MSB was 1
|
||||
if(MSB_Key == 1)
|
||||
{
|
||||
K2[15] = K2[15] ^ 0x87;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LoRaWAN::Shift_Left(unsigned char *Data)
|
||||
{
|
||||
unsigned char i;
|
||||
unsigned char Overflow = 0;
|
||||
//unsigned char High_Byte, Low_Byte;
|
||||
|
||||
for(i = 0; i < 16; i++)
|
||||
{
|
||||
//Check for overflow on next byte except for the last byte
|
||||
if(i < 15)
|
||||
{
|
||||
//Check if upper bit is one
|
||||
if((Data[i+1] & 0x80) == 0x80)
|
||||
{
|
||||
Overflow = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
Overflow = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Overflow = 0;
|
||||
}
|
||||
|
||||
//Shift one left
|
||||
Data[i] = (Data[i] << 1) + Overflow;
|
||||
}
|
||||
}
|
||||
|
||||
void LoRaWAN::XOR(unsigned char *New_Data,unsigned char *Old_Data)
|
||||
{
|
||||
unsigned char i;
|
||||
|
||||
for(i = 0; i < 16; i++)
|
||||
{
|
||||
New_Data[i] = New_Data[i] ^ Old_Data[i];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Title : AES_Encrypt
|
||||
* Description :
|
||||
*****************************************************************************************
|
||||
*/
|
||||
void LoRaWAN::AES_Encrypt(unsigned char *Data, unsigned char *Key)
|
||||
{
|
||||
unsigned char Row, Column, Round = 0;
|
||||
unsigned char Round_Key[16];
|
||||
unsigned char State[4][4];
|
||||
|
||||
// Copy input to State arry
|
||||
for( Column = 0; Column < 4; Column++ )
|
||||
{
|
||||
for( Row = 0; Row < 4; Row++ )
|
||||
{
|
||||
State[Row][Column] = Data[Row + (Column << 2)];
|
||||
}
|
||||
}
|
||||
|
||||
// Copy key to round key
|
||||
memcpy( &Round_Key[0], &Key[0], 16 );
|
||||
|
||||
// Add round key
|
||||
AES_Add_Round_Key( Round_Key, State );
|
||||
|
||||
// Preform 9 full rounds with mixed collums
|
||||
for( Round = 1 ; Round < 10 ; Round++ )
|
||||
{
|
||||
// Perform Byte substitution with S table
|
||||
for( Column = 0 ; Column < 4 ; Column++ )
|
||||
{
|
||||
for( Row = 0 ; Row < 4 ; Row++ )
|
||||
{
|
||||
State[Row][Column] = AES_Sub_Byte( State[Row][Column] );
|
||||
}
|
||||
}
|
||||
|
||||
// Perform Row Shift
|
||||
AES_Shift_Rows(State);
|
||||
|
||||
// Mix Collums
|
||||
AES_Mix_Collums(State);
|
||||
|
||||
// Calculate new round key
|
||||
AES_Calculate_Round_Key(Round, Round_Key);
|
||||
|
||||
// Add the round key to the Round_key
|
||||
AES_Add_Round_Key(Round_Key, State);
|
||||
}
|
||||
|
||||
// Perform Byte substitution with S table whitout mix collums
|
||||
for( Column = 0 ; Column < 4 ; Column++ )
|
||||
{
|
||||
for( Row = 0; Row < 4; Row++ )
|
||||
{
|
||||
State[Row][Column] = AES_Sub_Byte(State[Row][Column]);
|
||||
}
|
||||
}
|
||||
|
||||
// Shift rows
|
||||
AES_Shift_Rows(State);
|
||||
|
||||
// Calculate new round key
|
||||
AES_Calculate_Round_Key( Round, Round_Key );
|
||||
|
||||
// Add round key
|
||||
AES_Add_Round_Key( Round_Key, State );
|
||||
|
||||
// Copy the State into the data array
|
||||
for( Column = 0; Column < 4; Column++ )
|
||||
{
|
||||
for( Row = 0; Row < 4; Row++ )
|
||||
{
|
||||
Data[Row + (Column << 2)] = State[Row][Column];
|
||||
}
|
||||
}
|
||||
} // AES_Encrypt
|
||||
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Title : AES_Add_Round_Key
|
||||
* Description :
|
||||
*****************************************************************************************
|
||||
*/
|
||||
void LoRaWAN::AES_Add_Round_Key(unsigned char *Round_Key, unsigned char (*State)[4])
|
||||
{
|
||||
unsigned char Row, Collum;
|
||||
|
||||
for(Collum = 0; Collum < 4; Collum++)
|
||||
{
|
||||
for(Row = 0; Row < 4; Row++)
|
||||
{
|
||||
State[Row][Collum] ^= Round_Key[Row + (Collum << 2)];
|
||||
}
|
||||
}
|
||||
} // AES_Add_Round_Key
|
||||
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Title : AES_Sub_Byte
|
||||
* Description :
|
||||
*****************************************************************************************
|
||||
*/
|
||||
unsigned char LoRaWAN::AES_Sub_Byte(unsigned char Byte)
|
||||
{
|
||||
// unsigned char S_Row,S_Collum;
|
||||
// unsigned char S_Byte;
|
||||
//
|
||||
// S_Row = ((Byte >> 4) & 0x0F);
|
||||
// S_Collum = ((Byte >> 0) & 0x0F);
|
||||
// S_Byte = S_Table [S_Row][S_Collum];
|
||||
|
||||
//return S_Table [ ((Byte >> 4) & 0x0F) ] [ ((Byte >> 0) & 0x0F) ]; // original
|
||||
return pgm_read_byte(&(S_Table [((Byte >> 4) & 0x0F)] [((Byte >> 0) & 0x0F)]));
|
||||
} // AES_Sub_Byte
|
||||
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Title : AES_Shift_Rows
|
||||
* Description :
|
||||
*****************************************************************************************
|
||||
*/
|
||||
void LoRaWAN::AES_Shift_Rows(unsigned char (*State)[4])
|
||||
{
|
||||
unsigned char Buffer;
|
||||
|
||||
//Store firt byte in buffer
|
||||
Buffer = State[1][0];
|
||||
//Shift all bytes
|
||||
State[1][0] = State[1][1];
|
||||
State[1][1] = State[1][2];
|
||||
State[1][2] = State[1][3];
|
||||
State[1][3] = Buffer;
|
||||
|
||||
Buffer = State[2][0];
|
||||
State[2][0] = State[2][2];
|
||||
State[2][2] = Buffer;
|
||||
Buffer = State[2][1];
|
||||
State[2][1] = State[2][3];
|
||||
State[2][3] = Buffer;
|
||||
|
||||
Buffer = State[3][3];
|
||||
State[3][3] = State[3][2];
|
||||
State[3][2] = State[3][1];
|
||||
State[3][1] = State[3][0];
|
||||
State[3][0] = Buffer;
|
||||
} // AES_Shift_Rows
|
||||
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Title : AES_Mix_Collums
|
||||
* Description :
|
||||
*****************************************************************************************
|
||||
*/
|
||||
void LoRaWAN::AES_Mix_Collums(unsigned char (*State)[4])
|
||||
{
|
||||
unsigned char Row,Collum;
|
||||
unsigned char a[4], b[4];
|
||||
|
||||
|
||||
for(Collum = 0; Collum < 4; Collum++)
|
||||
{
|
||||
for(Row = 0; Row < 4; Row++)
|
||||
{
|
||||
a[Row] = State[Row][Collum];
|
||||
b[Row] = (State[Row][Collum] << 1);
|
||||
|
||||
if((State[Row][Collum] & 0x80) == 0x80)
|
||||
{
|
||||
b[Row] ^= 0x1B;
|
||||
}
|
||||
}
|
||||
|
||||
State[0][Collum] = b[0] ^ a[1] ^ b[1] ^ a[2] ^ a[3];
|
||||
State[1][Collum] = a[0] ^ b[1] ^ a[2] ^ b[2] ^ a[3];
|
||||
State[2][Collum] = a[0] ^ a[1] ^ b[2] ^ a[3] ^ b[3];
|
||||
State[3][Collum] = a[0] ^ b[0] ^ a[1] ^ a[2] ^ b[3];
|
||||
}
|
||||
} // AES_Mix_Collums
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Title : AES_Calculate_Round_Key
|
||||
* Description :
|
||||
*****************************************************************************************
|
||||
*/
|
||||
void LoRaWAN::AES_Calculate_Round_Key(unsigned char Round, unsigned char *Round_Key)
|
||||
{
|
||||
unsigned char i, j, b, Rcon;
|
||||
unsigned char Temp[4];
|
||||
|
||||
|
||||
//Calculate Rcon
|
||||
Rcon = 0x01;
|
||||
while(Round != 1)
|
||||
{
|
||||
b = Rcon & 0x80;
|
||||
Rcon = Rcon << 1;
|
||||
|
||||
if(b == 0x80)
|
||||
{
|
||||
Rcon ^= 0x1b;
|
||||
}
|
||||
Round--;
|
||||
}
|
||||
|
||||
// Calculate first Temp
|
||||
// Copy laste byte from previous key and subsitute the byte, but shift the array contents around by 1.
|
||||
Temp[0] = AES_Sub_Byte( Round_Key[12 + 1] );
|
||||
Temp[1] = AES_Sub_Byte( Round_Key[12 + 2] );
|
||||
Temp[2] = AES_Sub_Byte( Round_Key[12 + 3] );
|
||||
Temp[3] = AES_Sub_Byte( Round_Key[12 + 0] );
|
||||
|
||||
// XOR with Rcon
|
||||
Temp[0] ^= Rcon;
|
||||
|
||||
// Calculate new key
|
||||
for(i = 0; i < 4; i++)
|
||||
{
|
||||
for(j = 0; j < 4; j++)
|
||||
{
|
||||
Round_Key[j + (i << 2)] ^= Temp[j];
|
||||
Temp[j] = Round_Key[j + (i << 2)];
|
||||
}
|
||||
}
|
||||
} // AES_Calculate_Round_Key
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
LoRaWAN.h - Library header file for LoRaWAN protocol, uses RFM95W module
|
||||
Created by Leo Korbee, March 31, 2018.
|
||||
Released into the public domain.
|
||||
@license Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
|
||||
Thanks to all the folks who contributed before me on this code.
|
||||
|
||||
*/
|
||||
|
||||
#include "RFM95.h"
|
||||
#include "Arduino.h"
|
||||
|
||||
#ifndef LoRaWAN_h
|
||||
#define LoRaWAN_h
|
||||
|
||||
|
||||
// for AES encryption
|
||||
static const unsigned char PROGMEM S_Table[16][16] = {
|
||||
{0x63,0x7C,0x77,0x7B,0xF2,0x6B,0x6F,0xC5,0x30,0x01,0x67,0x2B,0xFE,0xD7,0xAB,0x76},
|
||||
{0xCA,0x82,0xC9,0x7D,0xFA,0x59,0x47,0xF0,0xAD,0xD4,0xA2,0xAF,0x9C,0xA4,0x72,0xC0},
|
||||
{0xB7,0xFD,0x93,0x26,0x36,0x3F,0xF7,0xCC,0x34,0xA5,0xE5,0xF1,0x71,0xD8,0x31,0x15},
|
||||
{0x04,0xC7,0x23,0xC3,0x18,0x96,0x05,0x9A,0x07,0x12,0x80,0xE2,0xEB,0x27,0xB2,0x75},
|
||||
{0x09,0x83,0x2C,0x1A,0x1B,0x6E,0x5A,0xA0,0x52,0x3B,0xD6,0xB3,0x29,0xE3,0x2F,0x84},
|
||||
{0x53,0xD1,0x00,0xED,0x20,0xFC,0xB1,0x5B,0x6A,0xCB,0xBE,0x39,0x4A,0x4C,0x58,0xCF},
|
||||
{0xD0,0xEF,0xAA,0xFB,0x43,0x4D,0x33,0x85,0x45,0xF9,0x02,0x7F,0x50,0x3C,0x9F,0xA8},
|
||||
{0x51,0xA3,0x40,0x8F,0x92,0x9D,0x38,0xF5,0xBC,0xB6,0xDA,0x21,0x10,0xFF,0xF3,0xD2},
|
||||
{0xCD,0x0C,0x13,0xEC,0x5F,0x97,0x44,0x17,0xC4,0xA7,0x7E,0x3D,0x64,0x5D,0x19,0x73},
|
||||
{0x60,0x81,0x4F,0xDC,0x22,0x2A,0x90,0x88,0x46,0xEE,0xB8,0x14,0xDE,0x5E,0x0B,0xDB},
|
||||
{0xE0,0x32,0x3A,0x0A,0x49,0x06,0x24,0x5C,0xC2,0xD3,0xAC,0x62,0x91,0x95,0xE4,0x79},
|
||||
{0xE7,0xC8,0x37,0x6D,0x8D,0xD5,0x4E,0xA9,0x6C,0x56,0xF4,0xEA,0x65,0x7A,0xAE,0x08},
|
||||
{0xBA,0x78,0x25,0x2E,0x1C,0xA6,0xB4,0xC6,0xE8,0xDD,0x74,0x1F,0x4B,0xBD,0x8B,0x8A},
|
||||
{0x70,0x3E,0xB5,0x66,0x48,0x03,0xF6,0x0E,0x61,0x35,0x57,0xB9,0x86,0xC1,0x1D,0x9E},
|
||||
{0xE1,0xF8,0x98,0x11,0x69,0xD9,0x8E,0x94,0x9B,0x1E,0x87,0xE9,0xCE,0x55,0x28,0xDF},
|
||||
{0x8C,0xA1,0x89,0x0D,0xBF,0xE6,0x42,0x68,0x41,0x99,0x2D,0x0F,0xB0,0x54,0xBB,0x16}
|
||||
};
|
||||
|
||||
|
||||
class LoRaWAN
|
||||
{
|
||||
public:
|
||||
LoRaWAN(RFM95 &rfm95);
|
||||
void setKeys(unsigned char NwkSkey[], unsigned char AppSkey[], unsigned char DevAddr[]);
|
||||
void Send_Data(unsigned char *Data, unsigned char Data_Length, unsigned int Frame_Counter_Tx);
|
||||
|
||||
private:
|
||||
RFM95 *_rfm95;
|
||||
// remember arrays are pointers!
|
||||
unsigned char *_NwkSkey;
|
||||
unsigned char *_AppSkey;
|
||||
unsigned char *_DevAddr;
|
||||
|
||||
void RFM_Send_Package(unsigned char *RFM_Tx_Package, unsigned char Package_Length);
|
||||
// security stuff:
|
||||
void Encrypt_Payload(unsigned char *Data, unsigned char Data_Length, unsigned int Frame_Counter, unsigned char Direction);
|
||||
void Calculate_MIC(unsigned char *Data, unsigned char *Final_MIC, unsigned char Data_Length, unsigned int Frame_Counter, unsigned char Direction);
|
||||
void Generate_Keys(unsigned char *K1, unsigned char *K2);
|
||||
void Shift_Left(unsigned char *Data);
|
||||
void XOR(unsigned char *New_Data,unsigned char *Old_Data);
|
||||
void AES_Encrypt(unsigned char *Data, unsigned char *Key);
|
||||
void AES_Add_Round_Key(unsigned char *Round_Key, unsigned char (*State)[4]);
|
||||
unsigned char AES_Sub_Byte(unsigned char Byte);
|
||||
void AES_Shift_Rows(unsigned char (*State)[4]);
|
||||
void AES_Mix_Collums(unsigned char (*State)[4]);
|
||||
void AES_Calculate_Round_Key(unsigned char Round, unsigned char *Round_Key);
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -0,0 +1,281 @@
|
|||
/*
|
||||
RFM95.cpp - Library for RFM95 LoRa module.
|
||||
Created by Leo Korbee, March 31, 2018.
|
||||
Released into the public domain.
|
||||
@license Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
|
||||
Thanks to all the folks who contributed on the base of this code.
|
||||
(Gerben den Hartog, et al - Ideetron.nl)
|
||||
*/
|
||||
|
||||
#include "Arduino.h"
|
||||
#include "RFM95.h"
|
||||
#include <tinySPI.h>
|
||||
|
||||
// constructor
|
||||
RFM95::RFM95(int DIO0, int NSS)
|
||||
{
|
||||
_DIO0 = DIO0;
|
||||
_NSS = NSS;
|
||||
// init tinySPI
|
||||
SPI.setDataMode(SPI_MODE0);
|
||||
SPI.begin();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Description: Function used to initialize the RFM module on startup
|
||||
*****************************************************************************************
|
||||
*/
|
||||
void RFM95::init()
|
||||
{
|
||||
// set pinmodes input/output
|
||||
pinMode(_NSS, OUTPUT);
|
||||
pinMode(_DIO0, INPUT);
|
||||
|
||||
// NSS for starting and stopping communication with the RFM95 module
|
||||
digitalWrite(_NSS, HIGH);
|
||||
|
||||
//Switch RFM to sleep
|
||||
RFM_Write(0x01,0x00);
|
||||
|
||||
//Set RFM in LoRa mode
|
||||
RFM_Write(0x01,0x80);
|
||||
|
||||
//Set RFM in Standby mode wait on mode ready
|
||||
RFM_Write(0x01,0x81);
|
||||
/*
|
||||
while (digitalRead(DIO5) == LOW)
|
||||
{
|
||||
}
|
||||
*/
|
||||
delay(10);
|
||||
|
||||
//Set carrair frequency
|
||||
// 868.100 MHz / 61.035 Hz = 14222987 = 0xD9068B
|
||||
RFM_Write(0x06,0xD9);
|
||||
RFM_Write(0x07,0x06);
|
||||
RFM_Write(0x08,0x8B);
|
||||
|
||||
//PA pin (maximal power)
|
||||
RFM_Write(0x09,0xFF);
|
||||
|
||||
//BW = 125 kHz, Coding rate 4/5, Explicit header mode
|
||||
RFM_Write(0x1D,0x72);
|
||||
|
||||
//Spreading factor 7, PayloadCRC On
|
||||
RFM_Write(0x1E,0xB4);
|
||||
|
||||
//Rx Timeout set to 37 symbols
|
||||
RFM_Write(0x1F,0x25);
|
||||
|
||||
//Preamble length set to 8 symbols
|
||||
//0x0008 + 4 = 12
|
||||
RFM_Write(0x20,0x00);
|
||||
RFM_Write(0x21,0x08);
|
||||
|
||||
//Low datarate optimization off AGC auto on
|
||||
RFM_Write(0x26,0x0C);
|
||||
|
||||
//Set LoRa sync word
|
||||
RFM_Write(0x39,0x34);
|
||||
|
||||
//Set IQ to normal values
|
||||
RFM_Write(0x33,0x27);
|
||||
RFM_Write(0x3B,0x1D);
|
||||
|
||||
//Set FIFO pointers
|
||||
//TX base adress
|
||||
RFM_Write(0x0E,0x80);
|
||||
//Rx base adress
|
||||
RFM_Write(0x0F,0x00);
|
||||
|
||||
//Switch RFM to sleep
|
||||
RFM_Write(0x01,0x00);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Description : Funtion that writes a register from the RFM
|
||||
*
|
||||
* Arguments : RFM_Address Address of register to be written
|
||||
* RFM_Data Data to be written
|
||||
*****************************************************************************************
|
||||
*/
|
||||
|
||||
void RFM95::RFM_Write(unsigned char RFM_Address, unsigned char RFM_Data)
|
||||
{
|
||||
//Set NSS pin Low to start communication
|
||||
digitalWrite(_NSS,LOW);
|
||||
|
||||
//Send Addres with MSB 1 to make it a write command
|
||||
SPI.transfer(RFM_Address | 0x80);
|
||||
//Send Data
|
||||
SPI.transfer(RFM_Data);
|
||||
|
||||
//Set NSS pin High to end communication
|
||||
digitalWrite(_NSS,HIGH);
|
||||
}
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Description : Funtion that reads a register from the RFM and returns the value
|
||||
*
|
||||
* Arguments : RFM_Address Address of register to be read
|
||||
*
|
||||
* Returns : Value of the register
|
||||
*****************************************************************************************
|
||||
*/
|
||||
|
||||
unsigned char RFM95::RFM_Read(unsigned char RFM_Address)
|
||||
{
|
||||
unsigned char RFM_Data;
|
||||
|
||||
//Set NSS pin low to start SPI communication
|
||||
digitalWrite(_NSS,LOW);
|
||||
|
||||
//Send Address
|
||||
SPI.transfer(RFM_Address);
|
||||
//Send 0x00 to be able to receive the answer from the RFM
|
||||
RFM_Data = SPI.transfer(0x00);
|
||||
|
||||
//Set NSS high to end communication
|
||||
digitalWrite(_NSS,HIGH);
|
||||
|
||||
//Return received data
|
||||
return RFM_Data;
|
||||
}
|
||||
|
||||
/*
|
||||
*****************************************************************************************
|
||||
* Description : Function for sending a package with the RFM
|
||||
*
|
||||
* Arguments : *RFM_Tx_Package Pointer to arry with data to be send
|
||||
* Package_Length Length of the package to send
|
||||
*****************************************************************************************
|
||||
*/
|
||||
|
||||
void RFM95::RFM_Send_Package(unsigned char *RFM_Tx_Package, unsigned char Package_Length)
|
||||
{
|
||||
unsigned char i;
|
||||
// unsigned char RFM_Tx_Location = 0x00;
|
||||
|
||||
//Set RFM in Standby mode wait on mode ready
|
||||
|
||||
RFM_Write(0x01,0x81);
|
||||
/*
|
||||
while (digitalRead(DIO5) == LOW)
|
||||
{
|
||||
}
|
||||
*/
|
||||
delay(10);
|
||||
|
||||
//Switch DIO0 to TxDone
|
||||
//RFM_Write(0x40,0x40);
|
||||
//Set carrier frequency
|
||||
|
||||
/*
|
||||
fixed frequency
|
||||
// 868.100 MHz / 61.035 Hz = 14222987 = 0xD9068B
|
||||
_rfm95.RFM_Write(0x06,0xD9);
|
||||
_rfm95.RFM_Write(0x07,0x06);
|
||||
_rfm95.RFM_Write(0x08,0x8B);
|
||||
*/
|
||||
|
||||
// TCNT0 is timer0 continous timer, kind of random selection of frequency
|
||||
|
||||
// EU863-870 specifications
|
||||
switch (TCNT0 % 8)
|
||||
{
|
||||
case 0x00: //Channel 0 868.100 MHz / 61.035 Hz = 14222987 = 0xD9068B
|
||||
RFM_Write(0x06,0xD9);
|
||||
RFM_Write(0x07,0x06);
|
||||
RFM_Write(0x08,0x8B);
|
||||
break;
|
||||
case 0x01: //Channel 1 868.300 MHz / 61.035 Hz = 14226264 = 0xD91358
|
||||
RFM_Write(0x06,0xD9);
|
||||
RFM_Write(0x07,0x13);
|
||||
RFM_Write(0x08,0x58);
|
||||
break;
|
||||
case 0x02: //Channel 2 868.500 MHz / 61.035 Hz = 14229540 = 0xD92024
|
||||
RFM_Write(0x06,0xD9);
|
||||
RFM_Write(0x07,0x20);
|
||||
RFM_Write(0x08,0x24);
|
||||
break;
|
||||
// added five more channels
|
||||
case 0x03: // Channel 3 867.100 MHz / 61.035 Hz = 14206603 = 0xD8C68B
|
||||
RFM_Write(0x06,0xD8);
|
||||
RFM_Write(0x07,0xC6);
|
||||
RFM_Write(0x08,0x8B);
|
||||
break;
|
||||
case 0x04: // Channel 4 867.300 MHz / 61.035 Hz = 14209880 = 0xD8D358
|
||||
RFM_Write(0x06,0xD8);
|
||||
RFM_Write(0x07,0xD3);
|
||||
RFM_Write(0x08,0x58);
|
||||
break;
|
||||
case 0x05: // Channel 5 867.500 MHz / 61.035 Hz = 14213156 = 0xD8E024
|
||||
RFM_Write(0x06,0xD8);
|
||||
RFM_Write(0x07,0xE0);
|
||||
RFM_Write(0x08,0x24);
|
||||
break;
|
||||
case 0x06: // Channel 6 867.700 MHz / 61.035 Hz = 14216433 = 0xD8ECF1
|
||||
RFM_Write(0x06,0xD8);
|
||||
RFM_Write(0x07,0xEC);
|
||||
RFM_Write(0x08,0xF1);
|
||||
break;
|
||||
case 0x07: // Channel 7 867.900 MHz / 61.035 Hz = 14219710 = 0xD8F9BE
|
||||
RFM_Write(0x06,0xD8);
|
||||
RFM_Write(0x07,0xF9);
|
||||
RFM_Write(0x08,0xBE);
|
||||
break;
|
||||
// FSK 868.800 Mhz => not used in this config
|
||||
// 869.525 - SF9BW125 (RX2 downlink only) for package received
|
||||
|
||||
}
|
||||
|
||||
|
||||
//SF7 BW 125 kHz
|
||||
RFM_Write(0x1E,0x74); //SF7 CRC On
|
||||
RFM_Write(0x1D,0x72); //125 kHz 4/5 coding rate explicit header mode
|
||||
RFM_Write(0x26,0x04); //Low datarate optimization off AGC auto on
|
||||
|
||||
//Set IQ to normal values
|
||||
RFM_Write(0x33,0x27);
|
||||
RFM_Write(0x3B,0x1D);
|
||||
|
||||
//Set payload length to the right length
|
||||
RFM_Write(0x22,Package_Length);
|
||||
|
||||
//Get location of Tx part of FiFo
|
||||
//RFM_Tx_Location = RFM_Read(0x0E);
|
||||
|
||||
//Set SPI pointer to start of Tx part in FiFo
|
||||
//RFM_Write(0x0D,RFM_Tx_Location);
|
||||
RFM_Write(0x0D,0x80); // hardcoded fifo location according RFM95 specs
|
||||
|
||||
//Write Payload to FiFo
|
||||
for (i = 0;i < Package_Length; i++)
|
||||
{
|
||||
RFM_Write(0x00,*RFM_Tx_Package);
|
||||
RFM_Tx_Package++;
|
||||
}
|
||||
|
||||
//Switch RFM to Tx
|
||||
RFM_Write(0x01,0x83);
|
||||
|
||||
//Wait for TxDone
|
||||
//while( digitalRead(_DIO0) == LOW )
|
||||
//{
|
||||
//}
|
||||
|
||||
while((RFM_Read(0x12) & 0x08) != 0x08)
|
||||
{
|
||||
}
|
||||
|
||||
//Clear interrupt
|
||||
RFM_Write(0x12,0x08);
|
||||
|
||||
//Switch RFM to sleep
|
||||
RFM_Write(0x01,0x00);
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
RFM95.h - Library header file for RFM95 LoRa module.
|
||||
Created by Leo Korbee, March 31, 2018.
|
||||
Released into the public domain.
|
||||
@license Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
|
||||
Thanks to all the folks who contributed beforme me on this code.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef RFM95_h
|
||||
#define RMF95_h
|
||||
|
||||
#include "Arduino.h"
|
||||
|
||||
class RFM95
|
||||
{
|
||||
public:
|
||||
RFM95(int DIO0, int NSS);
|
||||
void init();
|
||||
void RFM_Write(unsigned char RFM_Address, unsigned char RFM_Data);
|
||||
unsigned char RFM_Read(unsigned char RFM_Address);
|
||||
void RFM_Send_Package(unsigned char *RFM_Tx_Package, unsigned char Package_Length);
|
||||
private:
|
||||
int _DIO0;
|
||||
int _NSS;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -0,0 +1,306 @@
|
|||
;*************************************************************************
|
||||
; Title : I2C (Single) Master Implementation
|
||||
; Author: Peter Fleury <pfleury@gmx.ch>
|
||||
; based on Atmel Appl. Note AVR300
|
||||
; File: $Id: i2cmaster.S,v 1.13 2015/09/16 11:21:00 peter Exp $
|
||||
; Software: AVR-GCC 4.x
|
||||
; Target: any AVR device
|
||||
;
|
||||
; DESCRIPTION
|
||||
; Basic routines for communicating with I2C slave devices. This
|
||||
; "single" master implementation is limited to one bus master on the
|
||||
; I2C bus.
|
||||
;
|
||||
; Based on the Atmel Application Note AVR300, corrected and adapted
|
||||
; to GNU assembler and AVR-GCC C call interface
|
||||
; Replaced the incorrect quarter period delays found in AVR300 with
|
||||
; half period delays.
|
||||
;
|
||||
; USAGE
|
||||
; These routines can be called from C, refere to file i2cmaster.h.
|
||||
; See example test_i2cmaster.c
|
||||
; Adapt the SCL and SDA port and pin definitions and eventually
|
||||
; the delay routine to your target !
|
||||
; Use 4.7k pull-up resistor on the SDA and SCL pin.
|
||||
;
|
||||
; NOTES
|
||||
; The I2C routines can be called either from non-interrupt or
|
||||
; interrupt routines, not both.
|
||||
;
|
||||
;*************************************************************************
|
||||
|
||||
|
||||
#include <avr/io.h>
|
||||
|
||||
#undef SCL_PORT
|
||||
#undef SCL_DDR
|
||||
|
||||
|
||||
;******----- Adapt these SCA and SCL port and pin definition to your target !!
|
||||
;
|
||||
#define SDA 1 // SDA Port A, Pin 1
|
||||
#define SCL 0 // SCL Port A, Pin 2
|
||||
#define SDA_PORT PORTA // SDA Port A
|
||||
#define SCL_PORT PORTA // SCL Port A
|
||||
|
||||
;******----------------------------------------------------------------------
|
||||
|
||||
|
||||
;-- map the IO register back into the IO address space
|
||||
#define SDA_DDR (_SFR_IO_ADDR(SDA_PORT) - 1)
|
||||
#define SCL_DDR (_SFR_IO_ADDR(SCL_PORT) - 1)
|
||||
#define SDA_OUT _SFR_IO_ADDR(SDA_PORT)
|
||||
#define SCL_OUT _SFR_IO_ADDR(SCL_PORT)
|
||||
#define SDA_IN (_SFR_IO_ADDR(SDA_PORT) - 2)
|
||||
#define SCL_IN (_SFR_IO_ADDR(SCL_PORT) - 2)
|
||||
|
||||
|
||||
#ifndef __tmp_reg__
|
||||
#define __tmp_reg__ 0
|
||||
#endif
|
||||
|
||||
|
||||
.section .text
|
||||
|
||||
;*************************************************************************
|
||||
; delay half period
|
||||
; For I2C in normal mode (100kHz), use T/2 > 5us
|
||||
; For I2C in fast mode (400kHz), use T/2 > 1.25us
|
||||
;*************************************************************************
|
||||
.stabs "",100,0,0,i2c_delay_T2
|
||||
.stabs "i2cmaster.S",100,0,0,i2c_delay_T2
|
||||
.func i2c_delay_T2 ; delay 5.0 microsec with 8 Mhz crystal
|
||||
i2c_delay_T2:
|
||||
rcall i2c_delay_20cycles
|
||||
rjmp i2c_delay_20cycles
|
||||
.endfunc ; total 40 cyles = 5.0 microsec with 8 Mhz crystal
|
||||
|
||||
.func i2c_delay_20cycles ; 4 cycles
|
||||
i2c_delay_20cycles:
|
||||
rjmp 1f ; 2 "
|
||||
1: rjmp 2f ; 2 "
|
||||
2: rjmp 3f ; 2 "
|
||||
3: rjmp 4f ; 2 "
|
||||
4: rjmp 5f ; 2 "
|
||||
5: rjmp 6f ; 2 "
|
||||
6: nop ; 1 "
|
||||
ret ; 3 "
|
||||
.endfunc ; total 20 cyles
|
||||
|
||||
;*************************************************************************
|
||||
; Initialization of the I2C bus interface. Need to be called only once
|
||||
;
|
||||
; extern void i2c_init(void)
|
||||
;*************************************************************************
|
||||
.global i2c_init
|
||||
.func i2c_init
|
||||
i2c_init:
|
||||
cbi SDA_DDR,SDA ;release SDA
|
||||
cbi SCL_DDR,SCL ;release SCL
|
||||
cbi SDA_OUT,SDA
|
||||
cbi SCL_OUT,SCL
|
||||
ret
|
||||
.endfunc
|
||||
|
||||
|
||||
;*************************************************************************
|
||||
; Issues a start condition and sends address and transfer direction.
|
||||
; return 0 = device accessible, 1= failed to access device
|
||||
;
|
||||
; extern unsigned char i2c_start(unsigned char addr);
|
||||
; addr = r24, return = r25(=0):r24
|
||||
;*************************************************************************
|
||||
|
||||
.global i2c_start
|
||||
.func i2c_start
|
||||
i2c_start:
|
||||
sbi SDA_DDR,SDA ;force SDA low
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
|
||||
rcall i2c_write ;write address
|
||||
ret
|
||||
.endfunc
|
||||
|
||||
|
||||
;*************************************************************************
|
||||
; Issues a repeated start condition and sends address and transfer direction.
|
||||
; return 0 = device accessible, 1= failed to access device
|
||||
;
|
||||
; extern unsigned char i2c_rep_start(unsigned char addr);
|
||||
; addr = r24, return = r25(=0):r24
|
||||
;*************************************************************************
|
||||
|
||||
.global i2c_rep_start
|
||||
.func i2c_rep_start
|
||||
i2c_rep_start:
|
||||
sbi SCL_DDR,SCL ;force SCL low
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
cbi SDA_DDR,SDA ;release SDA
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
cbi SCL_DDR,SCL ;release SCL
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
sbi SDA_DDR,SDA ;force SDA low
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
|
||||
rcall i2c_write ;write address
|
||||
ret
|
||||
.endfunc
|
||||
|
||||
|
||||
;*************************************************************************
|
||||
; Issues a start condition and sends address and transfer direction.
|
||||
; If device is busy, use ack polling to wait until device is ready
|
||||
;
|
||||
; extern void i2c_start_wait(unsigned char addr);
|
||||
; addr = r24
|
||||
;*************************************************************************
|
||||
|
||||
.global i2c_start_wait
|
||||
.func i2c_start_wait
|
||||
i2c_start_wait:
|
||||
mov __tmp_reg__,r24
|
||||
i2c_start_wait1:
|
||||
sbi SDA_DDR,SDA ;force SDA low
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
mov r24,__tmp_reg__
|
||||
rcall i2c_write ;write address
|
||||
tst r24 ;if device not busy -> done
|
||||
breq i2c_start_wait_done
|
||||
rcall i2c_stop ;terminate write operation
|
||||
rjmp i2c_start_wait1 ;device busy, poll ack again
|
||||
i2c_start_wait_done:
|
||||
ret
|
||||
.endfunc
|
||||
|
||||
|
||||
;*************************************************************************
|
||||
; Terminates the data transfer and releases the I2C bus
|
||||
;
|
||||
; extern void i2c_stop(void)
|
||||
;*************************************************************************
|
||||
|
||||
.global i2c_stop
|
||||
.func i2c_stop
|
||||
i2c_stop:
|
||||
sbi SCL_DDR,SCL ;force SCL low
|
||||
sbi SDA_DDR,SDA ;force SDA low
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
cbi SCL_DDR,SCL ;release SCL
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
cbi SDA_DDR,SDA ;release SDA
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
ret
|
||||
.endfunc
|
||||
|
||||
|
||||
;*************************************************************************
|
||||
; Send one byte to I2C device
|
||||
; return 0 = write successful, 1 = write failed
|
||||
;
|
||||
; extern unsigned char i2c_write( unsigned char data );
|
||||
; data = r24, return = r25(=0):r24
|
||||
;*************************************************************************
|
||||
.global i2c_write
|
||||
.func i2c_write
|
||||
i2c_write:
|
||||
sec ;set carry flag
|
||||
rol r24 ;shift in carry and out bit one
|
||||
rjmp i2c_write_first
|
||||
i2c_write_bit:
|
||||
lsl r24 ;if transmit register empty
|
||||
i2c_write_first:
|
||||
breq i2c_get_ack
|
||||
sbi SCL_DDR,SCL ;force SCL low
|
||||
brcc i2c_write_low
|
||||
nop
|
||||
cbi SDA_DDR,SDA ;release SDA
|
||||
rjmp i2c_write_high
|
||||
i2c_write_low:
|
||||
sbi SDA_DDR,SDA ;force SDA low
|
||||
rjmp i2c_write_high
|
||||
i2c_write_high:
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
cbi SCL_DDR,SCL ;release SCL
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
rjmp i2c_write_bit
|
||||
|
||||
i2c_get_ack:
|
||||
sbi SCL_DDR,SCL ;force SCL low
|
||||
cbi SDA_DDR,SDA ;release SDA
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
cbi SCL_DDR,SCL ;release SCL
|
||||
i2c_ack_wait:
|
||||
sbis SCL_IN,SCL ;wait SCL high (in case wait states are inserted)
|
||||
rjmp i2c_ack_wait
|
||||
|
||||
clr r24 ;return 0
|
||||
sbic SDA_IN,SDA ;if SDA high -> return 1
|
||||
ldi r24,1
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
clr r25
|
||||
ret
|
||||
.endfunc
|
||||
|
||||
|
||||
|
||||
;*************************************************************************
|
||||
; read one byte from the I2C device, send ack or nak to device
|
||||
; (ack=1, send ack, request more data from device
|
||||
; ack=0, send nak, read is followed by a stop condition)
|
||||
;
|
||||
; extern unsigned char i2c_read(unsigned char ack);
|
||||
; ack = r24, return = r25(=0):r24
|
||||
; extern unsigned char i2c_readAck(void);
|
||||
; extern unsigned char i2c_readNak(void);
|
||||
; return = r25(=0):r24
|
||||
;*************************************************************************
|
||||
.global i2c_readAck
|
||||
.global i2c_readNak
|
||||
.global i2c_read
|
||||
.func i2c_read
|
||||
i2c_readNak:
|
||||
clr r24
|
||||
rjmp i2c_read
|
||||
i2c_readAck:
|
||||
ldi r24,0x01
|
||||
i2c_read:
|
||||
ldi r23,0x01 ;data = 0x01
|
||||
i2c_read_bit:
|
||||
sbi SCL_DDR,SCL ;force SCL low
|
||||
cbi SDA_DDR,SDA ;release SDA (from previous ACK)
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
|
||||
cbi SCL_DDR,SCL ;release SCL
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
|
||||
i2c_read_stretch:
|
||||
sbis SCL_IN, SCL ;loop until SCL is high (allow slave to stretch SCL)
|
||||
rjmp i2c_read_stretch
|
||||
|
||||
clc ;clear carry flag
|
||||
sbic SDA_IN,SDA ;if SDA is high
|
||||
sec ; set carry flag
|
||||
|
||||
rol r23 ;store bit
|
||||
brcc i2c_read_bit ;while receive register not full
|
||||
|
||||
i2c_put_ack:
|
||||
sbi SCL_DDR,SCL ;force SCL low
|
||||
cpi r24,1
|
||||
breq i2c_put_ack_low ;if (ack=0)
|
||||
cbi SDA_DDR,SDA ; release SDA
|
||||
rjmp i2c_put_ack_high
|
||||
i2c_put_ack_low: ;else
|
||||
sbi SDA_DDR,SDA ; force SDA low
|
||||
i2c_put_ack_high:
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
cbi SCL_DDR,SCL ;release SCL
|
||||
i2c_put_ack_wait:
|
||||
sbis SCL_IN,SCL ;wait SCL high
|
||||
rjmp i2c_put_ack_wait
|
||||
rcall i2c_delay_T2 ;delay T/2
|
||||
mov r24,r23
|
||||
clr r25
|
||||
ret
|
||||
.endfunc
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
#ifndef _I2CMASTER_H
|
||||
#define _I2CMASTER_H
|
||||
/*************************************************************************
|
||||
* Title: C include file for the I2C master interface
|
||||
* (i2cmaster.S or twimaster.c)
|
||||
* Author: Peter Fleury <pfleury@gmx.ch>
|
||||
* File: $Id: i2cmaster.h,v 1.12 2015/09/16 09:27:58 peter Exp $
|
||||
* Software: AVR-GCC 4.x
|
||||
* Target: any AVR device
|
||||
* Usage: see Doxygen manual
|
||||
**************************************************************************/
|
||||
|
||||
/**
|
||||
@file
|
||||
@defgroup pfleury_ic2master I2C Master library
|
||||
@code #include <i2cmaster.h> @endcode
|
||||
|
||||
@brief I2C (TWI) Master Software Library
|
||||
|
||||
Basic routines for communicating with I2C slave devices. This single master
|
||||
implementation is limited to one bus master on the I2C bus.
|
||||
|
||||
This I2c library is implemented as a compact assembler software implementation of the I2C protocol
|
||||
which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c).
|
||||
Since the API for these two implementations is exactly the same, an application can be linked either against the
|
||||
software I2C implementation or the hardware I2C implementation.
|
||||
|
||||
Use 4.7k pull-up resistor on the SDA and SCL pin.
|
||||
|
||||
Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module
|
||||
i2cmaster.S to your target when using the software I2C implementation !
|
||||
|
||||
Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion.
|
||||
|
||||
@note
|
||||
The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted
|
||||
to GNU assembler and AVR-GCC C call interface.
|
||||
Replaced the incorrect quarter period delays found in AVR300 with
|
||||
half period delays.
|
||||
|
||||
@author Peter Fleury pfleury@gmx.ch http://tinyurl.com/peterfleury
|
||||
@copyright (C) 2015 Peter Fleury, GNU General Public License Version 3
|
||||
|
||||
@par API Usage Example
|
||||
The following code shows typical usage of this library, see example test_i2cmaster.c
|
||||
|
||||
@code
|
||||
|
||||
#include <i2cmaster.h>
|
||||
|
||||
|
||||
#define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned char ret;
|
||||
|
||||
i2c_init(); // initialize I2C library
|
||||
|
||||
// write 0x75 to EEPROM address 5 (Byte Write)
|
||||
i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode
|
||||
i2c_write(0x05); // write address = 5
|
||||
i2c_write(0x75); // write value 0x75 to EEPROM
|
||||
i2c_stop(); // set stop conditon = release bus
|
||||
|
||||
|
||||
// read previously written value back from EEPROM address 5
|
||||
i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode
|
||||
|
||||
i2c_write(0x05); // write address = 5
|
||||
i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode
|
||||
|
||||
ret = i2c_readNak(); // read one byte from EEPROM
|
||||
i2c_stop();
|
||||
|
||||
for(;;);
|
||||
}
|
||||
@endcode
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/**@{*/
|
||||
|
||||
#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
|
||||
#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
|
||||
#endif
|
||||
|
||||
#include <avr/io.h>
|
||||
|
||||
/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
|
||||
#define I2C_READ 1
|
||||
|
||||
/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
|
||||
#define I2C_WRITE 0
|
||||
|
||||
|
||||
/**
|
||||
@brief initialize the I2C master interace. Need to be called only once
|
||||
@return none
|
||||
*/
|
||||
extern "C" void i2c_init(void);
|
||||
|
||||
|
||||
/**
|
||||
@brief Terminates the data transfer and releases the I2C bus
|
||||
@return none
|
||||
*/
|
||||
extern "C" void i2c_stop(void);
|
||||
|
||||
|
||||
/**
|
||||
@brief Issues a start condition and sends address and transfer direction
|
||||
|
||||
@param addr address and transfer direction of I2C device
|
||||
@retval 0 device accessible
|
||||
@retval 1 failed to access device
|
||||
*/
|
||||
extern "C" unsigned char i2c_start(unsigned char addr);
|
||||
|
||||
|
||||
/**
|
||||
@brief Issues a repeated start condition and sends address and transfer direction
|
||||
|
||||
@param addr address and transfer direction of I2C device
|
||||
@retval 0 device accessible
|
||||
@retval 1 failed to access device
|
||||
*/
|
||||
extern "C" unsigned char i2c_rep_start(unsigned char addr);
|
||||
|
||||
|
||||
/**
|
||||
@brief Issues a start condition and sends address and transfer direction
|
||||
|
||||
If device is busy, use ack polling to wait until device ready
|
||||
@param addr address and transfer direction of I2C device
|
||||
@return none
|
||||
*/
|
||||
extern "C" void i2c_start_wait(unsigned char addr);
|
||||
|
||||
|
||||
/**
|
||||
@brief Send one byte to I2C device
|
||||
@param data byte to be transfered
|
||||
@retval 0 write successful
|
||||
@retval 1 write failed
|
||||
*/
|
||||
extern "C" unsigned char i2c_write(unsigned char data);
|
||||
|
||||
|
||||
/**
|
||||
@brief read one byte from the I2C device, request more data from device
|
||||
@return byte read from I2C device
|
||||
*/
|
||||
extern "C" unsigned char i2c_readAck(void);
|
||||
|
||||
/**
|
||||
@brief read one byte from the I2C device, read is followed by a stop condition
|
||||
@return byte read from I2C device
|
||||
*/
|
||||
extern "C" unsigned char i2c_readNak(void);
|
||||
|
||||
/**
|
||||
@brief read one byte from the I2C device
|
||||
|
||||
Implemented as a macro, which calls either @ref i2c_readAck or @ref i2c_readNak
|
||||
|
||||
@param ack 1 send ack, request more data from device<br>
|
||||
0 send nak, read is followed by a stop condition
|
||||
@return byte read from I2C device
|
||||
*/
|
||||
extern "C" unsigned char i2c_read(unsigned char ack);
|
||||
#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
|
||||
|
||||
|
||||
|
||||
/**@}*/
|
||||
#endif
|
|
@ -0,0 +1,5 @@
|
|||
tinySPI KEYWORD1
|
||||
begin KEYWORD2
|
||||
setDataMode KEYWORD2
|
||||
transfer KEYWORD2
|
||||
end KEYWORD2
|
|
@ -0,0 +1,53 @@
|
|||
/*----------------------------------------------------------------------*
|
||||
* tinySPI.h - Arduino hardware SPI master library for ATtiny44/84, *
|
||||
* and ATtiny45/85. *
|
||||
* *
|
||||
* Jack Christensen 24Oct2013 *
|
||||
* *
|
||||
* CC BY-SA: *
|
||||
* This work is licensed under the Creative Commons Attribution- *
|
||||
* ShareAlike 3.0 Unported License. To view a copy of this license, *
|
||||
* visit http://creativecommons.org/licenses/by-sa/3.0/ or send a *
|
||||
* letter to Creative Commons, 171 Second Street, Suite 300, *
|
||||
* San Francisco, California, 94105, USA. *
|
||||
*----------------------------------------------------------------------*/
|
||||
|
||||
#include "tinySPI.h"
|
||||
|
||||
tinySPI::tinySPI()
|
||||
{
|
||||
}
|
||||
|
||||
void tinySPI::begin(void)
|
||||
{
|
||||
USICR &= ~(_BV(USISIE) | _BV(USIOIE) | _BV(USIWM1));
|
||||
USICR |= _BV(USIWM0) | _BV(USICS1) | _BV(USICLK);
|
||||
SPI_DDR_PORT |= _BV(USCK_DD_PIN); //set the USCK pin as output
|
||||
SPI_DDR_PORT |= _BV(DO_DD_PIN); //set the DO pin as output
|
||||
SPI_DDR_PORT &= ~_BV(DI_DD_PIN); //set the DI pin as input
|
||||
}
|
||||
|
||||
void tinySPI::setDataMode(uint8_t spiDataMode)
|
||||
{
|
||||
if (spiDataMode == SPI_MODE1)
|
||||
USICR |= _BV(USICS0);
|
||||
else
|
||||
USICR &= ~_BV(USICS0);
|
||||
}
|
||||
|
||||
uint8_t tinySPI::transfer(uint8_t spiData)
|
||||
{
|
||||
USIDR = spiData;
|
||||
USISR = _BV(USIOIF); //clear counter and counter overflow interrupt flag
|
||||
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { //ensure a consistent clock period
|
||||
while ( !(USISR & _BV(USIOIF)) ) USICR |= _BV(USITC);
|
||||
}
|
||||
return USIDR;
|
||||
}
|
||||
|
||||
void tinySPI::end(void)
|
||||
{
|
||||
USICR &= ~(_BV(USIWM1) | _BV(USIWM0));
|
||||
}
|
||||
|
||||
tinySPI SPI = tinySPI(); //instantiate a tinySPI object
|
|
@ -0,0 +1,51 @@
|
|||
/*----------------------------------------------------------------------*
|
||||
* tinySPI.h - Arduino hardware SPI master library for ATtiny44/84, *
|
||||
* and ATtiny45/85. *
|
||||
* *
|
||||
* Jack Christensen 24Oct2013 *
|
||||
* *
|
||||
* CC BY-SA: *
|
||||
* This work is licensed under the Creative Commons Attribution- *
|
||||
* ShareAlike 3.0 Unported License. To view a copy of this license, *
|
||||
* visit http://creativecommons.org/licenses/by-sa/3.0/ or send a *
|
||||
* letter to Creative Commons, 171 Second Street, Suite 300, *
|
||||
* San Francisco, California, 94105, USA. *
|
||||
*----------------------------------------------------------------------*/
|
||||
|
||||
#ifndef tinySPI_h
|
||||
#define tinySPI_h
|
||||
|
||||
#include <stdint.h>
|
||||
#include <avr/io.h>
|
||||
#include <util/atomic.h>
|
||||
|
||||
//USI ports and pins
|
||||
#if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
|
||||
#define SPI_DDR_PORT DDRA
|
||||
#define USCK_DD_PIN DDA4
|
||||
#define DO_DD_PIN DDA5
|
||||
#define DI_DD_PIN DDA6
|
||||
#elif defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
|
||||
#define SPI_DDR_PORT DDRB
|
||||
#define USCK_DD_PIN DDB2
|
||||
#define DO_DD_PIN DDB1
|
||||
#define DI_DD_PIN DDB0
|
||||
#endif
|
||||
|
||||
//SPI data modes
|
||||
#define SPI_MODE0 0x00
|
||||
#define SPI_MODE1 0x04
|
||||
|
||||
class tinySPI
|
||||
{
|
||||
public:
|
||||
tinySPI();
|
||||
void begin(void);
|
||||
void setDataMode(uint8_t spiDataMode);
|
||||
uint8_t transfer(uint8_t spiData);
|
||||
void end(void);
|
||||
};
|
||||
|
||||
extern tinySPI SPI;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,12 @@
|
|||
[env:attiny84]
|
||||
platform = atmelavr
|
||||
board = attiny84
|
||||
platform = atmelavr
|
||||
framework = arduino
|
||||
upload_protocol = stk500v2
|
||||
upload_flags =
|
||||
-P/dev/ttyACM0
|
||||
-b$UPLOAD_SPEED
|
||||
upload_speed = 19200
|
||||
monitor_speed = 9600
|
||||
board_build.f_cpu = 1000000L
|
|
@ -0,0 +1,155 @@
|
|||
/*
|
||||
main.cpp - TinyLora BMP280 Firmware
|
||||
Copyright (c) 2019, Stefan Brand
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include <Arduino.h>
|
||||
#include <avr/sleep.h>
|
||||
#include <avr/wdt.h>
|
||||
#include "tinySPI.h"
|
||||
#include "LoRaWAN.h"
|
||||
#include <BME280.h>
|
||||
|
||||
//Change Keys in secconfig.h for your TTN application:
|
||||
#include "secconfig.h"
|
||||
|
||||
// Initialize RFM95W and LoraWAN
|
||||
#define DIO0 PIN_B0
|
||||
#define NSS PIN_B1
|
||||
RFM95 rfm(DIO0,NSS);
|
||||
LoRaWAN lora = LoRaWAN(rfm);
|
||||
unsigned int Frame_Counter_Tx = 0x0000;
|
||||
|
||||
// If set LED will blink when sending
|
||||
#define LED_PIN PIN_A7
|
||||
|
||||
// Sensor Class
|
||||
BME280 sensor;
|
||||
|
||||
// Global Variable used for deep sleep
|
||||
unsigned int sleep_interval;
|
||||
|
||||
// Sleep Time (s) Between Two Measurements
|
||||
#define SLEEP_TIME 528
|
||||
|
||||
|
||||
// Setup Wakeup Interrupt Timer
|
||||
void init_wdt()
|
||||
{
|
||||
MCUSR &= ~(1<<WDRF);
|
||||
// Start timed sequence
|
||||
// Set Watchdog Change Enable bit
|
||||
WDTCSR |= (1<<WDCE) | (1<<WDE);
|
||||
// Set new prescaler (1 sec), unset reset enable
|
||||
// enable WDT interrupt
|
||||
WDTCSR = (1<<WDIE)|(1<<WDP2)|(1<<WDP1);
|
||||
}
|
||||
|
||||
// Enter Sleepmode, Sleep for s Seconds
|
||||
void sleep(unsigned int s)
|
||||
{
|
||||
sleep_interval = 0;
|
||||
while (sleep_interval < s) {
|
||||
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
|
||||
sleep_mode();
|
||||
}
|
||||
}
|
||||
|
||||
// Watchdog Callback for Sleep Timer
|
||||
ISR(WATCHDOG_vect) {
|
||||
sleep_interval++; // set global flag
|
||||
// Start timed sequence
|
||||
// Set Watchdog Change Enable bit
|
||||
WDTCSR |= (1<<WDCE) | (1<<WDE);
|
||||
// Set new prescaler (1 sec), unset reset enable
|
||||
// enable WDT interrupt
|
||||
WDTCSR = (1<<WDIE)|(1<<WDP2)|(1<<WDP1);
|
||||
}
|
||||
|
||||
// Get Battery Voltage
|
||||
long readVcc() {
|
||||
bitClear(PRR, PRADC);
|
||||
ADCSRA |= bit(ADEN); // Enable the ADC
|
||||
long result;
|
||||
ADMUX = _BV(MUX5) | _BV(MUX0); // For ATtiny84
|
||||
delay(2); // Wait for Vref to settle
|
||||
ADCSRA |= _BV(ADSC); // Convert
|
||||
while (bit_is_set(ADCSRA,ADSC));
|
||||
result = ADCL;
|
||||
result |= ADCH<<8;
|
||||
result = 1126400L / result; // Back-calculate Vcc in mV
|
||||
ADCSRA &= ~ bit(ADEN);
|
||||
bitSet(PRR, PRADC); // Disable the ADC to save power
|
||||
return result;
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
// Initialize Sleep Timer
|
||||
init_wdt();
|
||||
PRR = bit(PRTIM1);
|
||||
|
||||
// Setup LoraWAN
|
||||
rfm.init();
|
||||
lora.setKeys(NwkSkey, AppSkey, DevAddr);
|
||||
|
||||
// Setup LED if defined
|
||||
#ifdef LED_PIN
|
||||
pinMode(LED_PIN, OUTPUT);
|
||||
#endif
|
||||
|
||||
delay(50);
|
||||
}
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
// Buffer to send data
|
||||
int32_t data[4];
|
||||
|
||||
// Get Sensor Data
|
||||
sensor.getData(&data[0], &data[1], &data[2]);
|
||||
data[3] = readVcc();
|
||||
|
||||
// LED On before Sending
|
||||
#ifdef LED_PIN
|
||||
digitalWrite(LED_PIN, 1);
|
||||
#endif
|
||||
|
||||
// Send LoRa Packet, Increment Frame Counter
|
||||
lora.Send_Data((unsigned char *)data, sizeof(data), Frame_Counter_Tx);
|
||||
Frame_Counter_Tx++;
|
||||
|
||||
// Led Off after Sending
|
||||
#ifdef LED_PIN
|
||||
digitalWrite(LED_PIN, 0);
|
||||
#endif
|
||||
|
||||
// Sleep until next Measurement
|
||||
sleep(SLEEP_TIME);
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
// Information from The Things Network, device configuration ACTIVATION METHOD: ABP, msb left
|
||||
unsigned char NwkSkey[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
unsigned char AppSkey[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
unsigned char DevAddr[4] = { 0x00, 0x00, 0x00, 0x00 };
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,655 @@
|
|||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.4*
|
||||
G04 #@! TF.CreationDate,2019-09-05T17:57:58+02:00*
|
||||
G04 #@! TF.ProjectId,LORA_ATTINY84,4c4f5241-5f41-4545-9449-4e5938342e6b,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Soldermask,Bot*
|
||||
G04 #@! TF.FilePolarity,Negative*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.4) date 2019-09-05 17:57:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.100000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
G36*
|
||||
X90436000Y-73926000D02*
|
||||
G01*
|
||||
X88634000Y-73926000D01*
|
||||
X88634000Y-72124000D01*
|
||||
X90436000Y-72124000D01*
|
||||
X90436000Y-73926000D01*
|
||||
X90436000Y-73926000D01*
|
||||
G37*
|
||||
G36*
|
||||
X89645442Y-65145518D02*
|
||||
G01*
|
||||
X89711627Y-65152037D01*
|
||||
X89881466Y-65203557D01*
|
||||
X90037991Y-65287222D01*
|
||||
X90073729Y-65316552D01*
|
||||
X90175186Y-65399814D01*
|
||||
X90258448Y-65501271D01*
|
||||
X90287778Y-65537009D01*
|
||||
X90371443Y-65693534D01*
|
||||
X90422963Y-65863373D01*
|
||||
X90440359Y-66040000D01*
|
||||
X90422963Y-66216627D01*
|
||||
X90371443Y-66386466D01*
|
||||
X90287778Y-66542991D01*
|
||||
X90258448Y-66578729D01*
|
||||
X90175186Y-66680186D01*
|
||||
X90073729Y-66763448D01*
|
||||
X90037991Y-66792778D01*
|
||||
X89881466Y-66876443D01*
|
||||
X89711627Y-66927963D01*
|
||||
X89645442Y-66934482D01*
|
||||
X89579260Y-66941000D01*
|
||||
X89490740Y-66941000D01*
|
||||
X89424558Y-66934482D01*
|
||||
X89358373Y-66927963D01*
|
||||
X89188534Y-66876443D01*
|
||||
X89032009Y-66792778D01*
|
||||
X88996271Y-66763448D01*
|
||||
X88894814Y-66680186D01*
|
||||
X88811552Y-66578729D01*
|
||||
X88782222Y-66542991D01*
|
||||
X88698557Y-66386466D01*
|
||||
X88647037Y-66216627D01*
|
||||
X88629641Y-66040000D01*
|
||||
X88647037Y-65863373D01*
|
||||
X88698557Y-65693534D01*
|
||||
X88782222Y-65537009D01*
|
||||
X88811552Y-65501271D01*
|
||||
X88894814Y-65399814D01*
|
||||
X88996271Y-65316552D01*
|
||||
X89032009Y-65287222D01*
|
||||
X89188534Y-65203557D01*
|
||||
X89358373Y-65152037D01*
|
||||
X89424558Y-65145518D01*
|
||||
X89490740Y-65139000D01*
|
||||
X89579260Y-65139000D01*
|
||||
X89645442Y-65145518D01*
|
||||
X89645442Y-65145518D01*
|
||||
G37*
|
||||
G36*
|
||||
X89645442Y-62605518D02*
|
||||
G01*
|
||||
X89711627Y-62612037D01*
|
||||
X89881466Y-62663557D01*
|
||||
X90037991Y-62747222D01*
|
||||
X90073729Y-62776552D01*
|
||||
X90175186Y-62859814D01*
|
||||
X90258448Y-62961271D01*
|
||||
X90287778Y-62997009D01*
|
||||
X90371443Y-63153534D01*
|
||||
X90422963Y-63323373D01*
|
||||
X90440359Y-63500000D01*
|
||||
X90422963Y-63676627D01*
|
||||
X90371443Y-63846466D01*
|
||||
X90287778Y-64002991D01*
|
||||
X90258448Y-64038729D01*
|
||||
X90175186Y-64140186D01*
|
||||
X90073729Y-64223448D01*
|
||||
X90037991Y-64252778D01*
|
||||
X89881466Y-64336443D01*
|
||||
X89711627Y-64387963D01*
|
||||
X89645442Y-64394482D01*
|
||||
X89579260Y-64401000D01*
|
||||
X89490740Y-64401000D01*
|
||||
X89424558Y-64394482D01*
|
||||
X89358373Y-64387963D01*
|
||||
X89188534Y-64336443D01*
|
||||
X89032009Y-64252778D01*
|
||||
X88996271Y-64223448D01*
|
||||
X88894814Y-64140186D01*
|
||||
X88811552Y-64038729D01*
|
||||
X88782222Y-64002991D01*
|
||||
X88698557Y-63846466D01*
|
||||
X88647037Y-63676627D01*
|
||||
X88629641Y-63500000D01*
|
||||
X88647037Y-63323373D01*
|
||||
X88698557Y-63153534D01*
|
||||
X88782222Y-62997009D01*
|
||||
X88811552Y-62961271D01*
|
||||
X88894814Y-62859814D01*
|
||||
X88996271Y-62776552D01*
|
||||
X89032009Y-62747222D01*
|
||||
X89188534Y-62663557D01*
|
||||
X89358373Y-62612037D01*
|
||||
X89424558Y-62605518D01*
|
||||
X89490740Y-62599000D01*
|
||||
X89579260Y-62599000D01*
|
||||
X89645442Y-62605518D01*
|
||||
X89645442Y-62605518D01*
|
||||
G37*
|
||||
G36*
|
||||
X89645442Y-60065518D02*
|
||||
G01*
|
||||
X89711627Y-60072037D01*
|
||||
X89881466Y-60123557D01*
|
||||
X90037991Y-60207222D01*
|
||||
X90073729Y-60236552D01*
|
||||
X90175186Y-60319814D01*
|
||||
X90258448Y-60421271D01*
|
||||
X90287778Y-60457009D01*
|
||||
X90371443Y-60613534D01*
|
||||
X90422963Y-60783373D01*
|
||||
X90440359Y-60960000D01*
|
||||
X90422963Y-61136627D01*
|
||||
X90371443Y-61306466D01*
|
||||
X90287778Y-61462991D01*
|
||||
X90258448Y-61498729D01*
|
||||
X90175186Y-61600186D01*
|
||||
X90073729Y-61683448D01*
|
||||
X90037991Y-61712778D01*
|
||||
X89881466Y-61796443D01*
|
||||
X89711627Y-61847963D01*
|
||||
X89645443Y-61854481D01*
|
||||
X89579260Y-61861000D01*
|
||||
X89490740Y-61861000D01*
|
||||
X89424557Y-61854481D01*
|
||||
X89358373Y-61847963D01*
|
||||
X89188534Y-61796443D01*
|
||||
X89032009Y-61712778D01*
|
||||
X88996271Y-61683448D01*
|
||||
X88894814Y-61600186D01*
|
||||
X88811552Y-61498729D01*
|
||||
X88782222Y-61462991D01*
|
||||
X88698557Y-61306466D01*
|
||||
X88647037Y-61136627D01*
|
||||
X88629641Y-60960000D01*
|
||||
X88647037Y-60783373D01*
|
||||
X88698557Y-60613534D01*
|
||||
X88782222Y-60457009D01*
|
||||
X88811552Y-60421271D01*
|
||||
X88894814Y-60319814D01*
|
||||
X88996271Y-60236552D01*
|
||||
X89032009Y-60207222D01*
|
||||
X89188534Y-60123557D01*
|
||||
X89358373Y-60072037D01*
|
||||
X89424558Y-60065518D01*
|
||||
X89490740Y-60059000D01*
|
||||
X89579260Y-60059000D01*
|
||||
X89645442Y-60065518D01*
|
||||
X89645442Y-60065518D01*
|
||||
G37*
|
||||
G36*
|
||||
X89645443Y-57525519D02*
|
||||
G01*
|
||||
X89711627Y-57532037D01*
|
||||
X89881466Y-57583557D01*
|
||||
X90037991Y-57667222D01*
|
||||
X90073729Y-57696552D01*
|
||||
X90175186Y-57779814D01*
|
||||
X90258448Y-57881271D01*
|
||||
X90287778Y-57917009D01*
|
||||
X90371443Y-58073534D01*
|
||||
X90422963Y-58243373D01*
|
||||
X90440359Y-58420000D01*
|
||||
X90422963Y-58596627D01*
|
||||
X90371443Y-58766466D01*
|
||||
X90287778Y-58922991D01*
|
||||
X90258448Y-58958729D01*
|
||||
X90175186Y-59060186D01*
|
||||
X90073729Y-59143448D01*
|
||||
X90037991Y-59172778D01*
|
||||
X89881466Y-59256443D01*
|
||||
X89711627Y-59307963D01*
|
||||
X89645442Y-59314482D01*
|
||||
X89579260Y-59321000D01*
|
||||
X89490740Y-59321000D01*
|
||||
X89424558Y-59314482D01*
|
||||
X89358373Y-59307963D01*
|
||||
X89188534Y-59256443D01*
|
||||
X89032009Y-59172778D01*
|
||||
X88996271Y-59143448D01*
|
||||
X88894814Y-59060186D01*
|
||||
X88811552Y-58958729D01*
|
||||
X88782222Y-58922991D01*
|
||||
X88698557Y-58766466D01*
|
||||
X88647037Y-58596627D01*
|
||||
X88629641Y-58420000D01*
|
||||
X88647037Y-58243373D01*
|
||||
X88698557Y-58073534D01*
|
||||
X88782222Y-57917009D01*
|
||||
X88811552Y-57881271D01*
|
||||
X88894814Y-57779814D01*
|
||||
X88996271Y-57696552D01*
|
||||
X89032009Y-57667222D01*
|
||||
X89188534Y-57583557D01*
|
||||
X89358373Y-57532037D01*
|
||||
X89424557Y-57525519D01*
|
||||
X89490740Y-57519000D01*
|
||||
X89579260Y-57519000D01*
|
||||
X89645443Y-57525519D01*
|
||||
X89645443Y-57525519D01*
|
||||
G37*
|
||||
G36*
|
||||
X89645443Y-54985519D02*
|
||||
G01*
|
||||
X89711627Y-54992037D01*
|
||||
X89881466Y-55043557D01*
|
||||
X90037991Y-55127222D01*
|
||||
X90073729Y-55156552D01*
|
||||
X90175186Y-55239814D01*
|
||||
X90258448Y-55341271D01*
|
||||
X90287778Y-55377009D01*
|
||||
X90371443Y-55533534D01*
|
||||
X90422963Y-55703373D01*
|
||||
X90440359Y-55880000D01*
|
||||
X90422963Y-56056627D01*
|
||||
X90371443Y-56226466D01*
|
||||
X90287778Y-56382991D01*
|
||||
X90258448Y-56418729D01*
|
||||
X90175186Y-56520186D01*
|
||||
X90073729Y-56603448D01*
|
||||
X90037991Y-56632778D01*
|
||||
X89881466Y-56716443D01*
|
||||
X89711627Y-56767963D01*
|
||||
X89645443Y-56774481D01*
|
||||
X89579260Y-56781000D01*
|
||||
X89490740Y-56781000D01*
|
||||
X89424557Y-56774481D01*
|
||||
X89358373Y-56767963D01*
|
||||
X89188534Y-56716443D01*
|
||||
X89032009Y-56632778D01*
|
||||
X88996271Y-56603448D01*
|
||||
X88894814Y-56520186D01*
|
||||
X88811552Y-56418729D01*
|
||||
X88782222Y-56382991D01*
|
||||
X88698557Y-56226466D01*
|
||||
X88647037Y-56056627D01*
|
||||
X88629641Y-55880000D01*
|
||||
X88647037Y-55703373D01*
|
||||
X88698557Y-55533534D01*
|
||||
X88782222Y-55377009D01*
|
||||
X88811552Y-55341271D01*
|
||||
X88894814Y-55239814D01*
|
||||
X88996271Y-55156552D01*
|
||||
X89032009Y-55127222D01*
|
||||
X89188534Y-55043557D01*
|
||||
X89358373Y-54992037D01*
|
||||
X89424557Y-54985519D01*
|
||||
X89490740Y-54979000D01*
|
||||
X89579260Y-54979000D01*
|
||||
X89645443Y-54985519D01*
|
||||
X89645443Y-54985519D01*
|
||||
G37*
|
||||
G36*
|
||||
X89645443Y-52445519D02*
|
||||
G01*
|
||||
X89711627Y-52452037D01*
|
||||
X89881466Y-52503557D01*
|
||||
X90037991Y-52587222D01*
|
||||
X90073729Y-52616552D01*
|
||||
X90175186Y-52699814D01*
|
||||
X90258448Y-52801271D01*
|
||||
X90287778Y-52837009D01*
|
||||
X90371443Y-52993534D01*
|
||||
X90422963Y-53163373D01*
|
||||
X90440359Y-53340000D01*
|
||||
X90422963Y-53516627D01*
|
||||
X90371443Y-53686466D01*
|
||||
X90287778Y-53842991D01*
|
||||
X90258448Y-53878729D01*
|
||||
X90175186Y-53980186D01*
|
||||
X90073729Y-54063448D01*
|
||||
X90037991Y-54092778D01*
|
||||
X89881466Y-54176443D01*
|
||||
X89711627Y-54227963D01*
|
||||
X89645442Y-54234482D01*
|
||||
X89579260Y-54241000D01*
|
||||
X89490740Y-54241000D01*
|
||||
X89424558Y-54234482D01*
|
||||
X89358373Y-54227963D01*
|
||||
X89188534Y-54176443D01*
|
||||
X89032009Y-54092778D01*
|
||||
X88996271Y-54063448D01*
|
||||
X88894814Y-53980186D01*
|
||||
X88811552Y-53878729D01*
|
||||
X88782222Y-53842991D01*
|
||||
X88698557Y-53686466D01*
|
||||
X88647037Y-53516627D01*
|
||||
X88629641Y-53340000D01*
|
||||
X88647037Y-53163373D01*
|
||||
X88698557Y-52993534D01*
|
||||
X88782222Y-52837009D01*
|
||||
X88811552Y-52801271D01*
|
||||
X88894814Y-52699814D01*
|
||||
X88996271Y-52616552D01*
|
||||
X89032009Y-52587222D01*
|
||||
X89188534Y-52503557D01*
|
||||
X89358373Y-52452037D01*
|
||||
X89424558Y-52445518D01*
|
||||
X89490740Y-52439000D01*
|
||||
X89579260Y-52439000D01*
|
||||
X89645443Y-52445519D01*
|
||||
X89645443Y-52445519D01*
|
||||
G37*
|
||||
G36*
|
||||
X71992443Y-52445519D02*
|
||||
G01*
|
||||
X72058627Y-52452037D01*
|
||||
X72228466Y-52503557D01*
|
||||
X72384991Y-52587222D01*
|
||||
X72420729Y-52616552D01*
|
||||
X72522186Y-52699814D01*
|
||||
X72605448Y-52801271D01*
|
||||
X72634778Y-52837009D01*
|
||||
X72718443Y-52993534D01*
|
||||
X72769963Y-53163373D01*
|
||||
X72787359Y-53340000D01*
|
||||
X72769963Y-53516627D01*
|
||||
X72718443Y-53686466D01*
|
||||
X72634778Y-53842991D01*
|
||||
X72605448Y-53878729D01*
|
||||
X72522186Y-53980186D01*
|
||||
X72420729Y-54063448D01*
|
||||
X72384991Y-54092778D01*
|
||||
X72228466Y-54176443D01*
|
||||
X72058627Y-54227963D01*
|
||||
X71992442Y-54234482D01*
|
||||
X71926260Y-54241000D01*
|
||||
X71837740Y-54241000D01*
|
||||
X71771558Y-54234482D01*
|
||||
X71705373Y-54227963D01*
|
||||
X71535534Y-54176443D01*
|
||||
X71379009Y-54092778D01*
|
||||
X71343271Y-54063448D01*
|
||||
X71241814Y-53980186D01*
|
||||
X71158552Y-53878729D01*
|
||||
X71129222Y-53842991D01*
|
||||
X71045557Y-53686466D01*
|
||||
X70994037Y-53516627D01*
|
||||
X70976641Y-53340000D01*
|
||||
X70994037Y-53163373D01*
|
||||
X71045557Y-52993534D01*
|
||||
X71129222Y-52837009D01*
|
||||
X71158552Y-52801271D01*
|
||||
X71241814Y-52699814D01*
|
||||
X71343271Y-52616552D01*
|
||||
X71379009Y-52587222D01*
|
||||
X71535534Y-52503557D01*
|
||||
X71705373Y-52452037D01*
|
||||
X71771558Y-52445518D01*
|
||||
X71837740Y-52439000D01*
|
||||
X71926260Y-52439000D01*
|
||||
X71992443Y-52445519D01*
|
||||
X71992443Y-52445519D01*
|
||||
G37*
|
||||
G36*
|
||||
X69452443Y-52445519D02*
|
||||
G01*
|
||||
X69518627Y-52452037D01*
|
||||
X69688466Y-52503557D01*
|
||||
X69844991Y-52587222D01*
|
||||
X69880729Y-52616552D01*
|
||||
X69982186Y-52699814D01*
|
||||
X70065448Y-52801271D01*
|
||||
X70094778Y-52837009D01*
|
||||
X70178443Y-52993534D01*
|
||||
X70229963Y-53163373D01*
|
||||
X70247359Y-53340000D01*
|
||||
X70229963Y-53516627D01*
|
||||
X70178443Y-53686466D01*
|
||||
X70094778Y-53842991D01*
|
||||
X70065448Y-53878729D01*
|
||||
X69982186Y-53980186D01*
|
||||
X69880729Y-54063448D01*
|
||||
X69844991Y-54092778D01*
|
||||
X69688466Y-54176443D01*
|
||||
X69518627Y-54227963D01*
|
||||
X69452442Y-54234482D01*
|
||||
X69386260Y-54241000D01*
|
||||
X69297740Y-54241000D01*
|
||||
X69231558Y-54234482D01*
|
||||
X69165373Y-54227963D01*
|
||||
X68995534Y-54176443D01*
|
||||
X68839009Y-54092778D01*
|
||||
X68803271Y-54063448D01*
|
||||
X68701814Y-53980186D01*
|
||||
X68618552Y-53878729D01*
|
||||
X68589222Y-53842991D01*
|
||||
X68505557Y-53686466D01*
|
||||
X68454037Y-53516627D01*
|
||||
X68436641Y-53340000D01*
|
||||
X68454037Y-53163373D01*
|
||||
X68505557Y-52993534D01*
|
||||
X68589222Y-52837009D01*
|
||||
X68618552Y-52801271D01*
|
||||
X68701814Y-52699814D01*
|
||||
X68803271Y-52616552D01*
|
||||
X68839009Y-52587222D01*
|
||||
X68995534Y-52503557D01*
|
||||
X69165373Y-52452037D01*
|
||||
X69231558Y-52445518D01*
|
||||
X69297740Y-52439000D01*
|
||||
X69386260Y-52439000D01*
|
||||
X69452443Y-52445519D01*
|
||||
X69452443Y-52445519D01*
|
||||
G37*
|
||||
G36*
|
||||
X69452442Y-49905518D02*
|
||||
G01*
|
||||
X69518627Y-49912037D01*
|
||||
X69688466Y-49963557D01*
|
||||
X69844991Y-50047222D01*
|
||||
X69880729Y-50076552D01*
|
||||
X69982186Y-50159814D01*
|
||||
X70065448Y-50261271D01*
|
||||
X70094778Y-50297009D01*
|
||||
X70178443Y-50453534D01*
|
||||
X70229963Y-50623373D01*
|
||||
X70247359Y-50800000D01*
|
||||
X70229963Y-50976627D01*
|
||||
X70178443Y-51146466D01*
|
||||
X70094778Y-51302991D01*
|
||||
X70065448Y-51338729D01*
|
||||
X69982186Y-51440186D01*
|
||||
X69880729Y-51523448D01*
|
||||
X69844991Y-51552778D01*
|
||||
X69688466Y-51636443D01*
|
||||
X69518627Y-51687963D01*
|
||||
X69452442Y-51694482D01*
|
||||
X69386260Y-51701000D01*
|
||||
X69297740Y-51701000D01*
|
||||
X69231558Y-51694482D01*
|
||||
X69165373Y-51687963D01*
|
||||
X68995534Y-51636443D01*
|
||||
X68839009Y-51552778D01*
|
||||
X68803271Y-51523448D01*
|
||||
X68701814Y-51440186D01*
|
||||
X68618552Y-51338729D01*
|
||||
X68589222Y-51302991D01*
|
||||
X68505557Y-51146466D01*
|
||||
X68454037Y-50976627D01*
|
||||
X68436641Y-50800000D01*
|
||||
X68454037Y-50623373D01*
|
||||
X68505557Y-50453534D01*
|
||||
X68589222Y-50297009D01*
|
||||
X68618552Y-50261271D01*
|
||||
X68701814Y-50159814D01*
|
||||
X68803271Y-50076552D01*
|
||||
X68839009Y-50047222D01*
|
||||
X68995534Y-49963557D01*
|
||||
X69165373Y-49912037D01*
|
||||
X69231557Y-49905519D01*
|
||||
X69297740Y-49899000D01*
|
||||
X69386260Y-49899000D01*
|
||||
X69452442Y-49905518D01*
|
||||
X69452442Y-49905518D01*
|
||||
G37*
|
||||
G36*
|
||||
X89645442Y-49905518D02*
|
||||
G01*
|
||||
X89711627Y-49912037D01*
|
||||
X89881466Y-49963557D01*
|
||||
X90037991Y-50047222D01*
|
||||
X90073729Y-50076552D01*
|
||||
X90175186Y-50159814D01*
|
||||
X90258448Y-50261271D01*
|
||||
X90287778Y-50297009D01*
|
||||
X90371443Y-50453534D01*
|
||||
X90422963Y-50623373D01*
|
||||
X90440359Y-50800000D01*
|
||||
X90422963Y-50976627D01*
|
||||
X90371443Y-51146466D01*
|
||||
X90287778Y-51302991D01*
|
||||
X90258448Y-51338729D01*
|
||||
X90175186Y-51440186D01*
|
||||
X90073729Y-51523448D01*
|
||||
X90037991Y-51552778D01*
|
||||
X89881466Y-51636443D01*
|
||||
X89711627Y-51687963D01*
|
||||
X89645442Y-51694482D01*
|
||||
X89579260Y-51701000D01*
|
||||
X89490740Y-51701000D01*
|
||||
X89424558Y-51694482D01*
|
||||
X89358373Y-51687963D01*
|
||||
X89188534Y-51636443D01*
|
||||
X89032009Y-51552778D01*
|
||||
X88996271Y-51523448D01*
|
||||
X88894814Y-51440186D01*
|
||||
X88811552Y-51338729D01*
|
||||
X88782222Y-51302991D01*
|
||||
X88698557Y-51146466D01*
|
||||
X88647037Y-50976627D01*
|
||||
X88629641Y-50800000D01*
|
||||
X88647037Y-50623373D01*
|
||||
X88698557Y-50453534D01*
|
||||
X88782222Y-50297009D01*
|
||||
X88811552Y-50261271D01*
|
||||
X88894814Y-50159814D01*
|
||||
X88996271Y-50076552D01*
|
||||
X89032009Y-50047222D01*
|
||||
X89188534Y-49963557D01*
|
||||
X89358373Y-49912037D01*
|
||||
X89424557Y-49905519D01*
|
||||
X89490740Y-49899000D01*
|
||||
X89579260Y-49899000D01*
|
||||
X89645442Y-49905518D01*
|
||||
X89645442Y-49905518D01*
|
||||
G37*
|
||||
G36*
|
||||
X71992442Y-49905518D02*
|
||||
G01*
|
||||
X72058627Y-49912037D01*
|
||||
X72228466Y-49963557D01*
|
||||
X72384991Y-50047222D01*
|
||||
X72420729Y-50076552D01*
|
||||
X72522186Y-50159814D01*
|
||||
X72605448Y-50261271D01*
|
||||
X72634778Y-50297009D01*
|
||||
X72718443Y-50453534D01*
|
||||
X72769963Y-50623373D01*
|
||||
X72787359Y-50800000D01*
|
||||
X72769963Y-50976627D01*
|
||||
X72718443Y-51146466D01*
|
||||
X72634778Y-51302991D01*
|
||||
X72605448Y-51338729D01*
|
||||
X72522186Y-51440186D01*
|
||||
X72420729Y-51523448D01*
|
||||
X72384991Y-51552778D01*
|
||||
X72228466Y-51636443D01*
|
||||
X72058627Y-51687963D01*
|
||||
X71992442Y-51694482D01*
|
||||
X71926260Y-51701000D01*
|
||||
X71837740Y-51701000D01*
|
||||
X71771558Y-51694482D01*
|
||||
X71705373Y-51687963D01*
|
||||
X71535534Y-51636443D01*
|
||||
X71379009Y-51552778D01*
|
||||
X71343271Y-51523448D01*
|
||||
X71241814Y-51440186D01*
|
||||
X71158552Y-51338729D01*
|
||||
X71129222Y-51302991D01*
|
||||
X71045557Y-51146466D01*
|
||||
X70994037Y-50976627D01*
|
||||
X70976641Y-50800000D01*
|
||||
X70994037Y-50623373D01*
|
||||
X71045557Y-50453534D01*
|
||||
X71129222Y-50297009D01*
|
||||
X71158552Y-50261271D01*
|
||||
X71241814Y-50159814D01*
|
||||
X71343271Y-50076552D01*
|
||||
X71379009Y-50047222D01*
|
||||
X71535534Y-49963557D01*
|
||||
X71705373Y-49912037D01*
|
||||
X71771557Y-49905519D01*
|
||||
X71837740Y-49899000D01*
|
||||
X71926260Y-49899000D01*
|
||||
X71992442Y-49905518D01*
|
||||
X71992442Y-49905518D01*
|
||||
G37*
|
||||
G36*
|
||||
X90436000Y-49161000D02*
|
||||
G01*
|
||||
X88634000Y-49161000D01*
|
||||
X88634000Y-47359000D01*
|
||||
X90436000Y-47359000D01*
|
||||
X90436000Y-49161000D01*
|
||||
X90436000Y-49161000D01*
|
||||
G37*
|
||||
G36*
|
||||
X70243000Y-49161000D02*
|
||||
G01*
|
||||
X68441000Y-49161000D01*
|
||||
X68441000Y-47359000D01*
|
||||
X70243000Y-47359000D01*
|
||||
X70243000Y-49161000D01*
|
||||
X70243000Y-49161000D01*
|
||||
G37*
|
||||
G36*
|
||||
X71992443Y-47365519D02*
|
||||
G01*
|
||||
X72058627Y-47372037D01*
|
||||
X72228466Y-47423557D01*
|
||||
X72384991Y-47507222D01*
|
||||
X72420729Y-47536552D01*
|
||||
X72522186Y-47619814D01*
|
||||
X72605448Y-47721271D01*
|
||||
X72634778Y-47757009D01*
|
||||
X72718443Y-47913534D01*
|
||||
X72769963Y-48083373D01*
|
||||
X72787359Y-48260000D01*
|
||||
X72769963Y-48436627D01*
|
||||
X72718443Y-48606466D01*
|
||||
X72634778Y-48762991D01*
|
||||
X72605448Y-48798729D01*
|
||||
X72522186Y-48900186D01*
|
||||
X72420729Y-48983448D01*
|
||||
X72384991Y-49012778D01*
|
||||
X72228466Y-49096443D01*
|
||||
X72058627Y-49147963D01*
|
||||
X71992443Y-49154481D01*
|
||||
X71926260Y-49161000D01*
|
||||
X71837740Y-49161000D01*
|
||||
X71771557Y-49154481D01*
|
||||
X71705373Y-49147963D01*
|
||||
X71535534Y-49096443D01*
|
||||
X71379009Y-49012778D01*
|
||||
X71343271Y-48983448D01*
|
||||
X71241814Y-48900186D01*
|
||||
X71158552Y-48798729D01*
|
||||
X71129222Y-48762991D01*
|
||||
X71045557Y-48606466D01*
|
||||
X70994037Y-48436627D01*
|
||||
X70976641Y-48260000D01*
|
||||
X70994037Y-48083373D01*
|
||||
X71045557Y-47913534D01*
|
||||
X71129222Y-47757009D01*
|
||||
X71158552Y-47721271D01*
|
||||
X71241814Y-47619814D01*
|
||||
X71343271Y-47536552D01*
|
||||
X71379009Y-47507222D01*
|
||||
X71535534Y-47423557D01*
|
||||
X71705373Y-47372037D01*
|
||||
X71771557Y-47365519D01*
|
||||
X71837740Y-47359000D01*
|
||||
X71926260Y-47359000D01*
|
||||
X71992443Y-47365519D01*
|
||||
X71992443Y-47365519D01*
|
||||
G37*
|
||||
M02*
|
|
@ -0,0 +1,14 @@
|
|||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.4*
|
||||
G04 #@! TF.CreationDate,2019-09-05T17:57:58+02:00*
|
||||
G04 #@! TF.ProjectId,LORA_ATTINY84,4c4f5241-5f41-4545-9449-4e5938342e6b,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Paste,Bot*
|
||||
G04 #@! TF.FilePolarity,Positive*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.4) date 2019-09-05 17:57:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G04 APERTURE LIST*
|
||||
G04 APERTURE END LIST*
|
||||
M02*
|
|
@ -0,0 +1,14 @@
|
|||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.4*
|
||||
G04 #@! TF.CreationDate,2019-09-05T17:57:58+02:00*
|
||||
G04 #@! TF.ProjectId,LORA_ATTINY84,4c4f5241-5f41-4545-9449-4e5938342e6b,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Legend,Bot*
|
||||
G04 #@! TF.FilePolarity,Positive*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.4) date 2019-09-05 17:57:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G04 APERTURE LIST*
|
||||
G04 APERTURE END LIST*
|
||||
M02*
|
|
@ -0,0 +1,23 @@
|
|||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.4*
|
||||
G04 #@! TF.CreationDate,2019-09-05T17:57:58+02:00*
|
||||
G04 #@! TF.ProjectId,LORA_ATTINY84,4c4f5241-5f41-4545-9449-4e5938342e6b,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Profile,NP*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.4) date 2019-09-05 17:57:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.050000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X92710000Y-43180000D02*
|
||||
X45720000Y-43180000D01*
|
||||
X92710000Y-78740000D02*
|
||||
X92710000Y-43180000D01*
|
||||
X45720000Y-78740000D02*
|
||||
X92710000Y-78740000D01*
|
||||
X45720000Y-43180000D02*
|
||||
X45720000Y-78740000D01*
|
||||
M02*
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,599 @@
|
|||
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.4*
|
||||
G04 #@! TF.CreationDate,2019-09-05T17:57:58+02:00*
|
||||
G04 #@! TF.ProjectId,LORA_ATTINY84,4c4f5241-5f41-4545-9449-4e5938342e6b,rev?*
|
||||
G04 #@! TF.SameCoordinates,Original*
|
||||
G04 #@! TF.FileFunction,Legend,Top*
|
||||
G04 #@! TF.FilePolarity,Positive*
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 5.1.4) date 2019-09-05 17:57:58*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G04 APERTURE LIST*
|
||||
%ADD10C,0.150000*%
|
||||
%ADD11C,0.120000*%
|
||||
%ADD12C,0.200000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X46467780Y-65834590D02*
|
||||
X46467780Y-65263161D01*
|
||||
X47467780Y-65548876D02*
|
||||
X46467780Y-65548876D01*
|
||||
X47467780Y-64929828D02*
|
||||
X46801114Y-64929828D01*
|
||||
X46467780Y-64929828D02*
|
||||
X46515400Y-64977447D01*
|
||||
X46563019Y-64929828D01*
|
||||
X46515400Y-64882209D01*
|
||||
X46467780Y-64929828D01*
|
||||
X46563019Y-64929828D01*
|
||||
X46801114Y-64453638D02*
|
||||
X47467780Y-64453638D01*
|
||||
X46896352Y-64453638D02*
|
||||
X46848733Y-64406019D01*
|
||||
X46801114Y-64310780D01*
|
||||
X46801114Y-64167923D01*
|
||||
X46848733Y-64072685D01*
|
||||
X46943971Y-64025066D01*
|
||||
X47467780Y-64025066D01*
|
||||
X46801114Y-63644114D02*
|
||||
X47467780Y-63406019D01*
|
||||
X46801114Y-63167923D02*
|
||||
X47467780Y-63406019D01*
|
||||
X47705876Y-63501257D01*
|
||||
X47753495Y-63548876D01*
|
||||
X47801114Y-63644114D01*
|
||||
X47467780Y-62310780D02*
|
||||
X47467780Y-62786971D01*
|
||||
X46467780Y-62786971D01*
|
||||
X47467780Y-61834590D02*
|
||||
X47420161Y-61929828D01*
|
||||
X47372542Y-61977447D01*
|
||||
X47277304Y-62025066D01*
|
||||
X46991590Y-62025066D01*
|
||||
X46896352Y-61977447D01*
|
||||
X46848733Y-61929828D01*
|
||||
X46801114Y-61834590D01*
|
||||
X46801114Y-61691733D01*
|
||||
X46848733Y-61596495D01*
|
||||
X46896352Y-61548876D01*
|
||||
X46991590Y-61501257D01*
|
||||
X47277304Y-61501257D01*
|
||||
X47372542Y-61548876D01*
|
||||
X47420161Y-61596495D01*
|
||||
X47467780Y-61691733D01*
|
||||
X47467780Y-61834590D01*
|
||||
X47467780Y-61072685D02*
|
||||
X46801114Y-61072685D01*
|
||||
X46991590Y-61072685D02*
|
||||
X46896352Y-61025066D01*
|
||||
X46848733Y-60977447D01*
|
||||
X46801114Y-60882209D01*
|
||||
X46801114Y-60786971D01*
|
||||
X47467780Y-60025066D02*
|
||||
X46943971Y-60025066D01*
|
||||
X46848733Y-60072685D01*
|
||||
X46801114Y-60167923D01*
|
||||
X46801114Y-60358399D01*
|
||||
X46848733Y-60453638D01*
|
||||
X47420161Y-60025066D02*
|
||||
X47467780Y-60120304D01*
|
||||
X47467780Y-60358399D01*
|
||||
X47420161Y-60453638D01*
|
||||
X47324923Y-60501257D01*
|
||||
X47229685Y-60501257D01*
|
||||
X47134447Y-60453638D01*
|
||||
X47086828Y-60358399D01*
|
||||
X47086828Y-60120304D01*
|
||||
X47039209Y-60025066D01*
|
||||
X46467780Y-58929828D02*
|
||||
X47467780Y-58596495D01*
|
||||
X46467780Y-58263161D01*
|
||||
X47467780Y-57406019D02*
|
||||
X47467780Y-57977447D01*
|
||||
X47467780Y-57691733D02*
|
||||
X46467780Y-57691733D01*
|
||||
X46610638Y-57786971D01*
|
||||
X46705876Y-57882209D01*
|
||||
X46753495Y-57977447D01*
|
||||
X47372542Y-56977447D02*
|
||||
X47420161Y-56929828D01*
|
||||
X47467780Y-56977447D01*
|
||||
X47420161Y-57025066D01*
|
||||
X47372542Y-56977447D01*
|
||||
X47467780Y-56977447D01*
|
||||
X47467780Y-55977447D02*
|
||||
X47467780Y-56548876D01*
|
||||
X47467780Y-56263161D02*
|
||||
X46467780Y-56263161D01*
|
||||
X46610638Y-56358400D01*
|
||||
X46705876Y-56453638D01*
|
||||
X46753495Y-56548876D01*
|
||||
D11*
|
||||
X82201936Y-77237000D02*
|
||||
X83406064Y-77237000D01*
|
||||
X82201936Y-75417000D02*
|
||||
X83406064Y-75417000D01*
|
||||
X85132500Y-49562936D02*
|
||||
X85132500Y-50767064D01*
|
||||
X86952500Y-49562936D02*
|
||||
X86952500Y-50767064D01*
|
||||
X68012000Y-46930000D02*
|
||||
X69342000Y-46930000D01*
|
||||
X68012000Y-48260000D02*
|
||||
X68012000Y-46930000D01*
|
||||
X70612000Y-46930000D02*
|
||||
X73212000Y-46930000D01*
|
||||
X70612000Y-49530000D02*
|
||||
X70612000Y-46930000D01*
|
||||
X68012000Y-49530000D02*
|
||||
X70612000Y-49530000D01*
|
||||
X73212000Y-46930000D02*
|
||||
X73212000Y-54670000D01*
|
||||
X68012000Y-49530000D02*
|
||||
X68012000Y-54670000D01*
|
||||
X68012000Y-54670000D02*
|
||||
X73212000Y-54670000D01*
|
||||
X88205000Y-46930000D02*
|
||||
X89535000Y-46930000D01*
|
||||
X88205000Y-48260000D02*
|
||||
X88205000Y-46930000D01*
|
||||
X88205000Y-49530000D02*
|
||||
X90865000Y-49530000D01*
|
||||
X90865000Y-49530000D02*
|
||||
X90865000Y-67370000D01*
|
||||
X88205000Y-49530000D02*
|
||||
X88205000Y-67370000D01*
|
||||
X88205000Y-67370000D02*
|
||||
X90865000Y-67370000D01*
|
||||
X75724936Y-77237000D02*
|
||||
X76929064Y-77237000D01*
|
||||
X75724936Y-75417000D02*
|
||||
X76929064Y-75417000D01*
|
||||
X67517000Y-77462000D02*
|
||||
X71577000Y-77462000D01*
|
||||
X67517000Y-75192000D02*
|
||||
X67517000Y-77462000D01*
|
||||
X71577000Y-75192000D02*
|
||||
X67517000Y-75192000D01*
|
||||
X60365000Y-49610000D02*
|
||||
X60365000Y-46410000D01*
|
||||
X60365000Y-46410000D02*
|
||||
X58815000Y-46410000D01*
|
||||
X64865000Y-49610000D02*
|
||||
X60365000Y-49610000D01*
|
||||
X64865000Y-49610000D02*
|
||||
X64865000Y-70510000D01*
|
||||
X63065000Y-72310000D02*
|
||||
X60365000Y-72310000D01*
|
||||
X64865000Y-70510000D02*
|
||||
X63065000Y-72310000D01*
|
||||
X60365000Y-72310000D02*
|
||||
X60365000Y-75510000D01*
|
||||
X60365000Y-75510000D02*
|
||||
X58815000Y-75510000D01*
|
||||
X52665000Y-72310000D02*
|
||||
X52665000Y-75510000D01*
|
||||
X52665000Y-75510000D02*
|
||||
X54215000Y-75510000D01*
|
||||
X52665000Y-49610000D02*
|
||||
X52665000Y-46410000D01*
|
||||
X52665000Y-46410000D02*
|
||||
X54215000Y-46410000D01*
|
||||
X48165000Y-72310000D02*
|
||||
X48165000Y-49610000D01*
|
||||
X48165000Y-72310000D02*
|
||||
X52665000Y-72310000D01*
|
||||
X48165000Y-49610000D02*
|
||||
X52665000Y-49610000D01*
|
||||
X61515000Y-73960000D02*
|
||||
X63515000Y-73960000D01*
|
||||
X62515000Y-72960000D02*
|
||||
X62515000Y-74960000D01*
|
||||
X84445000Y-50165000D02*
|
||||
X84445000Y-46715000D01*
|
||||
X84445000Y-50165000D02*
|
||||
X84445000Y-52115000D01*
|
||||
X75575000Y-50165000D02*
|
||||
X75575000Y-48215000D01*
|
||||
X75575000Y-50165000D02*
|
||||
X75575000Y-52115000D01*
|
||||
D12*
|
||||
X68580000Y-57420000D02*
|
||||
X84580000Y-57420000D01*
|
||||
X68580000Y-69220000D02*
|
||||
X68580000Y-69620000D01*
|
||||
X68580000Y-67220000D02*
|
||||
X68580000Y-67620000D01*
|
||||
X68580000Y-65220000D02*
|
||||
X68580000Y-65620000D01*
|
||||
X68580000Y-63220000D02*
|
||||
X68580000Y-63620000D01*
|
||||
X68580000Y-61620000D02*
|
||||
X68580000Y-61220000D01*
|
||||
X68580000Y-59620000D02*
|
||||
X68580000Y-59220000D01*
|
||||
X67580000Y-57620000D02*
|
||||
X68580000Y-57620000D01*
|
||||
X68580000Y-57620000D02*
|
||||
X68580000Y-57420000D01*
|
||||
X68580000Y-71220000D02*
|
||||
X68580000Y-71620000D01*
|
||||
X84580000Y-57420000D02*
|
||||
X84580000Y-57620000D01*
|
||||
X84580000Y-59220000D02*
|
||||
X84580000Y-59620000D01*
|
||||
X84580000Y-61220000D02*
|
||||
X84580000Y-61620000D01*
|
||||
X84580000Y-63220000D02*
|
||||
X84580000Y-63620000D01*
|
||||
X84580000Y-65220000D02*
|
||||
X84580000Y-65620000D01*
|
||||
X84580000Y-67220000D02*
|
||||
X84580000Y-67620000D01*
|
||||
X84580000Y-69220000D02*
|
||||
X84580000Y-69620000D01*
|
||||
X84580000Y-71220000D02*
|
||||
X84580000Y-71620000D01*
|
||||
X84580000Y-73220000D02*
|
||||
X84580000Y-73420000D01*
|
||||
X84580000Y-73420000D02*
|
||||
X68580000Y-73420000D01*
|
||||
X68580000Y-73420000D02*
|
||||
X68580000Y-73220000D01*
|
||||
D11*
|
||||
X90865000Y-74355000D02*
|
||||
X89535000Y-74355000D01*
|
||||
X90865000Y-73025000D02*
|
||||
X90865000Y-74355000D01*
|
||||
X90865000Y-71755000D02*
|
||||
X88205000Y-71755000D01*
|
||||
X88205000Y-71755000D02*
|
||||
X88205000Y-71695000D01*
|
||||
X90865000Y-71755000D02*
|
||||
X90865000Y-71695000D01*
|
||||
X90865000Y-71695000D02*
|
||||
X88205000Y-71695000D01*
|
||||
D10*
|
||||
X82637333Y-74864142D02*
|
||||
X82589714Y-74911761D01*
|
||||
X82446857Y-74959380D01*
|
||||
X82351619Y-74959380D01*
|
||||
X82208761Y-74911761D01*
|
||||
X82113523Y-74816523D01*
|
||||
X82065904Y-74721285D01*
|
||||
X82018285Y-74530809D01*
|
||||
X82018285Y-74387952D01*
|
||||
X82065904Y-74197476D01*
|
||||
X82113523Y-74102238D01*
|
||||
X82208761Y-74007000D01*
|
||||
X82351619Y-73959380D01*
|
||||
X82446857Y-73959380D01*
|
||||
X82589714Y-74007000D01*
|
||||
X82637333Y-74054619D01*
|
||||
X83018285Y-74054619D02*
|
||||
X83065904Y-74007000D01*
|
||||
X83161142Y-73959380D01*
|
||||
X83399238Y-73959380D01*
|
||||
X83494476Y-74007000D01*
|
||||
X83542095Y-74054619D01*
|
||||
X83589714Y-74149857D01*
|
||||
X83589714Y-74245095D01*
|
||||
X83542095Y-74387952D01*
|
||||
X82970666Y-74959380D01*
|
||||
X83589714Y-74959380D01*
|
||||
X85875833Y-47156642D02*
|
||||
X85828214Y-47204261D01*
|
||||
X85685357Y-47251880D01*
|
||||
X85590119Y-47251880D01*
|
||||
X85447261Y-47204261D01*
|
||||
X85352023Y-47109023D01*
|
||||
X85304404Y-47013785D01*
|
||||
X85256785Y-46823309D01*
|
||||
X85256785Y-46680452D01*
|
||||
X85304404Y-46489976D01*
|
||||
X85352023Y-46394738D01*
|
||||
X85447261Y-46299500D01*
|
||||
X85590119Y-46251880D01*
|
||||
X85685357Y-46251880D01*
|
||||
X85828214Y-46299500D01*
|
||||
X85875833Y-46347119D01*
|
||||
X86828214Y-47251880D02*
|
||||
X86256785Y-47251880D01*
|
||||
X86542500Y-47251880D02*
|
||||
X86542500Y-46251880D01*
|
||||
X86447261Y-46394738D01*
|
||||
X86352023Y-46489976D01*
|
||||
X86256785Y-46537595D01*
|
||||
X68873904Y-46382380D02*
|
||||
X68873904Y-45382380D01*
|
||||
X69254857Y-45382380D01*
|
||||
X69350095Y-45430000D01*
|
||||
X69397714Y-45477619D01*
|
||||
X69445333Y-45572857D01*
|
||||
X69445333Y-45715714D01*
|
||||
X69397714Y-45810952D01*
|
||||
X69350095Y-45858571D01*
|
||||
X69254857Y-45906190D01*
|
||||
X68873904Y-45906190D01*
|
||||
X70445333Y-46382380D02*
|
||||
X70112000Y-45906190D01*
|
||||
X69873904Y-46382380D02*
|
||||
X69873904Y-45382380D01*
|
||||
X70254857Y-45382380D01*
|
||||
X70350095Y-45430000D01*
|
||||
X70397714Y-45477619D01*
|
||||
X70445333Y-45572857D01*
|
||||
X70445333Y-45715714D01*
|
||||
X70397714Y-45810952D01*
|
||||
X70350095Y-45858571D01*
|
||||
X70254857Y-45906190D01*
|
||||
X69873904Y-45906190D01*
|
||||
X71397714Y-45430000D02*
|
||||
X71302476Y-45382380D01*
|
||||
X71159619Y-45382380D01*
|
||||
X71016761Y-45430000D01*
|
||||
X70921523Y-45525238D01*
|
||||
X70873904Y-45620476D01*
|
||||
X70826285Y-45810952D01*
|
||||
X70826285Y-45953809D01*
|
||||
X70873904Y-46144285D01*
|
||||
X70921523Y-46239523D01*
|
||||
X71016761Y-46334761D01*
|
||||
X71159619Y-46382380D01*
|
||||
X71254857Y-46382380D01*
|
||||
X71397714Y-46334761D01*
|
||||
X71445333Y-46287142D01*
|
||||
X71445333Y-45953809D01*
|
||||
X71254857Y-45953809D01*
|
||||
X72397714Y-46382380D02*
|
||||
X71826285Y-46382380D01*
|
||||
X72112000Y-46382380D02*
|
||||
X72112000Y-45382380D01*
|
||||
X72016761Y-45525238D01*
|
||||
X71921523Y-45620476D01*
|
||||
X71826285Y-45668095D01*
|
||||
X89201666Y-45382380D02*
|
||||
X89201666Y-46096666D01*
|
||||
X89154047Y-46239523D01*
|
||||
X89058809Y-46334761D01*
|
||||
X88915952Y-46382380D01*
|
||||
X88820714Y-46382380D01*
|
||||
X90201666Y-46382380D02*
|
||||
X89630238Y-46382380D01*
|
||||
X89915952Y-46382380D02*
|
||||
X89915952Y-45382380D01*
|
||||
X89820714Y-45525238D01*
|
||||
X89725476Y-45620476D01*
|
||||
X89630238Y-45668095D01*
|
||||
X76160333Y-74959380D02*
|
||||
X75827000Y-74483190D01*
|
||||
X75588904Y-74959380D02*
|
||||
X75588904Y-73959380D01*
|
||||
X75969857Y-73959380D01*
|
||||
X76065095Y-74007000D01*
|
||||
X76112714Y-74054619D01*
|
||||
X76160333Y-74149857D01*
|
||||
X76160333Y-74292714D01*
|
||||
X76112714Y-74387952D01*
|
||||
X76065095Y-74435571D01*
|
||||
X75969857Y-74483190D01*
|
||||
X75588904Y-74483190D01*
|
||||
X77112714Y-74959380D02*
|
||||
X76541285Y-74959380D01*
|
||||
X76827000Y-74959380D02*
|
||||
X76827000Y-73959380D01*
|
||||
X76731761Y-74102238D01*
|
||||
X76636523Y-74197476D01*
|
||||
X76541285Y-74245095D01*
|
||||
X69238904Y-74959380D02*
|
||||
X69238904Y-73959380D01*
|
||||
X69477000Y-73959380D01*
|
||||
X69619857Y-74007000D01*
|
||||
X69715095Y-74102238D01*
|
||||
X69762714Y-74197476D01*
|
||||
X69810333Y-74387952D01*
|
||||
X69810333Y-74530809D01*
|
||||
X69762714Y-74721285D01*
|
||||
X69715095Y-74816523D01*
|
||||
X69619857Y-74911761D01*
|
||||
X69477000Y-74959380D01*
|
||||
X69238904Y-74959380D01*
|
||||
X70762714Y-74959380D02*
|
||||
X70191285Y-74959380D01*
|
||||
X70477000Y-74959380D02*
|
||||
X70477000Y-73959380D01*
|
||||
X70381761Y-74102238D01*
|
||||
X70286523Y-74197476D01*
|
||||
X70191285Y-74245095D01*
|
||||
X49077714Y-74350571D02*
|
||||
X49220571Y-74398190D01*
|
||||
X49268190Y-74445809D01*
|
||||
X49315809Y-74541047D01*
|
||||
X49315809Y-74683904D01*
|
||||
X49268190Y-74779142D01*
|
||||
X49220571Y-74826761D01*
|
||||
X49125333Y-74874380D01*
|
||||
X48744380Y-74874380D01*
|
||||
X48744380Y-73874380D01*
|
||||
X49077714Y-73874380D01*
|
||||
X49172952Y-73922000D01*
|
||||
X49220571Y-73969619D01*
|
||||
X49268190Y-74064857D01*
|
||||
X49268190Y-74160095D01*
|
||||
X49220571Y-74255333D01*
|
||||
X49172952Y-74302952D01*
|
||||
X49077714Y-74350571D01*
|
||||
X48744380Y-74350571D01*
|
||||
X49696761Y-74588666D02*
|
||||
X50172952Y-74588666D01*
|
||||
X49601523Y-74874380D02*
|
||||
X49934857Y-73874380D01*
|
||||
X50268190Y-74874380D01*
|
||||
X50458666Y-73874380D02*
|
||||
X51030095Y-73874380D01*
|
||||
X50744380Y-74874380D02*
|
||||
X50744380Y-73874380D01*
|
||||
X51887238Y-74874380D02*
|
||||
X51315809Y-74874380D01*
|
||||
X51601523Y-74874380D02*
|
||||
X51601523Y-73874380D01*
|
||||
X51506285Y-74017238D01*
|
||||
X51411047Y-74112476D01*
|
||||
X51315809Y-74160095D01*
|
||||
X76986190Y-50331666D02*
|
||||
X77462380Y-50331666D01*
|
||||
X76890952Y-50617380D02*
|
||||
X77224285Y-49617380D01*
|
||||
X77557619Y-50617380D01*
|
||||
X77748095Y-49617380D02*
|
||||
X78319523Y-49617380D01*
|
||||
X78033809Y-50617380D02*
|
||||
X78033809Y-49617380D01*
|
||||
X78510000Y-49617380D02*
|
||||
X79081428Y-49617380D01*
|
||||
X78795714Y-50617380D02*
|
||||
X78795714Y-49617380D01*
|
||||
X79414761Y-50617380D02*
|
||||
X79414761Y-49950714D01*
|
||||
X79414761Y-49617380D02*
|
||||
X79367142Y-49665000D01*
|
||||
X79414761Y-49712619D01*
|
||||
X79462380Y-49665000D01*
|
||||
X79414761Y-49617380D01*
|
||||
X79414761Y-49712619D01*
|
||||
X79890952Y-49950714D02*
|
||||
X79890952Y-50617380D01*
|
||||
X79890952Y-50045952D02*
|
||||
X79938571Y-49998333D01*
|
||||
X80033809Y-49950714D01*
|
||||
X80176666Y-49950714D01*
|
||||
X80271904Y-49998333D01*
|
||||
X80319523Y-50093571D01*
|
||||
X80319523Y-50617380D01*
|
||||
X80700476Y-49950714D02*
|
||||
X80938571Y-50617380D01*
|
||||
X81176666Y-49950714D02*
|
||||
X80938571Y-50617380D01*
|
||||
X80843333Y-50855476D01*
|
||||
X80795714Y-50903095D01*
|
||||
X80700476Y-50950714D01*
|
||||
X81700476Y-50045952D02*
|
||||
X81605238Y-49998333D01*
|
||||
X81557619Y-49950714D01*
|
||||
X81510000Y-49855476D01*
|
||||
X81510000Y-49807857D01*
|
||||
X81557619Y-49712619D01*
|
||||
X81605238Y-49665000D01*
|
||||
X81700476Y-49617380D01*
|
||||
X81890952Y-49617380D01*
|
||||
X81986190Y-49665000D01*
|
||||
X82033809Y-49712619D01*
|
||||
X82081428Y-49807857D01*
|
||||
X82081428Y-49855476D01*
|
||||
X82033809Y-49950714D01*
|
||||
X81986190Y-49998333D01*
|
||||
X81890952Y-50045952D01*
|
||||
X81700476Y-50045952D01*
|
||||
X81605238Y-50093571D01*
|
||||
X81557619Y-50141190D01*
|
||||
X81510000Y-50236428D01*
|
||||
X81510000Y-50426904D01*
|
||||
X81557619Y-50522142D01*
|
||||
X81605238Y-50569761D01*
|
||||
X81700476Y-50617380D01*
|
||||
X81890952Y-50617380D01*
|
||||
X81986190Y-50569761D01*
|
||||
X82033809Y-50522142D01*
|
||||
X82081428Y-50426904D01*
|
||||
X82081428Y-50236428D01*
|
||||
X82033809Y-50141190D01*
|
||||
X81986190Y-50093571D01*
|
||||
X81890952Y-50045952D01*
|
||||
X82938571Y-49950714D02*
|
||||
X82938571Y-50617380D01*
|
||||
X82700476Y-49569761D02*
|
||||
X82462380Y-50284047D01*
|
||||
X83081428Y-50284047D01*
|
||||
X75192142Y-66873380D02*
|
||||
X74858809Y-66397190D01*
|
||||
X74620714Y-66873380D02*
|
||||
X74620714Y-65873380D01*
|
||||
X75001666Y-65873380D01*
|
||||
X75096904Y-65921000D01*
|
||||
X75144523Y-65968619D01*
|
||||
X75192142Y-66063857D01*
|
||||
X75192142Y-66206714D01*
|
||||
X75144523Y-66301952D01*
|
||||
X75096904Y-66349571D01*
|
||||
X75001666Y-66397190D01*
|
||||
X74620714Y-66397190D01*
|
||||
X75954047Y-66349571D02*
|
||||
X75620714Y-66349571D01*
|
||||
X75620714Y-66873380D02*
|
||||
X75620714Y-65873380D01*
|
||||
X76096904Y-65873380D01*
|
||||
X76477857Y-66873380D02*
|
||||
X76477857Y-65873380D01*
|
||||
X76811190Y-66587666D01*
|
||||
X77144523Y-65873380D01*
|
||||
X77144523Y-66873380D01*
|
||||
X77668333Y-66873380D02*
|
||||
X77858809Y-66873380D01*
|
||||
X77954047Y-66825761D01*
|
||||
X78001666Y-66778142D01*
|
||||
X78096904Y-66635285D01*
|
||||
X78144523Y-66444809D01*
|
||||
X78144523Y-66063857D01*
|
||||
X78096904Y-65968619D01*
|
||||
X78049285Y-65921000D01*
|
||||
X77954047Y-65873380D01*
|
||||
X77763571Y-65873380D01*
|
||||
X77668333Y-65921000D01*
|
||||
X77620714Y-65968619D01*
|
||||
X77573095Y-66063857D01*
|
||||
X77573095Y-66301952D01*
|
||||
X77620714Y-66397190D01*
|
||||
X77668333Y-66444809D01*
|
||||
X77763571Y-66492428D01*
|
||||
X77954047Y-66492428D01*
|
||||
X78049285Y-66444809D01*
|
||||
X78096904Y-66397190D01*
|
||||
X78144523Y-66301952D01*
|
||||
X79049285Y-65873380D02*
|
||||
X78573095Y-65873380D01*
|
||||
X78525476Y-66349571D01*
|
||||
X78573095Y-66301952D01*
|
||||
X78668333Y-66254333D01*
|
||||
X78906428Y-66254333D01*
|
||||
X79001666Y-66301952D01*
|
||||
X79049285Y-66349571D01*
|
||||
X79096904Y-66444809D01*
|
||||
X79096904Y-66682904D01*
|
||||
X79049285Y-66778142D01*
|
||||
X79001666Y-66825761D01*
|
||||
X78906428Y-66873380D01*
|
||||
X78668333Y-66873380D01*
|
||||
X78573095Y-66825761D01*
|
||||
X78525476Y-66778142D01*
|
||||
X87915952Y-70270666D02*
|
||||
X88392142Y-70270666D01*
|
||||
X87820714Y-70556380D02*
|
||||
X88154047Y-69556380D01*
|
||||
X88487380Y-70556380D01*
|
||||
X88820714Y-70556380D02*
|
||||
X88820714Y-69556380D01*
|
||||
X89392142Y-70556380D01*
|
||||
X89392142Y-69556380D01*
|
||||
X89725476Y-69556380D02*
|
||||
X90296904Y-69556380D01*
|
||||
X90011190Y-70556380D02*
|
||||
X90011190Y-69556380D01*
|
||||
X91154047Y-70556380D02*
|
||||
X90582619Y-70556380D01*
|
||||
X90868333Y-70556380D02*
|
||||
X90868333Y-69556380D01*
|
||||
X90773095Y-69699238D01*
|
||||
X90677857Y-69794476D01*
|
||||
X90582619Y-69842095D01*
|
||||
M02*
|
|
@ -0,0 +1,13 @@
|
|||
M48
|
||||
; DRILL file {KiCad 5.1.4} date Do 05 Sep 2019 17:58:01 CEST
|
||||
; FORMAT={-:-/ absolute / inch / decimal}
|
||||
; #@! TF.CreationDate,2019-09-05T17:58:01+02:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,5.1.4
|
||||
; #@! TF.FileFunction,NonPlated,1,2,NPTH
|
||||
FMAT,2
|
||||
INCH
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T0
|
||||
M30
|
|
@ -0,0 +1,51 @@
|
|||
M48
|
||||
; DRILL file {KiCad 5.1.4} date Do 05 Sep 2019 17:58:01 CEST
|
||||
; FORMAT={-:-/ absolute / inch / decimal}
|
||||
; #@! TF.CreationDate,2019-09-05T17:58:01+02:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,5.1.4
|
||||
; #@! TF.FileFunction,Plated,1,2,PTH
|
||||
FMAT,2
|
||||
INCH
|
||||
T1C0.0157
|
||||
T2C0.0394
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X2.225Y-2.1
|
||||
X2.65Y-3.005
|
||||
X2.75Y-2.3
|
||||
X2.75Y-2.85
|
||||
X2.83Y-2.19
|
||||
X2.955Y-2.145
|
||||
X3.065Y-1.97
|
||||
X3.065Y-2.94
|
||||
X3.1Y-1.95
|
||||
X3.1Y-2.17
|
||||
X3.15Y-1.825
|
||||
X3.2Y-1.825
|
||||
X3.2Y-2.455
|
||||
X3.25Y-1.825
|
||||
X3.25Y-2.455
|
||||
X3.2518Y-2.536
|
||||
X3.275Y-2.775
|
||||
X3.3Y-1.825
|
||||
X3.3875Y-2.09
|
||||
T2
|
||||
X2.73Y-1.9
|
||||
X2.73Y-2.0
|
||||
X2.73Y-2.1
|
||||
X2.83Y-1.9
|
||||
X2.83Y-2.0
|
||||
X2.83Y-2.1
|
||||
X3.525Y-1.9
|
||||
X3.525Y-2.0
|
||||
X3.525Y-2.1
|
||||
X3.525Y-2.2
|
||||
X3.525Y-2.3
|
||||
X3.525Y-2.4
|
||||
X3.525Y-2.5
|
||||
X3.525Y-2.6
|
||||
X3.525Y-2.875
|
||||
T0
|
||||
M30
|
|
@ -0,0 +1,251 @@
|
|||
EESchema-LIBRARY Version 2.4
|
||||
#encoding utf-8
|
||||
#
|
||||
# Connector_Conn_01x08_Male
|
||||
#
|
||||
DEF Connector_Conn_01x08_Male J 0 40 Y N 1 F N
|
||||
F0 "J" 0 400 50 H V C CNN
|
||||
F1 "Connector_Conn_01x08_Male" 0 -500 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Connector*:*_1x??_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S 34 -395 0 -405 1 1 6 F
|
||||
S 34 -295 0 -305 1 1 6 F
|
||||
S 34 -195 0 -205 1 1 6 F
|
||||
S 34 -95 0 -105 1 1 6 F
|
||||
S 34 5 0 -5 1 1 6 F
|
||||
S 34 105 0 95 1 1 6 F
|
||||
S 34 205 0 195 1 1 6 F
|
||||
S 34 305 0 295 1 1 6 F
|
||||
P 2 1 1 6 50 -400 34 -400 N
|
||||
P 2 1 1 6 50 -300 34 -300 N
|
||||
P 2 1 1 6 50 -200 34 -200 N
|
||||
P 2 1 1 6 50 -100 34 -100 N
|
||||
P 2 1 1 6 50 0 34 0 N
|
||||
P 2 1 1 6 50 100 34 100 N
|
||||
P 2 1 1 6 50 200 34 200 N
|
||||
P 2 1 1 6 50 300 34 300 N
|
||||
X Pin_1 1 200 300 150 L 50 50 1 1 P
|
||||
X Pin_2 2 200 200 150 L 50 50 1 1 P
|
||||
X Pin_3 3 200 100 150 L 50 50 1 1 P
|
||||
X Pin_4 4 200 0 150 L 50 50 1 1 P
|
||||
X Pin_5 5 200 -100 150 L 50 50 1 1 P
|
||||
X Pin_6 6 200 -200 150 L 50 50 1 1 P
|
||||
X Pin_7 7 200 -300 150 L 50 50 1 1 P
|
||||
X Pin_8 8 200 -400 150 L 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Connector_Generic_Conn_02x03_Odd_Even
|
||||
#
|
||||
DEF Connector_Generic_Conn_02x03_Odd_Even J 0 40 Y N 1 F N
|
||||
F0 "J" 50 200 50 H V C CNN
|
||||
F1 "Connector_Generic_Conn_02x03_Odd_Even" 50 -200 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
Connector*:*_2x??_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -50 -95 0 -105 1 1 6 N
|
||||
S -50 5 0 -5 1 1 6 N
|
||||
S -50 105 0 95 1 1 6 N
|
||||
S -50 150 150 -150 1 1 10 f
|
||||
S 150 -95 100 -105 1 1 6 N
|
||||
S 150 5 100 -5 1 1 6 N
|
||||
S 150 105 100 95 1 1 6 N
|
||||
X Pin_1 1 -200 100 150 R 50 50 1 1 P
|
||||
X Pin_2 2 300 100 150 L 50 50 1 1 P
|
||||
X Pin_3 3 -200 0 150 R 50 50 1 1 P
|
||||
X Pin_4 4 300 0 150 L 50 50 1 1 P
|
||||
X Pin_5 5 -200 -100 150 R 50 50 1 1 P
|
||||
X Pin_6 6 300 -100 150 L 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_Antenna
|
||||
#
|
||||
DEF Device_Antenna AE 0 40 N N 1 F N
|
||||
F0 "AE" -75 75 50 H V R CNN
|
||||
F1 "Device_Antenna" -75 0 50 H V R CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
DRAW
|
||||
P 2 0 1 10 0 100 0 -150 N
|
||||
P 3 0 1 10 50 100 0 -100 -50 100 N
|
||||
X A 1 0 -200 100 U 50 50 1 1 I
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_Battery_Cell
|
||||
#
|
||||
DEF Device_Battery_Cell BT 0 0 N N 1 F N
|
||||
F0 "BT" 100 100 50 H V L CNN
|
||||
F1 "Device_Battery_Cell" 100 0 50 H V L CNN
|
||||
F2 "" 0 60 50 V I C CNN
|
||||
F3 "" 0 60 50 V I C CNN
|
||||
DRAW
|
||||
S -90 70 90 60 0 1 0 F
|
||||
S -62 47 58 27 0 1 0 F
|
||||
P 2 0 1 0 0 30 0 0 N
|
||||
P 2 0 1 0 0 70 0 100 N
|
||||
P 2 0 1 10 20 135 60 135 N
|
||||
P 2 0 1 10 40 155 40 115 N
|
||||
X + 1 0 200 100 D 50 50 1 1 P
|
||||
X - 2 0 -100 100 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_C
|
||||
#
|
||||
DEF Device_C C 0 10 N Y 1 F N
|
||||
F0 "C" 25 100 50 H V L CNN
|
||||
F1 "Device_C" 25 -100 50 H V L CNN
|
||||
F2 "" 38 -150 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
C_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
P 2 0 1 20 -80 -30 80 -30 N
|
||||
P 2 0 1 20 -80 30 80 30 N
|
||||
X ~ 1 0 150 110 D 50 50 1 1 P
|
||||
X ~ 2 0 -150 110 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_LED
|
||||
#
|
||||
DEF Device_LED D 0 40 N N 1 F N
|
||||
F0 "D" 0 100 50 H V C CNN
|
||||
F1 "Device_LED" 0 -100 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
LED*
|
||||
LED_SMD:*
|
||||
LED_THT:*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
P 2 0 1 8 -50 -50 -50 50 N
|
||||
P 2 0 1 0 -50 0 50 0 N
|
||||
P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N
|
||||
P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N
|
||||
P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N
|
||||
X K 1 -150 0 100 R 50 50 1 1 P
|
||||
X A 2 150 0 100 L 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# Device_R
|
||||
#
|
||||
DEF Device_R R 0 0 N Y 1 F N
|
||||
F0 "R" 80 0 50 V V C CNN
|
||||
F1 "Device_R" 0 0 50 V V C CNN
|
||||
F2 "" -70 0 50 V I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
$FPLIST
|
||||
R_*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -40 -100 40 100 0 1 10 N
|
||||
X ~ 1 0 150 50 D 50 50 1 1 P
|
||||
X ~ 2 0 -150 50 U 50 50 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# MCU_Microchip_ATtiny_ATtiny84A-SSU
|
||||
#
|
||||
DEF MCU_Microchip_ATtiny_ATtiny84A-SSU U 0 20 Y Y 1 F N
|
||||
F0 "U" -500 850 50 H V L BNN
|
||||
F1 "MCU_Microchip_ATtiny_ATtiny84A-SSU" 100 -850 50 H V L TNN
|
||||
F2 "Package_SO:SOIC-14_3.9x8.7mm_P1.27mm" 0 0 50 H I C CIN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
ALIAS ATtiny24-20SSU ATtiny24A-SSU ATtiny44V-10SSU ATtiny44-20SSU ATtiny44A-SSU ATtiny84V-10SSU ATtiny84-20SSU ATtiny84A-SSU
|
||||
$FPLIST
|
||||
SOIC*3.9x8.7mm*P1.27mm*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -500 -800 500 800 0 1 10 f
|
||||
X VCC 1 0 900 100 D 50 50 1 1 W
|
||||
X PA3 10 600 300 100 L 50 50 1 1 T
|
||||
X PA2 11 600 400 100 L 50 50 1 1 T
|
||||
X PA1 12 600 500 100 L 50 50 1 1 T
|
||||
X AREF/PA0 13 600 600 100 L 50 50 1 1 T
|
||||
X GND 14 0 -900 100 U 50 50 1 1 W
|
||||
X XTAL1/PB0 2 600 -300 100 L 50 50 1 1 T
|
||||
X XTAL2/PB1 3 600 -400 100 L 50 50 1 1 T
|
||||
X ~RESET~/PB3 4 600 -600 100 L 50 50 1 1 T
|
||||
X PB2 5 600 -500 100 L 50 50 1 1 T
|
||||
X PA7 6 600 -100 100 L 50 50 1 1 T
|
||||
X PA6 7 600 0 100 L 50 50 1 1 T
|
||||
X PA5 8 600 100 100 L 50 50 1 1 T
|
||||
X PA4 9 600 200 100 L 50 50 1 1 T
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# RF_Module_RFM95W-868S2
|
||||
#
|
||||
DEF RF_Module_RFM95W-868S2 U 0 40 Y Y 1 F N
|
||||
F0 "U" -410 460 50 H V L CNN
|
||||
F1 "RF_Module_RFM95W-868S2" 60 450 50 H V L CNN
|
||||
F2 "" -3300 1650 50 H I C CNN
|
||||
F3 "" -3300 1650 50 H I C CNN
|
||||
ALIAS RFM95W-915S2 RFM96W-315S2 RFM96W-433S2 RFM97W-868S2 RFM97W-915S2 RFM98W-315S2 RFM98W-433S2 RFM69HCW
|
||||
$FPLIST
|
||||
HOPERF*RFM9XW*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -400 400 400 -500 0 1 10 f
|
||||
X GND 1 -100 -600 100 U 50 50 1 1 W
|
||||
X GND 10 100 -600 100 U 50 50 1 1 W
|
||||
X DIO3 11 500 -100 100 L 50 50 1 1 B
|
||||
X DIO4 12 500 0 100 L 50 50 1 1 B
|
||||
X 3.3V 13 0 500 100 D 50 50 1 1 W
|
||||
X DIO0 14 500 -400 100 L 50 50 1 1 B
|
||||
X DIO1 15 500 -300 100 L 50 50 1 1 B
|
||||
X DIO2 16 500 -200 100 L 50 50 1 1 B
|
||||
X MISO 2 -500 100 100 R 50 50 1 1 O
|
||||
X MOSI 3 -500 200 100 R 50 50 1 1 I
|
||||
X SCK 4 -500 300 100 R 50 50 1 1 I
|
||||
X NSS 5 -500 0 100 R 50 50 1 1 I
|
||||
X RESET 6 -500 -200 100 R 50 50 1 1 B
|
||||
X DIO5 7 500 100 100 L 50 50 1 1 B
|
||||
X GND 8 0 -600 100 U 50 50 1 1 W
|
||||
X ANT 9 500 300 100 L 50 50 1 1 B
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# power_+3V3
|
||||
#
|
||||
DEF power_+3V3 #PWR 0 0 Y Y 1 F P
|
||||
F0 "#PWR" 0 -150 50 H I C CNN
|
||||
F1 "power_+3V3" 0 140 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
ALIAS +3.3V
|
||||
DRAW
|
||||
P 2 0 1 0 -30 50 0 100 N
|
||||
P 2 0 1 0 0 0 0 100 N
|
||||
P 2 0 1 0 0 100 30 50 N
|
||||
X +3V3 1 0 0 0 U 50 50 1 1 W N
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# power_GND
|
||||
#
|
||||
DEF power_GND #PWR 0 0 Y Y 1 F P
|
||||
F0 "#PWR" 0 -250 50 H I C CNN
|
||||
F1 "power_GND" 0 -150 50 H V C CNN
|
||||
F2 "" 0 0 50 H I C CNN
|
||||
F3 "" 0 0 50 H I C CNN
|
||||
DRAW
|
||||
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
|
||||
X GND 1 0 0 0 D 50 50 1 1 W N
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
#End Library
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,285 @@
|
|||
(export (version D)
|
||||
(design
|
||||
(source /data/Git/IOT/LORA_ATTINY84/LORA_ATTINY84.sch)
|
||||
(date "Mi 28 Aug 2019 10:33:34 CEST")
|
||||
(tool "Eeschema 5.1.4")
|
||||
(sheet (number 1) (name /) (tstamps /)
|
||||
(title_block
|
||||
(title)
|
||||
(company)
|
||||
(rev)
|
||||
(date)
|
||||
(source LORA_ATTINY84.sch)
|
||||
(comment (number 1) (value ""))
|
||||
(comment (number 2) (value ""))
|
||||
(comment (number 3) (value ""))
|
||||
(comment (number 4) (value "")))))
|
||||
(components
|
||||
(comp (ref U1)
|
||||
(value ATtiny84A-SSU)
|
||||
(footprint Package_SO:SOIC-14_3.9x8.7mm_P1.27mm)
|
||||
(datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/doc8183.pdf)
|
||||
(libsource (lib MCU_Microchip_ATtiny) (part ATtiny84A-SSU) (description "20MHz, 8kB Flash, 512B SRAM, 512B EEPROM, debugWIRE, SOIC-14"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5D66342E))
|
||||
(comp (ref J1)
|
||||
(value Sensor)
|
||||
(footprint Connector_PinSocket_2.54mm:PinSocket_1x08_P2.54mm_Vertical)
|
||||
(datasheet ~)
|
||||
(libsource (lib Connector) (part Conn_01x08_Male) (description "Generic connector, single row, 01x08, script generated (kicad-library-utils/schlib/autogen/connector/)"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5D68DC89))
|
||||
(comp (ref AE1)
|
||||
(value Antenna)
|
||||
(footprint Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Horizontal)
|
||||
(datasheet ~)
|
||||
(libsource (lib Device) (part Antenna) (description Antenna))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5D699DFD))
|
||||
(comp (ref C2)
|
||||
(value 100n)
|
||||
(footprint Capacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolder)
|
||||
(datasheet ~)
|
||||
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5D6B1612))
|
||||
(comp (ref C1)
|
||||
(value 100n)
|
||||
(footprint Capacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolder)
|
||||
(datasheet ~)
|
||||
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5D6B2940))
|
||||
(comp (ref J2)
|
||||
(value PRG)
|
||||
(footprint Connector_PinSocket_2.54mm:PinSocket_2x03_P2.54mm_Vertical)
|
||||
(datasheet ~)
|
||||
(libsource (lib Connector_Generic) (part Conn_02x03_Odd_Even) (description "Generic connector, double row, 02x03, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5D69C5BF))
|
||||
(comp (ref BT1)
|
||||
(value Battery_Cell)
|
||||
(footprint Battery:BatteryHolder_Keystone_1060_1x2032)
|
||||
(datasheet ~)
|
||||
(libsource (lib Device) (part Battery_Cell) (description "Single-cell battery"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5D6F40EE))
|
||||
(comp (ref U2)
|
||||
(value RFM95W-868S2)
|
||||
(footprint RFM9X:RFM9X-TH)
|
||||
(datasheet https://www.hoperf.com/data/upload/portal/20181127/5bfcbea20e9ef.pdf)
|
||||
(libsource (lib RF_Module) (part RFM95W-868S2) (description "Low power long range transceiver module, SPI and parallel interface, 868 MHz, spreading factor 6 to12, bandwith 7.8 to 500kHz, -111 to -148 dBm, SMD-16, DIP-16"))
|
||||
(sheetpath (names /) (tstamps /))
|
||||
(tstamp 5D664943)))
|
||||
(libparts
|
||||
(libpart (lib Connector) (part Conn_01x08_Male)
|
||||
(description "Generic connector, single row, 01x08, script generated (kicad-library-utils/schlib/autogen/connector/)")
|
||||
(docs ~)
|
||||
(footprints
|
||||
(fp Connector*:*_1x??_*))
|
||||
(fields
|
||||
(field (name Reference) J)
|
||||
(field (name Value) Conn_01x08_Male))
|
||||
(pins
|
||||
(pin (num 1) (name Pin_1) (type passive))
|
||||
(pin (num 2) (name Pin_2) (type passive))
|
||||
(pin (num 3) (name Pin_3) (type passive))
|
||||
(pin (num 4) (name Pin_4) (type passive))
|
||||
(pin (num 5) (name Pin_5) (type passive))
|
||||
(pin (num 6) (name Pin_6) (type passive))
|
||||
(pin (num 7) (name Pin_7) (type passive))
|
||||
(pin (num 8) (name Pin_8) (type passive))))
|
||||
(libpart (lib Connector_Generic) (part Conn_02x03_Odd_Even)
|
||||
(description "Generic connector, double row, 02x03, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)")
|
||||
(docs ~)
|
||||
(footprints
|
||||
(fp Connector*:*_2x??_*))
|
||||
(fields
|
||||
(field (name Reference) J)
|
||||
(field (name Value) Conn_02x03_Odd_Even))
|
||||
(pins
|
||||
(pin (num 1) (name Pin_1) (type passive))
|
||||
(pin (num 2) (name Pin_2) (type passive))
|
||||
(pin (num 3) (name Pin_3) (type passive))
|
||||
(pin (num 4) (name Pin_4) (type passive))
|
||||
(pin (num 5) (name Pin_5) (type passive))
|
||||
(pin (num 6) (name Pin_6) (type passive))))
|
||||
(libpart (lib Device) (part Antenna)
|
||||
(description Antenna)
|
||||
(docs ~)
|
||||
(fields
|
||||
(field (name Reference) AE)
|
||||
(field (name Value) Antenna))
|
||||
(pins
|
||||
(pin (num 1) (name A) (type input))))
|
||||
(libpart (lib Device) (part Battery_Cell)
|
||||
(description "Single-cell battery")
|
||||
(docs ~)
|
||||
(fields
|
||||
(field (name Reference) BT)
|
||||
(field (name Value) Battery_Cell))
|
||||
(pins
|
||||
(pin (num 1) (name +) (type passive))
|
||||
(pin (num 2) (name -) (type passive))))
|
||||
(libpart (lib Device) (part C)
|
||||
(description "Unpolarized capacitor")
|
||||
(docs ~)
|
||||
(footprints
|
||||
(fp C_*))
|
||||
(fields
|
||||
(field (name Reference) C)
|
||||
(field (name Value) C))
|
||||
(pins
|
||||
(pin (num 1) (name ~) (type passive))
|
||||
(pin (num 2) (name ~) (type passive))))
|
||||
(libpart (lib MCU_Microchip_ATtiny) (part ATtiny24V-10SSU)
|
||||
(aliases
|
||||
(alias ATtiny24-20SSU)
|
||||
(alias ATtiny24A-SSU)
|
||||
(alias ATtiny44V-10SSU)
|
||||
(alias ATtiny44-20SSU)
|
||||
(alias ATtiny44A-SSU)
|
||||
(alias ATtiny84V-10SSU)
|
||||
(alias ATtiny84-20SSU)
|
||||
(alias ATtiny84A-SSU))
|
||||
(description "10MHz, 2kB Flash, 128B SRAM, 128B EEPROM, debugWIRE, SOIC-14")
|
||||
(docs http://ww1.microchip.com/downloads/en/DeviceDoc/doc8006.pdf)
|
||||
(footprints
|
||||
(fp SOIC*3.9x8.7mm*P1.27mm*))
|
||||
(fields
|
||||
(field (name Reference) U)
|
||||
(field (name Value) ATtiny24V-10SSU)
|
||||
(field (name Footprint) Package_SO:SOIC-14_3.9x8.7mm_P1.27mm))
|
||||
(pins
|
||||
(pin (num 1) (name VCC) (type power_in))
|
||||
(pin (num 2) (name XTAL1/PB0) (type 3state))
|
||||
(pin (num 3) (name XTAL2/PB1) (type 3state))
|
||||
(pin (num 4) (name ~RESET~/PB3) (type 3state))
|
||||
(pin (num 5) (name PB2) (type 3state))
|
||||
(pin (num 6) (name PA7) (type 3state))
|
||||
(pin (num 7) (name PA6) (type 3state))
|
||||
(pin (num 8) (name PA5) (type 3state))
|
||||
(pin (num 9) (name PA4) (type 3state))
|
||||
(pin (num 10) (name PA3) (type 3state))
|
||||
(pin (num 11) (name PA2) (type 3state))
|
||||
(pin (num 12) (name PA1) (type 3state))
|
||||
(pin (num 13) (name AREF/PA0) (type 3state))
|
||||
(pin (num 14) (name GND) (type power_in))))
|
||||
(libpart (lib RF_Module) (part RFM95W-868S2)
|
||||
(aliases
|
||||
(alias RFM95W-915S2)
|
||||
(alias RFM96W-315S2)
|
||||
(alias RFM96W-433S2)
|
||||
(alias RFM97W-868S2)
|
||||
(alias RFM97W-915S2)
|
||||
(alias RFM98W-315S2)
|
||||
(alias RFM98W-433S2)
|
||||
(alias RFM69HCW))
|
||||
(description "Low power long range transceiver module, SPI and parallel interface, 868 MHz, spreading factor 6 to12, bandwith 7.8 to 500kHz, -111 to -148 dBm, SMD-16, DIP-16")
|
||||
(docs https://www.hoperf.com/data/upload/portal/20181127/5bfcbea20e9ef.pdf)
|
||||
(footprints
|
||||
(fp HOPERF*RFM9XW*))
|
||||
(fields
|
||||
(field (name Reference) U)
|
||||
(field (name Value) RFM95W-868S2))
|
||||
(pins
|
||||
(pin (num 1) (name GND) (type power_in))
|
||||
(pin (num 2) (name MISO) (type output))
|
||||
(pin (num 3) (name MOSI) (type input))
|
||||
(pin (num 4) (name SCK) (type input))
|
||||
(pin (num 5) (name NSS) (type input))
|
||||
(pin (num 6) (name RESET) (type BiDi))
|
||||
(pin (num 7) (name DIO5) (type BiDi))
|
||||
(pin (num 8) (name GND) (type power_in))
|
||||
(pin (num 9) (name ANT) (type BiDi))
|
||||
(pin (num 10) (name GND) (type power_in))
|
||||
(pin (num 11) (name DIO3) (type BiDi))
|
||||
(pin (num 12) (name DIO4) (type BiDi))
|
||||
(pin (num 13) (name 3.3V) (type power_in))
|
||||
(pin (num 14) (name DIO0) (type BiDi))
|
||||
(pin (num 15) (name DIO1) (type BiDi))
|
||||
(pin (num 16) (name DIO2) (type BiDi)))))
|
||||
(libraries
|
||||
(library (logical Connector)
|
||||
(uri /usr/share/kicad/library/Connector.lib))
|
||||
(library (logical Connector_Generic)
|
||||
(uri /usr/share/kicad/library/Connector_Generic.lib))
|
||||
(library (logical Device)
|
||||
(uri /usr/share/kicad/library/Device.lib))
|
||||
(library (logical MCU_Microchip_ATtiny)
|
||||
(uri /usr/share/kicad/library/MCU_Microchip_ATtiny.lib))
|
||||
(library (logical RF_Module)
|
||||
(uri /usr/share/kicad/library/RF_Module.lib)))
|
||||
(nets
|
||||
(net (code 1) (name +3V3)
|
||||
(node (ref J1) (pin 8))
|
||||
(node (ref BT1) (pin 1))
|
||||
(node (ref U1) (pin 1))
|
||||
(node (ref J2) (pin 2))
|
||||
(node (ref C2) (pin 1))
|
||||
(node (ref C1) (pin 2))
|
||||
(node (ref U2) (pin 13)))
|
||||
(net (code 2) (name GND)
|
||||
(node (ref U2) (pin 1))
|
||||
(node (ref U2) (pin 10))
|
||||
(node (ref J1) (pin 7))
|
||||
(node (ref BT1) (pin 2))
|
||||
(node (ref C1) (pin 1))
|
||||
(node (ref J2) (pin 6))
|
||||
(node (ref C2) (pin 2))
|
||||
(node (ref U1) (pin 14))
|
||||
(node (ref U2) (pin 8)))
|
||||
(net (code 3) (name "Net-(U2-Pad7)")
|
||||
(node (ref U2) (pin 7)))
|
||||
(net (code 4) (name DIO0)
|
||||
(node (ref U1) (pin 2))
|
||||
(node (ref U2) (pin 14)))
|
||||
(net (code 5) (name "Net-(U2-Pad15)")
|
||||
(node (ref U2) (pin 15)))
|
||||
(net (code 6) (name "Net-(U2-Pad16)")
|
||||
(node (ref U2) (pin 16)))
|
||||
(net (code 7) (name NSS)
|
||||
(node (ref U2) (pin 5))
|
||||
(node (ref U1) (pin 3)))
|
||||
(net (code 8) (name "Net-(U2-Pad6)")
|
||||
(node (ref U2) (pin 6)))
|
||||
(net (code 9) (name "Net-(AE1-Pad1)")
|
||||
(node (ref AE1) (pin 1))
|
||||
(node (ref U2) (pin 9)))
|
||||
(net (code 10) (name "Net-(U2-Pad12)")
|
||||
(node (ref U2) (pin 12)))
|
||||
(net (code 11) (name "Net-(U2-Pad11)")
|
||||
(node (ref U2) (pin 11)))
|
||||
(net (code 12) (name PA3)
|
||||
(node (ref U1) (pin 10))
|
||||
(node (ref J1) (pin 3)))
|
||||
(net (code 13) (name PA2)
|
||||
(node (ref U1) (pin 11))
|
||||
(node (ref J1) (pin 4)))
|
||||
(net (code 14) (name PA1)
|
||||
(node (ref U1) (pin 12))
|
||||
(node (ref J1) (pin 5)))
|
||||
(net (code 15) (name PA0)
|
||||
(node (ref U1) (pin 13))
|
||||
(node (ref J1) (pin 6)))
|
||||
(net (code 16) (name PB2)
|
||||
(node (ref J1) (pin 1))
|
||||
(node (ref U1) (pin 5)))
|
||||
(net (code 17) (name PA7)
|
||||
(node (ref U1) (pin 6))
|
||||
(node (ref J1) (pin 2)))
|
||||
(net (code 19) (name MISO)
|
||||
(node (ref J2) (pin 1))
|
||||
(node (ref U1) (pin 8))
|
||||
(node (ref U2) (pin 2)))
|
||||
(net (code 20) (name SCK)
|
||||
(node (ref J2) (pin 3))
|
||||
(node (ref U1) (pin 9))
|
||||
(node (ref U2) (pin 4)))
|
||||
(net (code 21) (name MOSI)
|
||||
(node (ref U1) (pin 7))
|
||||
(node (ref J2) (pin 4))
|
||||
(node (ref U2) (pin 3)))
|
||||
(net (code 22) (name RST)
|
||||
(node (ref J2) (pin 5))
|
||||
(node (ref U1) (pin 4)))))
|
|
@ -0,0 +1,248 @@
|
|||
update=Mi 28 Aug 2019 13:17:55 CEST
|
||||
version=1
|
||||
last_client=kicad
|
||||
[general]
|
||||
version=1
|
||||
RootSch=
|
||||
BoardNm=
|
||||
[cvpcb]
|
||||
version=1
|
||||
NetIExt=net
|
||||
[eeschema]
|
||||
version=1
|
||||
LibDir=
|
||||
[eeschema/libraries]
|
||||
[pcbnew]
|
||||
version=1
|
||||
PageLayoutDescrFile=
|
||||
LastNetListRead=LORA_ATTINY84.net
|
||||
CopperLayerCount=2
|
||||
BoardThickness=1.6
|
||||
AllowMicroVias=0
|
||||
AllowBlindVias=0
|
||||
RequireCourtyardDefinitions=0
|
||||
ProhibitOverlappingCourtyards=1
|
||||
MinTrackWidth=0.2
|
||||
MinViaDiameter=0.4
|
||||
MinViaDrill=0.3
|
||||
MinMicroViaDiameter=0.2
|
||||
MinMicroViaDrill=0.09999999999999999
|
||||
MinHoleToHole=0.25
|
||||
TrackWidth1=0.25
|
||||
ViaDiameter1=0.8
|
||||
ViaDrill1=0.4
|
||||
dPairWidth1=0.2
|
||||
dPairGap1=0.25
|
||||
dPairViaGap1=0.25
|
||||
SilkLineWidth=0.12
|
||||
SilkTextSizeV=1
|
||||
SilkTextSizeH=1
|
||||
SilkTextSizeThickness=0.15
|
||||
SilkTextItalic=0
|
||||
SilkTextUpright=1
|
||||
CopperLineWidth=0.2
|
||||
CopperTextSizeV=1.5
|
||||
CopperTextSizeH=1.5
|
||||
CopperTextThickness=0.3
|
||||
CopperTextItalic=0
|
||||
CopperTextUpright=1
|
||||
EdgeCutLineWidth=0.05
|
||||
CourtyardLineWidth=0.05
|
||||
OthersLineWidth=0.15
|
||||
OthersTextSizeV=1
|
||||
OthersTextSizeH=1
|
||||
OthersTextSizeThickness=0.15
|
||||
OthersTextItalic=0
|
||||
OthersTextUpright=1
|
||||
SolderMaskClearance=0.051
|
||||
SolderMaskMinWidth=0.25
|
||||
SolderPasteClearance=0
|
||||
SolderPasteRatio=0
|
||||
[pcbnew/Layer.F.Cu]
|
||||
Name=F.Cu
|
||||
Type=0
|
||||
Enabled=1
|
||||
[pcbnew/Layer.In1.Cu]
|
||||
Name=In1.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In2.Cu]
|
||||
Name=In2.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In3.Cu]
|
||||
Name=In3.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In4.Cu]
|
||||
Name=In4.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In5.Cu]
|
||||
Name=In5.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In6.Cu]
|
||||
Name=In6.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In7.Cu]
|
||||
Name=In7.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In8.Cu]
|
||||
Name=In8.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In9.Cu]
|
||||
Name=In9.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In10.Cu]
|
||||
Name=In10.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In11.Cu]
|
||||
Name=In11.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In12.Cu]
|
||||
Name=In12.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In13.Cu]
|
||||
Name=In13.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In14.Cu]
|
||||
Name=In14.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In15.Cu]
|
||||
Name=In15.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In16.Cu]
|
||||
Name=In16.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In17.Cu]
|
||||
Name=In17.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In18.Cu]
|
||||
Name=In18.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In19.Cu]
|
||||
Name=In19.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In20.Cu]
|
||||
Name=In20.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In21.Cu]
|
||||
Name=In21.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In22.Cu]
|
||||
Name=In22.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In23.Cu]
|
||||
Name=In23.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In24.Cu]
|
||||
Name=In24.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In25.Cu]
|
||||
Name=In25.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In26.Cu]
|
||||
Name=In26.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In27.Cu]
|
||||
Name=In27.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In28.Cu]
|
||||
Name=In28.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In29.Cu]
|
||||
Name=In29.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.In30.Cu]
|
||||
Name=In30.Cu
|
||||
Type=0
|
||||
Enabled=0
|
||||
[pcbnew/Layer.B.Cu]
|
||||
Name=B.Cu
|
||||
Type=0
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Adhes]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Adhes]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Paste]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Paste]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.SilkS]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.SilkS]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Mask]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Mask]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Dwgs.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Cmts.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Eco1.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Eco2.User]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Edge.Cuts]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Margin]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.CrtYd]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.CrtYd]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.B.Fab]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.F.Fab]
|
||||
Enabled=1
|
||||
[pcbnew/Layer.Rescue]
|
||||
Enabled=1
|
||||
[pcbnew/Netclasses]
|
||||
[pcbnew/Netclasses/Default]
|
||||
Name=Default
|
||||
Clearance=0.2
|
||||
TrackWidth=0.25
|
||||
ViaDiameter=0.8
|
||||
ViaDrill=0.4
|
||||
uViaDiameter=0.3
|
||||
uViaDrill=0.1
|
||||
dPairWidth=0.2
|
||||
dPairGap=0.25
|
||||
dPairViaGap=0.25
|
||||
[schematic_editor]
|
||||
version=1
|
||||
PageLayoutDescrFile=
|
||||
PlotDirectoryName=./
|
||||
SubpartIdSeparator=0
|
||||
SubpartFirstId=65
|
||||
NetFmtName=Pcbnew
|
||||
SpiceAjustPassiveValues=0
|
||||
LabSize=50
|
||||
ERC_TestSimilarLabels=1
|
|
@ -0,0 +1,384 @@
|
|||
EESchema Schematic File Version 4
|
||||
LIBS:LORA_ATTINY84-cache
|
||||
EELAYER 30 0
|
||||
EELAYER END
|
||||
$Descr A4 8268 11693 portrait
|
||||
encoding utf-8
|
||||
Sheet 1 1
|
||||
Title "TinyLora"
|
||||
Date "2019-08-29"
|
||||
Rev "1.1"
|
||||
Comp ""
|
||||
Comment1 "A ATTiny84 + RFM95W Based Lora Sensor Basenode"
|
||||
Comment2 ""
|
||||
Comment3 ""
|
||||
Comment4 ""
|
||||
$EndDescr
|
||||
$Comp
|
||||
L power:GND #PWR0101
|
||||
U 1 1 5D662E21
|
||||
P 1900 4800
|
||||
F 0 "#PWR0101" H 1900 4550 50 0001 C CNN
|
||||
F 1 "GND" H 1905 4627 50 0000 C CNN
|
||||
F 2 "" H 1900 4800 50 0001 C CNN
|
||||
F 3 "" H 1900 4800 50 0001 C CNN
|
||||
1 1900 4800
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L MCU_Microchip_ATtiny:ATtiny84A-SSU ATTiny84
|
||||
U 1 1 5D66342E
|
||||
P 1900 3900
|
||||
F 0 "ATTiny84" H 2050 4050 50 0000 R CNN
|
||||
F 1 "ATtiny84A-SSU" H 2150 3900 50 0001 R CNN
|
||||
F 2 "Package_SO:SOIC-14_3.9x8.7mm_P1.27mm" H 1900 3900 50 0001 C CIN
|
||||
F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/doc8183.pdf" H 1900 3900 50 0001 C CNN
|
||||
1 1900 3900
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
2250 1900 2250 1800
|
||||
$Comp
|
||||
L power:GND #PWR0103
|
||||
U 1 1 5D68B8DB
|
||||
P 2550 1800
|
||||
F 0 "#PWR0103" H 2550 1550 50 0001 C CNN
|
||||
F 1 "GND" H 2555 1627 50 0000 C CNN
|
||||
F 2 "" H 2550 1800 50 0001 C CNN
|
||||
F 3 "" H 2550 1800 50 0001 C CNN
|
||||
1 2550 1800
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
2550 1700 2550 1800
|
||||
$Comp
|
||||
L Connector:Conn_01x08_Male J1
|
||||
U 1 1 5D68DC89
|
||||
P 3150 3300
|
||||
F 0 "J1" H 3400 3750 50 0000 R CNN
|
||||
F 1 "J1" H 3122 3273 50 0001 R CNN
|
||||
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical" H 3150 3300 50 0001 C CNN
|
||||
F 3 "~" H 3150 3300 50 0001 C CNN
|
||||
1 3150 3300
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
1900 2950 1900 3000
|
||||
$Comp
|
||||
L Device:Antenna ANT1
|
||||
U 1 1 5D699DFD
|
||||
P 1500 1000
|
||||
F 0 "ANT1" H 1580 989 50 0000 L CNN
|
||||
F 1 "Antenna" H 1580 898 50 0000 L CNN
|
||||
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_Vertical" H 1500 1000 50 0001 C CNN
|
||||
F 3 "~" H 1500 1000 50 0001 C CNN
|
||||
1 1500 1000
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L power:GND #PWR0104
|
||||
U 1 1 5D6A5353
|
||||
P 3800 4600
|
||||
F 0 "#PWR0104" H 3800 4350 50 0001 C CNN
|
||||
F 1 "GND" H 3805 4427 50 0000 C CNN
|
||||
F 2 "" H 3800 4600 50 0001 C CNN
|
||||
F 3 "" H 3800 4600 50 0001 C CNN
|
||||
1 3800 4600
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
3700 4500 3800 4500
|
||||
Wire Wire Line
|
||||
3800 4500 3800 4600
|
||||
$Comp
|
||||
L Connector_Generic:Conn_02x03_Odd_Even PRG1
|
||||
U 1 1 5D69C5BF
|
||||
P 3400 4400
|
||||
F 0 "PRG1" H 3450 4650 50 0000 C CNN
|
||||
F 1 "PRG" H 3450 4626 50 0001 C CNN
|
||||
F 2 "Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical" H 3400 4400 50 0001 C CNN
|
||||
F 3 "~" H 3400 4400 50 0001 C CNN
|
||||
1 3400 4400
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Text GLabel 2500 3700 2 50 Input ~ 0
|
||||
SCK
|
||||
Text GLabel 2500 3800 2 50 Input ~ 0
|
||||
MISO
|
||||
Text GLabel 2500 3900 2 50 Input ~ 0
|
||||
MOSI
|
||||
Text GLabel 2500 4200 2 50 Input ~ 0
|
||||
DIO0
|
||||
Text GLabel 2500 4300 2 50 Input ~ 0
|
||||
NSS
|
||||
Text GLabel 2500 4500 2 50 Input ~ 0
|
||||
RST
|
||||
Text GLabel 1500 2200 3 50 Input ~ 0
|
||||
SCK
|
||||
Text GLabel 1700 2200 3 50 Input ~ 0
|
||||
MOSI
|
||||
Text GLabel 1600 2200 3 50 Input ~ 0
|
||||
MISO
|
||||
Text GLabel 1800 2200 3 50 Input ~ 0
|
||||
NSS
|
||||
Text GLabel 2200 1200 1 50 Input ~ 0
|
||||
DIO0
|
||||
Wire Wire Line
|
||||
2400 1700 2450 1700
|
||||
Text GLabel 2500 3300 2 50 Input ~ 0
|
||||
PA0
|
||||
Text GLabel 2500 3400 2 50 Input ~ 0
|
||||
PA1
|
||||
Text GLabel 2500 3500 2 50 Input ~ 0
|
||||
PA2
|
||||
Text GLabel 2500 3600 2 50 Input ~ 0
|
||||
PA3
|
||||
Text GLabel 2500 4000 2 50 Input ~ 0
|
||||
PA7
|
||||
Text GLabel 2500 4400 2 50 Input ~ 0
|
||||
PB2
|
||||
Text GLabel 3350 3200 2 50 Input ~ 0
|
||||
PA0
|
||||
Text GLabel 3350 3300 2 50 Input ~ 0
|
||||
PA1
|
||||
Text GLabel 3350 3400 2 50 Input ~ 0
|
||||
PA2
|
||||
Text GLabel 3350 3500 2 50 Input ~ 0
|
||||
PA3
|
||||
Text GLabel 3350 3600 2 50 Input ~ 0
|
||||
PA7
|
||||
Text GLabel 3350 3700 2 50 Input ~ 0
|
||||
PB2
|
||||
$Comp
|
||||
L power:GND #PWR0102
|
||||
U 1 1 5D6F5F48
|
||||
P 3250 1650
|
||||
F 0 "#PWR0102" H 3250 1400 50 0001 C CNN
|
||||
F 1 "GND" H 3255 1477 50 0000 C CNN
|
||||
F 2 "" H 3250 1650 50 0001 C CNN
|
||||
F 3 "" H 3250 1650 50 0001 C CNN
|
||||
1 3250 1650
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:Battery_Cell BAT1
|
||||
U 1 1 5D6F40EE
|
||||
P 3250 1550
|
||||
F 0 "BAT1" H 3368 1646 50 0000 L CNN
|
||||
F 1 "Battery_Cell" H 3368 1555 50 0001 L CNN
|
||||
F 2 "battery_holder:BatteryHolder_Keystone_1060_1x2032_Long_Pad" V 3250 1610 50 0001 C CNN
|
||||
F 3 "~" V 3250 1610 50 0001 C CNN
|
||||
1 3250 1550
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L power:+3V3 #PWR0105
|
||||
U 1 1 5D6F66AA
|
||||
P 3250 1350
|
||||
F 0 "#PWR0105" H 3250 1200 50 0001 C CNN
|
||||
F 1 "+3V3" H 3265 1523 50 0000 C CNN
|
||||
F 2 "" H 3250 1350 50 0001 C CNN
|
||||
F 3 "" H 3250 1350 50 0001 C CNN
|
||||
1 3250 1350
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L power:+3V3 #PWR0106
|
||||
U 1 1 5D6F6B97
|
||||
P 1100 1550
|
||||
F 0 "#PWR0106" H 1100 1400 50 0001 C CNN
|
||||
F 1 "+3V3" H 1115 1723 50 0000 C CNN
|
||||
F 2 "" H 1100 1550 50 0001 C CNN
|
||||
F 3 "" H 1100 1550 50 0001 C CNN
|
||||
1 1100 1550
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
1100 1550 1100 1700
|
||||
$Comp
|
||||
L power:+3V3 #PWR0107
|
||||
U 1 1 5D6F753F
|
||||
P 1900 2950
|
||||
F 0 "#PWR0107" H 1900 2800 50 0001 C CNN
|
||||
F 1 "+3V3" H 1915 3123 50 0000 C CNN
|
||||
F 2 "" H 1900 2950 50 0001 C CNN
|
||||
F 3 "" H 1900 2950 50 0001 C CNN
|
||||
1 1900 2950
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L power:+3V3 #PWR0108
|
||||
U 1 1 5D6F7EE7
|
||||
P 3800 4250
|
||||
F 0 "#PWR0108" H 3800 4100 50 0001 C CNN
|
||||
F 1 "+3V3" H 3815 4423 50 0000 C CNN
|
||||
F 2 "" H 3800 4250 50 0001 C CNN
|
||||
F 3 "" H 3800 4250 50 0001 C CNN
|
||||
1 3800 4250
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
3700 4300 3800 4300
|
||||
Wire Wire Line
|
||||
3800 4300 3800 4250
|
||||
Text GLabel 3700 4400 2 50 Input ~ 0
|
||||
MOSI
|
||||
Text GLabel 3200 4300 0 50 Input ~ 0
|
||||
MISO
|
||||
Text GLabel 3200 4400 0 50 Input ~ 0
|
||||
SCK
|
||||
Text GLabel 3200 4500 0 50 Input ~ 0
|
||||
RST
|
||||
$Comp
|
||||
L power:+3V3 #PWR0109
|
||||
U 1 1 5D6FB5F9
|
||||
P 3650 2950
|
||||
F 0 "#PWR0109" H 3650 2800 50 0001 C CNN
|
||||
F 1 "+3V3" H 3650 3100 50 0000 C CNN
|
||||
F 2 "" H 3650 2950 50 0001 C CNN
|
||||
F 3 "" H 3650 2950 50 0001 C CNN
|
||||
1 3650 2950
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L power:GND #PWR0110
|
||||
U 1 1 5D6FC140
|
||||
P 3650 3200
|
||||
F 0 "#PWR0110" H 3650 2950 50 0001 C CNN
|
||||
F 1 "GND" H 3655 3027 50 0000 C CNN
|
||||
F 2 "" H 3650 3200 50 0001 C CNN
|
||||
F 3 "" H 3650 3200 50 0001 C CNN
|
||||
1 3650 3200
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
2450 1700 2450 1600
|
||||
Connection ~ 2450 1700
|
||||
Wire Wire Line
|
||||
2450 1700 2550 1700
|
||||
NoConn ~ 2100 1200
|
||||
NoConn ~ 2000 1200
|
||||
NoConn ~ 1900 1200
|
||||
NoConn ~ 1800 1200
|
||||
NoConn ~ 1700 1200
|
||||
NoConn ~ 2000 2200
|
||||
Wire Wire Line
|
||||
2400 1600 2450 1600
|
||||
Wire Wire Line
|
||||
2450 1800 2450 1700
|
||||
Wire Wire Line
|
||||
1100 1700 1300 1700
|
||||
$Comp
|
||||
L Device:LED D1
|
||||
U 1 1 5D67F14D
|
||||
P 3600 2450
|
||||
F 0 "D1" H 3600 2200 50 0000 C CNN
|
||||
F 1 "LED" H 3600 2300 50 0000 C CNN
|
||||
F 2 "LED_SMD:LED_1206_3216Metric_Pad1.42x1.75mm_HandSolder" H 3600 2450 50 0001 C CNN
|
||||
F 3 "~" H 3600 2450 50 0001 C CNN
|
||||
1 3600 2450
|
||||
-1 0 0 1
|
||||
$EndComp
|
||||
$Comp
|
||||
L power:GND #PWR0111
|
||||
U 1 1 5D67F99A
|
||||
P 3850 2550
|
||||
F 0 "#PWR0111" H 3850 2300 50 0001 C CNN
|
||||
F 1 "GND" H 3855 2377 50 0000 C CNN
|
||||
F 2 "" H 3850 2550 50 0001 C CNN
|
||||
F 3 "" H 3850 2550 50 0001 C CNN
|
||||
1 3850 2550
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:R R1
|
||||
U 1 1 5D6827F4
|
||||
P 3300 2450
|
||||
F 0 "R1" V 3050 2450 50 0000 C CNN
|
||||
F 1 "100" V 3150 2450 50 0000 C CNN
|
||||
F 2 "Resistor_SMD:R_1206_3216Metric_Pad1.42x1.75mm_HandSolder" V 3230 2450 50 0001 C CNN
|
||||
F 3 "~" H 3300 2450 50 0001 C CNN
|
||||
1 3300 2450
|
||||
0 1 1 0
|
||||
$EndComp
|
||||
Text GLabel 3150 2450 0 50 Input ~ 0
|
||||
PA7
|
||||
Wire Wire Line
|
||||
3750 2450 3850 2450
|
||||
Wire Wire Line
|
||||
3850 2450 3850 2550
|
||||
Wire Wire Line
|
||||
2400 1800 2450 1800
|
||||
Wire Wire Line
|
||||
2250 1800 2400 1800
|
||||
Connection ~ 2400 1800
|
||||
$Comp
|
||||
L RF_Module:RFM95W-868S2 RFM95
|
||||
U 1 1 5D664943
|
||||
P 1800 1700
|
||||
F 0 "RFM95" V 1800 1550 50 0000 L CNN
|
||||
F 1 "RFM95W-868S2" V 1600 2150 50 0001 L CNN
|
||||
F 2 "RFM:RFM95" H -1500 3350 50 0001 C CNN
|
||||
F 3 "https://www.hoperf.com/data/upload/portal/20181127/5bfcbea20e9ef.pdf" H -1500 3350 50 0001 C CNN
|
||||
1 1800 1700
|
||||
0 -1 -1 0
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:C C2
|
||||
U 1 1 5D694E97
|
||||
P 1100 1850
|
||||
F 0 "C2" H 850 1900 50 0000 L CNN
|
||||
F 1 "100n" H 800 1800 50 0000 L CNN
|
||||
F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolder" H 1138 1700 50 0001 C CNN
|
||||
F 3 "~" H 1100 1850 50 0001 C CNN
|
||||
1 1100 1850
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Connection ~ 1100 1700
|
||||
$Comp
|
||||
L power:GND #PWR0112
|
||||
U 1 1 5D6953B6
|
||||
P 1100 2000
|
||||
F 0 "#PWR0112" H 1100 1750 50 0001 C CNN
|
||||
F 1 "GND" H 1105 1827 50 0000 C CNN
|
||||
F 2 "" H 1100 2000 50 0001 C CNN
|
||||
F 3 "" H 1100 2000 50 0001 C CNN
|
||||
1 1100 2000
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L Device:C C1
|
||||
U 1 1 5D696543
|
||||
P 1100 3250
|
||||
F 0 "C1" H 850 3300 50 0000 L CNN
|
||||
F 1 "100n" H 800 3200 50 0000 L CNN
|
||||
F 2 "Capacitor_SMD:C_1206_3216Metric_Pad1.42x1.75mm_HandSolder" H 1138 3100 50 0001 C CNN
|
||||
F 3 "~" H 1100 3250 50 0001 C CNN
|
||||
1 1100 3250
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
$Comp
|
||||
L power:GND #PWR0113
|
||||
U 1 1 5D696B3A
|
||||
P 1100 3400
|
||||
F 0 "#PWR0113" H 1100 3150 50 0001 C CNN
|
||||
F 1 "GND" H 1105 3227 50 0000 C CNN
|
||||
F 2 "" H 1100 3400 50 0001 C CNN
|
||||
F 3 "" H 1100 3400 50 0001 C CNN
|
||||
1 1100 3400
|
||||
1 0 0 -1
|
||||
$EndComp
|
||||
Wire Wire Line
|
||||
1900 2950 1100 2950
|
||||
Wire Wire Line
|
||||
1100 2950 1100 3100
|
||||
Connection ~ 1900 2950
|
||||
Wire Wire Line
|
||||
3350 3100 3650 3100
|
||||
Wire Wire Line
|
||||
3650 3100 3650 3200
|
||||
Wire Wire Line
|
||||
3350 3000 3650 3000
|
||||
Wire Wire Line
|
||||
3650 3000 3650 2950
|
||||
$EndSCHEMATC
|
|
@ -0,0 +1,3 @@
|
|||
# TinyLora PCB (SMD Version)
|
||||
|
||||
PCB for the TinyLora Sensor Node, SMD Version
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,4 @@
|
|||
(fp_lib_table
|
||||
(lib (name RFM)(type KiCad)(uri ${KIPRJMOD}/kicad_libs/RFM95)(options "")(descr ""))
|
||||
(lib (name battery_holder)(type KiCad)(uri ${KIPRJMOD}/kicad_libs/battery_holder.pretty)(options "")(descr ""))
|
||||
)
|
|
@ -0,0 +1,20 @@
|
|||
EESchema-DOCLIB Version 2.0
|
||||
#
|
||||
$CMP NRF24L01
|
||||
D NRF24L01+
|
||||
K NRF 2G4 radio module
|
||||
$ENDCMP
|
||||
#
|
||||
$CMP RFM69HW
|
||||
D RFM69HW, 868Mhz +20dBm HopeRF Wireless Transceiver, Vcc=3.3V
|
||||
K RF69 868Mhz RF69 RFM69
|
||||
F http://modtronicsaustralia.com/wp-content/uploads/2014/11/RFM69HW-V1.3.pdf
|
||||
$ENDCMP
|
||||
#
|
||||
$CMP RFM95HW
|
||||
D RFM95HW, LORA +20dBm HopeRF Wireless Transceiver, Vcc=3.3V
|
||||
K RF95 LORA RF95 RFM95
|
||||
F https://cdn-learn.adafruit.com/assets/assets/000/031/659/original/RFM95_96_97_98W.pdf?1460518717
|
||||
$ENDCMP
|
||||
#
|
||||
#End Doc Library
|
|
@ -0,0 +1,45 @@
|
|||
(module RFM95 (layer F.Cu) (tedit 585E5D4C)
|
||||
(fp_text reference REF** (at 2 -2) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value RFM95 (at 13.5 -1.8) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start 0 15) (end 0 14.8) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 16 15) (end 0 15) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 16 14.8) (end 16 15) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 16 12.8) (end 16 13.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 16 10.8) (end 16 11.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 16 8.8) (end 16 9.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 16 6.8) (end 16 7.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 16 4.8) (end 16 5.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 16 2.8) (end 16 3.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 16 0.8) (end 16 1.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 16 -1) (end 16 -0.8) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 0 12.8) (end 0 13.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 0 -0.8) (end 0 -1) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start -1 -0.8) (end 0 -0.8) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 0 1.2) (end 0 0.8) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 0 3.2) (end 0 2.8) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 0 4.8) (end 0 5.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 0 6.8) (end 0 7.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 0 8.8) (end 0 9.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 0 10.8) (end 0 11.2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 0 -1) (end 16 -1) (layer F.SilkS) (width 0.2))
|
||||
(pad 1 smd oval (at 0 0) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 2 smd oval (at 0 2) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 3 smd oval (at 0 4) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 4 smd oval (at 0 6) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 5 smd oval (at 0 8) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 6 smd oval (at 0 10) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 7 smd oval (at 0 12) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 8 smd oval (at 0 14) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 9 smd oval (at 16 14) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 10 smd oval (at 16 12) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 11 smd oval (at 16 10) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 12 smd oval (at 16 8) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 13 smd oval (at 16 6) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 14 smd oval (at 16 4) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 15 smd oval (at 16 2) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 16 smd oval (at 16 0) (size 2 1) (layers F.Cu F.Paste F.Mask))
|
||||
)
|
|
@ -0,0 +1,86 @@
|
|||
EESchema-LIBRARY Version 2.3
|
||||
#encoding utf-8
|
||||
#
|
||||
# NRF24L01
|
||||
#
|
||||
DEF NRF24L01 U 0 40 Y Y 1 F N
|
||||
F0 "U" 100 250 60 H V C CNN
|
||||
F1 "NRF24L01" 250 -250 60 H V C CNN
|
||||
F2 "" 0 -150 60 H V C CNN
|
||||
F3 "" 0 -150 60 H V C CNN
|
||||
DRAW
|
||||
S -250 200 250 -200 0 1 0 f
|
||||
X GND 1 0 -350 150 U 40 40 1 1 W
|
||||
X VCC 2 0 350 150 D 40 40 1 1 W
|
||||
X CE 3 400 -100 150 L 40 40 1 1 I
|
||||
X CSN 4 400 100 150 L 40 40 1 1 I
|
||||
X SCK 5 -400 -100 150 R 40 40 1 1 I
|
||||
X MOSI 6 -400 0 150 R 40 40 1 1 I
|
||||
X MISO 7 -400 100 150 R 40 40 1 1 I
|
||||
X IRQ 8 400 0 150 L 40 40 1 1 O
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# RFM69HW
|
||||
#
|
||||
DEF RFM69HW U 0 40 Y Y 1 F N
|
||||
F0 "U" -350 250 40 H V C CNN
|
||||
F1 "RFM69HW" 250 -750 40 H V C CNN
|
||||
F2 "mysensors_radios:RFM69HW_SMD_ThroughHole_Handsoldering" 0 0 30 H I C CIN
|
||||
F3 "" 0 0 60 H V C CNN
|
||||
$FPLIST
|
||||
RFM69*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -400 200 400 -700 0 1 10 f
|
||||
X RESET 1 -550 -550 150 R 40 40 1 1 B
|
||||
X DIO0 2 550 0 150 L 40 40 1 1 B
|
||||
X DIO1 3 550 -100 150 L 40 40 1 1 B
|
||||
X DIO2 4 550 -200 150 L 40 40 1 1 B
|
||||
X DIO3 5 550 -300 150 L 40 40 1 1 B
|
||||
X DIO4 6 550 -400 150 L 40 40 1 1 B
|
||||
X DIO5 7 550 -500 150 L 40 40 1 1 B
|
||||
X 3.3V 8 0 350 150 D 40 40 1 1 W
|
||||
X GND 9 -100 -850 150 U 40 40 1 1 W
|
||||
X ANA 10 -550 150 150 R 40 40 1 1 P
|
||||
X GND 11 100 -850 150 U 40 40 1 1 W
|
||||
X SCK 12 -550 -350 150 R 40 40 1 1 I
|
||||
X MISO 13 -550 -250 150 R 40 40 1 1 T
|
||||
X MOSI 14 -550 -150 150 R 40 40 1 1 I
|
||||
X NSS 15 -550 -50 150 R 40 40 1 1 I
|
||||
X NC 16 -550 -650 150 R 40 40 1 1 P
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
# RFM95HW
|
||||
#
|
||||
DEF RFM95HW U 0 40 Y Y 1 F N
|
||||
F0 "U" -350 250 40 H V C CNN
|
||||
F1 "RFM95HW" 250 -750 40 H V C CNN
|
||||
F2 "mysensors_radios:RFM69HW_SMD_ThroughHole_Handsoldering" 0 0 30 H I C CIN
|
||||
F3 "" 0 0 60 H V C CNN
|
||||
$FPLIST
|
||||
RFM95*
|
||||
$ENDFPLIST
|
||||
DRAW
|
||||
S -400 200 400 -700 0 1 10 f
|
||||
X GND 1 -100 -850 150 U 40 40 1 1 W
|
||||
X MISO 2 -550 -250 150 R 40 40 1 1 T
|
||||
X MOSI 3 -550 -150 150 R 40 40 1 1 I
|
||||
X SCK 4 -550 -350 150 R 40 40 1 1 I
|
||||
X NSS 5 -550 -50 150 R 40 40 1 1 I
|
||||
X RESET 6 -550 -550 150 R 40 40 1 1 B
|
||||
X DIO5 7 550 -500 150 L 40 40 1 1 B
|
||||
X GND 8 0 -850 150 U 40 40 1 1 W
|
||||
X ANA 9 -550 150 150 R 40 40 1 1 P
|
||||
X GND 10 100 -850 150 U 40 40 1 1 W
|
||||
X DIO3 11 550 -300 150 L 40 40 1 1 B
|
||||
X DIO4 12 550 -400 150 L 40 40 1 1 B
|
||||
X 3.3V 13 0 350 150 D 40 40 1 1 W
|
||||
X DIO0 14 550 0 150 L 40 40 1 1 B
|
||||
X DIO1 15 550 -100 150 L 40 40 1 1 B
|
||||
X DIO2 16 550 -200 150 L 40 40 1 1 B
|
||||
ENDDRAW
|
||||
ENDDEF
|
||||
#
|
||||
#End Library
|
|
@ -0,0 +1,76 @@
|
|||
(module BatteryHolder_Keystone_1060_1x2032_Long_Pad (layer F.Cu) (tedit 5D66CD14)
|
||||
(descr http://www.keyelco.com/product-pdf.cfm?p=726)
|
||||
(tags "CR2032 BR2032 BatteryHolder Battery")
|
||||
(attr smd)
|
||||
(fp_text reference BAT (at -14.125 -5.3) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value Battery_Cell (at 0 -11.75) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -12 6) (end -14 6) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -13 5) (end -13 7) (layer F.SilkS) (width 0.12))
|
||||
(fp_text user BAT (at 0 0) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start 11.5 -8.5) (end 6.5 -8.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_arc (start 0 0) (end 6.5 -8.5) (angle -74.81070976) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 11.5 4) (end 11.5 8.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 14.7 4) (end 11.5 4) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 14.7 2.3) (end 14.7 4) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 16.45 2.3) (end 14.7 2.3) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 16.45 -2.3) (end 16.45 2.3) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 14.7 -2.3) (end 16.45 -2.3) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 14.7 -4) (end 14.7 -2.3) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 11.5 -4) (end 14.7 -4) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 11.5 -8.5) (end 11.5 -4) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -11.5 -8.5) (end -6.5 -8.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -11.5 -4) (end -11.5 -8.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -14.7 -4) (end -11.5 -4) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -14.7 -2.3) (end -14.7 -4) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -14.7 -2.3) (end -16.45 -2.3) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -16.45 2.3) (end -16.45 -2.3) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -14.7 2.3) (end -16.45 2.3) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -14.7 4) (end -14.7 2.3) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -14.7 4) (end -11.5 4) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -11.5 4) (end -11.5 8.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -6.5 8.5) (end -11.5 8.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 11.5 8.5) (end 6.5 8.5) (layer F.CrtYd) (width 0.05))
|
||||
(fp_arc (start 0 0) (end -6.5 8.5) (angle -74.81070976) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 11.35 -8.35) (end 11.35 -3.85) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -11.35 -8.35) (end -11.35 -3.85) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -11.35 -8.35) (end 11.35 -8.35) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 14.55 -3.85) (end 14.55 -2.3) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 11.35 -3.85) (end 14.55 -3.85) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -14.55 -3.85) (end -14.55 -2.3) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -11.35 -3.85) (end -14.55 -3.85) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -14.55 3.85) (end -14.55 2.3) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -11.35 3.85) (end -14.55 3.85) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -9.55 8.35) (end -11.35 6.55) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -11.35 6.55) (end -11.35 3.85) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 11.35 8.35) (end -9.55 8.35) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 11.35 8.35) (end 11.35 3.85) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 14.55 3.85) (end 14.55 2.3) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 11.35 3.85) (end 14.55 3.85) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -9.4 8) (end -11 6.4) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 14.2 -3.5) (end 11 -3.5) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 14.2 3.5) (end 14.2 -3.5) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 11 3.5) (end 14.2 3.5) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -14.2 -3.5) (end -11 -3.5) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -14.2 3.5) (end -14.2 -3.5) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -11 3.5) (end -14.2 3.5) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -11 6.4) (end -11 3.5) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -11 -8) (end -11 -3.5) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 11 -8) (end 11 -3.5) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 11 8) (end 11 3.5) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 11 -8) (end -11 -8) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 11 8) (end -9.4 8) (layer F.Fab) (width 0.1))
|
||||
(fp_circle (center 0 0) (end -10.2 0) (layer Dwgs.User) (width 0.3))
|
||||
(pad 1 smd rect (at -12.446 0 180) (size 7.1 3.6) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 2 smd rect (at 12.446 0 180) (size 7.1 3.6) (layers F.Cu F.Paste F.Mask))
|
||||
(model ${KISYS3DMOD}/Battery.3dshapes/BatteryHolder_Keystone_1060_1x2032.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
|
@ -0,0 +1,5 @@
|
|||
# TinyLoRa Sensor Node
|
||||
|
||||
## Overview
|
||||
|
||||
## In this Repository
|
Binary file not shown.
After Width: | Height: | Size: 773 KiB |
Binary file not shown.
After Width: | Height: | Size: 536 KiB |
Binary file not shown.
After Width: | Height: | Size: 540 KiB |
Loading…
Reference in New Issue