ATtiny24A рдкрд░ рдореЗрдЯрд▓ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдмрдирд╛рдирд╛

рдореИрдВ рдЕрд░реБрдбрд┐рдиреЛ-рдЬреИрд╕реЗ рдмреЛрд░реНрдбреЛрдВ рдХреЗ рд╕рд╛рде рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЦреЗрд▓рд╛, рд▓реЗрдХрд┐рди рд╣рд░ рд╕рдордп рдореИрдВ "рдХрдо, рд╕рд╕реНрддрд╛ рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рдХрд░реАрдм!" рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдпрд╣рд╛рдВ рд╢реБрджреНрдз рдПрдЯреАрдЯреАрдЖрдИрдПрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рд╣реИред рд▓реЗрдЦ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡реА рдореЗрдЯрд▓ рдбрд┐рдЯреЗрдХреНрдЯрд░ рд╕рд░реНрдХрд┐рдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╣реИ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ 47 рд╕реЗрдВрдЯ + рдХреЗрдЯрд▓ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЗрдЯрд▓ рдХрд╛ рд░рд╛рд╕реНрддрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдЕрд░реБрдбрд┐рдиреЛ рд╕реЗ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рд▓реЛрд╣реЗ рдХрд╛ рдЪрдпрди


рдереЛрдбрд╝реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рдж, рд╡рд┐рдХрд▓реНрдк ATtiny24A-SSU (14-рдкрд┐рди SOIC рдкреИрдХреЗрдЬ) рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред рдХреНрдпреЛрдВ? рдХрд╛рд░рдг рд╕рд░рд▓ рд╣реИ: рдХреАрдордд + рдПрд╡реАрдЖрд░ рдХреЛрд░ред рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА STM8S103F3P6 рд╕рд╕реНрддрд╛ рд╣реИ ( рдПрдЯреАрдЯреАрдЖрдИрдПрди рдХреЗ рд▓рд┐рдП 47 рдХреЗ рдореБрдХрд╛рдмрд▓реЗ 39.5 рд╕реЗрдВрдЯ рдХреЗ рдмрд░рд╛рдмрд░ ), рд▓реЗрдХрд┐рди Arduino рдореЗрдВ AVR рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрдиреБрднрд╡ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдкрд╣рд▓реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП AVR рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдЙрдкрд▓рдмреНрдз AVRs рд╕реЗ, рд╣рдо ATTiny рдХреЛ рд╕рдмрд╕реЗ рд╕рд╕реНрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдорд┐рд▓рд╛рдк рдХреЗ рд▓рд┐рдП рдбреАрдЖрдИрдкреА рдкреИрдХреЗрдЬ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдбреАрдЖрдИрдкреА рдкреИрдХреЗрдЬ рдореЗрдВ рдЪрд┐рдкреНрд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рдВрдЧреЗ рдереЗ ( 8-рдлреБрдЯ рдПрдЯреАрдЯрд┐рдиреА 13 рдП рдХреЗ рд▓рд┐рдП 54 рд╕реЗрдВрдЯ , рдФрд░ рдбреАрдЖрдИрдкреА рдкреИрдХреЗрдЬ рдореЗрдВ 14-рдлреБрдЯ рдПрдЯреАрдЯреАрдПрди 23 рдП 95 рд╕реЗрдВрдЯ рд╣реИ )ред рдореИрдВ рдЕрдкрдиреЗ рдСрдХреНрдЯреЛрдкрд╕ рдХреА рд╡рдЬрд╣ рд╕реЗ ATtiny13A рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ред 6 рдкреИрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ 2 рд╕реНрд╡рддрдВрддреНрд░ рд░рд╣реЗрдВрдЧреЗ, рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

ATtiny24A-SSU рдХреЛ 47 рд╕реЗрдВрдЯ рдФрд░ рджреВрд╕рд░реЗ рдПрдбреЗрдкреНрдЯрд░ рдХреЛ 30 рд╕реЗрдВрдЯ рдореЗрдВ рдЦрд░реАрджрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдо рдПрдХ рдбреАрдЖрдИрдкреА рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдо 95 рдореЗрдВ 77 рд╕реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рд░рд▓ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реАрдзреЗ рдПрдХ рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмреЛрд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдПрдбрд╛рдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдбреАрдЖрдИрдкреА рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдПрдХ рд╣реА рд╕рд┐рджреНрдзрд╛рдВрдд (рд╕рдмрд╕реЗ рд╕рд╕реНрддрд╛) рджреНрд╡рд╛рд░рд╛ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ: $ 1.86 рдХреЗ рд▓рд┐рдП USBasp ред

рдкрд╣реБрдВрдЪ рдЧрдП!


рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдПрд╕рдУрдЖрдИрд╕реА рдорд╛рдорд▓реЗ рдХреЛ рдкрд╣рд▓реЗ рдХрднреА рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдбрд░ рдерд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ ... рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рдерд╛, рдЖрд╕рд╛рди рдирд╣реАрдВ ... рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдХреБрдЫ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдпрд╣ рдирд┐рдХрд▓рд╛! рдпрд╣ рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рддреБрд░рдВрдд рд╕рдореВрд╣реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЧрд░реНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд▓рдЧ рд░рд╣рд╛ рдерд╛ - рдпрд╣ рддрд░реАрдХрд╛ рддреЗрдЬ рдФрд░ рдЖрд╕рд╛рди рд╣реИред

рдЫрд╡рд┐

рдХреИрд╕реЗ рдХрд░реЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо?


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ ATtiny24A рдЖрдВрддрд░рд┐рдХ рдЬрдирд░реЗрдЯрд░ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 1 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЦреИрд░, рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рджреЛ, рдпрд╣ рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди USBasp рдХреЗ рд▓рд┐рдП рдРрд╕реА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдореНрдкрд░ (рдлреЛрдЯреЛ рдкрд░ рдкреЛрд╕реНрдЯрд┐рдВрдЧ) рдорд┐рд▓рд╛рдк рдХрд░рдирд╛ рдкрдбрд╝рд╛: рдмреЛрд░реНрдб рдкрд░ рдПрдХ рдЬрдЧрд╣ рдереА , рд▓реЗрдХрд┐рди рдЪреАрдиреА рдиреЗ рдЬрдореНрдкрд░ рдХреЛ рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд╣рдордд рдирд╣реАрдВ рдЙрдард╛рдИ ... рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╡рд┐рдХрд▓реНрдк Atmel рд╕реНрдЯреВрдбрд┐рдпреЛ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ USBasp рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛! рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЪреБрдирддреЗ рд╕рдордп рднреА, рдЗрд╕реЗ AVR-Doper рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рдЬреЛ STK500 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ Atmel рд╕реНрдЯреВрдбрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдлреНрд▓реИрд╢ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди Atmel Studio рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ ... рдЙрджрд╛рд╕реА ... рдЕрдВрдд рдореЗрдВ рдореБрдЭреЗ рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИ, рдЗрд╕реЗ USBasp рдкрд░ рд╡рд╛рдкрд╕ рдлреНрд▓реИрд╢ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛

рдЫрд╡рд┐



ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ рдЕрдкрдиреЗ рдПрдЯреАрдЯреАрдиреА рдХреЛ рдлреНрд▓реИрд╢ рдХрд░рдиреЗ, рдПрдХ рдПрд▓рдИрдбреА рдмреНрд▓рд┐рдВрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдФрд░ рдЕрд░реБрдбрд┐рдиреЛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕реЗ рдХрд┐рддрдиреА рдЫреЛрдЯреА рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рдХрд╛ рдЖрдирдВрдж рдорд┐рд▓рд╛ред

рдореЗрдЯрд▓ рдбрд┐рдЯреЗрдХреНрдЯрд░


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

рдбрд┐рдЯреЗрдХреНрдЯрд░ рдореЗрдВ 2 рдореЛрдб рд╣реИрдВ:
1. рд╕рд░реНрдХрд┐рдЯ рдХреА рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВред рдЗрд╕реА рд╕рдордп, рдпрд╣ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдЖрдпрддрд╛рдХрд╛рд░ рд╕рдВрдХреЗрдд рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рджреЛрд▓рдиреЛрдВ рдХрд╛ рдЖрдпрд╛рдо рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛ (рд╣рдо рдЗрд╕ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдЖрдпрд╛рдо рдХреЛ рднреА рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ)ред
2. рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдбред рд╣рдо рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рдПрдХ рдЧреБрдВрдЬрдпрдорд╛рди рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХреЗрдд рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рдореЛрдб рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдо рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред

рдЙрд▓рдЭрд╛ рд╣реБрдЖ? - рдирд╣реАрдВ!
рдХреНрдпрд╛ рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдореЗрдореЛрд░реА рд▓реЗрдиреА рдЪрд╛рд╣рд┐рдП? - рдирд╣реАрдВ!
рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕реА рдореЗрдореЛрд░реА (2 KB рдлреНрд▓реИрд╢ + 128 рдмрд╛рдЗрдЯреНрд╕ рд░реИрдо) рд╣реИ? - рднреА рдирд╣реАрдВ!
рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ? рдЪрд▓реЛ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ - рд╣рдо рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ!

рдирддреАрдЬрддрди, рдлрд┐рдЯред

рдореБрдЦреНрдп рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛрдб
#include <avr/io.h>
#include <avr/interrupt.h>
#include "mySerial.cpp"

MySerial ms(&PORTB, &PINB, &DDRB, 0, &PORTB, &PINB, &DDRB, 1);

volatile uint16_t maxAdc = 0; //    (    )
volatile uint8_t dispMode = 0; // 0 -  , 1 -  
volatile uint8_t flags0 = 0; // [0] - need setRes
volatile uint16_t adcSource = 0;
//volatile bool needADC = false;
#define ADC_SOURCE_ARRAY_SIZE_POWER 5
#define ADC_SOURCE_ARRAY_SIZE (1 << ADC_SOURCE_ARRAY_SIZE_POWER)
uint16_t adcSourceArray[ADC_SOURCE_ARRAY_SIZE];
uint8_t adcSourceArrayLastWrited = 0;
void showVal(void);

ISR(ADC_vect){
	//adcSourceArrayLastWrited++;
	if(++adcSourceArrayLastWrited >= ADC_SOURCE_ARRAY_SIZE)
		adcSourceArrayLastWrited = 0;
	adcSourceArray[adcSourceArrayLastWrited] = ADCL | (ADCH << 8);
	uint16_t adcSourceTmp = 0;
	for(uint8_t i = 0; i < ADC_SOURCE_ARRAY_SIZE; i++)
		adcSourceTmp += adcSourceArray[adcSourceArrayLastWrited];
	adcSource = (adcSourceTmp >> ADC_SOURCE_ARRAY_SIZE_POWER);
	//adcSource = ADCL | (ADCH << 8);
	//needADC = false;
}

volatile uint8_t pinaChanged = 0;
volatile uint8_t tim0_ovf_counter = 0;
//uint32_t ticks = 0;
volatile uint16_t ticks10ms = 0;
//volatile uint16_t ticks = 0;
ISR(TIM0_OVF_vect)
{		
	//ticks++;
	//if(255 == tim0_ovf_counter++){ // ticks every 65.5 ms
	if(39 == (tim0_ovf_counter++)){ // ticks every 10 ms
		tim0_ovf_counter = 0;
		ticks10ms++;
		if(pinaChanged > 0)
			pinaChanged--;
	}
}

uint16_t dist16(uint16_t lo, uint16_t hi){
	return (lo <= hi) ? (hi - lo) : (0xFFFF - lo + hi);
}
/*void delayTicks(uint16_t val){
	uint16_t tim0_ovf_counter0 = tim0_ovf_counter;
	while(dist16(tim0_ovf_counter0, tim0_ovf_counter) < val)
		showVal();
}*/
void delay10ms(uint16_t val){
	uint16_t ticks10ms0 = ticks10ms;
	while(dist16(ticks10ms0, ticks10ms) < val)
		showVal();
}

void showVal(void){
	ms.sendByte(adcSource >> 2);
	switch(dispMode){
		case 0:
			OCR0A = adcSource >> 2;
		break;
		case 1:
			uint16_t maxAdcPlus = maxAdc + 2;
			uint16_t dispVal = (maxAdcPlus > adcSource) ? ((maxAdcPlus - adcSource)) : 0;
			dispVal <<= 4;
			if(dispVal > 255)
				dispVal = 255;
			OCR0A = dispVal;
		break;
	}
}

void setRes(void)
{
	dispMode = 0;
	uint16_t maxOCR = 0;
	maxAdc = 0;
	for(uint16_t curOCR = 35; curOCR < 50; curOCR++){
		OCR1A = curOCR;
		OCR1B = (curOCR >> 1);
		//uint32_t ticks0 = ticks;
		//uint16_t ticks0 = ticks;		
		//while(dist16(ticks0, ticks) < 20)
		//	showVal();
		delay10ms(30);
		if(adcSource > maxAdc){
			maxAdc = adcSource;
			maxOCR = curOCR;
		}
	}
	OCR1A = maxOCR;
	OCR1B = (maxOCR >> 1);
	dispMode = 1;
}

ISR(PCINT0_vect)
{	
	if(pinaChanged > 0)
		return;
	pinaChanged = 5;
	if(0 == (PINA & (1 << 7)))
		flags0 |= 1;
}


int main(void)
{
	// init PWM:
	DDRB |= 4;  // OC0A as output
	//TIMSK0 |= 7; //  TIM0_OVF_vect, TIM0_COMPA_vect, TIM0_COMPB_vect
	TIMSK0 |= 1; //  TIM0_OVF_vect
	TCCR0B |= 1; // no prescaling. OVF  256  (3.91 )
	//TCCR0B |= 2; // clk/8
	//TCCR0B |= 3; // clk/64
	//TCCR0B |= 5; // clk/1024. OVF  262  (3.815 )
	TCCR0A |= (3 | (1 << 7)); //WGM0[2:0] = 3 - fawt PWM mode. bit7 -  
	//OCR0A = 150;
	//OCR0B = 100;
	// :init PWM
	
	// init ADC:
	//ADMUX |= (1 << 7); // internal 1.1V reference. Comment this to use VCC as reference
	//ADMUX |= (1 << 3) | 1; // MUX[5:0] = 001001. Res = ADC0 - ADC1. Gain = 20
	ADMUX |= (1 << 3); // MUX[5:0] = 001000. Res = ADC0 - ADC1. Gain = 1
	ADCSRA |= ((1 << 7) // enable ADC
		| (1 << 5) // ADC Auto Trigger Enable.  
		| (1 << 6) //  1 
		| (1 << 3)   // ADC interrupt enable
		| (1 << 2)); // prescaller = 16 ( 50-200 kHz)
	// :init ADC
	
	// init 16-bit timer: // pin7 = MOSI = PA6 = OC1A
	//DDRA |= (1 << 6); // OC1A as output
	DDRA |= (1 << 5); // OC1B as output
	//TCCR1A |= (1 << 6); // Toggle OC1A/OC1B on Compare Match
	TCCR1A |= (1 << 5) // Clear OC1B on Compare Match, set OC1B at BOTTOM (non-inverting mode)
		| (3); // set WGM10 and WGM11 // WGM1[3:0] = 1111 - Fast PWM, TOP = OCR1A.	
//	TCCR1A |= (1 << 6) | (1 << 7) // Set OC1A on Compare Match (Set output to high level).
//			| (1 << 5); // Clear OC1B on Compare Match	(Set output to low level)
	TCCR1B |= 1 // no prescalling
			| (1 << 3) | (1 << 4); // set WGM12 and WGM13
	//TIMSK1 |= (1 << 2) | (1 << 1) | 1; // enable all interrupts
	OCR1B = 21;
	OCR1A = 42;
	//for(;;){;};
	// :init 16-bit timer
	
	// init button:
	PORTA |= (1 << 7); //     6- . PA7 = PCINT7
	GIMSK |= (1 << 4); // Pin Change Interrupt Enable 0
	PCMSK0 |= (1 << 7); //   PCINT7
	// :init button
	
	sei();
	flags0 = 1; //   22       !
	while(1){
		showVal();
		//ms.sendByte(0x99);
		if(0 != (1 & flags0)){
			setRes();
			flags0 &= ~1;
		}
	}
}


рдФрд░ mySerial.cpp
#include <avr/io.h>
#include <avr/interrupt.h>

class MySerial{
	public:
	volatile uint8_t *dataPort;
	volatile uint8_t *dataPin;
	volatile uint8_t *dataDDR;
	volatile uint8_t *clockPort;
	volatile uint8_t *clockPin;
	volatile uint8_t *clockDDR;
	uint8_t dataPinMask, clockPinMask;
	uint8_t rBit,
		lastState, // (dataPin << 1) | clockPin
		inData;
	// MySerial ms(&PORTD, &PIND, &DDRD, 2, &PORTD, &PIND, &DDRD, 3);
	MySerial(
		volatile uint8_t *_dataPort,
		volatile uint8_t *_dataPin,
		volatile uint8_t *_dataDDR,
		uint8_t _dataPinN,
		volatile uint8_t *_clockPort,
		volatile uint8_t *_clockPin,
		volatile uint8_t *_clockDDR,
		uint8_t _clockPinN
	){
		rBit = 255;
		lastState = 3;
		inData = 0;
		dataPort = _dataPort;
		dataPin = _dataPin;
		dataDDR = _dataDDR;
		dataPinMask = (1 << _dataPinN);
		clockPort = _clockPort;
		clockPin = _clockPin;
		clockDDR = _clockDDR;
		clockPinMask = (1 << _clockPinN);
	}
	void dataZero() {
		*dataPort &= ~dataPinMask; //digitalWrite(pinData, 0);
		*dataDDR |= dataPinMask;   //pinMode(pinData, OUTPUT);
	}
	void dataRelease() {
		*dataDDR &= ~dataPinMask; //pinMode(pinData, INPUT);
		*dataPort |= dataPinMask; //digitalWrite(pinData, 1);
	}
	void clockZero() {
		*clockPort &= ~clockPinMask; //digitalWrite(pinClock, 0);
		*clockDDR |= clockPinMask;  //pinMode(pinClock, OUTPUT);
	}
	void clockRelease() {
		*clockDDR &= ~clockPinMask; //pinMode(pinClock, INPUT);
		*clockPort |= clockPinMask; //digitalWrite(pinClock, 1);
	}
	void pause() {
		//delay(v * 1);
		//unsigned long time = micros();
		//while(v-- > 0)
		for(uint16_t i = 0; i < 250; i++)
			__asm__ __volatile__(
				"nop"
			);
		//time = micros() - time;
		//LOG("Paused "); LOG(time); LOGLN("us");
	}
	void sendByte(uint8_t data){
		//LOG("Sending byte: "); LOGLN(data);
		//   data  clock = 1:
		dataRelease();
		clockRelease();
		pause();
		dataZero();
		pause();
		
		//LOGLN("Going to loop...");
		for(uint8_t i = 0; i < 8; i++){
			clockZero();
			pause();
			if( 0 == (data & (1 << 7)) )
				dataZero();
			else
				dataRelease();
			//LOG("Sending bit "); LOGLN((data & (1 << 7)));
			pause();
			clockRelease();
			pause();

			data = data << 1;
		}
		
		//   data  clock = 1:
		dataZero();
		pause();
		dataRelease();
		pause();
	}	
	void tick(){
		//uint8_t curState = (digitalRead(pinData) << 1) | digitalRead(pinClock);
		dataRelease();
		clockRelease();
		uint8_t curState = 0;
		if(0 != (*dataPin & dataPinMask))
			curState |= 2;
		if(0 != (*clockPin & clockPinMask))
			curState |= 1;

		//LOGLN(curState);
		if((3 == lastState) && (1 == curState)) //  
		rBit = 7;
		if(255 != rBit)
		if( (0 == (lastState & 1)) && (1 == (curState & 1)) ) { //    clock
			//LOG("Getted bit "); LOGLN((curState >> 1));
			if( 0 == (curState >> 1) )
				inData &= ~(1 << rBit);
			else
				inData |= (1 << rBit);
			rBit--;
		}
		
		if( (1 == lastState) && (3 == curState) ){ //  
			//LOG("Recieved byte: "); LOGLN(inData);
			rBit = 255;
			//delay(5000);
		}
		lastState = curState;
	}
};


рдФрд░ рди рдХреЗрд╡рд▓ рд╡рд╣ рдлрд┐рдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрдкрд▓рдмреНрдз 2048 рд╕реЗ рдлреНрд▓реИрд╢ рдореЗрдВ рдХреЗрд╡рд▓ 1044 рдмрд╛рдЗрдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИ! рдФрд░ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА (MySerial) рднреА рднреЗрдЬрддрд╛ рд╣реИ! рдореИрдВ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ (рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ) рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рд╕рдордЭрд╛рдКрдВрдЧрд╛:

рдЫрд╡рд┐


  • рддрд╛рд░ рдХрд╛ рдПрдХ рддрд╛рд░ рдзрд╛рддреБ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдХрд╛ рдПрдХ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рддрд╛рд░ рд╣реИ;
  • рдмреНрд░реЗрдбрдмреЛрд░реНрдб рдХреЗ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рдмрдЯрди - рдЕрдиреБрдирд╛рдж рдкрд╣рдЪрд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ;
  • рдПрдХ рдбрд╛рдпреЛрдб + рдЕрд╡рд░реЛрдзрдХ + рд╕рдВрдзрд╛рд░рд┐рддреНрд░ рдПрдХ рдЖрдпрд╛рдо рдбрд┐рдЯреЗрдХреНрдЯрд░ рд╣реИ;
  • рдЧреНрд░реАрди рд╢реЙрд▓ - рдЙрд╕ рдкрд░ ATtiny24A рдХреЗ рд╕рд╛рде рдПрдбрд╛рдкреНрдЯрд░;
  • рдПрдХ рдЕрд╡рд░реЛрдзрдХ рдФрд░ рдПрдХ рдмрдбрд╝реЗ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрд▓рдИрдбреА (рдпрд╣ рдПрдХ рдкреНрд░рд╛рдЪреАрди рдорд╛рдЗрдХреНрд░реЛрдореАрдЯрд░ рд╣реИ) - рдкреАрдбрдмреНрд▓реВрдПрдо рд╕рдВрдХреЗрдд;
  • Arduino рдиреИрдиреЛ рджреЛ рддрд╛рд░реЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ - рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рд╕реАрд╡рд░ред

рдпреЛрдЬрдирд╛:
рдЫрд╡рд┐
  • рдПрд▓ 1, рд╕реА 1 - рдСрд╕рд┐рд▓реЗрдЯрд░реА рд╕рд░реНрдХрд┐рдЯ;
  • рдбреА 1, рд╕реА 2, рдЖрд░ 2 - рдЖрдпрд╛рдо рдбрд┐рдЯреЗрдХреНрдЯрд░ред

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдмрд╣реБрдд рдХрдо рд╣реЛ рдЧрдИред 7 рд╕реЗрдВрдЯреАрдореАрдЯрд░ рд╕реЗ 0.5 рдХрд┐рд▓реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╡рдЬрди рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕рд┐рдХреНрдХрд╛ рдЖрдо рддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рдХреБрдВрдбрд▓ рдХреЗ рдЕрдВрджрд░ рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:


рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреЙрдЗрд▓ рдореЗрдВ рдзрд╛рддреБ рдХреА рд╡рд╕реНрддреБ рдХреЛ рд░рдЦрдиреЗ рдкрд░ рдПрдбреАрд╕реА рд░реАрдбрд┐рдВрдЧ (рд╕реНрдХреНрд░реАрди рдкрд░) рдЧрд┐рд░рддреА рд╣реИ рдФрд░ рдПрдордХреЗ рд╕рдВрдХреЗрддрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рдВрдЯ рдмрдврд╝рд╛рддрд╛ рд╣реИред

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


"рдПрдЯреНрдЯреАрдиреА рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛" рдХрд╛ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рд╕рдбрд╝рдХ рдкрд░ рд░реЗрдХ рдЙрдореНрдореАрдж рд╕реЗ рднреА рдХрдо рдерд╛ред рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдП рдЧрдП рддрдереНрдп рдХреЗ рдХрд╛рд░рдг (рдХрд┐ рдФрд░ рднреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА STM8S103F3P6 рд╕рд╕реНрддрд╛ рд╣реИ), рдореБрдЭреЗ AVR рдкрд░ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рдХреЗрд╡рд▓ рджреЛ рдХрд╛рд░рдг рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ: рд╕рд╛рджрдЧреА рдФрд░ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд▓реЗрдЦрдиред рдЦреИрд░, рд╢рд╛рдпрдж рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдВрдЯ рдХрд╛ рджреЛрдЧреБрдирд╛ рднреА рддрд░реНрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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


All Articles