ESP32 рдкрд░ рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреЗрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ: рдбреНрд░рд╛рдЗрд╡, рдмреИрдЯрд░реА, рдзреНрд╡рдирд┐

рдЫрд╡рд┐


рдкреНрд░рд╛рд░рдВрдн: рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдгрд╛рд▓реА, рдЗрдирдкреБрдЯ, рдкреНрд░рджрд░реНрд╢рди ред

рднрд╛рдЧ 4: рдбреНрд░рд╛рдЗрд╡


Odroid Go рдореЗрдВ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдПрд╕рдбреА рдХрд╛рд░реНрдб рд╕реНрд▓реЙрдЯ рд╣реИ, рдЬреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ (рд╕реНрдкреНрд░рд╛рдЗрдЯ, рд╕рд╛рдЙрдВрдб рдлрд╛рдЗрд▓реНрд╕, рдлреЛрдВрдЯ) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдФрд░ рд╕рдВрднрд╡рддрдГ рдЧреЗрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреАред

рдХрд╛рд░реНрдб рд░реАрдбрд░ рдПрд╕рдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдИрдбреАрдПрдл рдПрд╕рдкреАрдЖрдИ рдХреЙрд▓ рдХреЛ рдЕрдореВрд░реНрдд рдХрд░рдХреЗ рдФрд░ рдлреЛрдкреЗрди , рдлрд╝реНрд░реЗрдб рдФрд░ рд░рд╛рдЗрдЯрд╛рдЗрдЯ рдЬреИрд╕реЗ рдорд╛рдирдХ рдкреЙрд╕рд┐рдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд╕рдбреА рдХрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ ред рдпрд╣ рд╕рдм FatFs рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ , рдЗрд╕рд▓рд┐рдП SD рдХрд╛рд░реНрдб рдХреЛ рдорд╛рдирдХ FAT рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдИрдПрд╕рдкреА-рдЖрдИрдбреАрдПрдл рдХрд╛ рд╕рдВрд╢реЛрдзрди


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

рд▓рд╛рдЗрди 303 esp-idf / рдШрдЯрдХреЛрдВ / рдбреНрд░рд╛рдЗрд╡рд░ / sdspi_host.c рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ :

// Initialize SPI bus
esp_err_t ret = spi_bus_initialize((spi_host_device_t)slot, &buscfg,
    slot_config->dma_channel);
if (ret != ESP_OK) {
    ESP_LOGD(TAG, "spi_bus_initialize failed with rc=0x%x", ret);
    //return ret;
}

рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрднреА рднреА рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдЦреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм ESP32 рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдиреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдКрдкрд░ рдкреНрд░рдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рд╛рд░рдВрдн




рд╣рдореЗрдВ рдЖрдИрдбреАрдПрдл рдХреЛ рдмрддрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдИрдПрд╕рдкреА 32 рдкрд┐рди рдорд╛рдЗрдХреНрд░реЛрдПрд╕рдбреА рд░реАрдбрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрд╕рдкреАрдЖрдИ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реАрдбрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдиреЛрдЯ VSPI.XXXX рдХреЛ рдлрд┐рд░ рд╕реЗ рдЖрд░реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рд╣рдо рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ESP32 рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдкрд░реНрдХ рдирдВрдмрд░реЛрдВ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд░рдВрднреАрдХрд░рдг рдПрд▓рд╕реАрдбреА рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рдПрд╕рдкреАрдЖрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрд╕рдбреАрдЖрдИ рдмрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝реЗ рдПрд╕рдбреА рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП sdspi_slot_config_t рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрд░реНрдХ рдирдВрдмрд░реЛрдВ рдФрд░ рдХрд╛рд░реНрдб рдорд╛рдЙрдВрдЯ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдлрдЯреАрдПрдлрдПрд╕ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред

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

рдХрд╛ "/ sdcard" рдкреИрд░рд╛рдореАрдЯрд░ рдПрд╕рдбреА рдХрд╛рд░реНрдб рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╛рдЙрдВрдЯ рдмрд┐рдВрджреБ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдПрд╕рдбреА рдХрд╛рд░реНрдб рдореЗрдВ "test.txt" рдирд╛рдордХ рдПрдХ рдлрд╛рдЗрд▓ рд╣реИ, рддреЛ рд╣рдо рдЬрд┐рд╕ рдкрде рд╕реЗ рдЗрд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ "/sdcard/test.txt" рд╣реЛрдЧрд╛ред

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

8.3, . , fopen . make menuconfig, , 8.3.



рдореИрдВрдиреЗ Aseprite (рднрдпрд╛рдирдХ) рдореЗрдВ 64x64 рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрдирд╛рдпрд╛ рдЬреЛ рдХреЗрд╡рд▓ рджреЛ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рд▓рд╛ (рдкрд┐рдХреНрд╕реЗрд▓ рдЕрдХреНрд╖рдо) рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдлреЗрдж (рдкрд┐рдХреНрд╕реЗрд▓ рд╕рдХреНрд╖рдо)ред Aseprite рдХреЗ рдкрд╛рд╕ RGB565 рд░рдВрдЧ рдХреЛ рдмрдЪрд╛рдиреЗ рдпрд╛ рдХрдЪреНрдЪреЗ рдмрд┐рдЯрдореИрдк рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА рдмрд┐рдирд╛ рд╕рдВрдкреАрдбрд╝рди рдФрд░ рдЫрд╡рд┐ рд╣реЗрдбрд░ рдХреЗ), рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА PNG рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ред

рдлрд┐рд░, ImageMagick рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП , рдореИрдВрдиреЗ рдбреЗрдЯрд╛ рдХреЛ PPM рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рдЫрд╡рд┐ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдХрдЪреНрдЪреЗ рдЕрд╕рдореНрдкреАрдбрд┐рдд рдбреЗрдЯрд╛ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЫрд╡рд┐ рдХреЛ рдЦреЛрд▓рд╛, рд╣реЗрдбрд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ 24-рдмрд┐рдЯ рд░рдВрдЧ рдХреЛ 16-рдмрд┐рдЯ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛, рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ 0x000000 рд╕реЗ 0x0000 рддрдХ рд╣рдЯрд╛ рджрд┐рдпрд╛ , рдФрд░ рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ 0xFFFFFF рд╕реЗ 0xFFFF рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдпрд╣рд╛рдВ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 0x0000 рдФрд░ 0xFFFF рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред

рдХрдЪреНрдЪреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

FILE* spriteFile = fopen("/sdcard/key", "r");
assert(spriteFile);

uint16_t* sprite = (uint16_t*)malloc(64 * 64 * sizeof(uint16_t));

for (int i = 0; i < 64; ++i)
{
	for (int j = 0; j < 64; ++j)
	{
		fread(sprite, sizeof(uint16_t), 64 * 64, spriteFile);
	}
}

fclose(spriteFile);

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХрдЪреНрдЪреА рдмрд╛рдЗрдЯ рд╡рд╛рд▓реА рдХреБрдВрдЬреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдлрд░ рдореЗрдВ рдкрдврд╝рддреЗ рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓реЛрдб рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдПрдХ рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

int spriteRow = 0;
int spriteCol = 0;

for (int row = y; row < y + 64; ++row)
{
	spriteCol = 0;

	for (int col = x; col < x + 64; ++col)
	{
		uint16_t pixelColor = sprite[64 * spriteRow + spriteCol];

		if (pixelColor != 0)
		{
			gFramebuffer[row * LCD_WIDTH + col] = color;
		}

		++spriteCol;
	}

	++spriteRow;
}

рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╛рд░ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рд╕рдлреЗрдж рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдмрдЯрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рд░рдВрдЧ рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдХрд╛рд▓рд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдорд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдЖрдХрд░реНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред


рдореЗрд░реЗ рдлрд╝реЛрди рдХрд╛ рдХреИрдорд░рд╛ рд░рдВрдЧреЛрдВ рдХреЛ рдмрд╣реБрдд рд╡рд┐рдХреГрдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЙрд╕рдХреЗ рд╣рд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

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

if (input.menu)
{
	const char* snapFilename = "/sdcard/framebuf";

	ESP_LOGI(LOG_TAG, "Writing snapshot to %s", snapFilename);

	FILE* snapFile = fopen(snapFilename, "wb");
	assert(snapFile);

		fwrite(gFramebuffer, sizeof(gFramebuffer[0]), LCD_WIDTH * LCD_HEIGHT, snapFile);
	}

	fclose(snapFile);
}

рдореЗрдиреВ рдХреБрдВрдЬреА рджрдмрд╛рдиреЗ рд╕реЗ рдлреНрд░реЗрдо рдмрдлрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлреНрд░реЗрдордмреБрдл рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рдПрдХ рдХрдЪреНрдЪрд╛ рдлреНрд░реЗрдо рдмрдлрд░ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдкрд┐рдХреНрд╕рд▓ рдЕрднреА рднреА рдЖрд░рдЬреАрдмреА 565 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдХреЗ рд╕рд╛рде рдЙрд▓рдЯ рд░рд╣реЗрдЧрд╛ред рд╣рдо рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЛ PNG рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП ImageMagick рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

convert -depth 16 -size 320x240+0 -endian msb rgb565:FRAMEBUF snap.png

рдмреЗрд╢рдХ, рд╣рдо BMP / PNG рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд░реАрдбрд┐рдВрдЧ / рд░рд╛рдЗрдЯрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ ImageMagick рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рд╛рд░реЗ рдЙрдкрджреНрд░рд╡ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдбреЗрдореЛ рдХреЛрдб рд╣реИред рдЕрдм рддрдХ рдореИрдВрдиреЗ рдпрд╣ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕ рдлрд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред


рд╡рд╣ рдпрд╣рд╛рдБ рд╣реИ! рдУрдбреНрд░реЙрдпрдб рдЧреЛ рдлреНрд░реЗрдо рдмрдлрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн



рднрд╛рдЧ 5: рдмреИрдЯрд░реА


Odroid Go рдореЗрдВ рд▓рд┐рдерд┐рдпрдо-рдЖрдпрди рдмреИрдЯрд░реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЧреЗрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЪрд▓рддреЗ-рдлрд┐рд░рддреЗ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдХрд░реНрд╖рдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдиреЗ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рд▓рд╛ рдЧреЗрдордмреЙрдп рдЦреЗрд▓рд╛ред

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ Odroid Go рдХреЗ рдмреИрдЯрд░реА рд╕реНрддрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред рдмреИрдЯрд░реА рдИрдПрд╕рдкреА 32 рдкрд░ рд╕рдВрдкрд░реНрдХ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╢реЗрд╖ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдордп рдХреЗ рдЕрдиреБрдорд╛рдирд┐рдд рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡реЛрд▓реНрдЯреЗрдЬ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдпреЛрдЬрдирд╛



рдЪрд┐рддреНрд░ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ IO36 рд╕реЗ рдЬреБрдбрд╝рд╛ VBAT рдПрдХ рдкреНрд░рддрд┐рд░реЛрдзрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреВрдорд┐ рдкрд░ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХреЗ рдмрд╛рдж рд╡реЛрд▓реНрдЯреЗрдЬред рджреЛ рдкреНрд░рддрд┐рд░реЛрдзреЛрдВ ( R21 рдФрд░ R23 ) рдЧреЗрдордкреИрдб рдХреЗ рдХреНрд░реЙрд╕ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╡реЛрд▓реНрдЯреЗрдЬ рд╡рд┐рднрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ; рдкреНрд░рддрд┐рд░реЛрдзреЛрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдПрдХ рд╣реА рдкреНрд░рддрд┐рд░реЛрдз рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ рдЖрдзрд╛ рдореВрд▓ рд╣реЛред

рд╡реЛрд▓реНрдЯреЗрдЬ рд╡рд┐рднрдХреНрдд рдХреЗ рдХрд╛рд░рдг, IO36 рдЖрдзреЗ VBAT рдХреЗ рдмрд░рд╛рдмрд░ рд╡реЛрд▓реНрдЯреЗрдЬ рдкрдврд╝реЗрдЧрд╛ ред рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ ESP32 рдкрд░ ADC рд╕рдВрдкрд░реНрдХ рд▓рд┐рдерд┐рдпрдо рдЖрдпрди рдмреИрдЯрд░реА рдХреЗ рдЙрдЪреНрдЪ рд╡реЛрд▓реНрдЯреЗрдЬ (рдЕрдзрд┐рдХрддрдо рдЪрд╛рд░реНрдЬ рдкрд░ 4.2 V) рдХреЛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдЪреНрдЪреЗ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдбреАрд╕реА (рдПрдбреАрд╕реА) рд╕реЗ рдкрдврд╝реЗ рдЧрдП рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

IO36 рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп, рд╣рдо рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╡рд╛рд▓реЗ рдПрдирд╛рд▓реЙрдЧ рдореВрд▓реНрдп рдХреЛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ рднреМрддрд┐рдХ рдПрдирд╛рд▓реЙрдЧ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдбреАрд╕реА рдХреЗ рд╕рд╛рде рдбрд┐рдЬрд┐рдЯрд▓ рдореВрд▓реНрдп рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдИрдбреАрдПрдл рдЖрдкрдХреЛ рдПрдбреАрд╕реА рдХреЛ рдХреИрд▓рд┐рдмреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрджрд░реНрдн рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реЛрд▓реНрдЯреЗрдЬ рд╕реНрддрд░ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрджрд░реНрдн рд╡реЛрд▓реНрдЯреЗрдЬ ( Vref ) рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 1100 mV рд╣реИ, рд▓реЗрдХрд┐рди рднреМрддрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред Odroid Go рдореЗрдВ ESP32 рдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд Vref, "рдлрд╝реНрд▓реИрд╢" рдХреЛ eFuse рдореЗрдВ рд░рдЦрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдХреНрд░реЛрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧреА: рдкрд╣рд▓реЗ, рд╣рдо рдПрдбреАрд╕реА рдЕрдВрд╢рд╛рдВрдХрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЬрдм рд╣рдо рд╡реЛрд▓реНрдЯреЗрдЬ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдФрд╕рдд рд░реАрдбрд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирдореВрдиреЗ рд▓реЗрдВрдЧреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 20); рддрдм рд╣рдо рдЗрди рд░реАрдбрд┐рдВрдЧ рдХреЛ рд╡реЛрд▓реНрдЯреЗрдЬ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП IDF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд╕рдд рдХреА рдЧрдгрдирд╛ рд╢реЛрд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реАрдбрд┐рдВрдЧ рджреЗрддреА рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡реЛрд▓реНрдЯреЗрдЬ рдФрд░ рдмреИрдЯрд░реА рдЪрд╛рд░реНрдЬ рдХреЗ рдмреАрдЪ рдХреЛрдИ рд░реИрдЦрд┐рдХ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИред рдЬрдм рдЪрд╛рд░реНрдЬ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЛрд▓реНрдЯреЗрдЬ рдЧрд┐рд░рддрд╛ рд╣реИ, рдЬрдм рдпрд╣ рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рддрд░реАрдХреЗ рд╕реЗред рд╡рд╣ рд╕рдм рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдпрджрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ рд▓рдЧрднрдЧ 3.6 рд╡реА рд╕реЗ рдиреАрдЪреЗ рд╣реИ, рддреЛ рдмреИрдЯрд░реА рдХреЛ рдЫреБрдЯреНрдЯреА рджреЗ рджреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЛрд▓реНрдЯреЗрдЬ рд╕реНрддрд░ рдХреЛ рдмреИрдЯрд░реА рдЪрд╛рд░реНрдЬ рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдореЗрдВ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

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

рд╕реНрдерд┐рддрд┐ рдПрд▓рдИрдбреА



Odroid Go рд╕реНрдХреНрд░реАрди рдХреЗ рдиреАрдЪреЗ рдлреНрд░рдВрдЯ рдкреИрдирд▓ рдкрд░ рдПрдХ рдмреНрд▓реВ LED (LED) рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдХрд┐рд╕реА рднреА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЙрдиреНрд╣реЗрдВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдЪрд╛рд▓реВ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдВрдзреЗрд░реЗ рдореЗрдВ рдЦреЗрд▓рддреЗ рд╕рдордп, рдПрдХ рдЪрдордХрджрд╛рд░ рдиреАрд▓реА рдПрд▓рдИрдбреА рдЖрдкрдХреЗ рдЪреЗрд╣рд░реЗ рдкрд░ рдЪрдордХ рдЬрд╛рдПрдЧреАред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдо рдмреИрдЯрд░реА рдЪрд╛рд░реНрдЬ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рд▓ рдпрд╛ рдПрдореНрдмрд░ рд░рдВрдЧ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛)ред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ 2 kor рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ ( рд╡рд░реНрддрдорд╛рди рд╕реАрдорд┐рдд рдЕрд╡рд░реЛрдзрдХ ) рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо рдПрд▓рдИрдбреА рдХреЛ рдЬрд▓рд╛ рди рджреЗрдВ рдФрд░ GPIO рдкрд┐рди рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд░реНрддрдорд╛рди рдЖрдкреВрд░реНрддрд┐ рдХрд░реЗрдВред

рдПрд▓рдИрдбреА рдореЗрдВ рдПрдХ рдХрдо рдкреНрд░рддрд┐рд░реЛрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ 3.3 рд╡реА рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдХреЛ рдмрджрд▓рдХрд░ рдЬрд▓рд╛ рджреЗрдВрдЧреЗред рдЗрд╕рд╕реЗ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░рддрд┐рд░реЛрдзрдХ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдПрд▓рдИрдбреА рдХреЗ рд╕рд╛рде рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрд▓ рдИ рдбреА рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕реАрдорд┐рдд рдкреНрд░рддрд┐рд░реЛрдзреЛрдВ рдЖрдорддреМрд░ рдкрд░ 2 k so рд╕реЗ рдмрд╣реБрдд рдХрдо рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ R7 рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ рдРрд╕рд╛ рдкреНрд░рддрд┐рд░реЛрдз рдХреНрдпреЛрдВ рд╣реИред

рдкреНрд░рд╛рд░рдВрдн


static const adc1_channel_t BATTERY_READ_PIN = ADC1_GPIO36_CHANNEL;
static const gpio_num_t BATTERY_LED_PIN = GPIO_NUM_2;

static esp_adc_cal_characteristics_t gCharacteristics;

void Odroid_InitializeBatteryReader()
{
	// Configure LED
	{
		gpio_config_t gpioConfig = {};

		gpioConfig.mode = GPIO_MODE_OUTPUT;
		gpioConfig.pin_bit_mask = 1ULL << BATTERY_LED_PIN;

		ESP_ERROR_CHECK(gpio_config(&gpioConfig));
	}

	// Configure ADC
	{
		adc1_config_width(ADC_WIDTH_BIT_12);
    	adc1_config_channel_atten(BATTERY_READ_PIN, ADC_ATTEN_DB_11);
    	adc1_config_channel_atten(BATTERY_READ_PIN, ADC_ATTEN_DB_11);

    	esp_adc_cal_value_t type = esp_adc_cal_characterize(
    		ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, 1100, &gCharacteristics);

    	assert(type == ESP_ADC_CAL_VAL_EFUSE_VREF);
    }

	ESP_LOGI(LOG_TAG, "Battery reader initialized");
}

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо GPIO LED рдХреЛ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд╣рдо рдЗрд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХреЗрдВред рдлрд┐рд░ рд╣рдо рдПрдбреАрд╕реА рдкрд┐рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдХреНрд░реЙрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ - 12 рдХреА рдереЛрдбрд╝реА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдиреНрдпреВрдирддрдо рдХреНрд╖реАрдгрди рдХреЗ рд╕рд╛рдеред

esp_adc_cal_characterize ADC рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рдбрд┐рдЬрд┐рдЯрд▓ рд░реАрдбрд┐рдВрдЧ рдХреЛ рд╢рд╛рд░реАрд░рд┐рдХ рддрдирд╛рд╡ рдореЗрдВ рдмрджрд▓ рд╕рдХреЗрдВред

рдмреИрдЯрд░реА рдкрдврд╝реЗрдВ


uint32_t Odroid_ReadBatteryLevel(void)
{
	const int SAMPLE_COUNT = 20;


	uint32_t raw = 0;

	for (int sampleIndex = 0; sampleIndex < SAMPLE_COUNT; ++sampleIndex)
	{
		raw += adc1_get_raw(BATTERY_READ_PIN);
	}

	raw /= SAMPLE_COUNT;


	uint32_t voltage = 2 * esp_adc_cal_raw_to_voltage(raw, &gCharacteristics);

	return voltage;
}

рд╣рдо рдПрдбреАрд╕реА рдХреЗ рд╕рдВрдкрд░реНрдХ рд╕реЗ рдПрдбреАрд╕реА рдХреЗ рдмреАрд╕ рдХрдЪреНрдЪреЗ рдирдореВрдиреЗ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдФрд╕рдд рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд░реАрдбрд┐рдВрдЧ рдХреЗ рд╢реЛрд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдлрд┐рд░ рдХрдЪреНрдЪреЗ рдорд╛рди рдХреЛ рдЕрд╕рд▓реА рд╡реЛрд▓реНрдЯреЗрдЬ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо esp_adc_cal_raw_to_voltage рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡реЛрд▓реНрдЯреЗрдЬ рдбрд┐рд╡рд╛рдЗрдбрд░ рдХреЗ рдХрд╛рд░рдг, рд╣рдо рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рддреЗ рд╣реИрдВ: рд░реАрдб рд╡реИрд▓реНрдпреВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреИрдЯрд░реА рд╡реЛрд▓реНрдЯреЗрдЬ рдХрд╛ рдЖрдзрд╛ рд╣реЛрдЧрд╛ред

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

рдорд╛рди рдХреЛ рдорд┐рд▓реАрд╡реЛрд▓реНрдЯ рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрдЪрд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдлреНрд▓реЛрдЯ рдУрд╡рд░рдлреНрд▓реЛ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

рдПрд▓рдИрдбреА рд╕реЗрдЯрд┐рдВрдЧ


void Odroid_EnableBatteryLight(void)
{
	gpio_set_level(BATTERY_LED_PIN, 1);
}

void Odroid_DisableBatteryLight(void)
{
	gpio_set_level(BATTERY_LED_PIN, 0);
}

рдпреЗ рджреЛ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдПрд▓рдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рд╣рдо рдпрд╛ рддреЛ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рджреЗрдВ рдХрд┐ рдЗрд╕реЗ рдХрдм рдХрд░рдирд╛ рд╣реИред

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

рдбреЗрдореЛ


uint32_t batteryLevel = Odroid_ReadBatteryLevel();

if (batteryLevel < 3600)
{
	Odroid_EnableBatteryLight();
}
else
{
	Odroid_DisableBatteryLight();
}

рд╣рдо рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдЪрдХреНрд░ рдореЗрдВ рдмреИрдЯрд░реА рд╕реНрддрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ рдереНрд░реЗрд╢реЛрд▓реНрдб рдорд╛рди рд╕реЗ рдиреАрдЪреЗ рд╣реИ, рддреЛ рдПрд▓рдИрдбреА рдЪрд╛рд▓реВ рдХрд░реЗрдВ, рдЪрд╛рд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рдЕрдзреНрдпрдпрди рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ 3600 mV (3.6 V) рд▓рд┐рдерд┐рдпрдо рдЖрдпрди рдмреИрдЯрд░реА рдХреЗ рдХрдо рдЪрд╛рд░реНрдЬ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреЗрдд рд╣реИ, рд▓реЗрдХрд┐рди рдмреИрдЯрд░реА рд╕реНрд╡рдпрдВ рдЬрдЯрд┐рд▓ рд╣реИрдВред

рд╕рдВрджрд░реНрдн



рднрд╛рдЧ рем: рдзреНрд╡рдирд┐


рд╕рднреА Odroid Go рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрдВрддрд┐рдо рдЪрд░рдг рдПрдХ рдзреНрд╡рдирд┐ рдкрд░рдд рд▓рд┐рдЦрдирд╛ рд╣реИред рдЗрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЧреЗрдо рдХреЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдУрд░ рдмрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдУрдбреНрд░реЙрдпрдб рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рдУрдбрд╛рдпрд░рд╛рдЗрдб рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ ред

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

рдЕрдВрддрддрдГ, рдзреНрд╡рдирд┐ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдХреЛрдб рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдИрдПрд╕рдкреА 32 рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдИрдПрд╕рдкреА 32 рдСрдбрд┐рдпреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд╛рдЙрдВрдб рдмреЗрд╕рд┐рдХреНрд╕


рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд╛рдЙрдВрдб рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ: рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рдкреНрд▓реЗрдмреИрдХ ред

рдЕрднрд┐рд▓реЗрдЦ


рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдзреНрд╡рдирд┐ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдПрдХ рд╕рддрдд (рдПрдирд╛рд▓реЙрдЧ) рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд╕реНрдерд╛рди рд╕реЗ рдЕрд╕рддрдд (рдбрд┐рдЬрд┐рдЯрд▓) рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд╕реНрдерд╛рди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдп рдПрдХ рдПрдирд╛рд▓реЙрдЧ-рдЯреВ-рдбрд┐рдЬрд┐рдЯрд▓ рдХрдирд╡рд░реНрдЯрд░ (рдПрдбреАрд╕реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рд╣рдордиреЗ рднрд╛рдЧ 2 рдореЗрдВ рдХреНрд░реЙрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛)ред

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

рдЦреЗрд▓


рдбрд┐рдЬрд┐рдЯрд▓ рд╕реЗ рдПрдирд╛рд▓реЙрдЧ рдХрдирд╡рд░реНрдЯрд░ (DAC) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдЬрд┐рдЯрд▓ рд╕реЗ рдПрдирд╛рд▓реЙрдЧ рд╕реНрдкреЗрд╕ рдореЗрдВ рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд╛рдЙрдВрдб рдлрд╛рдЗрд▓ рдХреЛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдбреАрдПрд╕реА рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 3.3 V рд╕реНрд░реЛрдд рд╡рд╛рд▓рд╛ 8-рдмрд┐рдЯ DAC 12.9 mV рдЪрд░рдгреЛрдВ рдореЗрдВ 0 рд╕реЗ 3.3 mV рддрдХ рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ рдПрдирд╛рд▓реЙрдЧ рд╡реЛрд▓реНрдЯреЗрдЬ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ (3.3 V 256 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд)ред

рдбреАрдПрд╕реА рдбрд┐рдЬрд┐рдЯрд▓ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рд╡реЛрд▓реНрдЯреЗрдЬ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░, рд╕реНрдкреАрдХрд░ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдирд╛рд▓реЙрдЧ рдСрдбрд┐рдпреЛ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

рдирдореВрдирд╛рдХрд░рдг рджрд░


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

рд╕реИрдВрдкрд▓рд┐рдВрдЧ рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рд╣реЛрддреА рд╣реИ, рдЙрддрдиреЗ рд╣реА рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╣рдо рдореВрд▓ рд╕рд┐рдЧреНрдирд▓ рдХреА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред Nyquist-Shannon (Kotelnikov) рдкреНрд░рдореЗрдп (рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ) рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдирдореВрдирд╛ рдЖрд╡реГрддреНрддрд┐ рджреЛ рдмрд╛рд░ рдЙрдЪреНрдЪрддрдо рд╕рдВрдХреЗрдд рдЖрд╡реГрддреНрддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╣рдо рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░рддреНрдпреЗрдХ рдирдореВрдирд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдзрд┐рдХрддрдо рдирдореВрдирд╛ рджрд░ рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рддреЗрдЬреА рд╕реЗ рдирдореВрдирд╛ рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВред рдЪрдпрдирд┐рдд рдирдореВрдирд╛рдХрд░рдг рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдкреБрдирдГ рдирд┐рд░реНрдорд┐рдд рдзреНрд╡рдирд┐ рдореЗрдВ рдореМрдЬреВрдж рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреНрд▓реЗрдмреИрдХ рдХреЛ рд╕реНрд░реЛрдд рдХреЗ рд╕рдорд╛рди рдирдореВрдирд╛ рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдзреНрд╡рдирд┐ рдФрд░ рдЗрд╕рдХреА рдЕрд╡рдзрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдЧреАред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рджрд╕ рд╕реЗрдХрдВрдб рдХреА рдзреНрд╡рдирд┐ 16 рдХрд┐рд▓реЛрд╣рд░реНрдЯреНрдЬрд╝ рдХреЗ рдирдореВрдиреЗ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рджрд░реНрдЬ рдХреА рдЧрдИ рдереАред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ 8 kHz рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рд╕реНрд╡рд░ рдХрдо рд╣реЛрдЧрд╛, рдФрд░ рдЕрд╡рдзрд┐ рдмреАрд╕ рд╕реЗрдХрдВрдб рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ 32 kHz рдХреА рдирдореВрдирд╛ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╢реНрд░рд╡реНрдп рд╕реНрд╡рд░ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛, рдФрд░ рдзреНрд╡рдирд┐ рд╕реНрд╡рдпрдВ рдкрд╛рдВрдЪ рд╕реЗрдХрдВрдб рддрдХ рдЪрд▓реЗрдЧреАред

рдпрд╣ рд╡реАрдбрд┐рдпреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдирдореВрдирд╛ рджрд░реЛрдВ рдореЗрдВ рдЕрдВрддрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ


рдирдореВрдирд╛рдХрд░рдг рдЖрд╡реГрддреНрддрд┐ рдХреЗрд╡рд▓ рдЖрдзрд╛ рд╕рдореАрдХрд░рдг рд╣реИред рдзреНрд╡рдирд┐ рдореЗрдВ рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ рднреА рд╣реИ , рдЕрд░реНрдерд╛рдд рдкреНрд░рддрд┐ рдирдореВрдиреЗ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ред

рдЬрдм ADC рдПрдХ рдСрдбрд┐рдпреЛ рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдирдореВрдирд╛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЗрд╕ рдПрдирд╛рд▓реЙрдЧ рд╡реИрд▓реНрдпреВ рдХреЛ рдбрд┐рдЬрд┐рдЯрд▓ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреА рд╕реАрдорд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред 8 рдмрд┐рдЯреНрд╕ (256 рдорд╛рди), 16 рдмрд┐рдЯреНрд╕ (65,526 рдореВрд▓реНрдп), 32 рдмрд┐рдЯреНрд╕ (4,294,967,296 рдореВрд▓реНрдп), рдЖрджрд┐ред

рдкреНрд░рддрд┐ рдирдореВрдиреЗ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдзреНрд╡рдирд┐ рдХреА рдЧрддрд┐рд╢реАрд▓ рд╕реАрдорд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ , рдЕрд░реНрдерд╛рддред рд╕рдмрд╕реЗ рдКрдВрдЪреЗ рдФрд░ рд╢рд╛рдВрдд рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд╕рд╛рдеред рд╕рдВрдЧреАрдд рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ 16 рдмрд┐рдЯреНрд╕ рд╣реИред

рдкреНрд▓реЗрдмреИрдХ рдХреЗ рджреМрд░рд╛рди, рд╕реНрд░реЛрдд рдХреЗ рд╕рдорд╛рди рдЧрд╣рд░рд╛рдИ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдзреНрд╡рдирд┐ рдФрд░ рдЗрд╕рдХреА рдЕрд╡рдзрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреАред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЪрд╛рд░ рдмрд┐рдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЪрд╛рд░ рдирдореВрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рд╣реИ: [0x25, 0xAB, 0x34, 0x80]ред рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЦреЗрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ 16-рдмрд┐рдЯ рдереЗ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЛ рдирдореВрдиреЗ рдорд┐рд▓реЗрдВрдЧреЗ: [0x25AB, 0x3480]ред рдпрд╣ рди рдХреЗрд╡рд▓ рдзреНрд╡рдирд┐ рдирдореВрдиреЛрдВ рдХреЗ рдЧрд▓рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛, рдмрд▓реНрдХрд┐ рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рднреА рдЖрдзрд╛ рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдзреНрд╡рдирд┐ рдХреА рдЕрд╡рдзрд┐ред

рдирдореВрдиреЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЬрд╛рдирдирд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред 8-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд, 8-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд, 16-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд, 16-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд, рдЖрджрд┐ред рдЖрдорддреМрд░ рдкрд░ 8-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ 16-рдмрд┐рдЯ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рд╡реЗ рднреНрд░рдорд┐рдд рд╣реИрдВ, рддреЛ рдзреНрд╡рдирд┐ рдмрд╣реБрдд рд╡рд┐рдХреГрдд рд╣реЛ рдЬрд╛рдПрдЧреАред

рдпрд╣ рд╡реАрдбрд┐рдпреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рд╛ рдЧрд╣рд░рд╛ рдЕрдВрддрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рд▓рд╣рд░рд╛рддреА рд╣реБрдИ рдлрд╛рдЗрд▓реЗрдВ


рдЕрдзрд┐рдХрддрд░, рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрдЪреНрдЪреЗ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдХреЛ WAV рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд╣реЗрдбрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдзреНрд╡рдирд┐ рдкреНрд░рд╛рд░реВрдк (рдирдореВрдирд╛ рдЖрд╡реГрддреНрддрд┐, рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ, рдЖрдХрд╛рд░, рдЖрджрд┐) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рд╕реНрд╡рдпрдВ рд╣реЛрддрд╛ рд╣реИред

рдзреНрд╡рдирд┐ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдВрдХреБрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ (рдПрдордкреА 3 рдЬреИрд╕реЗ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд), рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдХреЛрдбреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред

WAV рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдкреАрдбрд╝рди рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг, рд╡реЗ рдХрд╛рдлреА рдмрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рд╕реАрдзреЗ рдЕрд╡рдзрд┐, рдирдореВрдирд╛ рджрд░ рдФрд░ рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдЖрдХрд╛рд░ = рдЕрд╡рдзрд┐ (рд╕реЗрдХрдВрдб рдореЗрдВ) x рдирдореВрдирд╛ рджрд░ (рдирдореВрдиреЗ / s) x рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ (рдмрд┐рдЯ / рдирдореВрдирд╛)

рдирдореВрдиреЗ рдХреА рдЖрд╡реГрддреНрддрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрдо рдореВрд▓реНрдп рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реИред рд╣рдо рдПрдХ рдкреБрд░рд╛рдиреА-рд╕реНрдХреВрд▓ рдзреНрд╡рдирд┐ рдмрдирд╛рдПрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдХрдо рдирдореВрдирд╛ рдЖрд╡реГрддреНрддрд┐ рд╣рдореЗрдВ рд╕реВрдЯ рдХрд░рддреА рд╣реИред

I2S


ESP32 рдореЗрдВ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдСрдбрд┐рдпреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ: рдЗрдВрдЯрд░-рдЖрдИрд╕реА рд╕рд╛рдЙрдВрдб (I2S) ред

I2S рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рд╕рд┐рдЧреНрдирд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдПрдХ рдШрдбрд╝реА рд╕рдВрдХреЗрдд, рдЪреИрдирд▓реЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк (рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ), рдФрд░ рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛ рд▓рд╛рдЗрди рднреАред

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

рдХреНрд▓реЙрдХ рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА = рд╕реИрдореНрдкрд▓рд┐рдВрдЧ рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА (рд╕реИрдВрдкрд▓ / рдПрд╕) x рдмрд┐рдЯ рдбреЗрдкреНрде (рдмрд┐рдЯреНрд╕ / рд╕реИрдВрдкрд▓) x рдЪреИрдирд▓ рдХреА рд╕рдВрдЦреНрдпрд╛

ESP32 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ I2S рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдореЛрдб рд╣реИрдВ: рдпрд╣ рдпрд╛ рддреЛ рдмрд╛рд╣рд░реА I2S рд░рд┐рд╕реАрд╡рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдбреАрдХреЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреЛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдЖрдВрддрд░рд┐рдХ ESPS DAC рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдирд╛рд▓реЙрдЧ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ред

Odroid Go рдореЗрдВ рдмреЛрд░реНрдб рдкрд░ рдХреЛрдИ I2S рдбрд┐рдХреЛрдбрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЖрдВрддрд░рд┐рдХ 8-рдмрд┐рдЯ ESP32 DAC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рдд рд╣рдореЗрдВ 8-рдмрд┐рдЯ рдзреНрд╡рдирд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рджреЛ DAC рд╣реИрдВ , рдПрдХ IO25 рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ , рджреВрд╕рд░рд╛ IO26 рд╕реЗ ред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

  1. рд╣рдо I2S рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рддреЗ рд╣реИрдВ
  2. I2S рдбреНрд░рд╛рдЗрд╡рд░ 8-рдмрд┐рдЯ рдЖрдВрддрд░рд┐рдХ DAC рдХреЛ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ
  3. рдЖрдВрддрд░рд┐рдХ DAC рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ
  4. рдПрдирд╛рд▓реЙрдЧ рд╕рд┐рдЧреНрдирд▓ рдзреНрд╡рдирд┐ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ



рдпрджрд┐ рд╣рдо рдСрдбрд┐рдпреЛ рд╕рд░реНрдХрд┐рдЯ рдХреЛ Odroid Go рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдзреНрд╡рдирд┐ рдкреНрд░рд╡рд░реНрдзрдХ ( PAM8304A ) рдХреЗ рдЗрдирдкреБрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рджреЛ GPIO рдкрд┐рди ( IO25 рдФрд░ IO26 ) рджреЗрдЦреЗрдВрдЧреЗ ред IO25 рдПрдореНрдкрд▓реАрдлрд╛рдпрд░
рдХреЗ рд╕рд┐рдЧреНрдирд▓ / SD рд╕реЗ рднреА рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╡рд╣ рд╕рдВрдкрд░реНрдХ рдЬреЛ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреЛ рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ (рдХрдо рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдорддрд▓рдм рд╢рдЯрдбрд╛рдЙрди рд╣реИ)ред рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рд╕реНрдкреАрдХрд░ ( P1 ) рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ ред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ IO25 рдФрд░ IO26 8-рдмрд┐рдЯ ESP32 DACs рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВ, рдпрд╛рдиреА рдПрдХ DAC IN- рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ IN + рд╕реЗ ред

IN- рдФрд░ IN + рд╣реИрдВрдзреНрд╡рдирд┐ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреЗ рдЕрдВрддрд░ рдЗрдирдкреБрдЯ ред рд╡рд┐рднреЗрджрдХ рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рджреНрдпреБрдд рдЪреБрдореНрдмрдХреАрдп рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╢реЛрд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдПрдХ рд╕рд┐рдЧреНрдирд▓ рдореЗрдВ рдореМрдЬреВрдж рдХреЛрдИ рднреА рд╢реЛрд░ рджреВрд╕рд░реЗ рдореЗрдВ рднреА рдореМрдЬреВрдж рд╣реЛрдЧрд╛ред рдПрдХ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╢реЛрд░ рдХреЛ рдЦрддреНрдо рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдзреНрд╡рдирд┐ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ , рддреЛ рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд░реНрдХрд┐рдЯ рд╣реИ , рдЬреЛ рдХрд┐ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИред


рд╡рд╣ IN- рдХреЛ рдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ, IN + рдХреЛ рдЗрдирдкреБрдЯ рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдФрд░ / SD рдХреЛ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдСрдл / рдСрдл рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ ред рдпрджрд┐ 0.005 V рдХрд╛ рд╢реЛрд░ рд╣реИ, рддреЛ IN- 0V + 0.005V рдХреЗ рд╕рд╛рде рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛ , рдФрд░ IN + - VIN + 0.005V рдХреЗ рд╕рд╛рде ред рдЗрдирдкреБрдЯ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╢реЛрд░ рдХреЗ рдмрд┐рдирд╛ рд╕рд╣реА рд╕рд┐рдЧреНрдирд▓ рд╡реИрд▓реНрдпреВ ( VIN ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, Odroid Go рдХреЗ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдиреЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ Odroid Go рд╕рд░реНрдХрд┐рдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдиреЗ DAC рдЖрдЙрдЯрдкреБрдЯ рдХреЛ IN- рд╕реЗ рдЬреЛрдбрд╝рд╛ рдФрд░ рд╡рд╣реА DAC рдЖрдЙрдЯрдкреБрдЯ / SD рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ ред / рдПрд╕.рдбреА.- рдпрд╣ рдПрдХ рд╕рдХреНрд░рд┐рдп рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдЯрдбрд╛рдЙрди рд╕рдВрдХреЗрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЙрдЪреНрдЪ рд╕рдВрдХреЗрдд рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ IO25 рдХрд╛ рдЙрдкрдпреЛрдЧ DAC рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП , рдмрд▓реНрдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд╕рд╛рде GPIO рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЙрдЪреНрдЪ рд╕рдВрдХреЗрдд IN- рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ (рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рддрдм рд╣рдореЗрдВ IO26 рд╕реЗ рдЬреБрдбрд╝реЗ DAC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП , рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ I2S рдЖрдЙрдЯрдкреБрдЯ рдХреЛ IN + рдХреЛ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЖрд╡рд╢реНрдпрдХ рд╢реЛрд░ рдореЗрдВ рдХрдореА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ IN- рдЬрдореАрди рд╕реЗ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред рд╢реАрддрд▓ рд╢реЛрд░ рд▓рдЧрд╛рддрд╛рд░ рд╡рдХреНрддрд╛рдУрдВ рд╕реЗ рдирд┐рдХрд▓рддрд╛ рд╣реИред

рд╣рдореЗрдВ I2S рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рд╕рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо IO26 рд╕реЗ рдЬреБрдбрд╝реЗ рдХреЗрд╡рд▓ DAC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ред рдпрджрд┐ рд╣рдо IO25 рд╕реЗ рдЬреБрдбрд╝реЗ рдПрдХ DAC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреЛ рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдЧрд╛, рдФрд░ рдзреНрд╡рдирд┐ рднрдпрд╛рдирдХ рд╣реЛрдЧреАред

рдЗрд╕ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, 8-рдмрд┐рдЯ рдЖрдВрддрд░рд┐рдХ DAC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, ES232 рдореЗрдВ I2S рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ 16-рдмрд┐рдЯ рдирдореВрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди 8-рдмрд┐рдЯ DAC рдХреЛ рдХреЗрд╡рд▓ рдЙрдЪреНрдЪ рдмрд╛рдЗрдЯ рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреА 8-рдмрд┐рдЯ рдзреНрд╡рдирд┐ рд▓реЗрдиреЗ рдФрд░ рдЗрд╕реЗ рдмрдбрд╝реЗ рдмрдлрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рдмрд╛рд░ рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмрдлрд░ рдЖрдзрд╛ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ I2S рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ DAC рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдирдореВрдиреЗ рдХреЗ рдЙрдЪреНрдЪ рдмрд╛рдЗрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ 16 рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП "рднреБрдЧрддрд╛рди" рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ 8 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмрд╣реБ рдХрд╛рд░реНрдпрдг


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЦреЗрд▓ рдПрдХ рдХреЛрд░ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ I2S рдЪрд╛рд▓рдХ рдореЗрдВ рдПрдХ рдмрдЧ рд▓рдЧрддрд╛ рд╣реИред

I2S рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ DMA (SPI рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рддрд░рд╣) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рд╣рдо I2S рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЛ рдЖрд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рддрдм I2S рдбреНрд░рд╛рдЗрд╡рд░ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдЕрдкрдирд╛ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕реАрдкреАрдпреВ рдзреНрд╡рдирд┐ рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз рд╣реИ, рдЬреЛ рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЬрдВрдк рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рд╕реНрдкреНрд░рд╛рдЗрдЯ 100 рдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрдВрджреЛрд▓рди рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреВрдж рдзреНрд╡рдирд┐ рдЦреЗрд▓ рд░рд╣рд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рддрдереНрдп рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдИрдПрд╕рдкреА 32 рдкрд░ рджреЛ рдХреЛрд░ рд╣реИрдВред рд╣рдо рджреВрд╕рд░реЗ рдХреЛрд░ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдп (рдпрд╛рдиреА рдПрдХ рдзрд╛рдЧрд╛) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдзреНрд╡рдирд┐ рдкреНрд░рдЬрдирди рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЧреЗрдо рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕реЗ рд╕рд╛рдЙрдВрдб рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕рд╛рдЙрдВрдб рдЯрд╛рд╕реНрдХ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдЙрдВрдб рдЯрд╛рд╕реНрдХ I2S рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдЙрдВрдб рдкреНрд▓реЗрдмреИрдХ рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдХреЛрд░ (рдЗрдирдкреБрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ) рдкрд░ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрд╡рд░реЛрдз рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред

рдкреНрд░рд╛рд░рдВрдн


рдпрд╣ рдЬрд╛рдирдХрд░, рд╣рдо I2S рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдареАрдХ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЙрдЪрд┐рдд рдзреНрд╡рдирд┐ рдкреНрд░рдЬрдирди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

static const gpio_num_t AUDIO_AMP_SD_PIN = GPIO_NUM_25;

static QueueHandle_t gQueue;

static void PlayTask(void *arg)
{
	for(;;)
	{
		QueueData data;

		if (xQueueReceive(gQueue, &data, 10))
		{
			size_t bytesWritten;
			i2s_write(I2S_NUM_0, data.buffer, data.length, &bytesWritten, portMAX_DELAY);
			i2s_zero_dma_buffer(I2S_NUM_0);
		}

		vTaskDelay(1 / portTICK_PERIOD_MS);
	}
}

void Odroid_InitializeAudio(void)
{
	// Configure the amplifier shutdown signal
	{
		gpio_config_t gpioConfig = {};

		gpioConfig.mode = GPIO_MODE_OUTPUT;
		gpioConfig.pin_bit_mask = 1ULL << AUDIO_AMP_SD_PIN;

		ESP_ERROR_CHECK(gpio_config(&gpioConfig));

		gpio_set_level(AUDIO_AMP_SD_PIN, 1);
	}

	// Configure the I2S driver
	{
		i2s_config_t i2sConfig= {};

		i2sConfig.mode = I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN;
		i2sConfig.sample_rate = 5012;
		i2sConfig.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT;
		i2sConfig.communication_format = I2S_COMM_FORMAT_I2S_MSB;
		i2sConfig.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT;
		i2sConfig.dma_buf_count = 8;
		i2sConfig.dma_buf_len = 64;

		ESP_ERROR_CHECK(i2s_driver_install(I2S_NUM_0, &i2sConfig, 0, NULL));
		ESP_ERROR_CHECK(i2s_set_dac_mode(I2S_DAC_CHANNEL_LEFT_EN));
	}

	// Create task for playing sounds so that our main task isn't blocked
	{
		gQueue = xQueueCreate(1, sizeof(QueueData));
		assert(gQueue);

		BaseType_t result = xTaskCreatePinnedToCore(&PlayTask, "I2S Task", 1024, NULL, 5, NULL, 1);
		assert(result == pdPASS);
	}
}

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо IO25 (рдЬреЛ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреЗ рдЯрд░реНрди-рдСрдл рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ) рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдзреНрд╡рдирд┐ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХреЗ, рдФрд░ рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдЙрдЪреНрдЪ рд╕рд┐рдЧреНрдирд▓ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗред

рдЕрдЧрд▓рд╛, рд╣рдо I2S рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЗрди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЛ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдореЛрдб
    • рд╣рдо рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдПрдХ рдорд╛рд╕реНрдЯрд░ (рдмрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ), рдФрд░ рдЗрд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд 8-рдмрд┐рдЯ DAC (рдХреНрдпреЛрдВрдХрд┐ Odroid Go рдмреЛрд░реНрдб рдореЗрдВ рдмрд╛рд╣рд░реА DAC рдирд╣реАрдВ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред
  • рдирдореВрдирд╛ рджрд░
    • 5012, , , . , , . -, 2500 .
  • bits_per_sample
    • , ESP32 8-, I2S , 16 , 8 .
  • communication_format
    • , , - , 8- 16- .
  • channel_format
    • GPIO, IN+ тАФ IO26, ┬л┬╗ I2S. , I2S , IO25, , .
  • dma_buf_count dma_buf_len
    • DMA- ( ) , , , IDF. , .

рдлрд┐рд░ рд╣рдо рдПрдХ рдХрддрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ - рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╣реИ рдЬреИрд╕реЗ рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИред рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдХрд╛рд░реНрдп рдХреА рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдп рдХреА рдХрддрд╛рд░ рд╕реЗ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред рдХреНрд╡реЗрдпрдбрд╛рдЯрд╛ рдирд╛рдордХ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВ рдЬреЛ рд╕реВрдЪрдХ рдХреЛ рдзреНрд╡рдирд┐ рдмрдлрд░ рдФрд░ рдмрдлрд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдПрдХ рдПрдХрд▓ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИ рдЬрд┐рд╕реЗ рдХрддрд╛рд░рдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ рдЬреЛ рджреВрд╕рд░реЗ рдХреЛрд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ PlayTask рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ рдзреНрд╡рдирд┐ рдкреНрд▓реЗрдмреИрдХ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдПрдХ рдЕрдВрддрд╣реАрди рд▓реВрдк рд╣реИ рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХрддрд╛рд░ рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╡реЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдЙрдиреНрд╣реЗрдВ I2S рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЦреЗрд▓рд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ i2s_write рдХреЙрд▓ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрд╣ рд╣рдореЗрдВ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдп рдЦреЗрд▓ рдХреЗ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдХрд░реНрдиреЗрд▓ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред I2s_zero_dma_buffer рдХреЗ

рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд▓реЗрдмреИрдХ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╡рдХреНрддрд╛рдУрдВ рд╕реЗ рдХреЛрдИ рдЖрд╡рд╛рдЬрд╝ рдирд╣реАрдВ рдирд┐рдХрд▓реЗ ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ I2S рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдмрдЧ рд╣реИ рдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдзреНрд╡рдирд┐ рдмрдлрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕реНрдкреАрдХрд░ рдПрдХ рдХрдЪрд░рд╛ рд╕рдВрдХреЗрдд рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИред

рдзреНрд╡рдирд┐ рдЦреЗрд▓рдиреЗ


void Odroid_PlayAudio(uint16_t* buffer, size_t length)
{
	QueueData data = {};

	data.buffer = buffer;
	data.length = length;

	xQueueSendToBack(gQueue, &data, portMAX_DELAY);
}

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

рдСрдкрд░реЗрд╢рди рдХреЗ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рдХрд╛рд░рдг, рдПрдХ рдзреНрд╡рдирд┐ рдмрдлрд░ рдХреЛ рджреВрд╕рд░рд╛ рдмрдлрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд▓реЗрдмреИрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рдХреВрдж рдФрд░ рд╢реВрдЯрд┐рдВрдЧ рдПрдХ рд╕рд╛рде рд╣реЛрддреА рд╣реИ, рддреЛ рдкрд╣рд▓реА рдзреНрд╡рдирд┐ рджреВрд╕рд░реЗ рд╕реЗ рдкрд╣рд▓реЗ рдЦреЗрд▓реА рдЬрд╛рдПрдЧреА, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдирд╣реАрдВред

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдЖрдИ 2 рдПрд╕ рдЪрд╛рд▓рдХ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдзреНрд╡рдирд┐ рдмрдлрд░ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдлреНрд░реЗрдо рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдКрдВрдЧрд╛ред рдЗрд╕рд╕реЗ рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рд╕рд╛рдЙрдВрдб рдкреНрд▓реЗ рдХрд░ рд╕рдХреЗрдВрдЧреЗред

рдбреЗрдореЛ


рд╣рдо jsfxr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдзреНрд╡рдирд┐ рдкреНрд░рднрд╛рд╡ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ , рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЦреЗрд▓ рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрдкрдХрд░рдгред рд╣рдо рд╕реАрдзреЗ рдирдореВрдирд╛ рдЖрд╡реГрддреНрддрд┐ рдФрд░ рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ WAV рдлрд╝рд╛рдЗрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬрдореНрдк рд╕рд╛рдЙрдВрдб рдЗрдлрд╝реЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬреЛ рдорд╛рд░рд┐рдпреЛ рдХреЗ рдХреВрджрдиреЗ рдХреА рдЖрд╡рд╛рдЬрд╝ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ 5012 рдХреА рдирдореВрдирд╛ рдЖрд╡реГрддреНрддрд┐ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдерд╛) рдФрд░ 8 рдХреА рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ (рдХреНрдпреЛрдВрдХрд┐ рдбреАрдПрд╕реА 8-рдмрд┐рдЯ рд╣реИ)ред


рдХреЛрдб рдореЗрдВ рд╕реАрдзреЗ WAV рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рднрд╛рдЧ 4 рдХреЗ рдбреЗрдореЛ рдореЗрдВ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХрд░реЗрдВрдЧреЗ: рд╣рдо рд╣реЗрдХреНрд╕ рдПрдбрд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕реЗ WAV рд╣реЗрдбрд░ рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрд╕рдбреА рдХрд╛рд░реНрдб рд╕реЗ рдкрдврд╝реА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗрд╡рд▓ рдХрдЪреНрдЪрд╛ рдбреЗрдЯрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдзреНрд╡рдирд┐ рдХреА рдЕрд╡рдзрд┐ рдирд╣реАрдВ рдкрдврд╝реЗрдВрдЧреЗ, рд╣рдо рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдзреНрд╡рдирд┐ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓реЛрдб рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдХрдЪреНрдЪреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

// Load sound effect
uint16_t* soundBuffer;
int soundEffectLength = 1441;
{
	FILE* soundFile = fopen("/sdcard/jump", "r");
	assert(soundFile);

	uint8_t* soundEffect = malloc(soundEffectLength);
	assert(soundEffect);

	soundBuffer = malloc(soundEffectLength*2);
	assert(soundBuffer);

	fread(soundEffect, soundEffectLength, 1, soundFile);

    for (int i = 0; i < soundEffectLength; ++i)
    {
        // 16 bits required but only MSB is actually sent to the DAC
        soundBuffer[i] = (soundEffect[i] << 8u);
    }
}

рд╣рдо 8-рдмрд┐рдЯ рдбреЗрдЯрд╛ рдХреЛ 8-рдмрд┐рдЯ рд╕рд╛рдЙрдВрдбрдЯреЗрдХреНрдЯ рдмрдлрд░ рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ , рдФрд░ рдлрд┐рд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ 16-рдмрд┐рдЯ рд╕рд╛рдЙрдВрдб рдмрдлрд╝рд░ рдмрдлрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ , рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рдХреЛ рдЖрда рдмрд┐рдЯреНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ - рдЖрдИрдбреАрдПрдл рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

16-рдмрд┐рдЯ рдмрдлрд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдмрдЯрди рдХреЗ рдПрдХ рдХреНрд▓рд┐рдХ рдХреА рдзреНрд╡рдирд┐ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реЙрд▓реНрдпреВрдо рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред

int lastState = 0;

for (;;)
{
	[...]

	int thisState = input.volume;

	if ((thisState == 1) && (thisState != lastState))
	{
		Odroid_PlayAudio(soundBuffer, soundEffectLength*2);
	}

	lastState = thisState;

	[...]
}

рд╣рдо рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЧрд▓рддреА рд╕реЗ, рдмрдЯрди рдХреЗ рдПрдХ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде, Odroid_PlayAudio рдХреЛ рдЧрд▓рддреА рд╕реЗ рдХрдИ рдмрд╛рд░ рдХреЙрд▓ рди рдХрд┐рдпрд╛ рдЬрд╛рдП ред


рд╕реНрд░реЛрдд


рд╕рднреА рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ ред

рд╕рдВрджрд░реНрдн



All Articles