рдУрд╡рд░рдХреНрд▓реЙрдХрд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕рд░ рдпрд╛ рдореЗрдореЛрд░реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЙрдирд┐рдЯрд░ рдХреА рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЛ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?

рдпрд╣ рдПрд▓рдИрдбреА рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рдиреЗ 23-рдЗрдВрдЪ рдХреЗ рд╕реИрдорд╕рдВрдЧ рд╕рд┐рдВрдХрдорд╛рд╕реНрдЯрд░ рдмреАрдПрдХреНрд╕ 2340 (рдЬрдирд╡рд░реА 2011 рдореЗрдВ рдЬрд╛рд░реА) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╕рдордп рдХреЗ рд╕рд╛рде, рдЙрдиреНрд╣реЛрдВрдиреЗ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдердХрд╛ рд╣реБрдЖ рдерд╛, рдФрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ред рдФрд░ рдХреЗрд╡рд▓ рдХрд╛рдо рдирд╣реАрдВ, рд╕рд┐рд░реНрдл рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрдврд╝реЗрдВред рдореЙрдиреАрдЯрд░ рд╡рд╣реА рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдФрд░ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ред рдФрд░ рдЕрдиреНрдп рд╕реНрдХреНрд░реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдиреЗ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдПрдХ рдмрд╛рд░
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдореИрдВрдиреЗ 240 рд╣рд░реНрдЯреНрдЬ рдХреА рддрд╛рдЬрд╝рд╛ рджрд░ рд╡рд╛рд▓реЗ OLED рдбрд┐рд╕реНрдкреНрд▓реЗ рд╡рд╛рд▓реЗ рдлреЛрди рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рд╛ред рдердХрд╛рди рдФрд░ рд╕рд┐рд░рджрд░реНрдж рдХреА рд╢рд┐рдХрд╛рдпрддред рдФрд░ рд╢рд░реАрд░ рдкрд░ рдмреИрдХрд┐рдВрдЧрд┐рдВрдЧ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдкреНрд░рднрд╛рд╡ рдкрд░ рдЕрдзреНрдпрдпрди рдХреЗ рд╕рдВрджрд░реНрдн (рдкреНрд░рдорд╛рдг рдХреЗ рдмрд┐рдирд╛) рдереЗ: рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдВрдЦ 240 рд╣рд░реНрдЯреНрдЬ рдкрд░ рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ рдирд╣реАрдВ рджреЗрдЦрддреА рд╣реИ, рдорд╕реНрддрд┐рд╖реНрдХ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред рдПрдХ рдирд┐рд░рдВрддрд░ рдЪрдордХ рдпрд╛ 3 kHz рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рддрдм YouTube рдкрд░ рдореБрдЭреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд░реНрддрдорд╛рди рдХреЗ рд▓рд┐рдП рдореЙрдирд┐рдЯрд░ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд░реАрдореЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ
рд╡реАрдбрд┐рдпреЛ рдорд┐рд▓рд╛ред рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд╛рд░реНрдбрд┐рдирд▓ рдерд╛ред рд╡реАрдбрд┐рдпреЛ рдХреЗ рддрд╣рдд рддрд╛рд░реЛрдВ рдкрд░ рдХрдо рдзрд╛рд░рд╛рдУрдВ рдкрд░ рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдереАрдВред рдФрд░ рдореЗрд░реА рдмреИрдХрд▓рд╛рдЗрдЯ 10-25% рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдорд░рд╛ рдХрд╛рдлреА рдЕрдВрдзреЗрд░рд╛ рд╣реИред
UPD : рд╡реАрдбрд┐рдпреЛ рдореЗрдВ, рд▓реЗрдЦрдХ рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрд▓ рдИ рдбреА рдХреА рдПрдХ рдорд╛рд▓рд╛ рдереА, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ 4 рдереЗред
рдкреАрдбрдмреНрд▓реВрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрдордХ рдирд┐рдпрдВрддреНрд░рдг рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЖрд╡реГрддреНрддрд┐ рдореЗрдВ рд╡реГрджреНрдзрд┐ред рдореИрдВрдиреЗ рдПрдХ рдЧреИрд░-рдЖрдХреНрд░рд╛рдордХ рддрд░реАрдХреЗ рд╕реЗ рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ рдХреЛ рдорд╛рдкрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ рдПрдХ рдлреЛрдЯреЛрд░рд┐рд╕реЗрд╕реНрдЯрд░ рдпрд╛ рдПрдХ рдлреЛрдЯреЛрдбрд╛рдпреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдореИрдВрдиреЗ рддреБрд░рдВрдд рдореЙрдирд┐рдЯрд░ рдХреЛ рдбрд┐рд╕рд╛рдЗрдб рдХрд┐рдпрд╛ред

рдмреИрдХрд▓рд╛рдЗрдЯ рдирд┐рдпрдВрддреНрд░рдХ - OZ9993CNред рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛рд╢реАрдЯ рдирд╣реАрдВ рдереА, рдХреЗрд╡рд▓ рдУ
2 рдорд╛рдЗрдХреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЧреНрд░реБрдк рдмреИрдХрд▓рд╛рдЗрдЯ рдбреНрд░рд╛рдЗрд╡рд░ рдерд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЪрд╛рд▓рдХ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрд╛рд╣рд░реА рдХреНрд╖реЗрддреНрд░ рдкреНрд░рднрд╛рд╡ рдЯреНрд░рд╛рдВрдЬрд┐рд╕реНрдЯрд░ рдФрд░ рдЗрдВрдбрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП (14.4 рд╡реА рд╕реЗ 54.6 рд╡реА рддрдХ рдорд╛рдк рдХреЗ рдЕрдиреБрд╕рд╛рд░) рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рд╕реЗ рдПрдХ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдЕрд░реНрде рдореЗрдВ рд╕рдорд╛рди рд╣реИ; рдкрд┐рди рдирдВрдмрд░ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ:

рдмреЛрд░реНрдб рдкрд░, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдкреАрдбрдмреНрд▓реВрдПрдо рд╕рд┐рдЧреНрдирд▓ рдкрде рдХреЛ рдмреА-рдбрд┐рдо (рдмреИрдХрд▓рд╛рдЗрдЯ рдбрд┐рдорд┐рдВрдЧ?) рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдЦреЛрдЬрдирд╛ рдирд╣реАрдВ рдерд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреАрд╕реА рдХреА рддрд░рдл рд╕рд┐рдЧрд░реЛрдХ рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд USBee AX USB рдбрд┐рдЬрд┐рдЯрд▓ рдЖрд╕реНрдЯрд╕реАрд▓рд╕реНрдХрдк рдХрд╛ рдПрдХ рдХреНрд▓реЛрди рдЪрд▓рди рдореЗрдВ рдЖрдпрд╛ред рдорд╛рдкрди рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдмреИрдХрд▓рд╛рдЗрдЯ рдЖрд╡реГрддреНрддрд┐ 180 рд╣рд░реНрдЯреНрдЬ рд╣реИ (рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛!)ред рдЙрдЪреНрдЪ рд╕рдВрдХреЗрдд рд╕реНрддрд░ - 5 рд╡реАред

рдЕрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдкреАрдбрдмреНрд▓реВрдПрдо рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдХрд┐рд▓реЛрд╣рд░реНрдЯреНрдЬрд╝ рдореВрд▓реНрдпреЛрдВ рддрдХ рдмрдврд╝рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рд░ 16 рдмрд╛рд░ рдПрдХ рдмрд╛рд░ред рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ 16 рдЧреБрдирд╛ рддреЗрдЬ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдбрдмреНрд▓реВрдПрдо рдЯреНрд░реИрдХ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдердкреНрдкрдбрд╝ рдорд╛рд░рдирд╛ рд╣реИред рд╣рдореЗрдВ 2 рдЯрд╛рдЗрдорд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдХрдо рдФрд░ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рдЕрд╡рдзрд┐ рдХреЛ рдорд╛рдкреЗрдЧрд╛, рджреВрд╕рд░рд╛ рдкреАрдбрдмреНрд▓реВрдПрдо рд╕рд┐рдЧреНрдирд▓ рджреЗрдЧрд╛ред рд╡рд┐рднрдХреНрдд рдХреЗ рдЧреБрдгрд╛рдВрдХ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдирдХрд▓ред рдирд╣реАрдВ, Arduino рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдХреЛрдИ рдЕрд╕реЗрдВрдмрд▓рд░ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╡рд╣рд╛рдВ рдЬреАрд╕реАрд╕реА рд╣реЛрдЧрд╛ред рдХрдо рд╕реЗ рдХрдо рджреЛ рдЯрд╛рдЗрдорд░ (рд╕реНрдЯреЙрдХ рд╕реЗ) рдХреЗ рд╕рд╛рде рдЫреЛрдЯрд╛ рдПрдордХреЗ ATtiny15 рдерд╛ред рд▓реЗрдХрд┐рди WinAVR рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓реЗрдирд╛ рдкрдбрд╝рд╛ - ATtiny45 (ATtiny25 / 85 рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛)ред
рдбреНрд░рд╛рдЗрд╡рд┐рдВрдЧ:
100n тФМтФАтФАтФАтФАтФАтФАтФАтФдтФЬтФАтФАтФАтФАтФАтФАтФАтФР тФВ тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР тФВ тФВ тФВ 1 8 тФЬтФАтФ┤тФА VCC тФВ тФВ 2 7 тФЬтФА PB2 (INT0) INPUT тФВ тФВ 3 6 тФЬтФА PB1 (OC1A) OUTPUT GND тФАтФ┤тФАтФд 4 5 тФВ тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ ATtiny45
рд╣рдо рдЯрд╛рдЗрдорд░ рдбрд┐рд╡рд╛рдЗрдбрд░ рдХреЗ рдХрд╛рд░рдХреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд RC-рдЬрдирд░реЗрдЯрд░ рд╕реЗ рд▓рдЧрднрдЧ 8 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рд╕реАрдкреАрдпреВ рдЖрд╡реГрддреНрддрд┐ рд▓реЗрдВред
- рдорд╛рдкрдХ рдЯрд╛рдЗрдорд░ред рдорджреНрдзрд┐рдо рдЕрд╡рдзрд┐ рдореЗрдВ рдХрд┐рддрдиреЗ рдЙрдкрд╛рдп? ред рд╕рдЯреАрдХрддрд╛ рдХреЗ рдиреНрдпреВрдирддрдо рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдорд░ рдХреЗ рдЖрда-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреВрд░реНрд╡-рд╡рд┐рднрд╛рдЬрд┐рдд 256 рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рд╣реЛрдЧрд╛ ред
- PWM рдЯрд╛рдЗрдорд░ рд╣рдо рдЖрд╡реГрддреНрддрд┐ рдХреЛ 16 рдЧреБрдирд╛ рдмрдбрд╝рд╛ рдХрд░реЗрдВрдЧреЗ: , рддреЛ рдкреВрд░реНрд╡-рдбрд┐рд╡рд╛рдЗрдбрд░ рдЬрд┐рддрдирд╛ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ: ред
рдЗрдирдкреБрдЯ рд╕рд┐рдЧреНрдирд▓ рдмрд╛рд╣рд░реА рдЗрдВрдЯрд░рдкреНрдЯ рд▓реЗрдЧ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рд╣реИрдВрдбрд▓рд░ рдЗрд╕рдХреЗ:
ISR(INT0_vect, ISR_NAKED) { uint8_t timer = TCNT0;
ISR_NAKED рдХреНрдпрд╛ рд╣реИ?"ISR_NAKED" рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рдЭрдВрдбреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ / рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдореБрдЦреНрдп рд▓реВрдк рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдЕрдВрддрд╣реАрди рд╣реИ while(1) {}
), рдФрд░ рдпрд╣ рдХрд┐ рд╕рдмрд░реВрдЯреАрди рд╕реЗ рдХреЛрдИ рдХреЙрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЦреИрд░, рдЕрдВрдд рдореЗрдВ, рд╣рдо reti()
рдЗрдВрдЯрд░рдкреНрдЯ reti()
рдлреНрд▓реИрдЧ рдХреЛ reti()
рд╕рд╛рде рдлрдВрдХреНрд╢рди рд╕реЗ рд░рд┐рдЯрд░реНрди рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдорд┐рд▓рд╛рдк рдХрд┐рдпрд╛, рднрдбрд╝рдХ рдЧрдпрд╛ - рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛!

рд▓реЗрдХрд┐рди рдЧрд▓рд╛ рджрдмрд╛рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ред рд╣рдо рдкрд╛рд╡рд░ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рдВрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлреАрд▓реНрдб рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдЧреЗрдЯ рдкрд░ рджреЗрдЦрддреЗ рд╣реИрдВ:

рдереНрд░реЛрдЯрд▓ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╣реИ, рдпрд╣ 320 kHz рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдкрд╣рд▓реЗ PWM рдЖрд╡реГрддреНрддрд┐ 180 рд╣рд░реНрдЯреНрдЬ рдереА рдФрд░ рд▓рдЧрднрдЧ рдЕрд╢реНрд░рд╡реНрдп рд╣реИ (рдХреЗрд╡рд▓ рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рдХрд╛рди рд▓рд╛рддреЗ рд╣реИрдВ), рддреЛ 2.9 kHz рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИред рдФрд░ рдЖрд░рд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрдврд╝рд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рд╢реНрд░рд╡рдгрддрд╛ рдХреА рдКрдкрд░реА рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдЖрд╡реГрддреНрддрд┐ рд▓рд╛рддреЗ рд╣реИрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
? рд╣рдо 16 рд╕реЗ 2 рддрдХ PWM рдЯрд╛рдЗрдорд░ рдбрд┐рд╡рд╛рдЗрдбрд░ рдХреЗ рдЧреБрдгрдХ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдлреНрд▓реИрд╢ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рдерд╛ред рд▓рдЧрднрдЧред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрда-рдмрд┐рдЯ рдЯрд╛рдЗрдорд░ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ
, рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЦрдирд┐рдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдпрд╣ рдЪрдордХ рдореЗрдВ рдХрдо рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдЪрд┐рдХрдиреА рд╡реГрджреНрдзрд┐ рдФрд░ рдХрдИ рд╕реЗрдХрдВрдб рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рдеред рдЗрд╕ рд╕рдВрдХрдЯ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреНрд░рд┐рд╕реНрдЯрд▓ рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░рд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдорд╛рдкрдиреЗ рд╡рд╛рд▓реЗ рдЯрд╛рдЗрдорд░ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдереЛрдбрд╝реА рдЪреМрдбрд╝рд╛рдИ рдмрдврд╝рд╛рдПрдВрдЧреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪрдордХ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдорд╛ (рд╣рд┐рд╕реНрдЯреИрд░рд┐рд╕реАрд╕) рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗ (1 рдХреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЗ рд╕рд╛рде 0тАУ100)ред рд╣рдо рдорд╛рдк рдЯрд╛рдЗрдорд░ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЛ 256 рдЧреБрдирд╛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЧреБрдгрдХ рдХрд╛рд░рдХ 1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдорд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдорд╛рдкрдирд╛ "рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рдФрд░ рд╕реНрддрд░ рдХреА рдЕрд╡рдзрд┐ рдХреЛ рдШрд╕реАрдЯрд╛ рдЧрдпрд╛":
ISR(TIM0_OVF_vect, ISR_NAKED) { #define TIME_H_LIM (UCHAR_MAX-1) if (time_h < TIME_H_LIM) {
рдмрд╛рд╣рд░реА рд░реБрдХрд╛рд╡рдЯ рдЕрдм рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ:
ISR(INT0_vect, ISR_NAKED) {
рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдУрд╡рд░рдХреНрд▓реЙрдХрд┐рдВрдЧ рд╣реИред SRAM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╡реНрдпрд╡рдзрд╛рди рд╣реИрдВрдбрд▓рд░реНрд╕ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдВрддрд░рд╛рд▓ рдорд╛рдк рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдЪреНрдЪрддрдо рднрд╛рдЧ рдЪрд░ time_h рдореЗрдВ рд╣реИ, рдФрд░ рдорд╛рдкрд╛ PWM рдЪрдХреНрд░ рд▓рдВрдмрд╛рдИ рдФрд░ рдХрд░реНрддрд╡реНрдп рдЪрдХреНрд░ рдХреЗ рдорд╛рди рдХреНрд░рдорд╢рдГ time_cycle рдФрд░ time_on рдореЗрдВ рд╣реИрдВред THRESHOLD - рдЪрдордХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ред
рдЕрдм рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд░рд╛рджрд╛ рдерд╛ред
рдкреВрд░реНрдг рдХреЛрдб #include <avr/interrupt.h> #include <avr/wdt.h> #include <stdlib.h> #include <limits.h> #define F_CPU 8000000UL #define F_PWM_IN 180U register uint8_t time_h asm("r4"); // High part of time counter register uint16_t time_cycle asm("r12"); // Period register uint16_t time_on asm("r14"); // H level duration __attribute__((naked)) int main(void) { time_h = 0; time_cycle = 0; time_on = 0; ACSR |= 1<<ACD; // Comparator disable // Timer0 TCCR0A = 0; // CK/1 TCCR0B = 1<<CS00; // Timer1 DDRB |= 1<<PB1; // PWM output // CK/2, Clear the OC1A output line TCCR1 = 1<<CTC1|1<<PWM1A|2<<COM1A0|2<<CS10; TIMSK |= 1<<TOIE0; // Timer0 overflow // Ext int 0 MCUCR |= 1<<ISC00; // Any logical change on INT0 generates an interrupt request GIMSK |= 1<<INT0; // External Interrupt Request 0 Enable PORTB |= 1<<PB2; // Input wdt_enable(WDTO_120MS); // Watchdog on sei(); // Interrupts enable while (1) { // Do not use flags or registers wdt_reset(); // Watchdog reset } } /* External Interrupt 0 */ ISR(INT0_vect, ISR_NAKED) { // F_CPU / Timer1 prescaler / F_PWM_IN / grades / 4 #define THRESHOLD (F_CPU / 1 / F_PWM_IN / 100 / 4) uint16_t time; uint8_t time_l = TCNT0; if ((TIFR & 1<<TOV0) && (time_l <= UCHAR_MAX/2)) { // Overflow occured right now time_l = UCHAR_MAX; // 0xff } time = (time_h << 8) + time_l; if (PINB & 1<<PB2) { // Risen if (abs(time - time_cycle) > THRESHOLD) { time_cycle = time; OCR1C = time_h; } TCNT0 = 0; time_h = 0; if (TIFR & 1<<TOV0) { TIFR = 1<<TOV0; // Clear Timer0 overflow flag } } else { // Falled if (abs(time - time_on) > THRESHOLD) { time_on = time; OCR1A = time_h; } } reti(); // Because ISR_NAKED } /* Timer/Counter0 Overflow */ ISR(TIM0_OVF_vect, ISR_NAKED) { #define TIME_H_LIM (UCHAR_MAX-1) if (time_h < TIME_H_LIM) { // Normal way time_h += 1; } else { // High part overflowed if (PINB & 1<<PB2) { OCR1A = TIME_H_LIM; // Always on } else { OCR1A = 0; // Always off } OCR1C = TIME_H_LIM; time_h = 0; time_cycle = 0; time_on = 0; } reti(); // Because ISR_NAKED }
рдЖрдк рдЗрд╕реЗ рдСрдЯреЛрд╕рдЬреЗрд╢рди рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ: рдЬреАрд╡рди рдмреЗрд╣рддрд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬреАрд╡рди рдЕрдзрд┐рдХ рдордЬреЗрджрд╛рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ! рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд▓рдЯрдХреЗ рд╣реБрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рднреА рдЪрд▓реЗред
рдпрджрд┐ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмреИрдХрд▓рд╛рдЗрдЯ рдЖрд╡реГрддреНрддрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЖрдкрдХреА рднрд▓рд╛рдИ рдФрд░ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ - рддреЛ рдЦреБрдж рдХреЛ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╕рдордЭреЗрдВред рд╢рд╛рдпрджред рд╕рд╛рде рд╣реА рдЬреЛ рд▓реЛрдЧ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣рдЬ рд╣реИрдВ рдЬрдм рдХрдорд░реЗ рдореЗрдВ рд╕реАрдУ
2 рдХреА рд╕рд╛рдордЧреНрд░реА 0.2% (2000
рдкреАрдкреАрдПрдо ) рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред
рд▓реЗрдХрд┐рди рдЬреАрдердм рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?