Atmega8 рдкрд░ рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрд╣реЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрд╛рдордХ

рд╢реМрдХрд┐рдпрд╛ рд░реЗрдбрд┐рдпреЛ рдореЗрд░рд╛ рд╢реМрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╕реНрдерд╛рдпреА рдиреМрдХрд░реА рдирд╣реАрдВ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ рдЕрд▓рдорд╛рд░реА рд╕реЗ рд╕рднреА рдкрд┐рдпрд░реНрд╕ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдореЗрдЬ рдпрд╛ рдлрд░реНрд╢ рдкрд░ рдмрд┐рдЫрд╛рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рд╣рд░ рдмрд╛рд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдл рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реА рд╕рдордп, рд╡рд░реНрдХ рдЬрд╝реЛрди рдореЗрдВ рдЖрдЙрдЯрд▓реЗрдЯ рдЖрдорддреМрд░ рдкрд░ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЙрд░реНрдб рдХреЛ рд╣рд░ рд╕рдордп рдЖрд▓рд╕реА рдмрдирд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХрд╣реАрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ рдПрдХ рдЖрдЙрдЯрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдпрд╣ рдЖрдЙрдЯрд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдХреЗ рдПрдирд╛рдЙрдВрд╕ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдлрд┐рд░ рд╕реЗ рд▓рдЧрднрдЧ 5 рдорд┐рдирдЯ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд▓реЛрд╣рд╛ рдЧрд░реНрдо рди рд╣реЛ рдЬрд╛рдПред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореБрдЭреЗ рдПрдХ рд╕реЛрд▓реНрдбрд░рд┐рдВрдЧ рд╕реНрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 5-10 рдЯреАрдЖрд░ рдЦрд░реНрдЪ рдХрд░реЗрдВ рд╢реМрдХ рдХреЗ рд▓рд┐рдП рд╡рд╣ рдЕрднреА рддрдХ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдерд╛ред рд╕рдорд╛рдзрд╛рди рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╛рдпрд░рд┐рдВрдЧ рд╕реНрдЯреЗрд╢рди рд╣реИред
рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ - рдореИрдВ рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реВрдВред


рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ 250 рд░реВрдмрд▓ рдХреЗ рд▓рд┐рдП рдЕрд▓реА рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓рд╛
рдЫрд╡рд┐

рд▓реЛрд╣рд╛ рдЦрд░реАрджрд╛ред рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд▓реЛрд╣рд╛ рдЗрддрдирд╛-рддреЛ рд╣реИ, рд▓реЗрдХрд┐рди рдШрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдЯрд┐рдВрдЧ рдХреЛ рддреБрд░рдВрдд рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЙрдирдХреЗ рдкрд╛рд╕ 100 рд░реВрдмрд▓ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдкрд╕рдВрдж рд╣реИред
рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ 60W 24 рд╡реЛрд▓реНрдЯ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЦрд░реАрджреА рдЧрдИ рдереАред

рд╕реНрдХреАрдо рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░рдХрд░реНрддрд╛ рдиреЗ рд╕рднреА рд╕рдВрдкреНрд░рджрд╛рдпреЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдПред
рдЫрд╡рд┐
рд▓реЗрдЯ рдлреЙрд░реНрдореЗрдЯ рдмреЛрд░реНрдб

рдпрд╣ рд▓рдХреНрд╖реНрдп рдерд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдФрд░ рдПрдХ рдмреЛрд░реНрдб рдкрд░ рд░рдЦрд╛ рдЬрд╛рдПред рдкрд╛рд╡рд░ рд╕реНрдЯреЗрдмрд▓рд╛рдЗрдЬрд░ рдФрд░ рдлреАрд▓реНрдбрдореИрди рдЭреВрда рдмреЛрд▓ рд░рд╣реЗ рд╣реИрдВред рдбрд┐рд╡рд╛рдЗрд╕ 5 рд╡реЛрд▓реНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, 7805 70-80 рдбрд┐рдЧреНрд░реА рддрдХ рдЧрд░реНрдо рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдЫреЛрдЯрд╛ рд░реЗрдбрд┐рдПрдЯрд░ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлреАрд▓реНрдб рдкреЛрд▓ рдмрд┐рд▓реНрдХреБрд▓ рдЧрд░реНрдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдмреЛрд░реНрдб рдХреЛ рдмрдирд╛рдпрд╛, рдпрд╣ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рдЧрдпрд╛:
рдирдХрд╝реНрдХрд╝рд╛рд╢реА рд╕реЗ рдкрд╣рд▓реЗ:
рдЫрд╡рд┐
рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд╛рдж:
рдЫрд╡рд┐

рддреИрдпрд╛рд░-рдХрд┐рдП рдЧрдП рдирд┐рдпрд╛рдордХ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд▓рдЧ рд░рд╣реА рд╣реИ
рдЫрд╡рд┐

рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдмреЛрд░реНрдб рдмрд┐рдирд╛ рдПрдХ рдЬрдореНрдкрд░ рдХреЗред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреНрдпреВрдирддрдо рд╡рд┐рд╡рд░рдг, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдиреНрдпреВрдирддрдо рдкреНрд░рддрд┐рд░реЛрдзреЛрдВ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рд╕рдВрдХреЗрддрдХ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ред
рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрддрдХ рд▓рд╛рд▓, рдПрдирдХреЛрдбрд░ (рд╡рд╛рд▓реНрдХреЛрдбрд░) рдХрд╛ рдирд┐рдпрдВрддреНрд░рдгред
рдкрд╣рд▓рд╛ рд╕рдорд╛рд╡реЗрд╢рди: рдореИрдВрдиреЗ
рдЫрд╡рд┐

рд╢рд╛рд╕реНрддреНрд░реАрдп рдкреАрдЖрдИрдбреА тАЛтАЛрд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛, рд▓рдХреНрд╖реНрдп рдиреНрдпреВрдирддрдо рд╣реАрдЯрд┐рдВрдЧ рд╕рдордп рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдирдХреЛрдбрд░ рд╢рд╛рдлреНрдЯ рдХреЛ рджрдмрд╛рддреЗ рд╣реИрдВ рдФрд░ 3 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЛрдб, рд╕реЗрдЯрд┐рдВрдЧ рд╕реНрдЯреЗрдк рдФрд░ рддрд╛рдкрдорд╛рди рд╕реБрдзрд╛рд░ (рдерд░реНрдореЛрдХреНрдпреВрд▓реНрд╕ рд╕рднреА рдЕрд▓рдЧ рд╣реИрдВ) рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдлреЛрди рдкрд░ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╢реВрдЯ рдХрд┐рдпрд╛, рдЧреБрдгрд╡рддреНрддрд╛ рдмрд╣реБрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ


рдХреЗрд╕, рдХреЗрд╕ ... рдФрд░ рдлрд┐рд░ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ
рдЫрд╡рд┐

рдФрд░ рдЬрдм рдЗрд╕реЗ рдЕрд▓рдорд╛рд░реА рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рд╕рдордп рдЖрдпрд╛:
рдЫрд╡рд┐

рдЬреЛ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕реНрд░реЛрддред
Atmel рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>

unsigned char display_on, registr, butt1,butt2,butt3, butt3s, zamer,rezhim,mode,param,params, edit, redit, blink, wait2, wait3, wait5, wait6, wait7, rdisp, encoder_r, encoder_l, right, left, prewmode;
unsigned char ind[4],tempvar, tempmem;
float measureint, voltage_ADC,tmp;
unsigned int stop_h, stop_m, pwm_d, measure, pmeasure;
int pwm,tempch;
//unsigned int voltage_ADC;
unsigned char param1[10]; 
unsigned char param1eeprom[10] EEMEM;
uint16_t tempset,measure; uint16_t tem EEMEM;
unsigned char pwm_m[455] EEMEM;

ISR (TIMER0_OVF_vect)
{
		 if(display_on==1)  
			 {
				 PORTB |= (1 << PB6); PORTD |= (1 << PD7); PORTD |= (1 << PD3); PORTC |= (1 << PC2);
				
				 PORTB &=~ (1 << PB0); //1
				 PORTC &=~ (1 << PC1); //2
				 PORTD &=~ (1 << PD4); //3
				 PORTD &=~ (1 << PD2); //4
				 PORTD &=~ (1 << PD5); //5
				 PORTB &=~ (1 << PB7); //6
				 PORTD &=~ (1 << PD6); //7
			 }
			 
		 if(display_on==37)
			 {
				
				if(ind[registr]==0 || ind[registr]==6 || ind[registr]==9) {display_on=display_on+20;} //6 
					if(ind[registr]==2 || ind[registr]==3 || ind[registr]==5 || ind[registr]=='P') {display_on=display_on+25;} //5 
					 if(ind[registr]==4 || ind[registr]=='g') {display_on=display_on+35;} //4 	
						if(ind[registr]==7) {display_on=display_on+40;} // 3 
						 if(ind[registr]==1) {display_on=display_on+45;} //2 
							 if(ind[registr]=='-') {display_on=display_on+50;} //2 
				 				 
				 if(registr==0) { PORTB &=~ (1 << PB6);}
				 if(registr==1) { PORTD &=~ (1 << PD3);}
				 if(registr==2) { PORTC &=~ (1 << PC2);}
				 if(registr==3) { PORTD &=~ (1 << PD7);}
								
					 if (ind[registr]==0) {PORTB |= (1 << PB0);PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD5);PORTB |= (1 << PB7);}//0
					 if (ind[registr]==1) {PORTD |= (1 << PD2);PORTD |= (1 << PD5);}//1
					 if (ind[registr]==2) {PORTB |= (1 << PB0);PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//2
					 if (ind[registr]==3) {PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD5);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//3
					 if (ind[registr]==4) {PORTC |= (1 << PC1);PORTD |= (1 << PD2);PORTD |= (1 << PD5);PORTD |= (1 << PD6);}//4
					 if (ind[registr]==5) {PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD5);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//5
					 if (ind[registr]==6) {PORTB |= (1 << PB0);PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD5);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//6
					 if (ind[registr]==7) {PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD5);}//7
					 if (ind[registr]==8) {PORTB |= (1 << PB0);PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD5);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//8
					 if (ind[registr]==9) {PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD5);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//9
					 if (ind[registr]=='P') {PORTB |= (1 << PB0);PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD6);}//P
					 if (ind[registr]=='g') {PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD2); PORTD |= (1 << PD6);}//g	
					 if (ind[registr]=='-') {PORTD |= (1 << PD6);}//- 
					  if (ind[registr]=='F') {PORTB |= (1 << PB0);PORTC |= (1 << PC1);PORTD |= (1 << PD4); PORTD |= (1 << PD6);}//F
					  if (ind[registr]=='n') {PORTB |= (1 << PB0);PORTD |= (1 << PD5); PORTD |= (1 << PD6);}//n	 
						 
				 registr++;
				 if (registr>3){registr=0;}
			 }
			 
			 display_on++;
			 if (display_on>100){display_on=1;blink++; if(blink>250){blink=0;} ADCSR |= (1<<ADSC);}
				 if(blink==250){wait2++; if(wait2>250){wait2=0;}}
				  if(wait2==250){wait3++; if(wait3>250){wait3=251;}; butt3s++; if(butt3s>250){butt3s=251;}; wait5++;wait6++;}	 
				   if(wait3==3 && mode==1){mode=0;}
					   if(wait5==20){wait5=0;}
						   if(wait5==51){wait5=0;}
							   if(wait5==50){wait6++; if(wait6==250){wait6=0;};if(wait6==param1[3]){rezhim=0;}}
				   
}

void init_pwm (void)
{
	TCCR1A|=(1<<COM1A0);
	TCCR1A|=(1<<COM1A1);
	TCCR1B|=(1<<CS10);
	//TCCR1A|=(1<<WGM10);
	TCCR1A|=(1<<WGM11); 
	//TCCR1B|=(1<<WGM12);
	TCCR1B|=(1<<WGM13);
		
	//   
	OCR1A=27000;
	//OCR1B=10000; // 0  200/170  250/215
	ICR1=27000;
}

ISR (ADC_vect)//    
{
	voltage_ADC = voltage_ADC+ADCW;//   
	if (zamer==100) 
	 {
	   measureint=voltage_ADC/zamer;
	   measure=measureint*param1[2]/100;
	   
	   if(rezhim==1)
	    {   
	     if(mode==0)
		  {
			if(param1[0]>0) {ind[0]=measure/100;ind[1]=measure%100/10;ind[2]=measure%10;ind[3]='g';}
			if(param1[0]==0) 
			    {
				  if(tempset<100){ind[0]=-1;} else {ind[0]=tempset/100;}
					 if(tempset<10) {ind[1]=-1;} else {ind[1]=tempset%100/10;}
						 ind[2]=tempset%10;ind[3]='g';
				}
	      }
		 if(mode==1)
		    {  
			  if(blink<170)
			   {if(tempset<100){ind[0]=-1;} else {ind[0]=tempset/100;}
			    if(tempset<10) {ind[1]=-1;} else {ind[1]=tempset%100/10;}
			    ind[2]=tempset%10;ind[3]='g';
			   }
				  if(blink>170){ind[0]=-1;ind[1]=-1;ind[2]=-1;ind[3]=-1;}
			}
	    }
	 
	  	  
	  if(tempmem==0)
	    {
	         if(wait5==10)//5=10 
	         {
		          if(tempch==0 && tempset==measure && eeprom_read_byte(&pwm_m[tempset])!=pwm)
		          {eeprom_write_byte(&pwm_m[tempset],pwm); tempmem=1; ind[0]='g';ind[1]='g';ind[2]='g';}
									  					  
				 if(tempset!=measure) 
		         {
			         pwm_d=tempset-measure;
			         pwm=pwm+pwm_d;
		         }
		         wait5=0;tempch=0;
		     }
		
		    if(pmeasure<measure && tempset<measure) //     
			  {
				pwm_d=measure-tempset; tempch++;
				pwm=pwm-pwm_d;
				pmeasure=measure;
			  }
			  
			  if(pmeasure>measure && tempset>measure) //     
			  {
				pwm_d=tempset-measure; tempch++;
				pwm=pwm+pwm_d*measure/100; 
				pmeasure=measure;
			  }	
			  	  
		  }
		
		 
		 if(wait5==10 && tempmem==1)//5=10 
		   {  
					
			 if(tempset<measure){pwm=pwm-1;}
			 if(tempset>measure){pwm=pwm+1;}
			 if(tempset==measure && eeprom_read_byte(&pwm_m[tempset])>pwm && eeprom_read_byte(&pwm_m[tempset])-pwm>5){eeprom_write_byte(&pwm_m[tempset],pwm);}
			 if(tempset==measure && eeprom_read_byte(&pwm_m[tempset])>pwm && eeprom_read_byte(&pwm_m[tempset])-pwm>5){eeprom_write_byte(&pwm_m[tempset],pwm);}	 
			 wait5=0;
			 if(tempset==measure && tempmem==1 && (int)(voltage_ADC*param1[2]/100)%zamer<50){tmp=tmp-10;}
			 if(tempset==measure && tempmem==1 && (int)(voltage_ADC*param1[2]/100)%zamer>50){tmp=tmp+10;}
							 
		   }	
			 
		if(pwm>250){pwm=250;} if(pwm<0){pwm=0;}
		if(tempset-10>measure && tempmem==1){OCR1A=0;wait5=0;wait6=0;} else {OCR1A=27000+tmp-pwm*108;}   
	  voltage_ADC=0;zamer=0;		
	}
	zamer++; 
		
	if (rezhim!=1) {OCR1A=27000;} 
		if (measure>480) {OCR1A=27000;rezhim=0;OCR1A=27000;}
	
	
	//ADCSR |= (1<<ADSC);//  
}


// 
int main(void)
{

TIMSK |= (1 << TOIE0); //     2
TCCR0|=(0<<CS02)|(1<<CS00);
init_pwm(); //  


//ads
ADMUX|= (1<<REFS0); // 
ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
sei(); //   

PORTB=0b00000000; PORTC=0b00101000; PORTD=0b00000001;//  
DDRB=0b11111111; DDRC=0b11010110; DDRD=0b11111110;
			 
butt1=0;butt2=0;butt3=0;rezhim=0;mode=0;params=0;edit=0;redit=0;blink=0;tempmem=0;tempch=0;
encoder_l=40; encoder_r=0; right=0; left=0;butt3s=0;wait3=0;wait2=0;mode=0;prewmode=0;pwm_d=0;

tempset = eeprom_read_word(&tem); if(tempset>500){tempset=100;}	
param1[0] = eeprom_read_byte(┬╢m1eeprom[0]); if(param1[0]>1){param1[1]=1;}
param1[1] = eeprom_read_byte(┬╢m1eeprom[1]); if(param1[1]>10){param1[1]=5;}	
param1[2] = eeprom_read_byte(┬╢m1eeprom[2]); if(param1[2]>250){param1[2]=75;}
param1[3] = eeprom_read_byte(┬╢m1eeprom[3]); if(param1[3]>250){param1[3]=10;}
	
pwm=eeprom_read_byte(&pwm_m[tempset]); if (pwm<255){tempmem=1;}

while (1) // 
{
if(tempset<100){tempset=100;}	if(tempset>450){tempset=450;}
	
// 
if ((PINC&(1<<PC5))==0x00){butt1++; if(butt1>200){butt1=201;}} else {butt1=0;}
 if(butt1==200 && rezhim==0){butt3s=0; rezhim=1; butt1=201;}
 if(butt1==200 && rezhim==1){butt3s=0; rezhim=0; butt1=201;}
 if(butt1==200) {butt3s=0;}
	
	if (butt1==201 && butt3s==2 && rezhim!=2){rezhim=2;butt3s=10;}
	if (butt1==201 && butt3s==2 && rezhim==2){rezhim=0;butt3s=10;}	
    
// 	
if ((PIND&(1<<PD0))==0x00){butt2++; if(butt2>encoder_l){butt2=encoder_l+1;}} else {butt2=0;}
if ((PINC&(1<<PC3))==0x00){butt3++; if(butt3>encoder_l){butt3=encoder_l+1;}} else {butt3=0;}

if(right==1 || left==1){right=0; left=0;}
if(encoder_r==0) 
  {
	  if(butt2==encoder_l+1 && butt3==encoder_l) {encoder_r=encoder_l*5;mode=1;wait3=0;right=1;}
	  if(butt3==encoder_l+1 && butt2==encoder_l) {encoder_r=encoder_l*5;mode=1;wait3=0;left=1;}
  }
if(encoder_r==0){encoder_r=1;} encoder_r--;

if(mode!=prewmode){prewmode=mode; eeprom_write_word(&tem, tempset);} 

if(rezhim==0)
{
	if(blink<170){ind[0]=-1; ind[1]=-1; ind[2]=-1; ind[3]=-1;}
	if(blink>170){ind[0]='-'; ind[1]='-'; ind[2]='-'; ind[3]='-';}
}

if(rezhim==1)
  {
	 if(right==1) {tempset=tempset+param1[1];pwm=eeprom_read_byte(&pwm_m[tempset]); if (pwm<255){tempmem=1;tmp=0;}else{tempmem=0;pwm=1;tmp=0;} } 
	 if(left==1){tempset=tempset-param1[1];pwm=eeprom_read_byte(&pwm_m[tempset]); if (pwm<255){tempmem=1;tmp=0;}else{tempmem=0;pwm=1;tmp=0;} }
  }
  

if(rezhim==2)
 {
	if(butt1==200){if(edit==0){edit=1;tempvar=-1;} else {edit=0; eeprom_write_byte(┬╢m1eeprom[params], param1[params]);} }
	
	if(edit==0)
	 {
		  ind[0]='P'; ind[1]=params; ind[2]=-1; ind[3]=-1;
		  if(right==1){params++;}; if(left==1){params--;}
			  if(params<0){params=0;}; if(params>3){params=3;}
	 }
	
	if(edit==1)
	{
	 if(blink==1 || tempvar!=param1[params])
		 {
			
		 if(param1[params]<100){ind[0]=-1;} else {ind[0]=param1[params]/100;}
		 if(param1[params]<10) {ind[1]=-1;} else {ind[1]=param1[params]%100/10;}
		 ind[2]=param1[params]%10;
	     }
	     if(blink>170){ind[0]=-1;ind[1]=-1;ind[2]=-1;ind[3]=-1;}
		tempvar=param1[params];
		if(right==1){param1[params]++;};if(left==1){param1[params]--;}
			if(param1[params]<0){param1[params]=0;} if(param1[params]>250){param1[params]=1;}
		if(params==0) {if(param1[params]<0){param1[params]=0;} if(param1[params]>1){param1[params]=1;}}	
			if(params==1) {if(param1[params]<1){param1[params]=1;} if(param1[params]>50){param1[params]=50;}}	
				if(params==2) {if(param1[params]<0){param1[params]=0;} if(param1[params]>250){param1[params]=250;}}	
					if(params==3) {if(param1[params]<0){param1[params]=0;} if(param1[params]>250){param1[params]=250;}}	
    }
	 
 }
 

 } //loop
} //main


<spoiler />

Source: https://habr.com/ru/post/hi392507/


All Articles