
ããæ¥ãç§ã®å人ããããã¬ãã§ã«ãŠã³ãããŠã³ã¿ã€ããŒã䜿ã£ãŠå€§ããªæ°åã衚瀺ããæ¹æ³ãå°ããŸããã ã©ããããã/ iPad / Androidãæ¥ç¶ããŠã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããšã¯æããã§ããé¢åãªã®ã¯ã©ãããããã ãã§ãå人ãç§ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãäœæããããšã¯ãããŸããã
ãããŠãç§ã¯AVRãã€ã¯ãã³ã³ãããŒã©ãŒäžã®TV端æ«ã®ãããã¯ãŒã¯ãããžã§ã¯ãã§èŠãããšãæãåºããŸããã å°ããªãã£ã©ã¯ã¿ãŒã倧ããªãã£ã©ã¯ã¿ãŒã«ãŸãšãããšããã¢ã€ãã¢ãããã«ç§ã®é ã«æµ®ãã³ãããã詊ãããšã«ããŸããã ã©ããããããç§ã¯äž»ãªä»äºãããªããã°ãªããªãã£ãããšã倿ããŸããã
ãã¡ãããMKã§ããã€ã¹ãéçºããçµéšã¯å°ããããŸãããæ¢è£œã®ãã®ã賌å
¥ããæ¹ãç°¡åã§ãããã®ããããã¬ãã«åºåããããã®æ¢è£œã®ãœãªã¥ãŒã·ã§ã³ãç©æ¥µçã«æ¢ãå§ããŸããã äž»ãªæ€çŽ¢æ¡ä»¶ã¯ãäœããããŸããå¯èœã§ããã°åçŽããã¢ã»ã³ãã©ãŒæ¿å
¥ãªãã®Cèšèªã®äœ¿çšãããã³é«ç»è³ªã§ããã
å€ãã®ãããžã§ã¯ããèŠã€ãããŸããããã»ãšãã©ã®ãããžã§ã¯ãã¯ç¹ã«åºæºãæºãããŠããŸããã§ããã ãã®åŸãäž»ãªããšã¯ãããªä¿¡å·åœ¢æã®åçãçè§£ããããšã§ããããšãæããã«ãªããããããç©äºãé²ãã§ãããã ãããããã®æ®µéã§ã
ããã·ã ã€ãã©ã®ã¢ãã®ãããžã§ã¯ããSimple VGA / Video Adapterãã¯çµ¶å¯Ÿçãªãæ°ã«å
¥ãã«ãªãããããç§ã®æè¡ã®åºç€ãšãªããŸããã ãã ããäœæ¥ã®éçšã§ãããããæ§é ã®ã¿ãæ®ããå®è£
ãã»ãŒå®å
šã«ããçŽãå¿
èŠããããŸããã
ç§ãå®éã«æãã€ãã远å ã®ã¿ã¹ã¯ã¯ãIRãªã¢ã³ã³ããåææéãèšå®ããããšã§ããã
ã¡ã€ã³ã³ã³ãããŒã©ãšããŠã20 MHzã§åäœããATMega168ã䜿çšããããšã«ããŸããã ãããªã·ã§ãŒããŒã®ããŒããŠã§ã¢ã¯æ¬¡ã®ããã«ãªããŸãã

ç§ã¯ãããžã§ã¯ãããVGAã«é¢é£ãããã®ããã¹ãŠæšãŠãããšããå§ããŸããã ãã®
éçšã§ ããããªã³ãŒãã£ã³ã°æšæºãç ç©¶ããŸããã
ãMartin Hinnerã®ãµã€ãããæãã¢ã¯ã»ã¹ããããç»åãèŠããŸããã

ã
ãã®åçããåæä¿¡å·çºçåšãäœæããŸããã
ãžã§ãã¬ãŒã¿ã¯ãfastPWMã¢ãŒãã®Timer1ã«åºã¥ããŠããŸãã ããã«ãã°ããŒãã«å€æ°ã¯ã¯ããã¯ã«ãŠã³ã¿ãŒã«ãã£ãŠç·šæãããŸãã ã¿ã€ããŒãªãŒããŒãããŒã®å²ã蟌ã¿ããšã«ãããŒå€ã®ã¯ããã¯çªå·ããã§ãã¯ãããæ¬¡ã®ã¯ããã¯ãã«ã¹ã®æç¶æéãšæ¬¡ã®ã¯ããã¯ãã«ã¹ã®åšæã倿ŽãããŸãïŒãã«ã©ã€ã³/ããŒãã©ã€ã³ïŒã 倿Žãå¿
èŠãªãå Žåã¯ãæšæºçãªã¢ã¯ã·ã§ã³ãå®è¡ãããŸã-ã¯ããã¯ãã«ã¹ã®ã«ãŠã³ã¿ãŒãå¢å ããä»ã®å€æ°ã倿ŽãããŸãã
ã¿ã€ããŒã®åæåïŒé¢æ°ãã©ã°ã¡ã³ãïŒ ã¯ããã¯ãžã§ãã¬ãŒã¿ãŒ 
åã©ã€ã³ã®çµããã§ãã³ã³ãããŒã©ãŒã¯ã¹ãªãŒãç¶æ
ã«ãªããã¿ã€ããŒãªãŒããŒãããŒã«ããå²ã蟌ã¿åŸã«ãŠã§ã€ã¯ã¢ããããŸãããã®åŸãMakeSyncïŒïŒé¢æ°ãããã«åŒã³åºãããæ¬¡ã®åææéã®ã¿ã€ããŒèšå®ãèšå®ããŸãããã®åŸãã¯ããã¯æ°ãå¯èŠé åã«å
¥ããšããããªä¿¡å·ãéå§ãããŸã
ãããªåºåã¯SPIã«ãã£ãŠç·šæãããã¯ããã¯ä¿¡å·ã®åšæ³¢æ°ã®ååã«çããæå€§åšæ³¢æ°ã§åäœããŸãã
#define #define SPI_PORT PORTB #define SPI_DDR DDRB #define MOSI PORTB3 #define MISO PORTB4 #define SCK PORTB5
SPIåæåïŒãã©ã°ã¡ã³ãïŒ åºåããã»ã¹èªäœã¯ãDrawString颿°ã«ãã£ãŠåè¡ã§å®è¡ãããŸããDrawString颿°ã¯ããã©ã¡ãŒã¿ãŒãšããŠãåºåçšã®æ°åã®é
åãžã®ãã€ã³ã¿ãŒã䜿çšãããã©ã³ããžã®ãã€ã³ã¿ãŒã衚瀺ããæåæ°ãæž¡ããŸãã ãŸããåºåã§ã¯ãåãã©ã³ãã®åºåè¡ã®çªå·ãšæåçªå·ã«ã°ããŒãã«å€æ°ã䜿çšãããŸãã åæåã®å
éšã§ãæåã®å¹
ïŒãã€ãåäœïŒã«çããååŸ©åæ°ã®ã«ãŒãã§ããããã®ãã©ã³ããã€ããSPDRã¬ãžã¹ã¿ã«è»¢éãããŸãã
ããã«ãAVRã³ã³ãããŒã©ãŒã®SPIã®ããŒããŠã§ã¢å®è£
ã§ã¯ãè€æ°ãã€ãã®ããŒã¿ãé£ç¶ããŠéä¿¡ã§ããŸããã åãã€ãã®åŸã«ã1ããããã¹ããããããç»åã«ã®ã£ãããçããŸãã

å°ã説æå°ãã§ãééã£ãŠããŸãã ãã€ãã転éãããåŸãMOSIåºåã¯é«ã¬ãã«ã®ãŸãŸã§ããããã®åçã§ã¯ã74N0404ã€ã³ããŒã¿ãŒãä»ããŠãããªåºåããªã³ã«ãªããåºååã«ãã©ã³ããã€ããå転ããããããã®ã£ãããé»ã«ãªããŸãã ã€ã³ããŒã¿ãªãã§ã¯ãçœã瞊çžãåŸãããŸãã
ãã®æ¬ ç¹ã
å
æããã«ã¯ãå¿
èŠã«å¿ããŠãããªåºåããããé«ã€ã³ããŒãã³ã¹ç¶æ
ã«åãæ¿ããŠãåºåãã€ãã®æåŸã®ããããç¹°ãè¿ã
TellyMateãããžã§ã¯ãã§ææ¡ãããããªãã¯ã䜿çšããå¿
èŠããããŸããã æ©èœã®ãã®éšåã¯éåžžã«æéãéèŠã§ãããã¢ã»ã³ãã©ãŒã®æåŠã«ãã
ãã¿ã³ããªã³ã䜿çšããŠããªãããŒãªè§£æ±ºç
ãèŠã€ããå¿
èŠãçããŸããã
ã©ã€ã³åºåæ©èœ inline void DrawString (unsigned char *str_buffer[], struct FONT_INFO *font, unsigned char str_symbols) { unsigned char symbol_width; unsigned char i; unsigned char * _ptr; unsigned char * _ptr1; y_line_render++;
ç»åãåä¿¡ããåŸããªã¢ãŒãã³ã³ãããŒã«ããã®èµ€å€ç·ããã±ãŒãžã®åä¿¡ãšåæã«ã€ããŠã¯çåããªããåã«ååãªé床ããªãã£ãããšãæããã«ãªã£ããããUARTãä»ããã³ãã³ãã®åä¿¡ãæ®ããŸããã å¥ã®ãã€ã¯ãã³ã³ãããŒã©ãŒãIRãåä¿¡ããŸãã
ã¯ããã¯ã衚瀺ããããã«å¿
èŠãª2çªç®ã®ãããã¡ãŒã远å ãããŸããã ãããã£ãŠã2ã€ã®ãã©ã³ãããããŸãã ãã©ã³ããã¡ã€ã«æ§é ã¯ãæåã®å®éã®ããããããããã©ã³ãã®é«ã宿°ãåæåã®ãªãã»ããã®é
åãåæåã®å¹
ã§æ§æãããŸãã
ããã°ã©ã ããç°¡åã«ã¢ã¯ã»ã¹ã§ããããã«ããã©ã³ããèšè¿°ããæ§é ããããŸãã
DotFactoryããã°ã©ã ã«ãã£ãŠçæããããã©ã³ãã
ãã¬ãŒã ã®äžå¯èŠéšåã§ã¯ãã¯ããã¯ãšã¿ã€ããŒãç§»åããUARTãåä¿¡ããã³ãã³ãã«å¯Ÿããåå¿ããããŸãã
UARTåä¿¡ unsigned char clock_left; bool clock_set; volatile unsigned char MinTens, MinOnes; volatile unsigned char SecTens, SecOnes; static void pal_terminal_handle(void) { unsigned char received_symbol = 0;
颿°mainïŒïŒ; volatile bool _Stop; struct FONT_INFO { unsigned char height; unsigned char * bitmap; unsigned int * offset; unsigned char * width; } Digital7, comdot; int main(void) { avr_init();
IRãªã¢ãŒãã³ã³ãããŒã«ããã³ãŒãããUARTçµç±ã§ã³ãã³ããéä¿¡ããã³ã³ãããŒã©ãŒãšããŠãATTiny45ã䜿çšããŸããã ããŒããŠã§ã¢UARTããªããããéä¿¡ã®ã¿ã«
æ©èœãããœãããŠã§ã¢UARTã®éåžžã«ã³ã³ãã¯ããª
æ©èœãã€ã³ã¿ãŒãããäžã§èŠã€ãããŸããããŸã
ããªã¢ãŒãã³ã³ãããŒã«ããã³ãã³ããèªã¿åãããã®ã·ã³ãã«ãª
æ©èœ ïŒãã³ãŒããªãïŒ
ãããã¯ãã¹ãŠããã«ããŒãã«åéãããã³ã³ãã€ã«ãããŸããã ãªã¢ãŒãã³ã³ãããŒã«ãã¿ã³ã®ã³ãŒãã¯ãã³ãŒãã«ããŒãã³ãŒããããŠããŸãã ããã«ãã³ãã³ãåä¿¡æã«ç¹æ»
ããLEDãäœæããŸããã
IRããã³UARTåä¿¡æ©/ *
* Tiny85_UART.c
*
*äœææ¥ïŒ2016幎4æ19æ¥9:22:52 PM
*èè
ïŒã¢ã³ãããª
* /
#include <avr / io.h>
#include "dbg_putchar.h"
#include <avr / interrupt.h>
//ïŒ<stdlib.h>ãå«ãã
#include <stdbool.h>
//ãã«ã¹é·ãšäŒæ¢ãæ¯èŒããããã®ãããå€
static const char IrPulseThershold = 9; // 1024/8000 * 9 = 1.152ããªç§
//ããã±ãŒãžãåãåãããã®ã¿ã€ã ã¢ãŠããå®çŸ©ããŸã
//ãã«ã¹ãšããŒãºã®æå€§é·ãå¶éããŸã
static const uint8_t TimerReloadValue = 100;
static const uint8_t TimerClock =ïŒ1 << CS02ïŒ| ïŒ1 << CS00ïŒ; // 8 MHz / 1024
volatile unsigned char blink = 0;
#define blink_delay 3;
æ®çºæ§æ§é äœir_t
{
//ã¡ãŒã«ã®åä¿¡ãéå§ãããã©ã°
uint8_t rx_started;
//åãå
¥ããããã³ãŒã
uint32_tã³ãŒãã
//åä¿¡ãããã¡
rx_buffer;
} ir;
static void ir_start_timerïŒïŒ
{
TCNT0 = 0;
TCCR0B = TimerClock;
}
//ã¿ã€ããŒããªãŒããŒãããŒãããšãããã±ãŒãžãåãå
¥ãããããšã¿ãªããŸã
//åä¿¡ããã³ãŒãããããã¡ããã³ããŒããŸã
//ãã©ã°ããªã»ããããŠã¿ã€ããŒã忢ããŸã
ISRïŒTIMER0_OVF_vectïŒ
{
ir.code = ir.rx_buffer;
ir.rx_buffer = 0;
ir.rx_started = 0;
ifïŒir.code == 0ïŒ
TCCR0B = 0;
TCNT0 = TimerReloadValue;
}
ISRïŒTIMER1_OVF_vectïŒ
{
ifïŒç¹æ»
== 0ïŒ
{
OCR1B = 0;
}
ä»ã«
{
OCR1B = 200;
ç¹æ»
-;
}
}
//äžæãšäžéã®å€éšäžæ
ISRïŒINT0_vectïŒ
{
uint8_t delta;
ifïŒir.rx_startedïŒ
{
//ãã«ã¹/äŒæ¢æéãéŸå€ãããé·ãå Žå
//ãããã¡ã«1ãã·ããããŸãããã以å€ã®å Žåã¯ãŒãã«ã·ããããŸãã
delta = TCNT0-TimerReloadValue;
ir.rx_buffer << = 1;
ifïŒdelta> IrPulseThersholdïŒir.rx_buffer | = 1;
}
ãã®ä»{
ir.rx_started = 1;
ir_start_timerïŒïŒ;
}
TCNT0 = TimerReloadValue;
}
void dbg_putsïŒchar * sïŒ
{
whileïŒ* sïŒdbg_putcharïŒ* s ++ïŒ;
}
int mainïŒvoidïŒ
{
GIMSK | = _BVïŒINT0ïŒ;
MCUCR | =ïŒ1 << ISC00ïŒ| ïŒ0 << ISC01ïŒ;
TIMSK =ïŒ1 << TOIE0ïŒ|ïŒ1 << TOIE1ïŒ;
ir_start_timerïŒïŒ;
dbg_tx_initïŒïŒ;
DDRB | = _BVïŒPB4ïŒ;
TCCR1 | =ïŒ1 << CS13ïŒ|ïŒ1 << CS12ïŒ|ïŒ0 << CS11ïŒ|ïŒ0 << CS10ïŒ;
GTCCR | =ïŒ1 << COM1B1ïŒ|ïŒ0 << COM1B0ïŒ|ïŒ1 << PWM1BïŒ;
OCR1C = 255;
OCR1B = 0;
ç¹æ»
= 0;
seiïŒïŒ;
// dbg_putsïŒïŒHelloWorldïŒ;
ïŒ1ïŒ
{
// ir.codeããŒãã§ãªãå Žåãæ°ããã³ãã³ããæ¡çšããŸãã
ifïŒir.codeïŒ
{
//ã³ãŒããæååã«å€æããŸã
//ultoa(ir.codeãbufã16ïŒ;
// dbg_putsïŒbufïŒ; //ãããŠããŒããžã®åºå
// ================================================= ===================
ã¹ã€ããïŒir.codeïŒ
{
case 0x2880822aïŒblink = blink_delay; dbg_putcharïŒ '1'ïŒ; äŒæ©;
ã±ãŒã¹0x8280282aïŒç¹æ»
= blink_delay; dbg_putcharïŒ '2'ïŒ; äŒæ©;
ã±ãŒã¹0x8a0020aaïŒblink = blink_delay; dbg_putcharïŒ '3'ïŒ; äŒæ©;
case 0x0a00a0aaïŒblink = blink_delay; dbg_putcharïŒ '4'ïŒ; äŒæ©;
case 0x0280a82aïŒblink = blink_delay; dbg_putcharïŒ '5'ïŒ; äŒæ©;
ã±ãŒã¹0x2a888022ïŒç¹æ»
= blink_delay; dbg_putcharïŒ '6'ïŒ; äŒæ©;
case 0x0200a8aaïŒblink = blink_delay; dbg_putcharïŒ '7'ïŒ; äŒæ©;
case 0x0a80a02aïŒblink = blink_delay; dbg_putcharïŒ '8'ïŒ; äŒæ©;
ã±ãŒã¹0x22888822ïŒblink = blink_delay; dbg_putcharïŒ '9'ïŒ; äŒæ©;
ã±ãŒã¹0x20888a22ïŒblink = blink_delay; dbg_putcharïŒ '0'ïŒ; äŒæ©;
ã±ãŒã¹0x0008aaa2ïŒblink = blink_delay; dbg_putcharïŒ 'O'ïŒ; äŒæ©;
case 0x280882a2ïŒblink = blink_delay; dbg_putcharïŒ 'U'ïŒ; äŒæ©;
ã±ãŒã¹0x8880222aïŒç¹æ»
= blink_delay; dbg_putcharïŒ 'D'ïŒ; äŒæ©;
case 0x0808a2a2ïŒblink = blink_delay; dbg_putcharïŒ 'L'ïŒ; äŒæ©;
case 0xa0080aa2ïŒblink = blink_delay; dbg_putcharïŒ 'R'ïŒ; äŒæ©;
case 0x20088aa2ïŒblink = blink_delay; dbg_putcharïŒ '*'ïŒ; äŒæ©;
case 0x220888a2ïŒblink = blink_delay; dbg_putcharïŒ 'ïŒ'ïŒ; äŒæ©;
ããã©ã«ãïŒbreak;
}
ir.code = 0;
// ================================================= =====================
}
}
}
æçµçãªã¹ããŒã ã¯æ¬¡ã®ãšããã§ãã

æåã®ããŒãžã§ã³ã¯ãã±ãŒã¹ãšããŠãã¬ãã·ã¬ã©ã¹ã䜿çšããŠãã¬ããããŒãã«çµã¿ç«ãŠãããŸããã

黿ºã¯å°å
ã®åºã§12V 500mAã§æãç°¡åãªãã®ãè²·ããŸããã
Pultik
ã¯ebayã§æ³šæããŸããã
çµæã¯æ¬¡ã®ãšããã§ãã

ã¿ã€ããŒã¯ãå²ãåœãŠãããæéã«ã€ããŠéšéã®ã¹ããŒã«ãŒã«ç¥ãããããã«äœ¿çšãããŸãã

èšç»-stm32ã§ãªã¡ã€ã¯ãã1ã€ã®ã³ã³ãããŒã©ãŒã«åãŸããã±ãŒã¹å
ãããçŸããé
眮ããŸãã
ãæž
èŽããããšãããããŸããã