เบˆเป HDMI เบ—เบตเบชเบญเบ‡เป„เบ›เบซเบฒ Raspberry Pi3 เบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš DPI เปเบฅเบฐเบเบฐเบ”เบฒเบ™ FPGA


เบงเบดเบ”เบตเป‚เบญเบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™: เบเบฐเบ”เบฒเบ™ Raspberry Pi3, เป€เบŠเบดเปˆเบ‡เบœเปˆเบฒเบ™เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ GPIO, เบเบฐเบ”เบฒเบ™ FPGA Mars Rover2rpi (Cyclone IV) เบ–เบทเบเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เป€เบŠเบดเปˆเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบˆเป HDMI. เบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ HDMI เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡ Raspberry Pi3. เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบฎเปˆเบงเบกเบเบฑเบ™เบ„เบทเบเบฑเบšเบฅเบฐเบšเบปเบšเบˆเปเบžเบฒเบšเบ„เบนเปˆ.

เบ•เปเปˆเป„เบ›เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.

เบเบฐเบ”เบฒเบ™ Raspberry Pi3 เบ—เบตเปˆเบ™เบดเบเบปเบกเบกเบตเบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ GPIO เป‚เบ”เบเบœเปˆเบฒเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฐเบ”เบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เปˆเบฒเบ‡เป†: เป€เบŠเบฑเบ™เป€เบŠเบต, LEDs, เป„เบ”เป€เบงเบตเบกเปเป€เบ•เบต stepper เปเบฅเบฐเบญเบทเปˆเบ™เป†เบญเบตเบ. เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐ pin เปƒเบ™เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบžเบญเบ”. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ GPIO ALT2 เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป„เบ›เบซเบฒเป‚เบซเบกเบ”เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš DPI, เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบฐเบซเบ™เบฒเบ™. เบกเบตเบšเบฑเบ”เบ‚เบฐเบซเบเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบˆเป VGA เบœเปˆเบฒเบ™ DPI. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ—เปเบฒเบญเบดเบ”, เบˆเป VGA เปเบกเปˆเบ™เบšเปเปˆเบ—เปเบฒเบกเบฐเบ”เบฒเบ„เบทเบเบฑเบš HDMI, เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ”เบดเบˆเบดเบ•เบญเบ™เปเบกเปˆเบ™เบ”เบตเบเปˆเบงเบฒเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, DAC เปƒเบ™เบšเบฑเบ”เบ‚เบฐเบซเบเบฒเบ VGA เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเปเบกเปˆเบ™เป€เบฎเบฑเบ”เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบ•เปˆเบญเบ‡เป‚เบชเป‰ R-2-R เปเบฅเบฐเบกเบฑเบเบˆเบฐเบšเปเปˆเป€เบเบตเบ™ 6 เบšเบดเบ”เบ•เปเปˆเบชเบต.

เปƒเบ™เป‚เบซเบกเบ” ALT2, เป€เบ‚เบฑเบกเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ GPIO เบกเบตเบ„เบงเบฒเบกเบซเบกเบฒเบเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

เบˆเป HDMI เบ—เบตเบชเบญเบ‡เป„เบ›เบซเบฒ Raspberry Pi3 เบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš DPI เปเบฅเบฐเบเบฐเบ”เบฒเบ™ FPGA

เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบญเบเป„เบ”เป‰เปƒเบชเปˆเบชเบต pins RGB เบ‚เบญเบ‡เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ›เบฑเบ™เบชเบตเปเบ”เบ‡, เบชเบตเบ‚เบฝเบงเปเบฅเบฐเบชเบตเบŸเป‰เบฒเบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš. เบชเบฑเบ™เบเบฒเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบญเบทเปˆเบ™เป†เปเบกเปˆเบ™เบชเบฑเบ™เบเบฒเบ™ V-SYNC เปเบฅเบฐ H-SYNC, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš CLK. เบ„เบงเบฒเบกเบ–เบตเปˆเบ‚เบญเบ‡เป‚เบกเบ‡ CLK เปเบกเปˆเบ™เบ„เบงเบฒเบกเบ–เบตเปˆเบ—เบตเปˆเบ„เปˆเบฒ pixels โ€‹โ€‹output เบเบฑเบšเบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ; เบกเบฑเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบฎเบนเบšเปเบšเบšเบงเบดเบ”เบตเป‚เบญเบ—เบตเปˆเป€เบฅเบทเบญเบ.

เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบˆเป HDMI เบ”เบดเบˆเบดเบ•เบญเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบฑเบšเบชเบฑเบ™เบเบฒเบ™ DPI เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปเบฅเบฐเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบชเบฑเบ™เบเบฒเบ™ HDMI. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฐเบ”เบฒเบ™ FPGA. เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบซเบฑเบ™เบญเบญเบ, เบเบฐเบ”เบฒเบ™ Mars Rover2rpi เปเบกเปˆเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบ„เบงเบฒเบกเบˆเบดเบ‡, เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฐเบ”เบฒเบ™เบ™เบตเป‰เบœเปˆเบฒเบ™เบญเบฐเปเบ”เบšเป€เบ•เบตเบžเบดเป€เบชเบ”เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰:

เบˆเป HDMI เบ—เบตเบชเบญเบ‡เป„เบ›เบซเบฒ Raspberry Pi3 เบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš DPI เปเบฅเบฐเบเบฐเบ”เบฒเบ™ FPGA

เบเบฐเบ”เบฒเบ™เบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบˆเปเบฒเบ™เบงเบ™เบžเบญเบ” GPIO เปเบฅเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบญเบธเบ›เบฐเบเบญเบ™เบ•เปเปˆเบžเบญเบ”เบเบฑเบš raspberry. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, 4 เบชเบฑเบ™เบเบฒเบ™ GPIO เบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบชเบฑเบ™เบเบฒเบ™ JTAG, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป‚เบ„เบ‡เบเบฒเบ™เบˆเบฒเบเบเบฒเบ™เปเบˆเบเบขเบฒเบเบชเบฒเบกเบฒเบ”เป‚เบซเบฅเบ”เป€เบŸเบตเบกเปเบง FPGA เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ FPGA. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ™เบตเป‰, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ™เบตเป‰เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบ‚เป‰เบญเบ; 4 เบชเบฑเบ™เบเบฒเบ™ DPI เบซเบผเบธเบ”เบฅเบปเบ‡. เป‚เบŠเบเบ”เบต, combs เบžเบดเป€เบชเบ”เบขเบนเปˆเปƒเบ™เบเบฐเบ”เบฒเบ™เบกเบต pinout เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰ Raspberry. เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบซเบกเบธเบ™เบเบฐเบ”เบฒเบ™เป„เบ”เป‰ 90 เบญเบปเบ‡เบชเบฒเปเบฅเบฐเบเบฑเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบกเบฑเบ™เบเบฑเบš raspberry เบ‚เบญเบ‡เบ‚เป‰เบญเบ:

เบˆเป HDMI เบ—เบตเบชเบญเบ‡เป„เบ›เบซเบฒ Raspberry Pi3 เบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš DPI เปเบฅเบฐเบเบฐเบ”เบฒเบ™ FPGA

เปเบ™เปˆเบ™เบญเบ™, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เปƒเบŠเป‰เป‚เบ›เปเบเบผเบก JTAG เบžเบฒเบเบ™เบญเบ, เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒ.

เบเบฑเบ‡เบกเบตเบšเบฑเบ™เบซเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ. เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเป† pin FPGA เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบ›เบฑเบ™เบ•เบปเบงเบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบกเบ‡เป„เบ”เป‰. เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบšเบฒเบ‡ pins เบ—เบตเปˆเบญเบธเบ—เบดเบ”เบ•เบปเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เบงเปˆเบฒเบชเบฑเบ™เบเบฒเบ™ GPIO_0 CLK เบšเปเปˆเป€เบ–เบดเบ‡เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™ FPGA, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบกเบ‡ FPGA เป„เบ”เป‰. เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบเบฑเบ‡เบ•เป‰เบญเบ‡เป€เบญเบปเบฒเบชเบฒเบเปœเบถเปˆเบ‡เปƒเบชเปˆเบœเป‰เบฒเบžเบฑเบ™เบ„เป. เบ‚เป‰เบญเบเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ GPIO_0 เปเบฅเบฐเบชเบฑเบ™เบเบฒเบ™ KEY[1] เบ‚เบญเบ‡เบเบฐเบ”เบฒเบ™:

เบˆเป HDMI เบ—เบตเบชเบญเบ‡เป„เบ›เบซเบฒ Raspberry Pi3 เบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš DPI เปเบฅเบฐเบเบฐเบ”เบฒเบ™ FPGA

เบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเป€เบˆเบปเป‰เบฒเป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ FPGA. เบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบ•เบปเป‰เบ™เบ•เปเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบชเบฑเบ™เบเบฒเบ™ HDMI เปเบกเปˆเบ™เบ„เบงเบฒเบกเบ–เบตเปˆเบชเบนเบ‡เบซเบผเบฒเบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ HDMI pinout, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบชเบฑเบ™เบเบฒเบ™ RGB เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™เบชเบฑเบ™เบเบฒเบ™เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡ serial:

เบˆเป HDMI เบ—เบตเบชเบญเบ‡เป„เบ›เบซเบฒ Raspberry Pi3 เบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš DPI เปเบฅเบฐเบเบฐเบ”เบฒเบ™ FPGA

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ‚เบญเบ‡โ€‹เบชเบฑเบ™โ€‹เบเบฒเบ™โ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบžเบทเปˆเบญโ€‹เบ•เป‰เบฒเบ™โ€‹เบเบฒเบ™โ€‹เปเบŠเบโ€‹เปเบŠเบ‡โ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบ—เบปเปˆเบงโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบชเบฒเบโ€‹เบชเบปเปˆเบ‡โ€‹. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบฅเบฐเบซเบฑเบ”เปเบ›เบ”เบšเบดเบ”เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบชเบฑเบ™เบเบฒเบ™เบชเบตเบˆเบฐเบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ 10-bit TMDS (Transition-minimized differential signaling). เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบžเบดโ€‹เป€เบชเบ”โ€‹เป€เบžเบทเปˆเบญโ€‹เป€เบญเบปเบฒโ€‹เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบš DC เบญเบญเบโ€‹เบˆเบฒเบโ€‹เบชเบฑเบ™โ€‹เบเบฒเบ™โ€‹เปเบฅเบฐโ€‹เบซเบผเบธเบ”โ€‹เบœเปˆเบญเบ™โ€‹เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เบชเบฑเบ™โ€‹เบเบฒเบ™โ€‹เปƒเบ™โ€‹เป€เบชเบฑเป‰เบ™โ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ 10 bits เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เป€เบชเบฑเป‰เบ™ serial เบชเปเบฒเบฅเบฑเบšเบซเบ™เบถเปˆเบ‡ byte เบ‚เบญเบ‡เบชเบต, เบกเบฑเบ™ turns เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบ„เบงเบฒเบกเป„เบง serializer เป‚เบกเบ‡เบ•เป‰เบญเบ‡เปเบกเปˆเบ™ 10 เป€เบ—เบปเปˆเบฒเบ‚เบญเบ‡เบ„เบงเบฒเบกเป„เบงเป‚เบกเบ‡ pixels เบฅเบงเบ‡. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบงเบดเบ”เบตเป‚เบญ 1280x720 60Hz, เบ„เบงเบฒเบกเบ–เบตเปˆ pixels เบฅเบงเบ‡เบ‚เบญเบ‡เป‚เบซเบกเบ”เบ™เบตเป‰เปเบกเปˆเบ™ 74,25 MHz. serializer เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™ 742,5 MHz.

FPGAs เบ›เบปเบเบเบฐเบ•เบด, เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ™เบตเป‰. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป‚เบŠเบเบ”เบตเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, FPGA เบกเบต pins DDIO เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™. เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบšเบปเบ”เบชเบฐเบซเบผเบธเบšเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™, 2-to-1 serializers. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบญเบญเบเบชเบญเบ‡เบšเบดเบ”เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบ•เบฒเบกเบ„เบงเบฒเบกเบ–เบตเปˆเบ‚เบญเบ‡เป‚เบกเบ‡เบ—เบตเปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เปเบฅเบฐเบซเบผเบธเบ”เบฅเบปเบ‡. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™ FPGA เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบšเปเปˆเปเบกเปˆเบ™ 740 MHz, เปเบ•เปˆ 370 MHz, เปเบ•เปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ” DDIO เปƒเบ™ FPGA. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ 370 MHz เปเบกเปˆเบ™เบ„เบงเบฒเบกเบ–เบตเปˆเบ—เบตเปˆเบšเบฑเบ™เบฅเบธเป„เบ”เป‰เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เปเบฅเป‰เบง. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบฎเบนเบšเปเบšเบš 1280x720 เปเบกเปˆเบ™เบˆเปเบฒเบเบฑเบ”. เบ„เบงเบฒเบกเบฅเบฐเบญเบฝเบ”เบชเบนเบ‡เบเบงเปˆเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เปƒเบ™ FPGA Cyclone IV เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบเบฐเบ”เบฒเบ™ Rover2rpi.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบเบฒเบ™เบญเบญเบเปเบšเบš, input pixel frequency CLK เป„เบ›เบซเบฒ PLL, เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบ„เบนเบ™เบ”เป‰เบงเบ 5. เปƒเบ™เบ„เบงเบฒเบกเบ–เบตเปˆเบ™เบตเป‰, R, G, B bytes เบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบ„เบนเปˆเบšเบดเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เบปเบงเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” TMDS เป€เบฎเบฑเบ”. เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปƒเบ™ Verilog HDL เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ:

module hdmi(
	input wire pixclk,		// 74MHz
	input wire clk_TMDS2,	// 370MHz
	input wire hsync,
	input wire vsync,
	input wire active,
	input wire [7:0]red,
	input wire [7:0]green,
	input wire [7:0]blue,
	output wire TMDS_bh,
	output wire TMDS_bl,
	output wire TMDS_gh,
	output wire TMDS_gl,
	output wire TMDS_rh,
	output wire TMDS_rl
);

wire [9:0] TMDS_red, TMDS_green, TMDS_blue;
TMDS_encoder encode_R(.clk(pixclk), .VD(red  ), .CD({vsync,hsync}), .VDE(active), .TMDS(TMDS_red));
TMDS_encoder encode_G(.clk(pixclk), .VD(green), .CD({vsync,hsync}), .VDE(active), .TMDS(TMDS_green));
TMDS_encoder encode_B(.clk(pixclk), .VD(blue ), .CD({vsync,hsync}), .VDE(active), .TMDS(TMDS_blue));

reg [2:0] TMDS_mod5=0;  // modulus 5 counter
reg [4:0] TMDS_shift_bh=0, TMDS_shift_bl=0;
reg [4:0] TMDS_shift_gh=0, TMDS_shift_gl=0;
reg [4:0] TMDS_shift_rh=0, TMDS_shift_rl=0;

wire [4:0] TMDS_blue_l  = {TMDS_blue[9],TMDS_blue[7],TMDS_blue[5],TMDS_blue[3],TMDS_blue[1]};
wire [4:0] TMDS_blue_h  = {TMDS_blue[8],TMDS_blue[6],TMDS_blue[4],TMDS_blue[2],TMDS_blue[0]};
wire [4:0] TMDS_green_l = {TMDS_green[9],TMDS_green[7],TMDS_green[5],TMDS_green[3],TMDS_green[1]};
wire [4:0] TMDS_green_h = {TMDS_green[8],TMDS_green[6],TMDS_green[4],TMDS_green[2],TMDS_green[0]};
wire [4:0] TMDS_red_l   = {TMDS_red[9],TMDS_red[7],TMDS_red[5],TMDS_red[3],TMDS_red[1]};
wire [4:0] TMDS_red_h   = {TMDS_red[8],TMDS_red[6],TMDS_red[4],TMDS_red[2],TMDS_red[0]};

always @(posedge clk_TMDS2)
begin
	TMDS_shift_bh <= TMDS_mod5[2] ? TMDS_blue_h  : TMDS_shift_bh  [4:1];
	TMDS_shift_bl <= TMDS_mod5[2] ? TMDS_blue_l  : TMDS_shift_bl  [4:1];
	TMDS_shift_gh <= TMDS_mod5[2] ? TMDS_green_h : TMDS_shift_gh  [4:1];
	TMDS_shift_gl <= TMDS_mod5[2] ? TMDS_green_l : TMDS_shift_gl  [4:1];
	TMDS_shift_rh <= TMDS_mod5[2] ? TMDS_red_h   : TMDS_shift_rh  [4:1];
	TMDS_shift_rl <= TMDS_mod5[2] ? TMDS_red_l   : TMDS_shift_rl  [4:1];
	TMDS_mod5 <= (TMDS_mod5[2]) ? 3'd0 : TMDS_mod5+3'd1;
end

assign TMDS_bh = TMDS_shift_bh[0];
assign TMDS_bl = TMDS_shift_bl[0];
assign TMDS_gh = TMDS_shift_gh[0];
assign TMDS_gl = TMDS_shift_gl[0];
assign TMDS_rh = TMDS_shift_rh[0];
assign TMDS_rl = TMDS_shift_rl[0];

endmodule

module TMDS_encoder(
	input clk,
	input [7:0] VD,	// video data (red, green or blue)
	input [1:0] CD,	// control data
	input VDE,  	// video data enable, to choose between CD (when VDE=0) and VD (when VDE=1)
	output reg [9:0] TMDS = 0
);

wire [3:0] Nb1s = VD[0] + VD[1] + VD[2] + VD[3] + VD[4] + VD[5] + VD[6] + VD[7];
wire XNOR = (Nb1s>4'd4) || (Nb1s==4'd4 && VD[0]==1'b0);
wire [8:0] q_m = {~XNOR, q_m[6:0] ^ VD[7:1] ^ {7{XNOR}}, VD[0]};

reg [3:0] balance_acc = 0;
wire [3:0] balance = q_m[0] + q_m[1] + q_m[2] + q_m[3] + q_m[4] + q_m[5] + q_m[6] + q_m[7] - 4'd4;
wire balance_sign_eq = (balance[3] == balance_acc[3]);
wire invert_q_m = (balance==0 || balance_acc==0) ? ~q_m[8] : balance_sign_eq;
wire [3:0] balance_acc_inc = balance - ({q_m[8] ^ ~balance_sign_eq} & ~(balance==0 || balance_acc==0));
wire [3:0] balance_acc_new = invert_q_m ? balance_acc-balance_acc_inc : balance_acc+balance_acc_inc;
wire [9:0] TMDS_data = {invert_q_m, q_m[8], q_m[7:0] ^ {8{invert_q_m}}};
wire [9:0] TMDS_code = CD[1] ? (CD[0] ? 10'b1010101011 : 10'b0101010100) : (CD[0] ? 10'b0010101011 : 10'b1101010100);

always @(posedge clk) TMDS <= VDE ? TMDS_data : TMDS_code;
always @(posedge clk) balance_acc <= VDE ? balance_acc_new : 4'h0;

endmodule

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ„เบนเปˆเบœเบปเบ™เบœเบฐเบฅเบดเบ”เป„เบ”เป‰เบ–เบทเบเบ›เป‰เบญเบ™เบเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ” DDIO, เป€เบŠเบดเปˆเบ‡เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบœเบฐเบฅเบดเบ”เบชเบฑเบ™เบเบฒเบ™เบซเบ™เบถเปˆเบ‡เบšเบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบ‚เบญเบšเบ—เบตเปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เปเบฅเบฐเบซเบผเบธเบ”เบฅเบปเบ‡.

DDIO เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ” Verilog เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

module ddio(
	input wire d0,
	input wire d1,
	input wire clk,
	output wire out
	);

reg r_d0;
reg r_d1;
always @(posedge clk)
begin
	r_d0 <= d0;
	r_d1 <= d1;
end
assign out = clk ? r_d0 : r_d1;
endmodule

เปเบ•เปˆเบชเปˆเบงเบ™เบซเบผเบฒเบเปเบฅเป‰เบงเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเบ™เบฑเป‰เบ™. เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡ Alter ALTDDIO_OUT เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ” DDIO. เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเปƒเบŠเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบšเบซเป‰เบญเบ‡เบชเบฐเปเบธเบ” ALTDDIO_OUT.

เบ—เบฑเบ‡เปเบปเบ”เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบเบฒเบเป€เบฅเบฑเบเบ™เป‰เบญเบ, เปเบ•เปˆเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™ Verilog HDL เบ—เบตเปˆเบ™เบตเป‰เปƒเบ™ github.

เป€เบŸเบตเบกเปเบงเบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเบชเปเบฒเบฅเบฑเบš FPGA เปเบกเปˆเบ™ flashed เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเบดเบš EPCS เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบเบฐเบ”เบฒเบ™ Mars Rover2rpi. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบเบฐเบ”เบฒเบ™ FPGA, FPGA เบˆเบฐเบ–เบทเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ flash เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบชเบปเบ™เบ—เบฐเบ™เบฒเป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡ Raspberry เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡.

เบ‚เป‰เบญเบเบเบณเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เปƒเบ™ Raspberry PI OS (32 bit) เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Debian Buster, เบฅเบธเป‰เบ™: เบชเบดเบ‡เบซเบฒ 2020,
เบงเบฑเบ™เบ—เบตเบ›เปˆเบญเบ: 2020-08-20, เบฅเบธเป‰เบ™ Kernel: 5.4.

เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบชเบญเบ‡เบขเปˆเบฒเบ‡:

  • เปเบเป‰เป„เบ‚เป„เบŸเบฅเปŒ config.txt;
  • เบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบŠเบตเบšเป€เบงเบต X เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบชเบญเบ‡เบˆเปเบžเบฒเบš.

เป€เบกเบทเปˆเบญเปเบเป‰เป„เบ‚เป„เบŸเบฅเปŒ /boot/config.txt เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™:

  1. เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰ i2c, i2s, spi;
  2. เป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เปเบ” DPI เป‚เบ”เบเปƒเบŠเป‰ overlay dtoverlay=dpi24;
  3. เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เปเบ”เบงเบดเบ”เบตเป‚เบญ 1280ร—720 60Hz, 24 bits เบ•เปเปˆ pixel เบชเบธเบ” DPI;
  4. เบฅเบฐเบšเบธเบˆเปเบฒเบ™เบงเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡ framebuffers 2 (max_framebuffers=2, เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเบชเบญเบ‡ /dev/fb1 เบˆเบฐเบ›เบฒเบเบปเบ”)

เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบ•เบฑเบกเบ‚เบญเบ‡เป„เบŸเบฅเปŒ config.txt เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰.

# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

dtparam=i2c_arm=off
dtparam=spi=off
dtparam=i2s=off

dtoverlay=dpi24
overscan_left=0
overscan_right=0
overscan_top=0
overscan_bottom=0
framebuffer_width=1280
framebuffer_height=720
display_default_lcd=0
enable_dpi_lcd=1
dpi_group=2
dpi_mode=87
#dpi_group=1
#dpi_mode=4
dpi_output_format=0x6f027
dpi_timings=1280 1 110 40 220 720 1 5 5 20 0 0 0 60 0 74000000 3

# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

[pi4]
# Enable DRM VC4 V3D driver on top of the dispmanx display stack
#dtoverlay=vc4-fkms-v3d
max_framebuffers=2

[all]
#dtoverlay=vc4-fkms-v3d
max_framebuffers=2

เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบตเป‰โ€‹, เบ—เปˆเบฒเบ™โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เบชเป‰เบฒเบ‡โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบ X เป€เบžเบทเปˆเบญโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เบชเบญเบ‡ framebuffers /dev/fb0 เปเบฅเบฐ /dev/fb1โ€‹:

เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบ /usr/share/x11/xorg.conf.d/60-dualscreen.conf เป€เบ›เบฑเบ™เปเบšเบšเบ™เบตเป‰

Section "Device"
        Identifier      "LCD"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb0"
        Option          "ShadowFB" "off"
        Option          "SwapbuffersWait" "true"
EndSection

Section "Device"
        Identifier      "HDMI"
        Driver          "fbturbo"
        Option          "fbdev" "/dev/fb1"
        Option          "ShadowFB" "off"
        Option          "SwapbuffersWait" "true"
EndSection

Section "Monitor"
        Identifier      "LCD-monitor"
        Option          "Primary" "true"
EndSection

Section "Monitor"
        Identifier      "HDMI-monitor"
        Option          "RightOf" "LCD-monitor"
EndSection

Section "Screen"
        Identifier      "screen0"
        Device          "LCD"
        Monitor         "LCD-monitor"
EndSection

Section "Screen"
        Identifier      "screen1"
        Device          "HDMI" 
	Monitor         "HDMI-monitor"
EndSection

Section "ServerLayout"
        Identifier      "default"
        Option          "Xinerama" "on"
        Option          "Clone" "off"
        Screen 0        "screen0"
        Screen 1        "screen1" RightOf "screen0"
EndSection

เบ”เบต, เบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Xinerama. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบทเป‰เบ™เบ—เบตเปˆ desktop เบˆเบฐเบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบญเบญเบเบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเป€เบ–เบดเบ‡เบชเบญเบ‡เบˆเป, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบงเบดเบ”เบตเป‚เบญเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

เบ™เบฑเป‰เบ™เบญเบฒเบ”เบˆเบฐเปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡ Raspberry Pi3 เบˆเบฐเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบชเบญเบ‡เบˆเปเบžเบฒเบš.

เบฅเบฒเบเบฅเบฐเบญเบฝเบ” เปเบฅเบฐเปเบœเบ™เบงเบฒเบ”เบงเบปเบ‡เบˆเบญเบ™เบ‚เบญเบ‡เบเบฐเบ”เบฒเบ™ Mars Rover2rpi เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰ เป€เบšเบดเปˆเบ‡เบ—เบตเปˆเบ™เบตเป‰.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com