Add files via upload

main
David Fainitski 2022-08-13 17:08:26 -07:00 zatwierdzone przez GitHub
rodzic 224aa44326
commit f3915e71cb
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
27 zmienionych plików z 8596 dodań i 0 usunięć

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -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=

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -0,0 +1,5 @@
[Position]
Line=11
Column=3
[FoldedLines]
Count=0

Wyświetl plik

@ -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);
//

Wyświetl plik

@ -0,0 +1,5 @@
[Position]
Line=1
Column=1
[FoldedLines]
Count=0

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -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 // <-
};
//

Wyświetl plik

@ -0,0 +1,5 @@
[Position]
Line=99
Column=1
[FoldedLines]
Count=0

Wyświetl plik

@ -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;
}
//

Wyświetl plik

@ -0,0 +1,5 @@
[Position]
Line=18
Column=61
[FoldedLines]
Count=0

Wyświetl plik

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

Wyświetl plik

@ -0,0 +1,5 @@
[Position]
Line=24
Column=22
[FoldedLines]
Count=0

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -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;
}
//

Wyświetl plik

@ -0,0 +1,5 @@
[Position]
Line=18
Column=17
[FoldedLines]
Count=0

Wyświetl plik

@ -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
};

Wyświetl plik

@ -0,0 +1,5 @@
[Position]
Line=1
Column=1
[FoldedLines]
Count=0

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -0,0 +1,5 @@
[Position]
Line=1
Column=33
[FoldedLines]
Count=0

Wyświetl plik

@ -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;

Wyświetl plik

@ -0,0 +1,5 @@
[Position]
Line=1
Column=1
[FoldedLines]
Count=0

Plik binarny nie jest wyświetlany.