рдЙрдкрд▓рдмреНрдз рднрд╛рдЧреЛрдВ рд╕реЗ рдПрдХ рд▓реЗрдЬрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХреЛрдбрд╛рдВрддрд░рдг

UPD: DAC рд╕реЗ GitHub рдореЗрдВ рдмреЛрд░реНрдб рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реА рдЧрдИрдВ



рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд▓реЗрдЬрд░ рд╣рд╛рд░реНрдк рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рд▓реЗрдХрд┐рди рдЕрдм рддрдХ рдореИрдВрдиреЗ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ - рдПрдХ рдРрд╕рд╛ рдЙрдкрдХрд░рдг рдЬрд┐рд╕реЗ рд▓реЗрдЬрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЬреЛ рдХрд┐ ILDA рдкреНрд░рд╛рд░реВрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рджрд░реНрдЬ рдПрдХ рд▓реЗрдЬрд░ рд╡рд┐рднрд┐рдиреНрди рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬреЛ рдЧреИрд▓реНрд╡реЗрдиреЛрдореАрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдЬрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ (рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ "рдЧреИрд▓реНрд╡реЛ рд╕реНрдХреИрдирд░" рдХрд╛ рд░реВрд╕реА рдореЗрдВ рд╕рдВрдпреЛрдЬрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП) рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рд╕реНрддреЗ рдереЛрдбрд╝реЗ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рд╛рдЙрдВрдб рдХрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░ рдореБрдЭреЗ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд╛рдпрддреНрдд рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХреЗред







рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдореЗрд░реЗ рд▓реЗрдЬрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд░ рдореЗрдВ рдХреНрдпрд╛ рд╣реИрдВред рд╕рднреА рднрд╛рдЧреЛрдВ рдХреА рд▓рд╛рдЧрдд рд▓рдЧрднрдЧ 8000 рд░реВрдмрд▓ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЖрдзреЗ рд╕реЗ рдЕрдзрд┐рдХ рдПрдХ 70mW рд▓реЗрдЬрд░ рдореЙрдбреНрдпреВрд▓ рд╣реИред

  1. рдЧреИрд▓реНрд╡реЗрдиреЛрдореАрдЯрд░ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХреНрд╕ / рд╡рд╛рдИ рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЗрдЬрд░ рдмреАрдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░
  2. 532nm 70mW 5V рд▓реЗрдЬрд░ рдореЙрдбреНрдпреВрд▓ рдбреНрд░реИрдЧрди рд▓реЗрдЬрд░ SGLM70
  3. рдЯреЗрдХреНрд╕рд╛рд╕ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреНрд╕ рд╕реНрдЯреЗрд▓рд╛рд░рд┐рд╕ рд▓реЙрдиреНрдЪрдкреИрдб
  4. рдШрд░ рдХрд╛ рдмрдирд╛ AD7249BRZ DAC рдмреЛрд░реНрдб
  5. рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐




рд▓реЛрд╣рд╛



рдореЗрд░рд╛ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдЯреЗрд▓рд╛рд░рд┐рд╕ рд▓реЙрдиреНрдЪрдкреИрдб рдХреЛ "рдорд╕реНрддрд┐рд╖реНрдХ" рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рддреЗрдЬрд╝ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ USB рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдкреЛрд░реНрдЯ рд╣реИ) рдФрд░ рдПрдирд╛рд▓реЙрдЧ рдбрд┐рд╡рд╛рдЗрд╕реЗрд╕ AD7249BRZ рд╕реАрд░рд┐рдпрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде 12-рдмрд┐рдЯ рдбреНрдпреВрд▓-рдЪреИрдирд▓ DAC рд╣реИред рдмреАрдо рд╡рд┐рдЪрд▓рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, -5 рд╕реЗ 5 рд╡реЛрд▓реНрдЯ рдХреА рд░реЗрдВрдЬ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░ рдЗрдирдкреБрдЯ рдкрд░ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╕рд┐рдЧреНрдирд▓ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред DAC AD7249BRZ рдХреЗрд╡рд▓ рдЗрд╕ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ (рд╕рд╛рде рд╣реА 0 рд╕реЗ 5 рд╡реЛрд▓реНрдЯ рдФрд░ 0 рд╕реЗ 10 рд╡реЛрд▓реНрдЯ рддрдХ)ред рдЙрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдИрдЧрд▓ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмреЛрд░реНрдб рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛ рджрд┐рдпрд╛ рдЬреЛ рд╕реНрдЯреЗрд▓рд╛рд░рд┐рд╕ рд▓реЙрдиреНрдЪрдкреИрдб рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред рдмреЛрд░реНрдб рдХреЛ рджреНрд╡рд┐рдзреНрд░реБрд╡реА рд╢рдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ ICL7660 рдЪрд┐рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЧреИрд▓реНрд╡реЗрдиреЛрдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИ рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ рдЗрдХрд╛рдИ (15V) рдХреЗ рдПрдХрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд░реИрдЦрд┐рдХ LM317 рдирд┐рдпрд╛рдордХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдмрд╛рдж рдореЗрдВ рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓реЗрдЬрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрд┐рдЬрд▓реА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП - рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрдбрд╝реЗ рд░реЗрдбрд┐рдПрдЯрд░ (рд╡реАрдбрд┐рдпреЛ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓рд╛) рдХреЗ рд╕рд╛рде LM-ka рдСрдкрд░реЗрд╢рди рдХреЗ 10 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж, рдпрд╣ 70 рдбрд┐рдЧреНрд░реА рддрдХ рдЧрд░реНрдо рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд░реЗрдбрд┐рдПрдЯрд░ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдмрд╕ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕реЗ рдЧрд░реНрдо рд╣реЛ рдЧрдпрд╛ рдФрд░ рдУрд╡рд░рд╣реАрдЯрд┐рдВрдЧ рд╕реЗ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ (рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд▓реЗрдЬрд░ рдореЙрдбреНрдпреВрд▓, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореИрдВрдиреЗ рд╢реБрд░реВ рдореЗрдВ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЬрд▓ рдЧрдпрд╛ рдФрд░ рд▓рдЧрднрдЧ рдИрдВрдЯреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдбрд╛рд▓ рджреА, рдЯреАред .k рдЬрдм рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдКрд░реНрдЬрд╛рд╡рд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рдпрд╣ рдЪрд╛рд▓реВ рдирд╣реАрдВ рд╣реБрдЖ - рдЬреИрд╕рд╛ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдЬрдм рддрдХ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрдХрд┐рд░рд┐рдЯ рдардВрдбрд╛ рд╣реЛ рдЧрдпрд╛)ред



рд▓реЗрдЬрд░ рдореЙрдбреНрдпреВрд▓ рдиреЗ рд╢реБрд░реВ рдореЗрдВ рдЯреАрдЯреАрдПрд▓-рдореЙрдбреНрдпреВрд▓реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЬрдм рдореИрдВ рд▓реЗрдЬрд░ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВрдиреЗ рд╕рд╣реА рд╕рдордп рдкрд░ рдмреАрдо рдХреЛ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрд╣реЗ рдХреЗ рд╕рд╛рде рд▓реЗрдЬрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд▓рдЧрднрдЧ рд╕рднреА рдЪреАрдиреА рд▓реЗрдЬрд░ рдореЙрдбреНрдпреВрд▓ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд╕рд░рд▓ рд╣реИрдВ, рдФрд░ LM358 рдкрд░рд┐рдЪрд╛рд▓рди рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдкрд░ рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рдЕрдкрдиреЗ рдкреИрд░реЛрдВ рдХреЛ 3 рдФрд░ 4 (рдХреНрд░рдорд╢рдГ рдиреЙрдирд╡реЗрдЬрд┐рдВрдЧ рдЗрдирдкреБрдЯ рдФрд░ рдЧреНрд░рд╛рдЙрдВрдб) рдореЗрдВ рдорд┐рд▓рд╛рддреЗ рд╣реБрдП, рдкрд╣рд▓реЗ рджреНрд╡рд┐рдзреНрд░реБрд╡реА рдЯреНрд░рд╛рдВрдЬрд┐рд╕реНрдЯрд░ 2N4401 рдХреЗ рдПрдорд┐рдЯрд░ рдФрд░ рдХрд▓реЗрдХреНрдЯрд░ рдЬреЛ рднрд░ рдореЗрдВ рдЖрдП рдереЗ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореБрдЭреЗ рдЯреНрд░рд╛рдВрдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрдХреЗрдд рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдХреЗ рд▓реЗрдЬрд░ рдХреЛ рдореЙрдбреНрдпреВрд▓реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛:



рд╕рдВрд╢реЛрдзрд┐рдд рд▓реЗрдЬрд░ рдореЙрдбреНрдпреВрд▓


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



рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдмреЛрд░реНрдб рдХреЗ рдбрд░рд╛рд╡рдиреЗ рдЪрд┐рддреНрд░ рд╕реЗ рдбрд░рддреЗ рдирд╣реАрдВ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрдХреНрд░рд┐рдЪрд┐рдЯ рдХреЗ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдкрд░ рдкрдЯреНрдЯрд┐рдХрд╛ рдХреЗ рд╕рд╛рде рд╣реИ, рдЬреЛ рдПрдерд┐рд▓ рдЕрд▓реНрдХреЛрд╣рд▓ рд╕реЗ рдкреЛрдВрдЫрдиреЗ рдХреЗ рдмрд╛рдж рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡реИрд╕реЗ, рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдЗрд╕реЛрдкреНрд░реЛрдкрд╛рдЗрд▓ рдЕрд▓реНрдХреЛрд╣рд▓ рдХреЗ рд╕рд╛рде рдлреНрд▓рдХреНрд╕ рдХреЛ рдзреЛрдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдРрд╕реА рд▓рдХреАрд░реЗрдВ рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдХреМрди рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдХрдиреЗрдХреНрдЯрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рдмреЛрд░реНрдб рдкрд░ рдПрдХ рдХреБрдВрдбреА рдХреЗ рд╕рд╛рде - рдпреЗ рдореЛрд▓реЗрдХреНрд╕ рдХрдиреЗрдХреНрдЯрд░ (22-23-2021 рд╕реЙрдХреЗрдЯ, 22-01-3027 рдкреНрд▓рдЧ, рдкреНрд▓рдЧ рдХреЗ рд▓рд┐рдП 08-50-0114 рдкрд┐рди) рд╣реИрдВ, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдЧреНрдЧреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрджреЗрд╢ рджрд┐рдпрд╛, рдЪреВрдВрдХрд┐ рдЪреАрдирд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╡реЗ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдорд╣рдВрдЧреЗ рд╣реИрдВред



рдореБрд▓рд╛рдпрдо



рдЗрд╕ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрд╣реЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рднрд╛рдЧ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ - рд╕реНрдЯреЗрд▓рд╛рд░рд┐рд╕ рд▓реЙрдиреНрдЪрдкреИрдб рдХреЗ рд▓рд┐рдП рдкреАрд╕реА рдФрд░ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ 32 рдмрд┐рдЯреНрд╕ рдХреЗ рдЕрдкрдиреЗ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдПрдХ рдпреВрдПрд╕рдмреА рдмрд▓реНрдХ рдЙрдкрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдирдореВрдирд╛ рдкреНрд░рд╛рд░реВрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реИ:

typedef struct { unsigned x:12; //  X unsigned rx:4; //  (/ ) unsigned y:12; //  Y unsigned ry:4; //   } sample_t;
      
      





рдбрд┐рд╡рд╛рдЗрд╕ 512 рдмрд╛рдЗрдЯреНрд╕ рдЖрдХрд╛рд░ рдХреЗ USB рдмрдлрд╝рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рдкреАрд╕реА рд╕реЗ рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрддрдиреА рдЧрддрд┐ рд╕реЗ рдХрд┐ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдпрд╛ рдЦрд╛рд▓реА рдмрдлрд░ рдХрд╛ рдХрд╛рд░рдг рди рд╣реЛред рдкреНрд░рдпреБрдХреНрдд рдЧреИрд▓реНрд╡реЗрдиреЛрдореАрдЯрд░ рдХреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 20,000 рдЕрдВрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирдореВрдирд╛ рдЖрд╡реГрддреНрддрд┐ рд╣реИред USB рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдореЗрдВ, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЧрддрд┐ рдХреЛ SysCtlDelay



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ SysCtlDelay



ред рдорд╛рди рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдХреЗ, рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ ILDA рдкрд░реАрдХреНрд╖рдг рдЪрд┐рддреНрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛ:



рдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдкрд░ рд╣рд░реА рдПрд▓рдИрдбреА 20,000 рдирдореВрдиреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдлрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЭрдкрдХреА рд▓реЗрддреА рд╣реИред рдпрд╣реА рд╣реИ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1 рдмрд╛рд░ рдареАрдХ рд╕реЗ рдмреНрд▓рд┐рдВрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред



рдкреАрд╕реА рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ playilda.c



рдкреИрдХреЗрдЬ рд╕реЗ playilda.c



рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдм рдХреБрдЫ рд╡рд╣рд╛рдВ рд╕реЗ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ JACK рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, Stellarb Launchpad рдореЗрдВ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП libusb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреАрд╕реА рд╕реНрд░реЛрдд рдХреЛрдб
 #include <stdlib.h> #include <sys/time.h> #include <time.h> #include <stdio.h> #include <string.h> #include <libusb-1.0/libusb.h> #include <iostream> #include <string> #include <vector> #define MAGIC 0x41444C49 static inline uint16_t swapshort(uint16_t v) { return (v >> 8) | (v << 8); } float scale = 1.0; typedef struct { uint32_t magic; uint8_t pad1[3]; uint8_t format; char name[8]; char company[8]; uint16_t count; uint16_t frameno; uint16_t framecount; uint8_t scanner; uint8_t pad2; } __attribute__((packed)) ilda_hdr; #define BLANK 0x40 #define LAST 0x80 typedef struct { int16_t x; int16_t y; int16_t z; uint8_t state; uint8_t color; } __attribute__((packed)) icoord3d; typedef struct coord3d { int16_t x; int16_t y; int16_t z; uint8_t state; coord3d(int16_t x, int16_t y, int16_t z, uint8_t state) : x(x), y(y), z(z), state(state) { } } coord3d; typedef struct { std::vector<coord3d> points; int position; } frame; frame rframe; int subpos; int divider = 1; int loadildahdr(FILE *ild, ilda_hdr & hdr) { if (fread(&hdr, sizeof(hdr), 1, ild) != 1) { std::cerr << "Error while reading header" << std::endl; return -1; } if (hdr.magic != MAGIC) { std::cerr << "Invalid magic" << std::endl; return -1; } if (hdr.format != 0) { fprintf(stderr, "Unsupported section type %d\n", hdr.format); return -1; } hdr.count = swapshort(hdr.count); hdr.frameno = swapshort(hdr.frameno); hdr.framecount = swapshort(hdr.framecount); } int loadild(const std::string & file, frame & frame) { int i; FILE *ild = fopen(file.c_str(), "rb"); if (!ild) { std::cerr << "Cannot open " << file << std::endl; return -1; } ilda_hdr hdr; loadildahdr(ild, hdr); for (int f = 0; f < hdr.framecount; f++) { std::cout << "Frame " << hdr.frameno << " of " << hdr.framecount << " " << hdr.count << " points" << std::endl; icoord3d *tmp = (icoord3d*)calloc(hdr.count, sizeof(icoord3d)); if (fread(tmp, sizeof(icoord3d), hdr.count, ild) != hdr.count) { std::cerr << "Error while reading frame" << std::endl; return -1; } for(i = 0; i < hdr.count; i++) { coord3d point(swapshort(tmp[i].x), swapshort(tmp[i].y), swapshort(tmp[i].z), tmp[i].state); frame.points.push_back(point); } free(tmp); loadildahdr(ild, hdr); } fclose(ild); return 0; } short outBuffer[128]; int process() { frame *frame = &rframe; short *sx = &outBuffer[0]; short *sy = &outBuffer[1]; for (int frm = 0; frm < 64; frm++) { struct coord3d *c = &frame->points[frame->position]; *sx = 4095 - (2047 + (2048 * c->x / 32768)) * scale; *sy = (2047 + (2048 * c->y / 32768)) * scale; if(c->state & BLANK) { *sx |= 1 << 15; } else { *sx &= ~(1 << 15); } sx += 2; sy += 2; subpos++; if (subpos == divider) { subpos = 0; if (c->state & LAST) frame->position = 0; else frame->position = (frame->position + 1) % frame->points.size(); } } return 0; } int main(int argc, char **argv) { libusb_device_handle *dev; libusb_context *ctx = NULL; int ret, actual; ret = libusb_init(&ctx); if(ret < 0) { fprintf(stderr,"Couldn't initialize libusb\n"); return EXIT_FAILURE; } libusb_set_debug(ctx, 3); dev = libusb_open_device_with_vid_pid(ctx, 0x1cbe, 0x0003); if(dev == NULL) { fprintf(stderr, "Cannot open device\n"); return EXIT_FAILURE; } else printf("Device opened\n"); if(libusb_kernel_driver_active(dev, 0) == 1) { fprintf(stderr, "Kernel driver active\n"); libusb_detach_kernel_driver(dev, 0); } ret = libusb_claim_interface(dev, 0); if(ret < 0) { fprintf(stderr, "Couldn't claim interface\n"); return EXIT_FAILURE; } // To maintain our sample rate struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 2000000; memset(&rframe, 0, sizeof(frame)); if (loadild(argv[1], rframe) < 0) { fprintf(stderr, "Failed to load ILDA\n"); return EXIT_FAILURE; } while(1) { process(); if(nanosleep(&ts, NULL) != 0) fprintf(stderr, "Nanosleep failed"); ret = libusb_bulk_transfer(dev, (1 | LIBUSB_ENDPOINT_OUT), (unsigned char*)&outBuffer, 256, &actual, 0); if(ret != 0 || actual != 256) fprintf(stderr, "Write error\n"); } libusb_release_interface(dev, 0); libusb_close(dev); libusb_exit(ctx); return 0; }
      
      







main()



рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдиреИрдиреЛрд╕реНрд▓реАрдк рднреА рдЙрд╕ рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдирдпрд╛ рдбреЗрдЯрд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрдВрдЯреНрд░реЛрд▓рд░ рдлрд░реНрдорд╡реЗрдпрд░ рдХрд╛ рдкреВрд░рд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб GitHub рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред



рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛



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



All Articles