Add files via upload
rodzic
224aa44326
commit
f3915e71cb
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0"?>
|
||||
<MCU_DEVICE_FLAGS>
|
||||
<DEVICE>
|
||||
<DEVICE_NAME>P16LF18877</DEVICE_NAME>
|
||||
<VALUE>
|
||||
<COUNT>5</COUNT>
|
||||
<VALUE0>
|
||||
<VAL>$008007:$2904</VAL>
|
||||
</VALUE0>
|
||||
<VALUE1>
|
||||
<VAL>$008008:$3E21</VAL>
|
||||
</VALUE1>
|
||||
<VALUE2>
|
||||
<VAL>$008009:$3F1F</VAL>
|
||||
</VALUE2>
|
||||
<VALUE3>
|
||||
<VAL>$00800A:$3003</VAL>
|
||||
</VALUE3>
|
||||
<VALUE4>
|
||||
<VAL>$00800B:$0003</VAL>
|
||||
</VALUE4>
|
||||
</VALUE>
|
||||
</DEVICE>
|
||||
</MCU_DEVICE_FLAGS>
|
|
@ -0,0 +1,21 @@
|
|||
0 1 mikroCPIC1618.exe -MSF -DBG -pP16LF18877 -DL -O11111114 -fo32 -N"D:\Projects\ATU-10\Firmware_1.5\ATU-10.mcppi" -SP"C:\Program Files (x86)\mikroC PRO for PIC\Defs\" -SP"C:\Program Files (x86)\mikroC PRO for PIC\Uses\P16_Enh\" -SP"D:\Projects\ATU-10\Firmware_1.5\" -IP"C:\Program Files (x86)\mikroC PRO for PIC\Uses\P16_Enh\" "pic_init.c" "oled_control.c" "Soft_I2C.c" "main.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl" "__Lib_Conversions.mcl" "__Lib_Button.mcl" "__Lib_ADC_18xxx.mcl"
|
||||
hint: 0 1139 Available RAM: 4080 [bytes], Available ROM: 32768 [bytes]
|
||||
diagnostics: 0 122 Compilation Started pic_init.c
|
||||
diagnostics: 62 123 Compiled Successfully pic_init.c
|
||||
diagnostics: 0 122 Compilation Started font_5x8.h
|
||||
diagnostics: 278 123 Compiled Successfully oled_control.c
|
||||
diagnostics: 0 122 Compilation Started soft_i2c.h
|
||||
diagnostics: 92 123 Compiled Successfully Soft_I2C.c
|
||||
diagnostics: 0 122 Compilation Started pic_init.h
|
||||
hint: 0 1004 interrupt handler (interupt at 0x0004) main.c
|
||||
diagnostics: 921 123 Compiled Successfully main.c
|
||||
hint: 521 1164 Variable 'd' has been eliminated by optimizer main.c
|
||||
hint: 545 1164 Variable 'd' has been eliminated by optimizer main.c
|
||||
hint: 569 1164 Variable 'p' has been eliminated by optimizer main.c
|
||||
diagnostics: 0 127 All files Compiled in 234 ms
|
||||
hint: 0 1144 Used RAM (bytes): 331 (8%) Free RAM (bytes): 3749 (92%) Used RAM (bytes): 331 (8%) Free RAM (bytes): 3749 (92%)
|
||||
hint: 0 1144 Used ROM (program words): 8840 (27%) Free ROM (program words): 23928 (73%) Used ROM (program words): 8840 (27%) Free ROM (program words): 23928 (73%)
|
||||
diagnostics: 0 125 Project Linked Successfully ATU-10.mcppi
|
||||
diagnostics: 0 128 Linked in 79 ms
|
||||
diagnostics: 0 129 Project 'ATU-10.mcppi' completed: 344 ms
|
||||
diagnostics: 0 103 Finished successfully: 13 Aug 2022, 17:02:30 ATU-10.mcppi
|
|
@ -0,0 +1,77 @@
|
|||
[DEVICE]
|
||||
Name=P16LF18877
|
||||
Clock=32000000
|
||||
[MEMORY_MODEL]
|
||||
Value=0
|
||||
[BUILD_TYPE]
|
||||
Value=0
|
||||
[ACTIVE_TAB]
|
||||
Value=main.c
|
||||
[USE_EEPROM]
|
||||
Value=0
|
||||
[USE_HEAP]
|
||||
Value=0
|
||||
[HEAP_SIZE]
|
||||
Value=0
|
||||
[EEPROM_DEFINITION]
|
||||
Value=
|
||||
[FILES]
|
||||
File0=pic_init.c
|
||||
File1=oled_control.c
|
||||
File2=Soft_I2C.c
|
||||
File3=main.c
|
||||
Count=4
|
||||
[BINARIES]
|
||||
Count=0
|
||||
[IMAGES]
|
||||
Count=0
|
||||
ActiveImageIndex=-1
|
||||
[OPENED_FILES]
|
||||
File0=pic_init.c
|
||||
File1=main.c
|
||||
File2=main.h
|
||||
File3=pic_init.h
|
||||
File4=oled_control.c
|
||||
File5=oled_control.h
|
||||
File6=Soft_I2C.c
|
||||
Count=7
|
||||
[EEPROM]
|
||||
Count=0
|
||||
[ACTIVE_COMMENTS_FILES]
|
||||
Count=0
|
||||
[OTHER_FILES]
|
||||
Count=0
|
||||
[SEARCH_PATH]
|
||||
Count=0
|
||||
[HEADER_PATH]
|
||||
Count=0
|
||||
[HEADERS]
|
||||
File0=pic_init.h
|
||||
File1=oled_control.h
|
||||
File2=Soft_I2C.h
|
||||
File3=font_5x8.h
|
||||
File4=main.h
|
||||
Count=5
|
||||
[PLDS]
|
||||
Count=0
|
||||
[Useses]
|
||||
File0=Button
|
||||
File1=Conversions
|
||||
File2=ADC
|
||||
Count=3
|
||||
[EXPANDED_NODES]
|
||||
0=ATU-10.mcppi
|
||||
1=Sources
|
||||
Count=2
|
||||
[LIB_EXPANDED_NODES]
|
||||
0=mikroE Libraries
|
||||
1=System Libraries
|
||||
2=ADC
|
||||
Count=3
|
||||
[PROGRAMMER_TYPE]
|
||||
Value=mikroE mikroProg
|
||||
[CODEGRIP_OPTIONS]
|
||||
CODEGRIP_SPEED=0
|
||||
CODEGRIP_VERIFY_AFTER=0
|
||||
CODEGRIP_SWBP_ENABLED=0
|
||||
CODEGRIP_PROGRAMMING_TYPE=
|
Plik diff jest za duży
Load Diff
Plik diff jest za duży
Load Diff
|
@ -0,0 +1,92 @@
|
|||
//
|
||||
#include "Soft_I2C.h"
|
||||
//
|
||||
#define Delay_I2C Delay_us(25)
|
||||
//
|
||||
// Software I2C connections
|
||||
#define Soft_I2C_Scl LATA3_bit
|
||||
#define Soft_I2C_Sda LATA2_bit
|
||||
#define Soft_I2C_Sda_in PORTA.B2
|
||||
#define Soft_I2C_Scl_in PORTA.B3
|
||||
//
|
||||
void Soft_I2C_Init(void) {
|
||||
Soft_I2C_Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
void Soft_I2C_Start() {
|
||||
Soft_I2C_Scl = 1;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Sda = 1;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Sda = 0;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 0;
|
||||
Delay_I2C;
|
||||
return;
|
||||
}
|
||||
|
||||
char Soft_I2C_Write(char d) {
|
||||
char i, ack;
|
||||
for(i=0; i<8; i++) {
|
||||
Soft_I2C_Sda = d.B7;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 1;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 0;
|
||||
d = d << 1;
|
||||
}
|
||||
//
|
||||
Soft_I2C_Sda = 1; //ACK
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 1;
|
||||
ack = Soft_I2C_Sda_in;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 0;
|
||||
Delay_I2C;
|
||||
return ack;
|
||||
}
|
||||
|
||||
char Soft_I2C_Read(void){
|
||||
char i, d = 0;
|
||||
for(i=0; i<8; i++){
|
||||
d = d << 1;
|
||||
d = d + Soft_I2C_Sda_in;
|
||||
Soft_I2C_Scl = 1;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 0;
|
||||
Delay_I2C;
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
void Soft_I2C_ACK(void){
|
||||
Soft_I2C_Sda = 0;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 1;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 0;
|
||||
Soft_I2C_Sda = 1;
|
||||
Delay_I2C;
|
||||
return;
|
||||
}
|
||||
|
||||
void Soft_I2C_NACK(void){
|
||||
Soft_I2C_Sda = 1;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 1;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 0;
|
||||
Delay_I2C;
|
||||
return;
|
||||
}
|
||||
|
||||
void Soft_I2C_Stop() {
|
||||
Soft_I2C_Sda = 0;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Scl = 1;
|
||||
Delay_I2C;
|
||||
Soft_I2C_Sda = 1;
|
||||
Delay_I2C;
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
[Position]
|
||||
Line=11
|
||||
Column=3
|
||||
[FoldedLines]
|
||||
Count=0
|
|
@ -0,0 +1,9 @@
|
|||
|
||||
void Soft_I2C_Init(void);
|
||||
void Soft_I2C_Start(void);
|
||||
char Soft_I2C_Write(char);
|
||||
char Soft_I2C_Read(void);
|
||||
void Soft_I2C_ACK(void);
|
||||
void Soft_I2C_NACK(void);
|
||||
void Soft_I2C_Stop(void);
|
||||
//
|
|
@ -0,0 +1,5 @@
|
|||
[Position]
|
||||
Line=1
|
||||
Column=1
|
||||
[FoldedLines]
|
||||
Count=0
|
Plik binarny nie jest wyświetlany.
|
@ -0,0 +1,100 @@
|
|||
static const code char font_5x8[] = {
|
||||
//
|
||||
0x00, 0x00, 0x00, 0x00, 0x00,// (space)
|
||||
0x00, 0x00, 0x5F, 0x00, 0x00,// !
|
||||
0x00, 0x07, 0x00, 0x07, 0x00,// "
|
||||
0x14, 0x7F, 0x14, 0x7F, 0x14,// #
|
||||
0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
|
||||
0x23, 0x13, 0x08, 0x64, 0x62,// %
|
||||
0x36, 0x49, 0x55, 0x22, 0x50,// &
|
||||
0x00, 0x05, 0x03, 0x00, 0x00,// '
|
||||
0x00, 0x1C, 0x22, 0x41, 0x00,// (
|
||||
0x00, 0x41, 0x22, 0x1C, 0x00,// )
|
||||
0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
|
||||
0x08, 0x08, 0x3E, 0x08, 0x08,// +
|
||||
0x00, 0x50, 0x30, 0x00, 0x00,// ,
|
||||
0x08, 0x08, 0x08, 0x08, 0x08,// -
|
||||
0x00, 0x30, 0x30, 0x00, 0x00,// .
|
||||
0x20, 0x10, 0x08, 0x04, 0x02,// /
|
||||
0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
|
||||
0x00, 0x42, 0x7F, 0x40, 0x00,// 1
|
||||
0x42, 0x61, 0x51, 0x49, 0x46,// 2
|
||||
0x21, 0x41, 0x45, 0x4B, 0x31,// 3
|
||||
0x18, 0x14, 0x12, 0x7F, 0x10,// 4
|
||||
0x27, 0x45, 0x45, 0x45, 0x39,// 5
|
||||
0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
|
||||
0x01, 0x71, 0x09, 0x05, 0x03,// 7
|
||||
0x36, 0x49, 0x49, 0x49, 0x36,// 8
|
||||
0x06, 0x49, 0x49, 0x29, 0x1E,// 9
|
||||
0x00, 0x36, 0x36, 0x00, 0x00,// :
|
||||
0x00, 0x56, 0x36, 0x00, 0x00,// ;
|
||||
0x00, 0x08, 0x14, 0x22, 0x41,// <
|
||||
0x14, 0x14, 0x14, 0x14, 0x14,// =
|
||||
0x41, 0x22, 0x14, 0x08, 0x00,// >
|
||||
0x02, 0x01, 0x51, 0x09, 0x06,// ?
|
||||
0x32, 0x49, 0x79, 0x41, 0x3E,// @
|
||||
0x7E, 0x11, 0x11, 0x11, 0x7E,// A
|
||||
0x7F, 0x49, 0x49, 0x49, 0x36,// B
|
||||
0x3E, 0x41, 0x41, 0x41, 0x22,// C
|
||||
0x7F, 0x41, 0x41, 0x22, 0x1C,// D
|
||||
0x7F, 0x49, 0x49, 0x49, 0x41,// E
|
||||
0x7F, 0x09, 0x09, 0x01, 0x01,// F
|
||||
0x3E, 0x41, 0x41, 0x51, 0x32,// G
|
||||
0x7F, 0x08, 0x08, 0x08, 0x7F,// H
|
||||
0x00, 0x41, 0x7F, 0x41, 0x00,// I
|
||||
0x20, 0x40, 0x41, 0x3F, 0x01,// J
|
||||
0x7F, 0x08, 0x14, 0x22, 0x41,// K
|
||||
0x7F, 0x40, 0x40, 0x40, 0x40,// L
|
||||
0x7F, 0x02, 0x04, 0x02, 0x7F,// M
|
||||
0x7F, 0x04, 0x08, 0x10, 0x7F,// N
|
||||
0x3E, 0x41, 0x41, 0x41, 0x3E,// O
|
||||
0x7F, 0x09, 0x09, 0x09, 0x06,// P
|
||||
0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
|
||||
0x7F, 0x09, 0x19, 0x29, 0x46,// R
|
||||
0x46, 0x49, 0x49, 0x49, 0x31,// S
|
||||
0x01, 0x01, 0x7F, 0x01, 0x01,// T
|
||||
0x3F, 0x40, 0x40, 0x40, 0x3F,// U
|
||||
0x1F, 0x20, 0x40, 0x20, 0x1F,// V
|
||||
0x7F, 0x20, 0x18, 0x20, 0x7F,// W
|
||||
0x63, 0x14, 0x08, 0x14, 0x63,// X
|
||||
0x03, 0x04, 0x78, 0x04, 0x03,// Y
|
||||
0x61, 0x51, 0x49, 0x45, 0x43,// Z
|
||||
0x00, 0x00, 0x7F, 0x41, 0x41,// [
|
||||
0x02, 0x04, 0x08, 0x10, 0x20,// "\"
|
||||
0x41, 0x41, 0x7F, 0x00, 0x00,// ]
|
||||
0x04, 0x02, 0x01, 0x02, 0x04,// ^
|
||||
0x40, 0x40, 0x40, 0x40, 0x40,// _
|
||||
0x00, 0x01, 0x02, 0x04, 0x00,// `
|
||||
0x20, 0x54, 0x54, 0x54, 0x78,// a
|
||||
0x7F, 0x48, 0x44, 0x44, 0x38,// b
|
||||
0x38, 0x44, 0x44, 0x44, 0x20,// c
|
||||
0x38, 0x44, 0x44, 0x48, 0x7F,// d
|
||||
0x38, 0x54, 0x54, 0x54, 0x18,// e
|
||||
0x08, 0x7E, 0x09, 0x01, 0x02,// f
|
||||
0x08, 0x14, 0x54, 0x54, 0x3C,// g
|
||||
0x7F, 0x08, 0x04, 0x04, 0x78,// h
|
||||
0x00, 0x44, 0x7D, 0x40, 0x00,// i
|
||||
0x20, 0x40, 0x44, 0x3D, 0x00,// j
|
||||
0x00, 0x7F, 0x10, 0x28, 0x44,// k
|
||||
0x00, 0x41, 0x7F, 0x40, 0x00,// l
|
||||
0x7C, 0x04, 0x18, 0x04, 0x78,// m
|
||||
0x7C, 0x08, 0x04, 0x04, 0x78,// n
|
||||
0x38, 0x44, 0x44, 0x44, 0x38,// o
|
||||
0x7C, 0x14, 0x14, 0x14, 0x08,// p
|
||||
0x08, 0x14, 0x14, 0x18, 0x7C,// q
|
||||
0x7C, 0x08, 0x04, 0x04, 0x08,// r
|
||||
0x48, 0x54, 0x54, 0x54, 0x20,// s
|
||||
0x04, 0x3F, 0x44, 0x40, 0x20,// t
|
||||
0x3C, 0x40, 0x40, 0x20, 0x7C,// u
|
||||
0x1C, 0x20, 0x40, 0x20, 0x1C,// v
|
||||
0x3C, 0x40, 0x30, 0x40, 0x3C,// w
|
||||
0x44, 0x28, 0x10, 0x28, 0x44,// x
|
||||
0x0C, 0x50, 0x50, 0x50, 0x3C,// y
|
||||
0x44, 0x64, 0x54, 0x4C, 0x44,// z
|
||||
0x00, 0x08, 0x36, 0x41, 0x00,// {
|
||||
0x00, 0x00, 0x7F, 0x00, 0x00,// |
|
||||
0x00, 0x41, 0x36, 0x08, 0x00,// }
|
||||
0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
|
||||
0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
|
||||
};
|
||||
//
|
|
@ -0,0 +1,5 @@
|
|||
[Position]
|
||||
Line=99
|
||||
Column=1
|
||||
[FoldedLines]
|
||||
Count=0
|
|
@ -0,0 +1,922 @@
|
|||
// David Fainitski, N7DDC
|
||||
// 2020
|
||||
|
||||
#include "pic_init.h"
|
||||
#include "main.h"
|
||||
#include "oled_control.h"
|
||||
#include "Soft_I2C.h"
|
||||
|
||||
|
||||
// global variables
|
||||
char txt[8], txt_2[8];
|
||||
unsigned long Tick = 0; // ms system tick
|
||||
int Voltage, Voltage_old = 0;
|
||||
char btn_1_cnt = 0, btn_2_cnt = 0;
|
||||
unsigned long volt_cnt = 0, watch_cnt = 0, btn_cnt = 0, off_cnt, disp_cnt;
|
||||
int PWR, SWR, SWR_ind = 0, SWR_fixed_old = 100, PWR_fixed_old = 9999;
|
||||
char ind = 0, cap = 0, SW = 0;
|
||||
bit Overflow, B_short, B_long, B_xlong, gre, E_short, E_long;
|
||||
|
||||
int Rel_Del = 8, rldl, min_for_start = 10, max_for_start = 150;
|
||||
int Auto_delta = 130; // 1.3 SWR
|
||||
|
||||
unsigned long Disp_time = 300; // Time in seconds
|
||||
unsigned long Off_time = 1800; // Time in seconds
|
||||
|
||||
#define FW_VER "1.5"
|
||||
|
||||
// interrupt processing
|
||||
void interupt() iv 0x0004 {
|
||||
//
|
||||
if(TMR0IF_bit) { // Timer0
|
||||
TMR0IF_bit = 0;
|
||||
Tick++;
|
||||
TMR0L = 0xC0; // 8_000 cycles to OF
|
||||
TMR0H = 0xE0;
|
||||
//
|
||||
if(Tick>=btn_cnt){ // every 10ms
|
||||
btn_cnt += 10;
|
||||
//
|
||||
if(GetButton | Start){
|
||||
disp_cnt = Tick + Disp_time*1000;
|
||||
off_cnt = Tick + Off_time*1000;
|
||||
}
|
||||
//
|
||||
if(GetButton){ //
|
||||
if(btn_1_cnt<250) btn_1_cnt++;
|
||||
if(btn_1_cnt==25) B_long = 1; // long pressing detected
|
||||
if(btn_1_cnt==250 & OLED_PWD) B_xlong = 1; // Xtra long pressing detected
|
||||
}
|
||||
else if(btn_1_cnt>2 & btn_1_cnt<25){
|
||||
B_short = 1; // short pressing detected
|
||||
btn_1_cnt = 0;
|
||||
}
|
||||
else
|
||||
btn_1_cnt = 0;
|
||||
// External interface
|
||||
if(Start){
|
||||
if(btn_2_cnt<25) btn_2_cnt++;
|
||||
if(btn_2_cnt==20 & Key_in) E_long = 1;
|
||||
}
|
||||
else if(btn_2_cnt>1 & btn_2_cnt<10){
|
||||
E_short = 1;
|
||||
btn_2_cnt = 0;
|
||||
}
|
||||
else
|
||||
btn_2_cnt = 0;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void main() {
|
||||
pic_init();
|
||||
Red = 1;
|
||||
Key_out = 1;
|
||||
gre = 1;
|
||||
oled_start();
|
||||
//if(Debug) check_reset_flags();
|
||||
ADC_Init();
|
||||
Overflow = 0;
|
||||
//
|
||||
disp_cnt = Tick + Disp_time*1000;
|
||||
off_cnt = Tick + Off_time*1000;
|
||||
|
||||
//
|
||||
rldl = Rel_Del;
|
||||
//Relay_set(0, 0, 0);
|
||||
//
|
||||
while(1) {
|
||||
if(Tick>=volt_cnt){ // every 3 second
|
||||
volt_cnt += 3000;
|
||||
Voltage_show();
|
||||
}
|
||||
//
|
||||
if(Tick>=watch_cnt){ // every 300 ms unless power off
|
||||
watch_cnt += 300;
|
||||
watch_swr();
|
||||
}
|
||||
//
|
||||
if(Tick>=disp_cnt){ // Display off
|
||||
//Disp = 0;
|
||||
OLED_PWD = 0;
|
||||
}
|
||||
//
|
||||
if(Tick>=off_cnt){ // Go to power off
|
||||
power_off();
|
||||
}
|
||||
//
|
||||
if(B_short){
|
||||
if(OLED_PWD) Btn_short();
|
||||
else oled_start();
|
||||
}
|
||||
if(B_long){
|
||||
if(OLED_PWD) Btn_long();
|
||||
else oled_start();
|
||||
}
|
||||
if(B_xlong){
|
||||
if(OLED_PWD) Btn_xlong();
|
||||
else oled_start();
|
||||
}
|
||||
// External interface
|
||||
if(E_short){
|
||||
if(OLED_PWD==0) oled_start();
|
||||
Btn_short();
|
||||
}
|
||||
if(E_long){
|
||||
if(OLED_PWD==0) { Ext_long(); oled_start(); }
|
||||
else Btn_long();
|
||||
}
|
||||
|
||||
} // while(1)
|
||||
} // main
|
||||
//
|
||||
void oled_start(){
|
||||
OLED_PWD = 1;
|
||||
//Disp = 1;
|
||||
Delay_ms(200);
|
||||
Soft_I2C_init();
|
||||
Delay_ms(10);
|
||||
oled_init();
|
||||
//
|
||||
if(gre){
|
||||
Greating();
|
||||
gre = 0;
|
||||
oled_clear();
|
||||
}
|
||||
oled_wr_str(0, 0, "PWR W", 9);
|
||||
oled_bat();
|
||||
oled_wr_str(2, 0, "SWR ", 9);
|
||||
oled_wr_str(0, 42, "=", 1);
|
||||
oled_wr_str(2, 42, "=", 1);
|
||||
Voltage_old = 9999;
|
||||
SWR_fixed_old = 100;
|
||||
PWR_fixed_old = 9999;
|
||||
SWR_ind = 0;
|
||||
draw_swr(SWR_ind);
|
||||
volt_cnt = Tick + 1;
|
||||
watch_cnt = Tick;
|
||||
B_short = 0; B_long = 0; B_xlong = 0, E_short = 0; E_long = 0;
|
||||
disp_cnt = Tick + Disp_time*1000;
|
||||
off_cnt = Tick + Off_time*1000;
|
||||
return;
|
||||
}
|
||||
//
|
||||
void watch_swr(void){
|
||||
char peak_cnt, cnt;
|
||||
int delta = Auto_delta - 100;
|
||||
int PWR_fixed, SWR_fixed;
|
||||
//
|
||||
Delay_ms(50);
|
||||
// peak detector
|
||||
cnt = 600;
|
||||
PWR_fixed = 0;
|
||||
SWR_fixed = 0;
|
||||
for(peak_cnt=0; peak_cnt<cnt; peak_cnt++){
|
||||
get_pwr();
|
||||
if(PWR>PWR_fixed) {PWR_fixed = PWR; SWR_fixed = SWR;}
|
||||
Delay_ms(1);
|
||||
}
|
||||
//
|
||||
if(PWR_fixed>0){ // Turn on the display
|
||||
if(OLED_PWD){
|
||||
disp_cnt = Tick + Disp_time*1000;
|
||||
off_cnt = Tick + Off_time*1000;
|
||||
}
|
||||
else oled_start();
|
||||
};
|
||||
//
|
||||
if(PWR_fixed!=PWR_fixed_old){
|
||||
if(Overflow)
|
||||
oled_wr_str(0, 42, ">", 1);
|
||||
else
|
||||
oled_wr_str(0, 42, "=", 1);
|
||||
PWR_fixed_old = PWR_fixed;
|
||||
draw_power(PWR_fixed);
|
||||
}
|
||||
//
|
||||
if(SWR_fixed>99 && SWR_fixed!=SWR_ind){
|
||||
SWR_ind = SWR_fixed;
|
||||
if(PWR_fixed<10){
|
||||
SWR_fixed = 0;
|
||||
//SWR_ind = 0; // Last meassured SWR on display ! not a bug
|
||||
draw_swr(SWR_ind);
|
||||
return;
|
||||
}
|
||||
else
|
||||
draw_swr(SWR_ind);
|
||||
}
|
||||
//
|
||||
if(Overflow){
|
||||
for(cnt=3; cnt!=0; cnt--){
|
||||
oled_wr_str(2, 6, "OVERLOAD ", 9);
|
||||
Delay_ms(500);
|
||||
oled_wr_str(2, 0, " ", 9);
|
||||
Delay_ms(500);
|
||||
}
|
||||
oled_wr_str(2, 0, "SWR ", 9);
|
||||
oled_wr_str(2, 42, "=", 1);
|
||||
draw_swr(SWR_fixed);
|
||||
Delay_ms(500);
|
||||
Overflow = 0;
|
||||
}
|
||||
//
|
||||
|
||||
else if(PWR_fixed>=min_for_start && PWR_fixed<max_for_start && SWR_fixed>99) {
|
||||
if( (SWR_fixed-SWR_fixed_old)>delta || (SWR_fixed_old-SWR_fixed)>delta ) {
|
||||
Btn_long();
|
||||
return;
|
||||
}
|
||||
}
|
||||
//
|
||||
return;
|
||||
}
|
||||
//
|
||||
void draw_swr(unsigned int s){
|
||||
if(s==0)
|
||||
oled_wr_str(2, 60, "0.00", 4);
|
||||
else {
|
||||
IntToStr(s, txt_2);
|
||||
txt[0] = txt_2[3];
|
||||
txt[1] = '.';
|
||||
txt[2] = txt_2[4];
|
||||
txt[3] = txt_2[5];
|
||||
//
|
||||
oled_wr_str(2, 60, txt, 4);
|
||||
}
|
||||
return;
|
||||
}
|
||||
//
|
||||
void draw_power(unsigned int p){
|
||||
//
|
||||
if(p==0){
|
||||
oled_wr_str(0, 60, "0.0", 3);
|
||||
return;
|
||||
}
|
||||
else if(p<10){ // <1 W
|
||||
IntToStr(p, txt_2);
|
||||
txt[0] = '0';
|
||||
txt[1] = '.';
|
||||
txt[2] = txt_2[5];
|
||||
}
|
||||
else if(p<100){ // <10W
|
||||
IntToStr(p, txt_2);
|
||||
txt[0] = txt_2[4];
|
||||
txt[1] = '.';
|
||||
txt[2] = txt_2[5];
|
||||
}
|
||||
else{ // >10W
|
||||
p += 5;
|
||||
IntToStr(p, txt_2);
|
||||
txt[0] = ' ';
|
||||
txt[1] = txt_2[3];
|
||||
txt[2] = txt_2[4];
|
||||
}
|
||||
oled_wr_str(0, 60, txt, 3);
|
||||
return;
|
||||
}
|
||||
//
|
||||
void Voltage_show(){ // 4.2 - 3.4 4200 - 3400
|
||||
get_batt();
|
||||
if(Voltage != Voltage_old) {
|
||||
Voltage_old = Voltage;
|
||||
oled_voltage(Voltage);
|
||||
if(Voltage<=3800) rldl = Rel_Del + 1;
|
||||
else rldl = Rel_Del;
|
||||
}
|
||||
//
|
||||
if(Voltage>3700){
|
||||
Green = 0;
|
||||
Red = 1;
|
||||
Delay_ms(30);
|
||||
Green = 1;
|
||||
Red = 1;
|
||||
}
|
||||
else if(Voltage>3590){
|
||||
Green = 0;
|
||||
Red = 0;
|
||||
Delay_ms(30);
|
||||
Green = 1;
|
||||
Red = 1;
|
||||
}
|
||||
else { // <3.7V
|
||||
Red = 0;
|
||||
Green = 1;
|
||||
Delay_ms(30);
|
||||
Red = 1;
|
||||
Green = 1;
|
||||
}
|
||||
if(Voltage<3400){
|
||||
oled_clear();
|
||||
oled_wr_str(1, 0, " LOW BATT ", 11);
|
||||
Delay_ms(2000);
|
||||
OLED_PWD = 0;
|
||||
power_off();
|
||||
}
|
||||
return;
|
||||
}
|
||||
//
|
||||
void Btn_xlong(){
|
||||
oled_clear();
|
||||
oled_wr_str(1, 0, " POWER OFF ", 11);
|
||||
Delay_ms(2000);
|
||||
power_off();
|
||||
return;
|
||||
}
|
||||
//
|
||||
void Btn_long(){
|
||||
Green = 0;
|
||||
oled_wr_str(2, 0, "TUNE ", 9);
|
||||
Key_out = 0;
|
||||
get_SWR();
|
||||
if(SWR>99){
|
||||
tune();
|
||||
SWR_ind = SWR;
|
||||
SWR_fixed_old = SWR;
|
||||
oled_wr_str(2, 0, "SWR ", 4);
|
||||
oled_wr_str(2, 42, "=", 1);
|
||||
draw_swr(SWR_ind);
|
||||
}
|
||||
Key_out = 1;
|
||||
Green = 1;
|
||||
B_long = 0;
|
||||
E_long = 0;
|
||||
btn_1_cnt = 0;
|
||||
volt_cnt = Tick;
|
||||
watch_cnt = Tick;
|
||||
return;
|
||||
}
|
||||
//
|
||||
void Ext_long(){
|
||||
Green = 0;
|
||||
OLED_PWD = 1;
|
||||
Key_out = 0; //
|
||||
get_SWR(); //
|
||||
if(SWR>99)
|
||||
tune();
|
||||
Key_out = 1; //
|
||||
SWR_ind = SWR;
|
||||
Green = 1;
|
||||
E_long = 0;
|
||||
return;
|
||||
}
|
||||
//
|
||||
void Btn_short(){
|
||||
Green = 0;
|
||||
atu_reset();
|
||||
oled_wr_str(2, 0, "RESET ", 9);
|
||||
Delay_ms(600);
|
||||
oled_wr_str(2, 0, "SWR ", 5);
|
||||
oled_wr_str(2, 42, "=", 1);
|
||||
oled_wr_str(2, 60, "0.00", 4);
|
||||
SWR_fixed_old = 100;
|
||||
Delay_ms(300);
|
||||
Green = 1;
|
||||
B_short = 0;
|
||||
E_short = 0;
|
||||
btn_1_cnt = 0;
|
||||
volt_cnt = Tick;
|
||||
watch_cnt = Tick;
|
||||
return;
|
||||
}
|
||||
//
|
||||
void Greating(){
|
||||
Green = 0;
|
||||
oled_clear();
|
||||
oled_wr_str_s(1, 0, " DESIGNED BY N7DDC", 18);
|
||||
oled_wr_str_s(3, 0, " FW VERSION ", 12);
|
||||
oled_wr_str_s(3, 12*7, FW_VER, 3);
|
||||
Delay_ms(3000);
|
||||
while(GetButton) asm NOP;
|
||||
Green = 1;
|
||||
return;
|
||||
}
|
||||
//
|
||||
void atu_reset(){
|
||||
ind = 0;
|
||||
cap = 1;
|
||||
SW = 0;
|
||||
Relay_set(ind, cap, SW);
|
||||
return;
|
||||
}
|
||||
//
|
||||
void Relay_set(char L, char C, char I){
|
||||
L_010 = ~L.B0;
|
||||
L_022 = ~L.B1;
|
||||
L_045 = ~L.B2;
|
||||
L_100 = ~L.B3;
|
||||
L_220 = ~L.B4;
|
||||
L_450 = ~L.B5;
|
||||
L_1000 = ~L.B6;
|
||||
//
|
||||
C_22 = ~C.B0;
|
||||
C_47 = ~C.B1;
|
||||
C_100 = ~C.B2;
|
||||
C_220 = ~C.B3;
|
||||
C_470 = ~C.B4;
|
||||
C_1000 = ~C.B5;
|
||||
C_2200 = ~C.B6;
|
||||
//
|
||||
C_sw = I;
|
||||
//
|
||||
Rel_to_gnd = 1;
|
||||
Vdelay_ms(rldl);
|
||||
Rel_to_gnd = 0;
|
||||
Delay_us(10);
|
||||
Rel_to_plus_N = 0;
|
||||
Vdelay_ms(rldl);
|
||||
Rel_to_plus_N = 1;
|
||||
Vdelay_ms(rldl);
|
||||
//
|
||||
L_010 = 0;
|
||||
L_022 = 0;
|
||||
L_045 = 0;
|
||||
L_100 = 0;
|
||||
L_220 = 0;
|
||||
L_450 = 0;
|
||||
L_1000 = 0;
|
||||
//
|
||||
C_22 = 0;
|
||||
C_47 = 0;
|
||||
C_100 = 0;
|
||||
C_220 = 0;
|
||||
C_470 = 0;
|
||||
C_1000 = 0;
|
||||
C_2200 = 0;
|
||||
//
|
||||
C_sw = 0;
|
||||
return;
|
||||
}
|
||||
//
|
||||
void power_off(void){
|
||||
char btn_cnt;
|
||||
// Disable interrupts
|
||||
GIE_bit = 0;
|
||||
T0EN_bit = 0;
|
||||
TMR0IF_bit = 0;
|
||||
IOCIE_bit = 1;
|
||||
IOCBF5_bit = 0;
|
||||
IOCBN5_bit = 1;
|
||||
// Power saving
|
||||
OLED_PWD = 0;
|
||||
RED = 1;
|
||||
Green = 1;
|
||||
//
|
||||
btn_cnt = 0;
|
||||
while(1){
|
||||
if(btn_cnt==0){ Delay_ms(100); IOCBF5_bit = 0; asm sleep; }
|
||||
asm NOP;
|
||||
Delay_ms(100);
|
||||
if(GetButton) btn_cnt++;
|
||||
else btn_cnt = 0;
|
||||
if(btn_cnt>15) break;
|
||||
}
|
||||
// Enable interrupts
|
||||
IOCIE_bit = 0;
|
||||
IOCBN5_bit = 0;
|
||||
IOCBF5_bit = 0;
|
||||
T0EN_bit = 1;
|
||||
GIE_bit = 1;
|
||||
// Return to work
|
||||
gre = 1;
|
||||
oled_start();
|
||||
while(GetButton){asm NOP;}
|
||||
btn_1_cnt = 0;
|
||||
btn_cnt = Tick;
|
||||
return;
|
||||
}
|
||||
//
|
||||
void check_reset_flags(void){
|
||||
char i = 0;
|
||||
if(STKOVF_bit){oled_wr_str_s(0, 0, "Stack overflow", 14); i = 1;}
|
||||
if(STKUNF_bit){oled_wr_str_s(1, 0, "Stack underflow", 15); i = 1;}
|
||||
if(!nRWDT_bit){oled_wr_str_s(2, 0, "WDT overflow", 12); i = 1;}
|
||||
if(!nRMCLR_bit){oled_wr_str_s(3, 0, "MCLR reset ", 12); i = 1;}
|
||||
if(!nBOR_bit){oled_wr_str_s(4, 0, "BOR reset ", 12); i = 1;}
|
||||
if(i){
|
||||
Delay_ms(5000);
|
||||
oled_clear();
|
||||
}
|
||||
return;
|
||||
}
|
||||
//
|
||||
int correction(int input) {
|
||||
input *= 2;
|
||||
//
|
||||
if(input <= 543) input += 256;
|
||||
else if(input <= 791) input += 274;
|
||||
else if(input <= 1225) input += 288;
|
||||
else if(input <= 1991) input += 286;
|
||||
else if(input <= 2766) input += 288;
|
||||
else if(input <= 3970) input += 260;
|
||||
else if(input <= 5100) input += 250;
|
||||
else input += 240;
|
||||
//
|
||||
return input;
|
||||
}
|
||||
//
|
||||
int get_reverse(void){
|
||||
unsigned int v;
|
||||
unsigned long d;
|
||||
ADC_Init_Advanced(_ADC_INTERNAL_VREFL | _ADC_INTERNAL_FVRH1);
|
||||
Delay_us(100);
|
||||
v = ADC_Get_Sample(REV_input);
|
||||
if(v==1023){
|
||||
ADC_Init_Advanced(_ADC_INTERNAL_VREFL | _ADC_INTERNAL_FVRH2);
|
||||
Delay_us(100);
|
||||
v = ADC_Get_Sample(REV_input) * 2;
|
||||
}
|
||||
if(v==2046){
|
||||
ADC_Init_Advanced(_ADC_INTERNAL_VREFL | _ADC_INTERNAL_VREFH);
|
||||
Delay_us(100);
|
||||
v = ADC_Get_Sample(REV_input);
|
||||
if(v==1023) Overflow = 1;
|
||||
get_batt();
|
||||
d = (long)v * (long)Voltage;
|
||||
d = d / 1024;
|
||||
v = (int)d;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
//
|
||||
int get_forward(void){
|
||||
unsigned int v;
|
||||
unsigned long d;
|
||||
ADC_Init_Advanced(_ADC_INTERNAL_VREFL | _ADC_INTERNAL_FVRH1);
|
||||
Delay_us(100);
|
||||
v = ADC_Get_Sample(FWD_input);
|
||||
if(v==1023){
|
||||
ADC_Init_Advanced(_ADC_INTERNAL_VREFL | _ADC_INTERNAL_FVRH2);
|
||||
Delay_us(100);
|
||||
v = ADC_Get_Sample(FWD_input) * 2;
|
||||
}
|
||||
if(v==2046){
|
||||
ADC_Init_Advanced(_ADC_INTERNAL_VREFL | _ADC_INTERNAL_VREFH);
|
||||
Delay_us(100);
|
||||
v = ADC_Get_Sample(FWD_input);
|
||||
if(v==1023) Overflow = 1;
|
||||
get_batt();
|
||||
d = (long)v * (long)Voltage;
|
||||
d = d / 1024;
|
||||
v = (int)d;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
//
|
||||
void get_pwr(){
|
||||
long Forward, Reverse;
|
||||
float p;
|
||||
//
|
||||
Forward = get_forward();
|
||||
Reverse = get_reverse();
|
||||
//
|
||||
p = correction(Forward);
|
||||
P = p * 5 / 1000;
|
||||
p = p / 1.414;
|
||||
p = p * p;
|
||||
p = p / 5;
|
||||
p += 0.5;
|
||||
PWR = p;
|
||||
//
|
||||
if(PWR>0){
|
||||
if(OLED_PWD){
|
||||
disp_cnt = Tick + Disp_time*1000;
|
||||
off_cnt = Tick + Off_time*1000;
|
||||
}
|
||||
else oled_start();
|
||||
}
|
||||
//
|
||||
if(Reverse >= Forward)
|
||||
Forward = 999;
|
||||
else {
|
||||
Forward = ((Forward + Reverse) * 100) / (Forward - Reverse);
|
||||
if(Forward>999) Forward = 999;
|
||||
}
|
||||
//
|
||||
SWR = Forward;
|
||||
return;
|
||||
}
|
||||
//
|
||||
void get_swr(){
|
||||
unsigned int pwr_cnt = 300, tuneoff_cnt = 300;
|
||||
unsigned int PWR_max = 0;
|
||||
get_pwr();
|
||||
while(PWR<min_for_start || PWR>max_for_start){ // waiting for good power
|
||||
if(B_short){
|
||||
Btn_short();
|
||||
SWR = 0;
|
||||
break;
|
||||
}
|
||||
if(B_xlong){
|
||||
//Btn_xlong();
|
||||
SWR = 0;
|
||||
break;
|
||||
}
|
||||
//
|
||||
get_pwr();
|
||||
if(pwr_cnt>0){
|
||||
pwr_cnt --;
|
||||
if(PWR>PWR_max)
|
||||
PWR_max = PWR;
|
||||
}
|
||||
else {
|
||||
if(PWR_max!=PWR_fixed_old) draw_power(PWR_max);
|
||||
PWR_fixed_old = PWR_max;
|
||||
PWR_max = 0;
|
||||
pwr_cnt = 300;
|
||||
if(tuneoff_cnt>0) tuneoff_cnt--;
|
||||
else { SWR = 0; break; }
|
||||
Delay_ms(1);
|
||||
}
|
||||
}
|
||||
// good power
|
||||
return;
|
||||
}
|
||||
//
|
||||
void get_batt(void){
|
||||
ADC_Init_Advanced(_ADC_INTERNAL_VREFL | _ADC_INTERNAL_FVRH1);
|
||||
Delay_us(100);
|
||||
Voltage = ADC_Get_Sample(Battery_input) * 11;
|
||||
return;
|
||||
}
|
||||
//
|
||||
void tune(void){
|
||||
int SWR_mem;
|
||||
char cap_mem, ind_mem;
|
||||
subtune();
|
||||
get_SWR();
|
||||
if(SWR<=120) return;
|
||||
SWR_mem = SWR;
|
||||
cap_mem = cap;
|
||||
ind_mem = ind;
|
||||
if(SW==1) SW = 0;
|
||||
else SW = 1;
|
||||
subtune();
|
||||
get_SWR();
|
||||
if(SWR>SWR_mem){
|
||||
if(SW==1) SW = 0;
|
||||
else SW = 1;
|
||||
cap = cap_mem;
|
||||
ind = ind_mem;
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
get_SWR();
|
||||
}
|
||||
if(SWR<=120) return;
|
||||
sharp_tune();
|
||||
get_SWR();
|
||||
return;
|
||||
}
|
||||
//
|
||||
void subtune(void){
|
||||
cap = 0;
|
||||
ind = 0;
|
||||
Relay_set(ind, cap, SW);
|
||||
delay_ms(50);
|
||||
get_SWR();
|
||||
if(SWR<=120) return;
|
||||
coarse_tune();
|
||||
get_SWR();
|
||||
if(SWR<=120) return;
|
||||
sharp_tune();
|
||||
return;
|
||||
}
|
||||
//
|
||||
void coarse_tune(void){
|
||||
int SWR_mem1 = 10000, SWR_mem2 = 10000, SWR_mem3 = 10000;
|
||||
char ind_mem1, cap_mem1, ind_mem2, cap_mem2, ind_mem3, cap_mem3;
|
||||
coarse_cap();
|
||||
coarse_ind();
|
||||
get_SWR();
|
||||
if(SWR<=120) return;
|
||||
SWR_mem1 = SWR;
|
||||
ind_mem1 = ind;
|
||||
cap_mem1 = cap;
|
||||
if(cap<=2 & ind<=2){
|
||||
cap = 0;
|
||||
ind = 0;
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
coarse_ind();
|
||||
coarse_cap();
|
||||
get_SWR();
|
||||
if(SWR<=120) return;
|
||||
SWR_mem2 = SWR;
|
||||
ind_mem2 = ind;
|
||||
cap_mem2 = cap;
|
||||
}
|
||||
if(cap<=2 & ind<=2){
|
||||
cap = 0;
|
||||
ind = 0;
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
coarse_ind_cap();
|
||||
get_SWR();
|
||||
if(SWR<=120) return;
|
||||
SWR_mem3 = SWR;
|
||||
ind_mem3 = ind;
|
||||
cap_mem3 = cap;
|
||||
}
|
||||
if(SWR_mem1<=SWR_mem2 & SWR_mem1<=SWR_mem3){
|
||||
cap = cap_mem1;
|
||||
ind = ind_mem1;
|
||||
}
|
||||
else if(SWR_mem2<=SWR_mem1 & SWR_mem2<=SWR_mem3){
|
||||
cap = cap_mem2;
|
||||
ind = ind_mem2;
|
||||
}
|
||||
else if(SWR_mem3<=SWR_mem1 & SWR_mem3<=SWR_mem2){
|
||||
cap = cap_mem3;
|
||||
ind = ind_mem3;
|
||||
}
|
||||
return;
|
||||
}
|
||||
//
|
||||
void coarse_ind_cap(void){
|
||||
int SWR_mem;
|
||||
char ind_mem;
|
||||
ind_mem = 0;
|
||||
get_swr();
|
||||
SWR_mem = SWR / 10;
|
||||
for(ind=1; ind<64; ind*=2){
|
||||
Relay_set(ind, ind, SW);
|
||||
Delay_ms(5);
|
||||
get_swr();
|
||||
SWR = SWR/10;
|
||||
if(SWR<=SWR_mem){
|
||||
ind_mem = ind;
|
||||
SWR_mem = SWR;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
ind = ind_mem;
|
||||
cap = ind_mem;
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
return;
|
||||
}
|
||||
//
|
||||
void coarse_cap(void){
|
||||
int SWR_mem;
|
||||
char cap_mem;
|
||||
cap_mem = 0;
|
||||
get_swr();
|
||||
SWR_mem = SWR / 10;
|
||||
for(cap=1; cap<64; cap*=2){
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
get_swr();
|
||||
SWR = SWR/10;
|
||||
if(SWR<=SWR_mem){
|
||||
cap_mem = cap;
|
||||
SWR_mem = SWR;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
cap = cap_mem;
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
return;
|
||||
}
|
||||
//
|
||||
void coarse_ind(void){
|
||||
int SWR_mem;
|
||||
char ind_mem;
|
||||
ind_mem = 0;
|
||||
get_swr();
|
||||
SWR_mem = SWR / 10;
|
||||
for(ind=1; ind<64; ind*=2){
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
get_swr();
|
||||
SWR = SWR/10;
|
||||
if(SWR<=SWR_mem){
|
||||
ind_mem = ind;
|
||||
SWR_mem = SWR;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
ind = ind_mem;
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
return;
|
||||
}
|
||||
//
|
||||
void sharp_tune(void){
|
||||
if(cap>=ind){
|
||||
sharp_cap();
|
||||
sharp_ind();
|
||||
}
|
||||
else{
|
||||
sharp_ind();
|
||||
sharp_cap();
|
||||
}
|
||||
return;
|
||||
}
|
||||
//
|
||||
void sharp_cap(void){
|
||||
int SWR_mem;
|
||||
char step, cap_mem;
|
||||
cap_mem = cap;
|
||||
step = cap / 10;
|
||||
if(step==0) step = 1;
|
||||
get_SWR();
|
||||
SWR_mem = SWR;
|
||||
cap += step;
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
get_SWR();
|
||||
if(SWR<=SWR_mem){
|
||||
SWR_mem = SWR;
|
||||
cap_mem = cap;
|
||||
for(cap+=step; cap<=(127-step); cap+=step){
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
get_SWR();
|
||||
if(SWR<=SWR_mem){
|
||||
cap_mem = cap;
|
||||
SWR_mem = SWR;
|
||||
step = cap / 10;
|
||||
if(step==0) step = 1;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
else{
|
||||
SWR_mem = SWR;
|
||||
for(cap-=step; cap>=step; cap-=step){
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
get_SWR();
|
||||
if(SWR<=SWR_mem){
|
||||
cap_mem = cap;
|
||||
SWR_mem = SWR;
|
||||
step = cap / 10;
|
||||
if(step==0) step = 1;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
cap = cap_mem;
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
return;
|
||||
}
|
||||
//
|
||||
void sharp_ind(void){
|
||||
int SWR_mem;
|
||||
char step, ind_mem;
|
||||
ind_mem = ind;
|
||||
step = ind / 10;
|
||||
if(step==0) step = 1;
|
||||
get_SWR();
|
||||
SWR_mem = SWR;
|
||||
ind += step;
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
get_SWR();
|
||||
if(SWR<=SWR_mem){
|
||||
SWR_mem = SWR;
|
||||
ind_mem = ind;
|
||||
for(ind+=step; ind<=(127-step); ind+=step){
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
get_SWR();
|
||||
if(SWR<=SWR_mem){
|
||||
ind_mem = ind;
|
||||
SWR_mem = SWR;
|
||||
step = ind / 10;
|
||||
if(step==0) step = 1;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
else{
|
||||
SWR_mem = SWR;
|
||||
for(ind-=step; ind>=step; ind-=step){
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
get_SWR();
|
||||
if(SWR<=SWR_mem){
|
||||
ind_mem = ind;
|
||||
SWR_mem = SWR;
|
||||
step = ind / 10;
|
||||
if(step==0) step = 1;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
ind = ind_mem;
|
||||
Relay_set(ind, cap, SW);
|
||||
Delay_ms(5);
|
||||
return;
|
||||
}
|
||||
//
|
|
@ -0,0 +1,5 @@
|
|||
[Position]
|
||||
Line=18
|
||||
Column=61
|
||||
[FoldedLines]
|
||||
Count=0
|
|
@ -0,0 +1,47 @@
|
|||
|
||||
void pic_init(void);
|
||||
void Btn_long(void);
|
||||
void Btn_short(void);
|
||||
void Btn_xlong(void);
|
||||
void check_reset_flags(void);
|
||||
void Voltage_show(void);
|
||||
void Relay_set(char, char, char);
|
||||
int get_reverse(void);
|
||||
int get_forward(void);
|
||||
void get_pwr(void);
|
||||
void get_swr(void);
|
||||
void get_batt(void);
|
||||
void watch_swr(void);
|
||||
void coarse_cap(void);
|
||||
void tune(void);
|
||||
void subtune(void);
|
||||
void coarse_tune(void);
|
||||
void coarse_cap(void);
|
||||
void coarse_ind(void);
|
||||
void coarse_ind_cap(void);
|
||||
void sharp_tune(void);
|
||||
void sharp_cap(void);
|
||||
void sharp_ind(void);
|
||||
int correction(int);
|
||||
void atu_reset(void);
|
||||
void draw_swr(unsigned int);
|
||||
void draw_power(unsigned int);
|
||||
void oled_start(void);
|
||||
void power_off(void);
|
||||
void Greating(void);
|
||||
void Ext_long(void);
|
||||
|
||||
|
||||
|
||||
#define ON 1
|
||||
#define OFF 0
|
||||
#define INT GIE_bit
|
||||
#define Battery_input 9
|
||||
#define FWD_input 8
|
||||
#define REV_input 10
|
||||
#define _AD_High ADFVR0_bit=0;ADFVR1_bit=1;
|
||||
#define _AD_Low ADFVR0_bit=1;ADFVR1_bit=0;
|
||||
#define Key_out LATD2_bit
|
||||
#define Key_in PORTD.B2
|
||||
#define Start_out LATD1_bit
|
||||
#define Start ~PORTD.B1
|
|
@ -0,0 +1,5 @@
|
|||
[Position]
|
||||
Line=24
|
||||
Column=22
|
||||
[FoldedLines]
|
||||
Count=0
|
Plik binarny nie jest wyświetlany.
|
@ -0,0 +1,279 @@
|
|||
#include "oled_control.h"
|
||||
#include "Soft_I2C.h"
|
||||
|
||||
void oled_disp_on() {
|
||||
send_command(0xAF); // display ON
|
||||
}
|
||||
|
||||
void oled_disp_off() {
|
||||
send_command(0xAE); // display OFF
|
||||
}
|
||||
|
||||
void oled_init (void) { // OLED init
|
||||
char cnt;
|
||||
for(cnt=0; cnt<10; cnt++){
|
||||
Soft_I2C_Start();
|
||||
if(Soft_I2C_Write(oled_addr)==0) break; // device addres
|
||||
else Soft_I2C_Stop();
|
||||
Delay_ms(300);
|
||||
}
|
||||
Soft_I2C_Write(0); // 0 - continious mode, command; 64 - Co, data
|
||||
Soft_I2C_Write (0xAE); // display OFF
|
||||
// initialisation
|
||||
Soft_I2C_Write (0xD5); // clock division
|
||||
Soft_I2C_Write (0x80); // ratio
|
||||
//
|
||||
Soft_I2C_Write (0xA8); // multiplexer
|
||||
Soft_I2C_Write (63); //
|
||||
//
|
||||
Soft_I2C_Write (0xD3); // offset
|
||||
Soft_I2C_Write (shift_line); // 32 no offset for x64 !
|
||||
//
|
||||
Soft_I2C_Write (0x40); // set line, line = 0
|
||||
//
|
||||
Soft_I2C_Write (0x8D); // charge pump
|
||||
Soft_I2C_Write (0x14); // 0x10 - external, 0x14 - internal
|
||||
//
|
||||
Soft_I2C_Write (0x81); // contrast
|
||||
Soft_I2C_Write (255); // 0-255
|
||||
//
|
||||
Soft_I2C_Write (0xD9); // pre-charge
|
||||
Soft_I2C_Write (0xF1); // 0x22 - external, 0xF1 - internal
|
||||
//
|
||||
Soft_I2C_Write (0x20); // memory addressing mode
|
||||
Soft_I2C_Write (0x02); // page addressing mode 02
|
||||
//
|
||||
Soft_I2C_Write (0x21); // set column range
|
||||
Soft_I2C_Write (0); // column start
|
||||
Soft_I2C_Write (127); // column stop
|
||||
//
|
||||
Soft_I2C_Write (0x2E); // stop scrolling
|
||||
//
|
||||
if(inversion) {
|
||||
Soft_I2C_Write (0xA0); // segment re-map, A0 - normal, A1 - remapped
|
||||
Soft_I2C_Write (0xC0); // scan direction, C0 - normal, C8 - remapped
|
||||
}
|
||||
else {
|
||||
Soft_I2C_Write (0xA1); // segment re-map, A0 - normal, A1 - remapped
|
||||
Soft_I2C_Write (0xC8); // scan direction, C0 - normal, C8 - remapped
|
||||
}
|
||||
//
|
||||
Soft_I2C_Write (0xDA); // COM pins configure
|
||||
Soft_I2C_Write (0x02); // 02 for 32 12 for x64
|
||||
//
|
||||
Soft_I2C_Write (0xDB); // V-COM detect
|
||||
Soft_I2C_Write (0x40); //
|
||||
//
|
||||
Soft_I2C_Write (0xA4); // display entire ON
|
||||
//
|
||||
Soft_I2C_Write (0xA6); // 0xA6 - normal, 0xA7 - inverse
|
||||
//
|
||||
Soft_I2C_Stop ();
|
||||
//
|
||||
oled_clear();
|
||||
send_command (0xAF); // display ON
|
||||
return;
|
||||
}
|
||||
|
||||
void oled_clear(void){
|
||||
char i, r;
|
||||
// ********clear OLED***********
|
||||
Soft_I2C_Start();
|
||||
Soft_I2C_Write(oled_addr); // device addres
|
||||
Soft_I2C_Write(64); // 0 - continious mode, command; 64 - Co, data
|
||||
//
|
||||
for (r = 0; r <=7; r++) {
|
||||
set_addressing (r, 0); // clear all 8 pages
|
||||
for (i = 0; i < 128; i++, Soft_I2C_Write(0x00)); // clear one page pixels
|
||||
}
|
||||
Soft_I2C_Stop ();
|
||||
//
|
||||
return;
|
||||
}
|
||||
|
||||
void send_command (char oled_command) {
|
||||
Soft_I2C_Start();
|
||||
Soft_I2C_Write(oled_addr); // device addres
|
||||
Soft_I2C_Write(128); // 128 - command, 192 - data
|
||||
Soft_I2C_Write(oled_command);
|
||||
Soft_I2C_Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
void set_addressing (char pagenum, char c_start) {
|
||||
char a, b, c;
|
||||
c = c_start + oled_shift;
|
||||
Soft_I2C_Start();
|
||||
Soft_I2C_Write(oled_addr); // device addres
|
||||
Soft_I2C_Write(0); // 0 - continious mode, command; 64 - Co, data
|
||||
Soft_I2C_Write(0xB0 + pagenum); // set page number
|
||||
//
|
||||
if (c <= 15) { a = c; b = 0; }
|
||||
else { b = c / 16; a = c - b * 16; }
|
||||
Soft_I2C_Write (a); // set lower nibble of start address
|
||||
Soft_I2C_Write (0x10 + b); // set higher nibble of start address
|
||||
//
|
||||
Soft_I2C_Start();
|
||||
Soft_I2C_Write(oled_addr); // device addres
|
||||
Soft_I2C_Write(64); // 0 - continious mode, command; 64 - Co, data
|
||||
return;
|
||||
}
|
||||
|
||||
void oled_wr_str_s(char page, char col, char str[], char len) { // 128*64 OLED
|
||||
char i, h, g;
|
||||
set_addressing (page, col);
|
||||
//
|
||||
for (i = 0; i < len; i++) { // write string
|
||||
g = str[i] - 32; // table shift
|
||||
for (h = 0; h < 5; h++) { // write letter
|
||||
Soft_I2C_Write(font_5x8[g*5+h]);
|
||||
}
|
||||
Soft_I2C_Write (0);
|
||||
}
|
||||
Soft_I2C_Stop ();
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
void oled_wr_str (char page, char col, char str[], char leng ) { //
|
||||
char i, h, g, w1, w2;
|
||||
Soft_I2C_Start();
|
||||
Soft_I2C_Write(oled_addr); // device addres
|
||||
Soft_I2C_Write(64); // 0 - continious mode, command; 64 - Co, data
|
||||
//
|
||||
set_addressing (page, col);
|
||||
//
|
||||
for (i = 0; i < leng; i++) { // write string
|
||||
if (str[i] == 0) g = 0; else g = str[i] - 32; // NULL detection
|
||||
for (h = 0; h <= 4; h++) { // write letter
|
||||
w1 = font_5x8[g*5+h];
|
||||
if(page != 2) {
|
||||
w2.B7 = w1.B3;
|
||||
w2.B6 = w1.B3;
|
||||
w2.B5 = w1.B2;
|
||||
w2.B4 = w1.B2;
|
||||
w2.B3 = w1.B1;
|
||||
w2.B2 = w1.B1;
|
||||
w2.B1 = w1.B0;
|
||||
w2.B0 = w1.B0; }
|
||||
else {
|
||||
w2.B7 = w1.B2;
|
||||
w2.B6 = w1.B2;
|
||||
w2.B5 = w1.B1;
|
||||
w2.B4 = w1.B1;
|
||||
w2.B3 = w1.B0;
|
||||
w2.B2 = w1.B0;
|
||||
w2.B1 = 0;
|
||||
w2.B0 = 0;
|
||||
}
|
||||
Soft_I2C_Write(w2);
|
||||
Soft_I2C_Write(w2);
|
||||
}
|
||||
Soft_I2C_Write (0);
|
||||
Soft_I2C_Write (0);
|
||||
}
|
||||
set_addressing (page+1, col);
|
||||
//
|
||||
for (i = 0; i < leng; i++) { // write string
|
||||
if (str[i] == 0) g = 0; else g = str[i] - 32; // NULL detection
|
||||
for (h = 0; h <= 4; h++) { // write letter
|
||||
w1 = font_5x8[g*5+h];
|
||||
if(page != 2) {
|
||||
w2.B7 = w1.B7;
|
||||
w2.B6 = w1.B7;
|
||||
w2.B5 = w1.B6;
|
||||
w2.B4 = w1.B6;
|
||||
w2.B3 = w1.B5;
|
||||
w2.B2 = w1.B5;
|
||||
w2.B1 = w1.B4;
|
||||
w2.B0 = w1.B4; }
|
||||
else {
|
||||
w2.B7 = w1.B6;
|
||||
w2.B6 = w1.B6;
|
||||
w2.B5 = w1.B5;
|
||||
w2.B4 = w1.B5;
|
||||
w2.B3 = w1.B4;
|
||||
w2.B2 = w1.B4;
|
||||
w2.B1 = w1.B3;
|
||||
w2.B0 = w1.B3;
|
||||
}
|
||||
Soft_I2C_Write(w2);
|
||||
Soft_I2C_Write(w2);
|
||||
}
|
||||
Soft_I2C_Write (0);
|
||||
Soft_I2C_Write (0);
|
||||
}
|
||||
Soft_I2C_Stop ();
|
||||
}
|
||||
|
||||
//
|
||||
void oled_bat () {
|
||||
char i, g;
|
||||
Soft_I2C_Start();
|
||||
Soft_I2C_Write(oled_addr); // device addres
|
||||
Soft_I2C_Write(64); // 0 - continious mode, command; 64 - Co, data
|
||||
//
|
||||
|
||||
for(g=0; g<=3; g++) { // batt drawing
|
||||
set_addressing (g, 115);
|
||||
for(i=0; i<=10; i++) { Soft_I2C_Write(batt[g*11+i]); }
|
||||
}
|
||||
Soft_I2C_Stop ();
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
void oled_voltage(int Voltage) {
|
||||
char i, v, u0, u1, u2, u3, m;
|
||||
Soft_I2C_Start();
|
||||
Soft_I2C_Write(oled_addr); // device addres
|
||||
Soft_I2C_Write(64); // 0 - continious mode, command; 64 - Co, data
|
||||
//
|
||||
Voltage /= 10;
|
||||
if(Voltage < 300) Voltage = 300;
|
||||
else if(Voltage > 420) Voltage = 420;
|
||||
Voltage = Voltage - 300; // 0 - 120
|
||||
Voltage = Voltage * 32;
|
||||
v = Voltage / 120;
|
||||
|
||||
|
||||
if(v >= 25) { u0 = v - 24; u1 = 8; u2 = 8; u3 = 8; }
|
||||
else if(v >= 17) { u0 = 0; u1 = v - 16; u2 = 8; u3 = 8; }
|
||||
else if(v >= 9 ) { u0 = 0; u1 = 0; u2 = v - 8; u3 = 8; }
|
||||
else { u0 = 0; u1 = 0; u2 = 0; u3 = v ; }
|
||||
|
||||
m = 128;
|
||||
m = 255 - (m >> (u0-1)) +1;
|
||||
m = m | 0b00000011;
|
||||
set_addressing (0, 119);
|
||||
Soft_I2C_Write(m);
|
||||
Soft_I2C_Write(m);
|
||||
Soft_I2C_Write(m);
|
||||
m = m | 0b00011111;
|
||||
set_addressing (0, 117);
|
||||
Soft_I2C_Write(m);
|
||||
Soft_I2C_Write(m);
|
||||
set_addressing (0, 122);
|
||||
Soft_I2C_Write(m);
|
||||
Soft_I2C_Write(m);
|
||||
|
||||
m = 128;
|
||||
m = 255 - (m >> (u1-1)) + 1;
|
||||
set_addressing (1, 117);
|
||||
for(i=0; i<=6; i++) Soft_I2C_Write(m);
|
||||
|
||||
m = 128;
|
||||
m = 255 - (m >> (u2-1)) + 1;
|
||||
set_addressing (2, 117);
|
||||
for(i=0; i<=6; i++) Soft_I2C_Write(m);
|
||||
|
||||
m = 128;
|
||||
m = 255 - (m >> (u3-1)) +1;
|
||||
m = m | 0b11000000;
|
||||
set_addressing (3, 117);
|
||||
for(i=0; i<=6; i++) Soft_I2C_Write(m);
|
||||
//
|
||||
Soft_I2C_Stop ();
|
||||
return;
|
||||
}
|
||||
//
|
|
@ -0,0 +1,5 @@
|
|||
[Position]
|
||||
Line=18
|
||||
Column=17
|
||||
[FoldedLines]
|
||||
Count=0
|
|
@ -0,0 +1,69 @@
|
|||
#include "font_5x8.h"
|
||||
|
||||
static oled_addr = 0x78;
|
||||
static char shift_line = 64; // shift the image down
|
||||
static char oled_shift = 2; // shift the image left
|
||||
static char inversion = 1;
|
||||
//
|
||||
void oled_init (void);
|
||||
void oled_clear(void);
|
||||
void send_command (char);
|
||||
void set_addressing (char, char);
|
||||
void oled_wr_str_s(char, char, char*, char);
|
||||
void oled_wr_str(char, char, char*, char);
|
||||
void oled_bat (void);
|
||||
void oled_voltage (int);
|
||||
void oled_clear (void);
|
||||
|
||||
//
|
||||
static const char batt[] = {
|
||||
0B11111000,
|
||||
0B11111000,
|
||||
|
||||
0B00011111,
|
||||
0B00011111,
|
||||
0B00000011,
|
||||
0B00000011,
|
||||
0B00000011,
|
||||
0B00011111,
|
||||
0B00011111,
|
||||
|
||||
0B11111000,
|
||||
0B11111000,
|
||||
//
|
||||
0B11111111,
|
||||
0B11111111,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B11111111,
|
||||
0B11111111,
|
||||
//
|
||||
0B11111111,
|
||||
0B11111111,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B00000000,
|
||||
0B11111111,
|
||||
0B11111111,
|
||||
//
|
||||
0B11111111,
|
||||
0B11111111,
|
||||
0B11000000,
|
||||
0B11000000,
|
||||
0B11000000,
|
||||
0B11000000,
|
||||
0B11000000,
|
||||
0B11000000,
|
||||
0B11000000,
|
||||
0B11111111,
|
||||
0B11111111
|
||||
};
|
|
@ -0,0 +1,5 @@
|
|||
[Position]
|
||||
Line=1
|
||||
Column=1
|
||||
[FoldedLines]
|
||||
Count=0
|
Plik binarny nie jest wyświetlany.
|
@ -0,0 +1,62 @@
|
|||
// pic_init unit for Micro C PRO
|
||||
// 2020
|
||||
|
||||
void pic_init (void) {
|
||||
// ports initialisation
|
||||
ANSELA = 0; // all as digital
|
||||
ANSELB = 0; // all as digital
|
||||
ANSB0_bit = 1; // analog input
|
||||
ANSB1_bit = 1; // analog input
|
||||
ANSB2_bit = 1; // analog input
|
||||
ANSELC = 0; // all as digital
|
||||
ANSELE = 0; // all as digital
|
||||
ANSELD = 0; // all as digital
|
||||
|
||||
C1ON_bit = 0; // Disable comparators
|
||||
C2ON_bit = 0;
|
||||
|
||||
PORTA = 0;
|
||||
PORTB = 0;
|
||||
PORTC = 0;
|
||||
PORTD = 0;
|
||||
PORTE = 0;
|
||||
LATA = 0b00000000;
|
||||
LATB = 0b00000000;
|
||||
LATC = 0b00010000;
|
||||
LATD = 0b00000110;
|
||||
LATE = 0b00000000;
|
||||
TRISA = 0b00000000;
|
||||
TRISB = 0b00100111;
|
||||
TRISC = 0b00000000;
|
||||
TRISD = 0b00000000;
|
||||
TRISE = 0b00000000;
|
||||
|
||||
// open drains
|
||||
ODCA2_bit = 1;
|
||||
ODCA3_bit = 1;
|
||||
ODCD1_bit = 1;
|
||||
ODCD2_bit = 1;
|
||||
|
||||
// Timer0 settings
|
||||
T0CS0_bit = 0; // Fosc/4
|
||||
T0CS1_bit = 1;
|
||||
T0CS2_bit = 0;
|
||||
T016BIT_bit = 1;
|
||||
TMR0L = 0xC0; // 8_000 cycles to OF
|
||||
TMR0H = 0xE0;
|
||||
TMR0IF_bit = 0;
|
||||
T0EN_bit = 1;
|
||||
TMR0IE_bit = 1;
|
||||
|
||||
// Modules disable
|
||||
PMD0 = 0b00011110; //
|
||||
PMD1 = 0b11111110;
|
||||
PMD2 = 0b01000111;
|
||||
PMD3 = 0b01111111;
|
||||
PMD4 = 0b1110111;
|
||||
PMD5 = 0b11011111;
|
||||
//interrupt setting
|
||||
GIE_bit = 1;
|
||||
Delay_ms (100);
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
[Position]
|
||||
Line=1
|
||||
Column=33
|
||||
[FoldedLines]
|
||||
Count=0
|
|
@ -0,0 +1,24 @@
|
|||
// Connections
|
||||
//
|
||||
#define GetButton ~ PORTB.B5
|
||||
//
|
||||
sbit Red at LATB4_bit;
|
||||
sbit Green at LATB3_bit;
|
||||
sbit OLED_PWD at LATA4_bit;
|
||||
sbit C_sw at LATE0_bit;
|
||||
sbit L_010 at LATD7_bit;
|
||||
sbit L_022 at LATD6_bit;
|
||||
sbit L_045 at LATD5_bit;
|
||||
sbit L_100 at LATD4_bit;
|
||||
sbit L_220 at LATC7_bit;
|
||||
sbit L_450 at LATC6_bit;
|
||||
sbit L_1000 at LATC5_bit;
|
||||
sbit C_22 at LATA5_bit;
|
||||
sbit C_47 at LATE1_bit;
|
||||
sbit C_100 at LATA7_bit;
|
||||
sbit C_220 at LATA6_bit;
|
||||
sbit C_470 at LATC0_bit;
|
||||
sbit C_1000 at LATC1_bit;
|
||||
sbit C_2200 at LATC2_bit;
|
||||
sbit Rel_to_gnd at LATD3_bit;
|
||||
sbit Rel_to_plus_N at LATC4_bit;
|
|
@ -0,0 +1,5 @@
|
|||
[Position]
|
||||
Line=1
|
||||
Column=1
|
||||
[FoldedLines]
|
||||
Count=0
|
Plik binarny nie jest wyświetlany.
Ładowanie…
Reference in New Issue