Очевидно же, плюсы просто лучше. Даже если на них писать практически как на С, все равно добавляется множество мелких улучшений.
createpad(HC595_CLK, C,0);
createpad(HC595_DATA, C,1);
createpad(HC595_LOAD, C,2);
volatile void HC595(unsigned char output_data)
{
unsigned char i = 0;
for( i = 0 ; i<8 ; i++ )
{
HC595_DATA( _write , tst_ram_flag( output_data , i ) );
HC595_CLK( _write , _L );
HC595_CLK( _write , _H );
};
HC595_LOAD( _write , _L );
HC595_LOAD( _write , _H );
return;
}
unsigned char count = 0;
thread
(
HC595_thread,
1,
,
{
HC595( ++count == 255 ? ({ count = 0; 255; }) : count );
PORTA = count;
};
);
int main(void)
{
cli();
adc_calibration_state=2;
inition;
sei();
while(1)
{
system;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool sin_vH;
bool pwm_abel_request;
bool pwm_abel_status;
bool pwm_request;
bool pwm_status;
_param(param_access::no,pwm_en,on,_p_var(off););
_param(param_access::no,pwm_state,on,_p_var(off););
#define LCD_RS 1
long temp_voltage = 0;
_expresion(float,voltage,0.0);
_expresion(float,F_voltage,0.0);
long temp_current = 0;
_expresion(float,F_current,0.0);
float F_voltage_medin_buffer=0.0;
_expresion(float,F_voltage_medin,0.0);
float F_current_medin_buffer=0.0;
_expresion(float,F_current_medin,0.0);
unsigned char f_vcm_counter=0;
_expresion(float,power,0.0);
_expresion(unsigned char,f_source,0);
_flash_text_array(f_source_txt,f_source,{ fta(0,"USER"); fta(1,"CALC"); });
const unsigned int user_min_f = 2000;
const unsigned int user_max_f = 20000;
_volume(unsigned int,start_f,user_max_f);
_volume(unsigned int,frequnce_tune_step,20);
_expresion(unsigned int,user_f,0);
_expresion(unsigned int,calc_f,0);
_expresion(unsigned int,work_f,0);
unsigned int last_work_f=0;
inline void f_init()
{
user_f = start_f.eep();
calc_f = start_f.eep();
work_f = start_f.eep();
return;
};
_volume( float,power_hysteresis_level, 10.0);
_expresion( float,power_handler, 0.0);
_volume(float, user_q,50);
_volume(unsigned int, t_work,50);
_volume(unsigned int, t_pause,50);
inline void t_pause_q_calc(){t_pause=(unsigned int)(((float)t_work.ram())/10.0+((float)t_work.ram())*(100.0/user_q.ram()-1.0));return;}
inline void t_pause_q_init(){t_pause_q_calc();call_line(save);global_data_change=0;return;}
_volume(unsigned long,t1,1000);
_volume(unsigned long,t2,1000);
_volume(unsigned long,t3,1000);
_volume(unsigned long,t4,1000);
_volume(unsigned long,t5,1000);
create_adc(sens_v,0,aaa,1);
create_adc(sens_c,1,aaa,1);
createpad( v_cap_reset_extern_call,A,2);
createpad(shutdown_out,A,3);
create_adc(sens_w,5,aaa,20);
createpad(pl1,A,6);
createpad(pl2,A,7);
createpad( v_cap_reset,B,7);
createpad(d4p,B,0);
createpad(d5p,B,1);
createpad(d6p,B,2);
createpad(d7p,B,3);
createpad(enp,B,4);
createpad(rwp,B,5);
createpad(rsp,B,6);
createpad( Q6,C,4);
createpad( Q5,C,3);
createpad( Q4,C,2);
createpad( Q3,C,1);
createpad( Q2,C,0);
createpad( Q1,D,7);
createpad(relay_led,D,4);
createpad(pwm_led,D,6);
#define main_interface_draw_thread_input_block \
input(shutdown_external_request, A,4,true,0);\
input(_external_calibration_mode, D,0,true,0);\
input(_up, D,1,true,0);\
input(_right, D,2,true,0);\
input(_pwm_switcher, D,3,true,0);\
input(_relay_switcher,D,5,true,0);\
input(_centr, C,5,true,0);\
input(_down, C,6,true,0);\
input(_left, C,7,true,0);\
create_flag(qprog_request);
create_flag(qprog_abel_request);
create_flag(qprog_abel_status);
create_flag(qshutdown_request);
create_flag(qshutdown_ready);
unsigned char qvar=0;
unsigned char qsvar=0;
inline void qprogcall(){_set_flag(qprog_request);return;}
create_timer(qtimer,qprogcall,0);
inline void qtimer_init(){qtimer.time=10;return;}
inline void q_disable_prog(){ Q1(_write,_L);Q2(_write,_L);Q3(_write,_L);Q4(_write,_L);Q5(_write,_L);Q6(_write,_L);return;}
inline void work_t1_prog(){ /*Q1(_write,_H);Q2(_write,_L);Q3(_write,_L);Q4(_write,_H);Q5(_write,_H);Q6(_write,_H);*/return;}
inline void work_t2_prog(){ Q1(_write,_H);Q2(_write,_L);Q3(_write,_L);Q4(_write,_L);Q5(_write,_H);Q6(_write,_H);return;}
inline void work_t3_prog(){ Q1(_write,_L);Q2(_write,_H);Q3(_write,_H);Q4(_write,_L);Q5(_write,_H);Q6(_write,_H);return;}
inline void work_t4_prog(){ Q1(_write,_L);Q2(_write,_L);Q3(_write,_H);Q4(_write,_L);Q5(_write,_H);Q6(_write,_L);return;}
inline void shutdown_t1_prog(){ Q1(_write,_H);Q2(_write,_L);Q3(_write,_L);Q4(_write,_H);Q5(_write,_L);Q6(_write,_H);return;}
inline void shutdown_t2_prog(){ Q1(_write,_H);Q2(_write,_L);Q3(_write,_L);Q4(_write,_L);Q5(_write,_L);Q6(_write,_H);return;}
inline void shutdown_t3_prog(){ Q1(_write,_L);Q2(_write,_H);Q3(_write,_H);Q4(_write,_L);Q5(_write,_L);Q6(_write,_H);return;}
inline void shutdown_t4_prog(){ Q1(_write,_L);Q2(_write,_L);Q3(_write,_H);Q4(_write,_L);Q5(_write,_L);Q6(_write,_H);return;}
inline void shutdown_t5_prog(){ Q1(_write,_L);Q2(_write,_H);Q3(_write,_L);Q4(_write,_H);Q5(_write,_L);Q6(_write,_L);return;}
inline void qprog_process()
{
if(_tst_flag(qprog_request))
{
_clr_flag(qprog_request);
if(_tst_flag(qprog_abel_request))
{
_set_flag(qprog_abel_status);
}
else
{
_clr_flag(qprog_abel_status);
}
if(_tst_flag(qprog_abel_status))
{
relay_led(_write,_H);
if(_tst_flag(qshutdown_request))
{
switch(qsvar)
{
case 0:{qtimer.time=t1.eep();shutdown_t1_prog();qsvar=1;break;}
case 1:{qtimer.time=t2.eep();shutdown_t2_prog();qsvar=2;break;}
case 2:{qtimer.time=t3.eep();shutdown_t3_prog();qsvar=3;break;}
case 3:{qtimer.time=t4.eep();shutdown_t4_prog();qsvar=4;break;}
case 4:{qtimer.time=t5.eep();shutdown_t5_prog();qsvar=5;break;}
case 5:{_set_flag(qshutdown_ready);break;}
}
}
else
{
switch(qvar)
{
case 0:{qtimer.time=t1.eep();work_t1_prog();qvar=1;break;}
case 1:{qtimer.time=t2.eep();work_t2_prog();qvar=2;break;}
case 2:{qtimer.time=t3.eep();work_t3_prog();qvar=3;break;}
case 3:{qtimer.time=t4.eep();work_t4_prog();qvar=4;break;}
case 4:{qtimer.time=t1.eep();work_t1_prog();qvar=1;break;}
}
}
}
else
{
qtimer.time=5; relay_led(_write,_L); q_disable_prog(); if(_tst_flag(qshutdown_request))_set_flag(qshutdown_ready);
}
}
return;
};
unsigned char v_cap_charging_pause=0;
void lcd_port_output2(unsigned char data)
{
rsp(_write,getbit(data,0));
rwp(_write,getbit(data,1));
d4p(_write,getbit(data,4));
d5p(_write,getbit(data,5));
d6p(_write,getbit(data,6));
d7p(_write,getbit(data,7));
enp(_write,1);_delay_us(200);
enp(_write,0);_delay_us(200);
return;
}
void lcd_reset(void) { lcd_port_output2(0xFF); lcd_port_output2(0x30); lcd_port_output2(0x30); lcd_port_output2(0x30); lcd_port_output2(0x20); return; }
void lcd_cmd(char cmd) { lcd_port_output2(cmd & 0xF0); lcd_port_output2((cmd << 4) & 0xF0); return; }
void lcd_init (void) { lcd_reset(); lcd_cmd(0x28); lcd_cmd(0x0C); lcd_cmd(0x06); lcd_cmd(0x80); return; }
void lcd_data(unsigned char dat) { lcd_port_output2((dat & 0xF0)|LCD_RS); lcd_port_output2(((dat << 4) & 0xF0)|LCD_RS); return;}
unsigned char lcd16x2( char*buffer,char*canvas,unsigned char x_size,unsigned char n )
{
char s=0;
if( (s=buffer[n]) != canvas[n] ) {canvas[n]=s; lcd_cmd(0x80+n);lcd_data(s);};
if( (s=buffer[n+16]) != canvas[n+16] ) {canvas[n+16]=s; lcd_cmd(0xc0+n);lcd_data(s);};
if(n<x_size-1)n++; else n=0;
return n;
}
template<unsigned char x_size,unsigned char y_size>class lcd_display
{
public:
const static unsigned int canvas_size=x_size*y_size;
char*buffer;
char canvas[canvas_size];
unsigned char n;
const unsigned int format=x_size*100+y_size;
lcd_display(char*set_buffer)
{
buffer = set_buffer;
n = 0;
for(unsigned char i = 0;i<canvas_size;i++)canvas[i]=0;
}
void layout()
{
switch(format)
{
case 1602:{n=lcd16x2(buffer,canvas,x_size,n);break;}
};
return;
};
};
inline void pwm_timer_callback();
create_timer(pwm_work_timer,pwm_timer_callback,0);
inline void pwm_timer_callback()
{
if(pwm_en.on())
{
pwm_en.set_off();
pwm_work_timer.time = t_pause.eep();
}
else
{
pwm_en.set_on();
pwm_work_timer.time = t_work.eep();
}
return;
}
inline volatile void PWM_release()
{
static unsigned char pwm_var = 0;
if( pwm_en.on() ) switch(pwm_var)
{
case 1:{ pwm_var=0; pl2(_write,_L);pl1(_write,_H); break;}
case 0:{ pwm_var=1; pl1(_write,_L);pl2(_write,_H); break;}
}
else
{
pl2(_write,_L);pl1(_write,_L);
}
return;
}
create_line_point(second_fst,_pwm_release,PWM_release(););
inline void relay_process_init(){if(v_cap_reset_extern_call(_read,_H)!=0)sin_vH=true;else sin_vH=false;return;}
inline void relay_process()
{
if( sin_vH )
{
if(v_cap_reset_extern_call(_read,_H)==0) { sin_vH = false; qprog_process(); }
}
else
{
if(v_cap_reset_extern_call(_read,_H)!=0) { sin_vH = true; qprog_process(); }
}
return;
}
unsigned char ps=0;
thread(tick_thread,1,,{v_cap_charging_pause++; ps++;});
thread(scan_thread,2,,{call_line(scan);});
enum
{
list_win,
control_win,
work_programm_win,
relay_win
};
void main_save_interface();
unsigned char main_menu(unsigned char page);
unsigned char work(unsigned char);
window(main_window,main_menu,control_win,16,2,10,main_save_interface,work);
lcd_display<16,2> main_lcd_display(main_window.local_buffer);
thread(main_interface_layout_thread,3,, { main_lcd_display.layout(); } );
thread(main_interface_draw_thread,40,
main_interface_draw_thread_input_block
,
{
adc_status_request = adc_work;
call_line(display_use);
if( adc_status_request == adc_calibration ) adc_status=adc_calibration; else adc_status=adc_work;
}
);
void main_save_interface()
{
emsg( main_window, save_interfacing, 1,
if(_left.click()) window_core::left_cursor();
if(_right.click()) window_core::right_cursor();
tf("YES", 0, 2,0,0,1,left)
{
if(_centr.click())
{
call_line(save);
ems_esc=true;
};
};
tf("SAVE?", 6,10,0,0,0,left);
tf("NO", 14,15,0,0,1,right)
{
if(_centr.click())
{
call_line(init);
ems_esc=true;
}
};
);
return;
}
bool shutdown_request=false;
inline void shutdown_process()
{
_set_flag(qshutdown_request);
if(_tst_flag(qshutdown_ready)) { shutdown_out(_write,_H); while(1); }
return;
}
inline unsigned char work(unsigned char page)
{
if(_pwm_switcher.click())
{
if(pwm_en.off())
{
pwm_en.set_on();
pwm_work_timer.time = t_work.eep();
pwm_work_timer.wake();
pwm_led(_write,_H);
}
else
{
pwm_en.set_off();
pwm_work_timer.slep();
pwm_led(_write,_L);
};
};
if(_relay_switcher.click()) _inv_flag(qprog_abel_request);
if(shutdown_external_request.click()){relay_led(_write,_H); shutdown_request=true;}
if(shutdown_request)shutdown_process();
return page;
}
unsigned char main_menu(unsigned char page)
{
switch(page)
{
case list_win:
{
window_core::set_zdepth(1);
window_core::storing_page_position(memory<list_win,4>());
window_core::set_content_dimentions(0,0,window_core::x_win_size,window_core::y_win_size);
window_core::window_list_style();
if( _up.click() ) window_core::up_window(1);
if( _down.click() ) window_core::down_window(1);
tf(" Control", 0,15,0,0,1,left){if( _centr.click() ) page = control_win; };
tf(" Config", 0,15,1,0,1,left){if( _centr.click() ) page = work_programm_win; };
tf(" Relay", 0,15,2,0,1,left){if( _centr.click() ) page = relay_win; };
break;
};
case control_win:
{
window_core::set_zdepth(0);
window_core::set_content_dimentions(0,0,window_core::x_win_size,window_core::y_win_size);
window_core::set_field_absolute_style();
window_core::cursor_set_flash_state( 0 );
if( _centr.click() ) page = list_win;
if(_up.click())f_source=0;
if(_down.click())f_source=1;
if(f_source.ram()==0)user_f=conf<unsigned int>(user_f.ram(), (unsigned int)1560, (unsigned int)2000, (unsigned int)20000, _right.click(), _left.click());
tf(power_handler, 0, 3,0,0,0,left);
tf(power, 0, 3,1,0,0,left);
tf(f_source_txt, 5,10,0,0,0,left);
tf(work_f, 5,10,1,0,0,left);
tf(F_voltage_medin, 11,15,0,0,0,left);
tf(F_current_medin, 11,15,1,2,0,left);
break;
};
case work_programm_win:
{
window_core::set_zdepth(0);
window_core::set_content_dimentions(0,0,window_core::x_win_size,window_core::y_win_size);
window_core::window_list_style();
if( _up.click() ) window_core::up_window(1);
if( _down.click() ) window_core::down_window(1);
if( _centr.click() ) page = list_win;
tf(" Quality", 0, 9,0,0,1,left){ user_q=conf<float>(user_q.ram(), 5, 5, 100,_right.click(),_left.click()); t_pause_q_calc(); };
tf(user_q, 11,15,0,0,0,right);
tf(" Pause Time ms", 0, 9,1,0,1,left);{ t_pause=conf<unsigned int>(t_pause.ram(), 7, 5, 60,_right.click(),_left.click()); if(global_data_change==0)global_data_change=1; };
tf(t_pause, 11,15,1,0,0,right);
tf(" Work Time ms", 0, 9,2,0,1,left){ t_work=conf<unsigned int>(t_work.ram(), 7, 5, 60,_right.click(),_left.click()); t_pause_q_calc(); };
tf(t_work, 11,15,2,0,0,right);
tf(" P hysteresis", 0, 9,3,0,1,left){ power_hysteresis_level=conf<float>(power_hysteresis_level.ram(), 5.0, 5.0, 200.0,_right.click(),_left.click()); };
tf(power_hysteresis_level, 11,15,3,0,0,right);
tf(" F step", 0, 9,4,0,1,left){ frequnce_tune_step=conf<unsigned int>(frequnce_tune_step.ram(), 50, 0, 2000,_right.click(),_left.click()); };
tf(frequnce_tune_step, 11,15,4,0,0,right);
tf(" F start", 0, 9,5,0,1,left){ start_f=conf<unsigned int>(start_f.ram(), 50, user_min_f, user_max_f,_right.click(),_left.click()); };
tf(start_f, 11,15,5,0,0,right);
break;
};
case relay_win:
{
window_core::set_zdepth(0);
window_core::set_content_dimentions(0,0,window_core::x_win_size,window_core::y_win_size);
window_core::window_list_style();
if( _up.click() ) window_core::up_window(1);
if( _down.click() ) window_core::down_window(1);
if( _centr.click() ) page = list_win;
tf(" Time 1", 0, 9,0,0,1,left){ t1=conf<unsigned long>(t1.ram(), 1000, 1000, 100000,_right.click(),_left.click()); };
tf(t1, 11,15,0,0,0,right);
tf(" Time 2", 0, 9,1,0,1,left){ t2=conf<unsigned long>(t2.ram(), 1000, 1000, 100000,_right.click(),_left.click()); };
tf(t2, 11,15,1,0,0,right);
tf(" Time 3", 0, 9,2,0,1,left){ t3=conf<unsigned long>(t3.ram(), 1000, 1000, 100000,_right.click(),_left.click()); };
tf(t3, 11,15,2,0,0,right);
tf(" Time 4", 0, 9,3,0,1,left){ t4=conf<unsigned long>(t4.ram(), 1000, 1000, 100000,_right.click(),_left.click()); };
tf(t4, 11,15,3,0,0,right);
tf(" Time 5", 0, 9,4,0,1,left){ t5=conf<unsigned long>(t5.ram(), 1000, 1000, 100000,_right.click(),_left.click()); };
tf(t5, 11,15,4,0,0,right);
break;
};
};
return page;
};
bool ready_cv =false;
unsigned char var2=0;
const float vcc = 5.0;
const float adc_lim = 1024.0;
const float adc_smoos_level = 1.0;
const float diod_drop_v = 0.42;
const float c_schem_base = 2.28;
const float c_orig_max = 20.0;
const float c_schem_equal_max = 2.0;
const float c_schem_calib_base = 0.0;
const float c_schem_calib_angle = 1.0;
const float v_schem_base = 2.5;
const float v_orig_max = 311.12;
const float v_schem_equal_max = 1.92;
const float v_schem_calib_base = 0.0;
const float v_schem_calib_angle = 0.972;
bool access_w=false;
void calc()
{
bool ready_v = sens_v.ready(),ready_c = sens_c.ready(),ready_w = sens_w.ready();
if(ready_w){access_w=true; power_handler = sens_w.readbyte()*2000.0*5.0/1024.0/20.0/5.0;}
if(ready_c && ready_v) ready_cv=true;
if( ( ready_c || ready_v ) && ready_cv)
{
switch(var2)
{
case 10:
{
if(ready_v && ready_c)
{
temp_voltage = sens_v.readbyte(); temp_current = sens_c.readbyte();
float tv = (float)temp_voltage*vcc/(adc_lim*adc_smoos_level) + diod_drop_v - v_schem_base; if(tv<0.0)tv=0.0;
float tc = (float)temp_current*vcc/(adc_lim*adc_smoos_level)-2.2; if(tc<0.0)tc=0.0;
F_voltage = (((tv*v_orig_max/v_schem_equal_max))*v_schem_calib_angle)*0.707106+v_schem_calib_base;
F_current = ((6.0*tc/(3.575-2.2))+0.08)*0.94;
power = F_voltage.ram()*F_current.ram();
if(access_w)
{
float delta=power.ram()-power_handler.ram();
if( delta > power_hysteresis_level.eep() )
{
if(calc_f.ram()<user_max_f) calc_f=calc_f.ram()+frequnce_tune_step.eep();
}
else
{
if( (delta*(-1.0)) > power_hysteresis_level.eep() )
{
if(calc_f.ram()>user_min_f) calc_f = calc_f.ram()-frequnce_tune_step.eep();
if(calc_f.ram()<user_min_f) calc_f = user_min_f;
}
}
}
if(f_source.ram()==0)work_f = user_f.ram(); if(f_source.ram()==1)work_f = calc_f.ram();
if(work_f.ram()!=last_work_f){last_work_f=work_f.ram();timer1_steps_to_do_exesys_from_frequence(work_f.ram());}
var2 = 0;
}
break;
}
case 0: { if(v_cap_reset_extern_call(_read,_H)==0){var2=2;v_cap_reset(_write,_H);ps=0;} break; }
case 2: { if(ps>0){var2=4;v_cap_reset(_write,_L);}break;}
case 4: { if(v_cap_reset_extern_call(_read,_H)!=0){var2=5;v_cap_charging_pause=0;}break;}
case 5: { if(v_cap_charging_pause>24){ sens_v.readbyte();sens_c.readbyte(); var2=10;}break;}
}
}
f_vcm_counter++;
F_voltage_medin_buffer=F_voltage.ram()+F_voltage_medin_buffer;
F_current_medin_buffer=F_current.ram()+F_current_medin_buffer;
if(f_vcm_counter>250)
{
f_vcm_counter=0;
F_voltage_medin=F_voltage_medin_buffer*0.004;F_voltage_medin_buffer=0.0;
F_current_medin=F_current_medin_buffer*0.004;F_current_medin_buffer=0.0;
}
return;
}
thread(calc_thread,2,,{ calc(); });
int main(void)
{
cli();
setbit(sh_cp,sh_cp_pin,1);
setbit(st_cp,st_cp_pin,0);
setbit(ddr_sh_cp,sh_cp_pin,1);
setbit(ddr_st_cp,st_cp_pin,1);
setbit(ddr_ds, ds_pin, 1);
DDRA=0b00000000;
PORTA=0b00000000;
DDRB=0b11111111;
DDRD=0b11111110;
adc_calibration_state=2;
//call_line(init);
t_pause_q_init();
f_init();
relay_process_init();
qtimer_init();
lcd_init();
pwm_en.set_off();
pwm_work_timer.slep();
//timer0_init();
//timer1_init();
//call_line(system_init);
//call_line(init);
//call_line(system_interrupt_init_fast_access);
timer1_steps_to_do_exesys_from_frequence(1000);
inition;
sei();
sens_c.enable();
sens_v.enable();
sens_w.enable();
while(1)
{
system;
adc_entering_point;
relay_process();
}
}
Добавлено after 7 minutes 50 seconds:сишники не прочтут
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const unsigned int adc_pos_in_smooth = 50;
create_adc(adc_pos_in,2,aaa,adc_pos_in_smooth);
createpad(ap,B,5);
createpad(am,A,3);
createpad(bp,B,7);
createpad(bm,A,4);
createpad(h_pwm,B,6);
#ifdef __y_axis
#define DCmotor_template DCmotor3
#else
#define DCmotor_template DCmotor2
#endif
DCmotor_template<ap,am,bp,bm,h_pwm,
_external_pwm,
_external_pos,
_stopebal,
_power_limited_by_pos,
_auto_fix_en,
_forw_fix_at_stop,
_back_fix_at_stop,
_fix_by_dir_acc,
_tune_stay_velocity,
_ir_hesteresis,
_tune_ir_offset,
_tune_power_min,
_tune_power_max,
_tune_power_stb_min,
_tune_power_stb_max,
_tune_power_stb_back_min,
_tune_power_stb_back_max,
_tune_power_fix_at_stop,
_ready_feet,
_tune_top_settle_level,
_tune_bot_settle_level,
caret_stoper,
caret_stoper_power,
caret_reterner_pos,
forw_caret_reterner_power,
back_caret_reterner_power,
caret_reterner_velocity,
tune_power_slice,
tune_power_down,
_measuring_velocity_step_uM,
_power_by_velocity,
_tune_power_forw,
_tune_power_back,
_reversed,
_steped_targeting,
_stop_at_vibrating,
_vibrating_level,
_spetial_dir_acc_at_fix,
_vibrtion_power_limiter_en,
_returner_power_limiter_en,
_target_power_stab_append_en,
_fh_en,
_tune_fh,
_bh_en,
_tune_bh,
_vbr_acc,
_vbr_offtime_acc,
_tune_vbr_offtime_pwr_plus_acc,
_step_en,
_step_dis,
_st_pw_acc,
_unvbr_acc,
_vel_access,
_dir_access,
_fix_dir_access,
_timer_to_fix_dir_access,
_pow_access,
_stay_access,
_feel_stay_acc,
_end_switch_en,
_forw_switch_en,
_back_switch_en,
_forw_calibrate_standart,
_back_calibrate_standart,
_forw_end_switch_active_level,
_forw_end_switch_pull,
_forw_end_switch_pad,
_back_end_switch_active_level,
_back_end_switch_pull,
_back_end_switch_pad
>motor(true);
signed long int __temp = 0;
___B8B( bus,
a0, atmega32_dip40_pin26,
a1, atmega32_dip40_pin27,
a2, atmega32_dip40_pin28,
a3, atmega32_dip40_pin28,
d0, atmega32_dip40_pin20,
d1, atmega32_dip40_pin19,
d2, atmega32_dip40_pin18,
d3, atmega32_dip40_pin21,
d4, atmega32_dip40_pin22,
d5, atmega32_dip40_pin23,
d6, atmega32_dip40_pin24,
d7, atmega32_dip40_pin25,
mosi, atmega32_dip40_pin33,
miso, atmega32_dip40_pin34,
type, atmega32_dip40_pin35,
_address,
B8B_DEVICE_TYPE::slave,
_slave ( DCM_B8B_PORT::target , __temp is_signed_long_from_master; motor.new_target = __temp; motor.target_updated=true; motor.target_busy=true; PORTB|=1; )
_slave ( DCM_B8B_PORT::calibr , motor.standart_calibrate(); PORTB&=~1; )
,
_slave ( DCM_B8B_OUT::flags , B8B_slave_say ( motor.flags() ); motor.target_updated=false; )
//_slave ( DCM_B8B_OUT::flags , B8B_slave_say ( motor.flags()&~1 ); motor.target_updated=true; )
);
signed long int adc_byteresult_k = 2;//102 / adc_pos_in_smooth;
float adc_voltge_k = 2222.2222;
inline void ext_adc_pos()
{
if( adc_pos_in.ready() )
{
float temp = adc_pos_in.read();//напряжение
signed long int pos = (signed long int)( temp*adc_voltge_k );
motor.ir( pos );
}
return;
}
#ifndef __z_axis
createpad(encoder_a,D,2);createpad(encoder_b,D,3);encoder<encoder_a,encoder_b>pos_encoder(true);
//create_line_point(int0call,int0_le_,if( !_adc_pos ){ pos_encoder.int0f(); }; );
//create_line_point(int1call,int1_le_,if( !_adc_pos ){ pos_encoder.int1f(); }; );
create_line_point(int0call,int0_le_,if( !_adc_pos ){ pos_encoder.scan(); }; );
create_line_point(int1call,int1_le_,if( !_adc_pos ){ pos_encoder.scan(); }; );
#endif
create_line_point(system_loop, motor_run, motor.r2(); );
create_line_point(system_loop, adc_run, if( _adc_pos ){ ext_adc_pos(); });
create_line_point( main_fst, _pwm, motor.tick=true; motor.exesys_frequence = main_fst_frequence; );
create_line_point(second_fst, _pwm, motor.PWM(); );
thread(standart_system_thread_bus8_entering_point,2,, bus8_entering_point; );
void ir(signed long int pos){motor.ir(pos);return;}
void ir_(signed long int pos){return;}
int main(void)
{
cli();
//interrupt0disable();//не использовать с pos_encoder.scan();
//interrupt1disable();//не использовать с pos_encoder.scan();
#ifndef __z_axis
if( !_adc_pos )pos_encoder.ir=ir; else pos_encoder.ir=ir_;
#endif
DDRB|=2;
adc_calibration_state=1;
if( _adc_pos ) adc_pos_in.enable();
inition;
bus.set_address(_address);
sei();
while(1)
{
system;
}
}