Shutter module tested

This commit is contained in:
eddyem 2015-02-04 18:49:15 +03:00
parent f600aa9e8e
commit 37b7d5cb16
14 changed files with 184 additions and 88 deletions

View File

@ -1,4 +1,4 @@
Cmp-Mod V01 Created by CvPcb (2013-feb-26)-stable date = Вс 30 ноя 2014 15:38:41
Cmp-Mod V01 Created by CvPcb (2013-feb-26)-stable date = Ср 04 фев 2015 15:00:52
BeginCmp
TimeStamp = /53A910B8/50AF1E60;
@ -115,14 +115,14 @@ EndCmp
BeginCmp
TimeStamp = /53973803/53997111;
Reference = C5;
ValeurCmp = 10u;
ValeurCmp = 100u;
IdModule = CP_5x11mm;
EndCmp
BeginCmp
TimeStamp = /53973803/53997130;
Reference = C6;
ValeurCmp = 100u;
ValeurCmp = 470u;
IdModule = CP_5x11mm;
EndCmp
@ -217,6 +217,13 @@ ValeurCmp = 1u;
IdModule = SM0805;
EndCmp
BeginCmp
TimeStamp = /54D32A5B;
Reference = C20;
ValeurCmp = 2200u, 40V;
IdModule = CP_16x25mm;
EndCmp
BeginCmp
TimeStamp = /53973803/53976CAB/53BE6988;
Reference = CON1;

View File

@ -1,7 +1,7 @@
(export (version D)
(design
(source /home/eddy/Docs/SAO/ELECTRONICS/STM32/kicad/alltogether/ALL.sch)
(date "Вс 30 ноя 2014 15:38:48")
(date "Ср 04 фев 2015 15:06:52")
(tool "eeschema (2013-feb-26)-stable"))
(components
(comp (ref XP2)
@ -219,13 +219,13 @@
(sheetpath (names "/STM32F103 module/") (tstamps /53973803/))
(tstamp 53996A85))
(comp (ref C5)
(value 10u)
(value 100u)
(footprint C2)
(libsource (lib device) (part C))
(sheetpath (names "/STM32F103 module/") (tstamps /53973803/))
(tstamp 53997111))
(comp (ref C6)
(value 100u)
(value 470u)
(footprint C2)
(libsource (lib device) (part C))
(sheetpath (names "/STM32F103 module/") (tstamps /53973803/))
@ -1445,10 +1445,10 @@
(uri /usr/share/kicad/library/conn.lib))
(library (logical regul)
(uri /usr/share/kicad/library/regul.lib))
(library (logical STM32f103)
(uri /home/eddy/kicad/STM32f103.lib))
(library (logical my_elements)
(uri my_elements.lib)))
(uri my_elements.lib))
(library (logical STM32f103)
(uri /home/eddy/kicad/STM32f103.lib)))
(nets
(net (code 1) (name "/Power MOSFET module 2/GND_OUT")
(node (ref XP7) (pin 19))

View File

@ -1,4 +1,4 @@
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
LIBS:power
LIBS:device
LIBS:transistors
@ -41,7 +41,7 @@ $Descr A3 16535 11693
encoding utf-8
Sheet 1 12
Title "IR-spectrometer Control System"
Date "28 jan 2015"
Date "4 feb 2015"
Rev ""
Comp "SAO RAS"
Comment1 ""

View File

@ -1,4 +1,4 @@
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
LIBS:power
LIBS:device
LIBS:transistors
@ -41,7 +41,7 @@ $Descr A3 16535 11693
encoding utf-8
Sheet 3 12
Title "MCU module on STM32F103"
Date "28 jan 2015"
Date "4 feb 2015"
Rev ""
Comp "SAO RAS"
Comment1 ""
@ -296,7 +296,7 @@ L C C5
U 1 1 53997111
P 4400 1100
F 0 "C5" H 4400 1200 40 0000 L CNN
F 1 "10u" H 4406 1015 40 0000 L CNN
F 1 "100u" H 4406 1015 40 0000 L CNN
F 2 "C2" H 4438 950 30 0001 C CNN
F 3 "~" H 4400 1100 60 0000 C CNN
1 4400 1100
@ -307,7 +307,7 @@ L C C6
U 1 1 53997130
P 5350 1100
F 0 "C6" H 5350 1200 40 0000 L CNN
F 1 "100u" H 5356 1015 40 0000 L CNN
F 1 "470u" H 5356 1015 40 0000 L CNN
F 2 "C2" H 5388 950 30 0001 C CNN
F 3 "~" H 5350 1100 60 0000 C CNN
1 5350 1100

View File

@ -1,4 +1,4 @@
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
LIBS:power
LIBS:device
LIBS:transistors
@ -41,7 +41,7 @@ $Descr A4 11693 8268
encoding utf-8
Sheet 5 12
Title "RS-232 level converter"
Date "28 jan 2015"
Date "4 feb 2015"
Rev ""
Comp "SAO RAS"
Comment1 ""

View File

@ -1,4 +1,4 @@
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
LIBS:power
LIBS:device
LIBS:transistors
@ -41,7 +41,7 @@ $Descr A4 11693 8268
encoding utf-8
Sheet 12 12
Title "Power load module"
Date "28 jan 2015"
Date "4 feb 2015"
Rev ""
Comp "SAO RAS"
Comment1 ""

View File

@ -1,4 +1,4 @@
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
LIBS:power
LIBS:device
LIBS:transistors
@ -41,7 +41,7 @@ $Descr A4 11693 8268
encoding utf-8
Sheet 4 12
Title "USB input circuit"
Date "28 jan 2015"
Date "4 feb 2015"
Rev ""
Comp "SAO RAS"
Comment1 ""

View File

@ -1,4 +1,4 @@
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
LIBS:power
LIBS:device
LIBS:transistors
@ -41,7 +41,7 @@ $Descr A4 11693 8268
encoding utf-8
Sheet 8 12
Title "Stepper motor module"
Date "28 jan 2015"
Date "4 feb 2015"
Rev ""
Comp "SAO RAS"
Comment1 ""
@ -152,7 +152,7 @@ AR Path="/53A910B7/50CECA5D" Ref="C3.2" Part="1"
AR Path="/5391724D/50CECA5D" Ref="C3.3" Part="1"
AR Path="/53A910BA/50CECA5D" Ref="C3.4" Part="1"
AR Path="/53A910B9/50CECA5D" Ref="C3.5" Part="1"
F 0 "C3.5" H 5550 3350 50 0000 L CNN
F 0 "C3.1" H 5550 3350 50 0000 L CNN
F 1 "1n" H 5550 3150 50 0000 L CNN
F 2 "SM0805" H 5500 3250 60 0001 C CNN
F 3 "" H 5500 3250 60 0001 C CNN
@ -168,7 +168,7 @@ AR Path="/53A910B7/50CECA5C" Ref="R6.2" Part="1"
AR Path="/5391724D/50CECA5C" Ref="R6.3" Part="1"
AR Path="/53A910BA/50CECA5C" Ref="R6.4" Part="1"
AR Path="/53A910B9/50CECA5C" Ref="R6.5" Part="1"
F 0 "R6.5" V 5580 3000 50 0000 C CNN
F 0 "R6.1" V 5580 3000 50 0000 C CNN
F 1 "51k" V 5500 3000 50 0000 C CNN
F 2 "SM0603" H 5500 3000 60 0001 C CNN
F 3 "" H 5500 3000 60 0001 C CNN
@ -232,7 +232,7 @@ AR Path="/53A910B7/50CEC791" Ref="R5.2" Part="1"
AR Path="/5391724D/50CEC791" Ref="R5.3" Part="1"
AR Path="/53A910BA/50CEC791" Ref="R5.4" Part="1"
AR Path="/53A910B9/50CEC791" Ref="R5.5" Part="1"
F 0 "R5.5" V 5580 2500 50 0000 C CNN
F 0 "R5.1" V 5580 2500 50 0000 C CNN
F 1 "51k" V 5500 2500 50 0000 C CNN
F 2 "SM0603" H 5500 2500 60 0001 C CNN
F 3 "" H 5500 2500 60 0001 C CNN
@ -248,7 +248,7 @@ AR Path="/53A910B7/50CEC790" Ref="C2.2" Part="1"
AR Path="/5391724D/50CEC790" Ref="C2.3" Part="1"
AR Path="/53A910BA/50CEC790" Ref="C2.4" Part="1"
AR Path="/53A910B9/50CEC790" Ref="C2.5" Part="1"
F 0 "C2.5" H 5550 2850 50 0000 L CNN
F 0 "C2.1" H 5550 2850 50 0000 L CNN
F 1 "1n" H 5550 2650 50 0000 L CNN
F 2 "SM0805" H 5500 2750 60 0001 C CNN
F 3 "" H 5500 2750 60 0001 C CNN
@ -264,7 +264,7 @@ AR Path="/53A910B7/50CEB99A" Ref="R2.2" Part="1"
AR Path="/5391724D/50CEB99A" Ref="R2.3" Part="1"
AR Path="/53A910BA/50CEB99A" Ref="R2.4" Part="1"
AR Path="/53A910B9/50CEB99A" Ref="R2.5" Part="1"
F 0 "R2.5" V 4280 2650 50 0000 C CNN
F 0 "R2.1" V 4280 2650 50 0000 C CNN
F 1 "0.33" V 4200 2650 50 0000 C CNN
F 2 "SM2010" H 4200 2650 60 0001 C CNN
F 3 "" H 4200 2650 60 0001 C CNN
@ -280,7 +280,7 @@ AR Path="/53A910B7/50CEB97A" Ref="R1.2" Part="1"
AR Path="/5391724D/50CEB97A" Ref="R1.3" Part="1"
AR Path="/53A910BA/50CEB97A" Ref="R1.4" Part="1"
AR Path="/53A910B9/50CEB97A" Ref="R1.5" Part="1"
F 0 "R1.5" V 4280 2450 50 0000 C CNN
F 0 "R1.1" V 4280 2450 50 0000 C CNN
F 1 "0.33" V 4200 2450 50 0000 C CNN
F 2 "SM2010" H 4200 2450 60 0001 C CNN
F 3 "" H 4200 2450 60 0001 C CNN
@ -328,7 +328,7 @@ AR Path="/53A910B7/50AF1E60" Ref="C1.2" Part="1"
AR Path="/5391724D/50AF1E60" Ref="C1.3" Part="1"
AR Path="/53A910BA/50AF1E60" Ref="C1.4" Part="1"
AR Path="/53A910B9/50AF1E60" Ref="C1.5" Part="1"
F 0 "C1.5" H 5100 5100 50 0000 L CNN
F 0 "C1.1" H 5100 5100 50 0000 L CNN
F 1 "68n" H 5100 4900 50 0000 L CNN
F 2 "SM0805" H 5050 5000 60 0001 C CNN
F 3 "" H 5050 5000 60 0001 C CNN
@ -376,7 +376,7 @@ AR Path="/53A910B7/50AF1C25" Ref="R3.2" Part="1"
AR Path="/5391724D/50AF1C25" Ref="R3.3" Part="1"
AR Path="/53A910BA/50AF1C25" Ref="R3.4" Part="1"
AR Path="/53A910B9/50AF1C25" Ref="R3.5" Part="1"
F 0 "R3.5" V 4480 5050 50 0000 C CNN
F 0 "R3.1" V 4480 5050 50 0000 C CNN
F 1 "22k" V 4400 5050 50 0000 C CNN
F 2 "SM0603" H 4400 5050 60 0001 C CNN
F 3 "" H 4400 5050 60 0001 C CNN
@ -392,7 +392,7 @@ AR Path="/53A910B7/50AE2A4D" Ref="DD2.2" Part="1"
AR Path="/5391724D/50AE2A4D" Ref="DD2.3" Part="1"
AR Path="/53A910BA/50AE2A4D" Ref="DD2.4" Part="1"
AR Path="/53A910B9/50AE2A4D" Ref="DD2.5" Part="1"
F 0 "DD2.5" H 3800 4600 50 0000 L BNN
F 0 "DD2.1" H 3800 4600 50 0000 L BNN
F 1 "L6208N" H 4300 2850 50 0000 L BNN
F 2 "DIP-24__300_ELL" H 4300 3900 50 0001 C CNN
F 3 "" H 4300 3750 60 0001 C CNN
@ -436,7 +436,7 @@ AR Path="/53A910B7/534BB108" Ref="R4.2" Part="1"
AR Path="/5391724D/534BB108" Ref="R4.3" Part="1"
AR Path="/53A910BA/534BB108" Ref="R4.4" Part="1"
AR Path="/53A910B9/534BB108" Ref="R4.5" Part="1"
F 0 "R4.5" V 4780 5050 40 0000 C CNN
F 0 "R4.1" V 4780 5050 40 0000 C CNN
F 1 "1.8k" V 4707 5051 40 0000 C CNN
F 2 "SM0603" V 4630 5050 30 0001 C CNN
F 3 "~" H 4700 5050 30 0000 C CNN

View File

@ -1,4 +1,4 @@
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
LIBS:power
LIBS:device
LIBS:transistors
@ -41,7 +41,7 @@ $Descr A4 11693 8268
encoding utf-8
Sheet 11 12
Title "Power load module"
Date "28 jan 2015"
Date "4 feb 2015"
Rev ""
Comp "SAO RAS"
Comment1 ""

View File

@ -118,11 +118,14 @@ void ADC_calibrate_and_start();
#define SHUTTER_ON_PIN (GPIO2)
#define SHUTTER_POLARITY_PIN (GPIO0)
#define SHUTTER_FB_PIN (GPIO1)
// voltage (*100) threshold to run shutter
#define SHUTTER_VOLTAGE_THRES (1000)
#define SHUTTER_UNDERVOLTAGE_THRES (500)
// delay in operations in us
#define SHUTTER_DELAY (10000)
// voltage (*100) threshold to run shutter - 20V
#define SHUTTER_VOLTAGE_THRES (2000)
// minimum voltage that should be on capasitor if power source is on
#define SHUTTER_UNDERVOLTAGE_THRES (700)
// delay in operations (open/close) in us (according to shutter's datasheet it's about 12ms)
#define SHUTTER_DELAY (12500)
// delay for error test
#define SHUTTER_OP_DELAY (200)
// ADC_value[8] is U36, ADC_value[9] is U10
#define SHUTTER_SENSE_VALUE (ADC_value[8])

View File

@ -200,6 +200,8 @@ int main(){
if(Timer - Old_timer > 999){ // one-second cycle
Old_timer += 1000;
if(Shutter_State == SHUTTER_NOTREADY)
shutter_init();
//OW_fill_ID(0);
//gpio_toggle(GPIOC, GPIO12); // toggle LED
//gpio_toggle(GPIO_BANK_SPI2_MOSI, GPIO_SPI2_MOSI);

View File

@ -22,6 +22,7 @@
#include "main.h"
// state of shutter - global variable to omit interface functions
shutter_state Shutter_State = SHUTTER_NOTREADY;
uint16_t Shutter_delay = SHUTTER_DELAY;
// function to be runned from timer irq
void (*shutter_timer_fn)() = NULL;
@ -33,13 +34,16 @@ void (*shutter_timer_fn)() = NULL;
*/
void shutter_wait(int us, void(*fn_ready)()){
if(!fn_ready) return;
//DBG("wait for previous .. ");
while(shutter_timer_fn); // wait for ending of previous operation
//DBG("ok\n");
shutter_timer_fn = fn_ready;
timer_set_period(SHUTTER_TIM, us);
timer_enable_counter(SHUTTER_TIM);
}
// macro to open/close/set default state
// open shutter is 0:0 -> when MCU power is off, shutter "automatically" opens
#define shutter_open() do{gpio_clear(SHUTTER_PORT, SHUTTER_ON_PIN | SHUTTER_POLARITY_PIN);}while(0)
#define shutter_close() do{gpio_clear(SHUTTER_PORT, SHUTTER_ON_PIN); \
gpio_set(SHUTTER_PORT, SHUTTER_POLARITY_PIN);}while(0)
@ -48,16 +52,62 @@ void shutter_wait(int us, void(*fn_ready)()){
gpio_clear(SHUTTER_PORT, SHUTTER_POLARITY_PIN);}while(0)
#define shutter_error() ((gpio_get(SHUTTER_PORT, SHUTTER_FB_PIN) == 0))
/**
* Make tests for undervoltage & wire breakage
* this function calls in 2 stages:
* 1) check undervoltage & set hiZ
* 2) repeat checking undervoltage & check wire breakage
* if shutter was uninitialized we open it
*/
void shutter_test(){
static shutter_state old_State = SHUTTER_NOTREADY;
// test for undervoltage
if(shutter_voltage() < SHUTTER_UNDERVOLTAGE_THRES){
ERR("shutter undervoltage\n");
Shutter_State = SHUTTER_NOTREADY;
shutter_off();
return;
}
if(Shutter_State != SHUTTER_INITIALIZED){ // first call of this function
old_State = Shutter_State;
Shutter_State = SHUTTER_INITIALIZED;
// test for wire breakage
DBG("breakage test\n");
shutter_hiZ(); // 1,1: breakage test
shutter_wait(SHUTTER_OP_DELAY, shutter_test);
}else{ // check breakage
if(shutter_error()){ // ERR==0 -> wire breakage
ERR("shutter wire breakage\n");
Shutter_State = SHUTTER_NOTREADY;
}else{
if(old_State == SHUTTER_NOTREADY){
Shutter_State = SHUTTER_OPENING;
DBG("ready!\n");
}else{
Shutter_State = old_State;
DBG("no errors\n");
}
}
shutter_off();
}
}
/**
* after open/close pulse we should return bridge to default state
* 3 stages:
* 1) check for short-circuit & turn off power of the shutter
* 2) check for overtemperature or undervoltage
* 3) common test for undervoltage/breakage
*/
void shutter_ready(){
uint8_t test_err = 0;
//DBG("shtr ready\n");
switch (Shutter_State){
case SHUTTER_CLOSED: // repeated pulse to check errors
case SHUTTER_OPENED:
if(shutter_error()){
ERR("shutter vertemperature or undervoltage\n");
ERR("shutter overtemperature or undervoltage\n");
Shutter_State = SHUTTER_NOTREADY;
}
break;
@ -66,7 +116,6 @@ void shutter_ready(){
if(shutter_error()){
ERR("shutter short-circuit\n");
Shutter_State = SHUTTER_NOTREADY;
shutter_off();
}else{
test_err = 1;
if(Shutter_State == SHUTTER_PROC_CLOSING)
@ -77,9 +126,17 @@ void shutter_ready(){
break;
default:
ERR("wrong shutter state\n");
print_shutter_state(lastsendfun);
}
shutter_off();
if(test_err) shutter_wait(SHUTTER_DELAY, shutter_ready); // test for overtemp or undervoltage
if(Shutter_State == SHUTTER_NOTREADY) return;
if(test_err){
//DBG("now test for err\n");
shutter_wait(SHUTTER_OP_DELAY, shutter_ready); // test for overtemp or undervoltage
}else{
// wait a lot of time to prevent false detections
shutter_wait(SHUTTER_DELAY, shutter_test);
}
}
/**
@ -98,7 +155,8 @@ shutter_state shutter_init(){
// 72MHz div 72 = 1MHz
timer_set_prescaler(SHUTTER_TIM, 71);
timer_one_shot_mode(SHUTTER_TIM); // single pulse mode
timer_enable_preload(SHUTTER_TIM); // force changing period
timer_disable_preload(SHUTTER_TIM); // force changing period
timer_update_on_overflow(SHUTTER_TIM); // generate UEV only on overflow
timer_enable_update_event(SHUTTER_TIM);
timer_enable_irq(SHUTTER_TIM, TIM_DIER_UIE); // update IRQ enable
//DBG("shutter timer ready\n");
@ -109,20 +167,9 @@ shutter_state shutter_init(){
// feedback: floating input
gpio_set_mode(SHUTTER_PORT, GPIO_MODE_INPUT,
GPIO_CNF_INPUT_FLOAT, SHUTTER_FB_PIN);
// test for wire breakage
shutter_hiZ(); // 1,1: breakage test
Delay(1); // wait for 1ms
if(shutter_error()){ // ERR==0 -> wire breakage
if(shutter_voltage() < SHUTTER_UNDERVOLTAGE_THRES)
ERR("shutter undervoltage\n");
else
ERR("shutter wire breakage\n");
}else{
// Shutter_State = SHUTTER_CLOSING; // now try to close shutter
Shutter_State = SHUTTER_READY;
}
shutter_off();
return Shutter_State;
shutter_wait(SHUTTER_OP_DELAY, shutter_test);
return SHUTTER_INITIALIZED; // we return this state in spite of the shutter isn't really initialized yet
}
/**
@ -131,14 +178,21 @@ shutter_state shutter_init(){
*/
void process_shutter(){
if(Shutter_State == SHUTTER_NOTREADY) return;
if(shutter_error()){
ERR("shutter some error\n");
if(Shutter_State != SHUTTER_OPENING && Shutter_State != SHUTTER_CLOSING)
return;
if(shutter_voltage() < SHUTTER_UNDERVOLTAGE_THRES){
ERR("no shutter power source\n");
Shutter_State = SHUTTER_NOTREADY;
shutter_off();
return;
}
if(Shutter_State != SHUTTER_OPENING && Shutter_State != SHUTTER_CLOSING)
if(shutter_error()){
ERR("some shutter error\n");
Shutter_State = SHUTTER_NOTREADY;
shutter_off();
return;
}
if(shutter_voltage() < SHUTTER_VOLTAGE_THRES) return; // capasitor isn't charged
switch (Shutter_State){
case SHUTTER_OPENING:
@ -152,30 +206,32 @@ void process_shutter(){
default:
return;
}
shutter_wait(SHUTTER_DELAY, shutter_ready);
shutter_wait(Shutter_delay, shutter_ready);
}
void Shutter_tim_isr(){
//DBG("shutter timer\n");
void (*fn)() = shutter_timer_fn;
if(timer_get_flag(SHUTTER_TIM, TIM_SR_UIF)){
// Clear compare interrupt flag
timer_clear_flag(SHUTTER_TIM, TIM_SR_UIF);
shutter_timer_fn = NULL;
// and run needed function
if(shutter_timer_fn){
shutter_timer_fn();
shutter_timer_fn = NULL;
if(fn){
fn();
}
}
}
/*
/**
* printout shutter state
*/
void print_shutter_state(sendfun s){
P("shutter ", s);
if(shutter_error()){ // ERR==0 -> wire breakage
P("(error) ", s);
}
switch (Shutter_State){
case SHUTTER_INITIALIZED:
P("testing", s);
break;
case SHUTTER_READY:
P("ready", s);
break;
@ -196,26 +252,40 @@ if(shutter_error()){ // ERR==0 -> wire breakage
P("in process", s);
break;
default: // not ready or error
P("not initialised or broken", s);
if(shutter_error()){ // ERR==0 -> wire breakage or something else
P("error", s);
}else
P("not initialised or broken", s);
}
newline(s);
}
/*
switch (Shutter_State){
/**
* Try to open/close shutter depending on argument:
* state == SHUTTER_CLOSING - try to close
* state == SHUTTER_OPENING - try to open
*/
void shutter_try(shutter_state state){
switch (Shutter_State){ // right states are only OPENED, CLOSED & READY
case SHUTTER_OPENED:
if(state == SHUTTER_OPENING){ // try to open opened shutter?
P("alerady opened\n", lastsendfun);
return;
}
break;
case SHUTTER_CLOSED:
if(state == SHUTTER_CLOSING){ // try to close closed?
P("alerady closed\n", lastsendfun);
return;
}
break;
case SHUTTER_OPENING:
break;
case SHUTTER_CLOSING:
break;
case SHUTTER_PROC_OPENING:
break;
case SHUTTER_PROC_CLOSING:
case SHUTTER_READY:
; // All OK
break;
default:
print_shutter_state(lastsendfun);
return;
}
*/
Shutter_State = state; // all OK, now we can change current state of shutter
}

View File

@ -27,8 +27,9 @@
// Shutter finite-state machine states
typedef enum{
SHUTTER_NOTREADY = 0, // initialisation - not ready, or error in work
SHUTTER_READY,
SHUTTER_NOTREADY = 0, // not ready, or error in work
SHUTTER_INITIALIZED, // initialisation in process
SHUTTER_READY, // ready for operation
SHUTTER_OPENED, // shutter is in opened state
SHUTTER_CLOSED, // shutter is in closed state
SHUTTER_OPENING, // user is waiting for opening
@ -38,9 +39,15 @@ typedef enum{
} shutter_state;
extern shutter_state Shutter_State;
extern uint16_t Shutter_delay;
shutter_state shutter_init();
void process_shutter();
void print_shutter_state(sendfun s);
void shutter_try(shutter_state state);
#define try_to_close_shutter() shutter_try(SHUTTER_CLOSING)
#define try_to_open_shutter() shutter_try(SHUTTER_OPENING)
#endif // __POWERHW_H__

View File

@ -64,6 +64,13 @@ void print_ad_vals(sendfun s){
}
}
void set_shtr_delay(int32_t v, sendfun s){
uint16_t d = (uint16_t) v;
Shutter_delay = d;
P("Change delay to ", s);
print_int(d, s);
}
void parce_incoming_buf(char *buf, int len, sendfun s){
uint8_t command;
int i = 0, j, m;
@ -185,14 +192,14 @@ void parce_incoming_buf(char *buf, int len, sendfun s){
print_shutter_state(s);
break;
case 'c': // close shutter
if(Shutter_State != SHUTTER_CLOSED)
Shutter_State = SHUTTER_CLOSING;
else P("alerady closed\n", s);
try_to_close_shutter();
break;
case 'o': // open shutter
if(Shutter_State != SHUTTER_OPENED)
Shutter_State = SHUTTER_OPENING;
else P("alerady opened\n", s);
try_to_open_shutter();
break;
case 'z': // temporary: change delay
I = set_shtr_delay;
READINT();
break;
case '\n': // show newline as is
break;