|
INtime
Tech
¡¸INtime documentary¡¹~INtime ÃʽÉÀÚ
üÇè±â
| ¾Æ³¯·Î±× µ¥ÀÌÅÍ º¯È¯Ä¡ Ãëµæ ½º·¹µå ¿Ï¼º! |
¾Æ³¯·Î±× º¸µå¿Í °ÝÅõÇØ, °Ü¿ì ¾Æ³¯·Î±× µ¥ÀÌÅÍ º¯È¯Ä¡¸¦ ÃëµæÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. ¾Æ³¯·Î±×ÀÇ µ¥ÀÌÅÍ´Â 100 msÀÇ Æú¸µ ÁÖ±â·Î
ÃëµæÇÕ´Ï´Ù. ½º·¹µåÀÇ È帧À¸·Î¼´Â,
º¸µå °ËÃâ(¾Æ³¯·Î±× º¸µå¸¦ °ËÃâ)¡æÃʱâ ó¸®(¾Æ³¯·Î±× º¸µåÀÇ ÃʱâÈ¡æ¾Æ³¯·Î±× µ¥ÀÌÅÍ Ãëµæ
Áغñ)¡æ»ùÇøµ °³½Ã¡æµ¥ÀÌÅÍÀÇ Ãëµæ
ÀÌ µË´Ï´Ù. |
 |
10¿ù 17ÀÏ···ÀÎÅÍ·´Æ® 󸮡¡(ÀÎÅÍ·´Æ® 󸮱â·ÀÎÅÍ·´Æ® ½º·¹µå) |
|
»ç¾ç¿¡¼´Â 100 ms ¸¶´Ù ¾Æ³¯·Î±× µ¥ÀÌÅÍ ÃëµæÀ» À§ÇØ
"»ùÇøµ °³½Ã "Ä¿¸àµå¸¦ Ãâ·ÂÇØ, 0~7 CHÀÇ"µ¥ÀÌÅ͸¦ ÃëµæÇÏ´Â"
ÀÏ·Î ¾Æ³¯·Î±×
µ¥ÀÌÅÍ Ãëµæ ½º·¿µå´Â ¿Ï¼ºÇÕ´Ï´Ù.
|
|
¡Üº¸µå °ËÃâ ó¸®
|
| ¡¡ |
FindAnalogBord() |
|
¡Ü¾Æ³¯·Î±× º¸µå Ãʱâ ó¸®
|
| ¡¡ |
InitAnalogBoard() | | |
¾Æ³¯·Î±× µ¥ÀÌÅÍ Ãëµæ ½º·¹µå´Â void
GetADataThread(void)·Î, ÀÌ ½º·¹µåÀÇ ÁÖµÈ Å½ºÅ©(ÀÏ)´Â 100 ms ¸¶´Ù ¾Æ³¯·Î±× º¸µåÀÇ »ùÇøµ °³½Ã Ä¿¸àµå¸¦ Ãâ·ÂÇØ, 8
CHºÐÀÇ º¯È¯ µ¥ÀÌÅ͸¦ ÃëµæÇÏ´Â °ÍÀÔ´Ï´Ù. 100 msÀÇ Æú¸µ Áֱ⸦ ¸¸µå´Â °ÍÀº···
¾Æ·¡¿Í °°ÀÌ µË´Ï´Ù£º
|
while(1){
RtSleep(100); //100 mssleeve
}
| | |
 |
Æ®·¯ºí ¹ß»ý |
|
º¯È¯ µ¥ÀÌÅ͸¦ ÃëµæºÎ¿¡¼ Æ®·¯ºíÀÌ ¹ß»ýÇß½À´Ï´Ù·····.
¡¸º¯È¯ µ¥ÀÌÅÍÀÇ Ãëµæ
ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏÁö ¾Ê´Â´Ù!¡¹
|
ÀÎÅÍ·´Æ® ¿äÀÎÀº ¼³Á¤ÇØ Àִµ¥···. ÀÎÅÍ·´Æ®¶ó´Â °ÍÀ» Àß ¸ð¸£´Â ³ª´Â, ¹«¾ùÀ» ¾î¶»°Ô Á¶»çÇØµµ ÁÁÀº °ÍÀΰ¡
¸ô¶ú½À´Ï´Ù. |
|
ÇÊ¿äÇÑ °ÍÀº º¸µåÀÇ IRQ¿Í ±× º¸µåÀÇ ÀÎÅÍ·´Æ® ¿äÀÎÀÇ Æ¯Á¤ |
| ¡¡ |
¡ÜIRQ(ÀÎÅÍ·´Æ® ¹øÈ£)£º0~15±îÁöÀÇ ÀÎÅÍ·´Æ® ¹øÈ£°¡ ÀÖ¾î, °¢°¢ÀÇ ÇÏµå ±â±â´Â ³¢¾îµé¾î ¹øÈ£°¡
¡¡ÇÒ´çÇØÁö°í ÀÖ½À´Ï´Ù.
¡ÜÀÎÅÍ·´Æ® ¿äÀÎÀÇ Æ¯Á¤£º»ó±âÀÇ ÀÎÅÍ·´Æ®
| | |
 |
Æ®·¯ºíÀÇ ÇØ°á |
|
¾î¶² »óŰ¡ ÀÎÅÍ·´Æ®°¡ µé¾î°£ »óÅÂÀΰ¡ ¸ô¶ú±â ¶§¹®¿¡, È¥¶õÇØÁ® ¹ö·È½À´Ï´Ù.
ÀüÇô ¿òÁ÷ÀÌÁö ¾ÊÀº »óŰ¡ ±× »óŶó°í Áö·¹ ÁüÀÛÇØ,
¡¸¿òÁ÷ÀÌÁö ¾Ê´Â=ÀÎÅÍ·´Æ®°¡ µé¾î°¡Áö ¾Ê´Â´Ù¡¹¶ó°í »ý°¢Çϰí ÀÖ¾ú½À´Ï´Ù¸¸, WaitForRtInterrupt()·Î ¿¡·¯ üũ¸¦ ÇØ º¸¸é···µÇµ¹¾Æ ¿Â
¿¡·¯ÀÇ ³»¿ëÀº···
····ÀÎÅÍ·´Æ® 󸮱⸦ ¸¸µéÁö ¾Ê¾Ò´Ù! ¡ì·····ÀÌ·¡¼¾ß
ÀÎÅÍ·´Æ®¿¡ µé¾î°¡Áö ¾Ê´Â´Ù·····¡í
¡¸ÀÎÅÍ·´Æ® 󸮱â´Â ƯÁ¤ÀÇ ÀÎÅÍ·´Æ® ·¹º§ÀÇ ½ÅÈ£ ÀÔ·ÂÀ» ¹Þ¾Æ ±âµ¿ÇÕ´Ï´Ù. ÀÎÅÍ·´Æ® ½ÅÈ£
¹ß»ý½Ã, ½º·¹µå¸¦
±âµ¿ÇØ¾ß ÇÒ ÀÎÅÍ·´Æ®ÀÎÁö ¾î¶²Áö¸¦ ÆÇº°ÇØ, ½º·¹µå ±âµ¿À» °ÉÄ£´Ù···±×·¸´Ù°í ÇÏ´Â °ÍÀ̾ú½À´Ï´Ù.¡¹
±× ÈÄ,
ÀÎÅÍ·´Æ® 󸮱⸦ ¸¸µé¾ú½À´Ï´Ù¸¸ ¼ö¸¹Àº ½ÇÆÐ°¡ ÀÖ¾ú½À´Ï´Ù.
´ëÇ¥ÀûÀÎ °ÍÀº£º
|
|
¡Ü¾Æ³¯·Î±× º¸µåÀÇ ÃʱâÈ¿¡ ½ÇÆÐÇϰí ÀÖ¾ú±â ¶§¹®¿¡ ÀÎÅÍ·´Æ®ÀÇ ¼³Á¤ÀÌ Àß µÇÁö ¾Ê¾Ò´Ù |
| ¡¡ |
¾Æ³¯·Î±× º¸µåÀÇ ¾×¼¼½º¸¦ À§Çؼ ¼±µÎ ÁּҷκÎÅÍÀÇ ¿ÀÇÁ¼ÂÄ¡¸¦ ¼±¾ðÇÑ Çì´õ¸¦ ÀÛ¼ºÇß½À´Ï´Ù. ÀÌ ÀÛ¼ºÇÑ Çì´õÀÇ °ªÀÌ 10 Áø¼öÀÇ °ªÀ»
16ÁøÇ¥±âÇÒ °æ¿ì¿¡ ±×´ë·Î 10ÁøÇ¥±âÇϰí ÀÖ´ø ÀÏ¿¡ ÀÇÇØ ¼³Á¤ÇÑ ³»¿ëÀÌ ÁöÁ¤ÀÇ ÁÖ¼Ò¿¡ ½áÁö°í ÀÖÁö ¾Ê¾Ò½À´Ï´Ù. (BaseAddress +
12 ¢¢¡¡BaseAddress + 0x12¡¡·Î Çϰí ÀÖ´ø, ÀÌÀü¿¡µµ º¥´õ ID, µð¹ÙÀ̽º IDÁöÁ¤ºÎ ÀÌ ½ÇÆÐ¸¦ Çß½À´Ï´Ù.
|
|
¡Ü¼³Á¤ÇÑ IRQÄ¡°¡ Â÷À̰¡ ³µ±â ¶§¹®¿¡, ÀÎÅÍ·´Æ®ÀÇ ¼³Á¤ÀÌ Àß µÇÁö ¾Ê¾Ò´Ù |
| ¡¡ |
¾Æ³¯·Î±× º¸µåÀÇ °ËÃâ ÇÔ¼ö·Î ³¢¾îµé¾î ·¹º§Ä¡¸¦ µÇµ¹¸®°í ÀÖ´ø °ÍÀ», µµÁß¿¡ ÇÔ¼öÀÇ ÇüŸ¦ º¯°æÇØ, ¹Ýȯ°ªÀ» TRUE/FALSE·Î
Çß½À´Ï´Ù. ±×·¯³ª, ±×´ë·Î ¹Ýȯ°ªÀ» ³¢¾îµé¾î ·¹º§°ú ¼³Á¤ÇØ ÀÖ¾ú±â ¶§¹®¿¡, 1(TRUE)À̶ó°í ÇÏ´Â °ªÀ¸·Î ÀÎÅÍ·´Æ® 󸮱⸦ ¼³Á¤ÇØ ÀÖ¾ú½À´Ï´Ù.
| | |
»ó±âÀÇ ½ÇÆÐ¸¦ ±Ù°Å·Î ÇØ º¸µå °ËÃâ ó¸® FindAnalogBoard(¾Æ³¯·Î±× º¸µåÀÇ °ËÃâ)ÀÇ °á°ú, º¸µå °ËÃâ OKÀÇ
°æ¿ì, CreateRtThread¿¡ ÀÇÇØ GetDataThread(¾Æ³¯·Î±× µ¥ÀÌÅÍ Ãëµæ ½º·¿µå)°¡
»ý¼ºµË´Ï´Ù.
GetDataThreadÀÇ °³½ÃºÎ¿¡¼, ¾Æ³¯·Î±× º¸µåÀÇ Ãʱâ ó¸® InitAnalogBoard()¸¦ ÄÝ ÇÕ´Ï´Ù,
µ¿½Ã¿¡, ÀÎÅÍ·´Æ® ¿äÀÎ(Data Read Enabled)ÀÇ ÀÎÅÍ·´Æ®½Ã¿¡ À̺¥Æ®¸¦ ¹Þ¾Æ, ±× ŸÀֿ̹¡ »ùÇøµÀ» ½Ç½ÃÇÏÁö ¾ÊÀ¸¸é ¾ÈµÇ±â ¶§¹®¿¡,
ÀÎÅÍ·´Æ® 󸮱⸦ ¼³Á¤Çß½À´Ï´Ù.
ÀÎÅÍ·´Æ® 󸮱âÀÇ ÄÚµå´Â INtime À§Àúµå·Î ÀÎÅÍ·´Æ® 󸮱â¿Í ½º·¿µå, ¸¦ ÁöÁ¤ÇÏ´Â °ÍÀ¸·Î½á,
ÄÚµå´Â Ãâ·ÂµÇ±â ¶§¹®¿¡, 󸮸¦ ±× Áß¿¡ ±â¼úÇß½À´Ï´Ù.
ÀÌÇϰ¡ ÀÎÅÍ·´Æ® 󸮱âÀÇ ¼³Á¤ APIÀÔ´Ï´Ù£º |
| ¡¡ |
SetRtInterruptHandler(wLevel, 1,
Int1Handler)) |
|
INtime Help·ÎºÎÅÍ SetRtInterruptHandler¸¦ Á¶»çÇϸé, À§ÀÇ ½Ã½ºÅÛ ÄÝÀº ¡¸ÀÎÅÍ·´Æ® ·¹º§
wLevelÀÇ ÀÎÅÍ·´Æ®°¡ 1µµ ÀÔ·ÂÇϸé Int1Handler¿¡ 󸮸¦ °Ç³×ÁÝ´Ï´Ù(Int1Handler¸¦ ÄÝ ÇÕ´Ï´Ù)¡¹¶ó°í ÀÐÀ» ¼ö
ÀÖ½À´Ï´Ù. ¹ú½á À§Àúµå¿¡ ÀÇÇØ Äڵ尡 µÇ¾î Àֱ⠶§¹®¿¡, Çڵ鷯ÀÇ È£Ã⠺κÐÀº ÁÁ¾Æ.
ÀÎÅÍ·´Æ®
󸮱âÃø(Int1Handler)¿¡¼ ÀÎÅÍ·´Æ® ¿äÀÎÀÇ Æ¯Á¤À» ½Ç½ÃÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ÀÎÅÍ·´Æ® ·¹º§À» ¼³Á¤ÇÑ Çڵ鷯¿¡´Â, ±× ·¹º§ÀÇ ÀÎÅÍ·´Æ®°¡
¸ðµÎ µé¾î°©´Ï´Ù. ÀÎÅÍ·´Æ®ÀÇ ÀԷ½ÿ¡ Àִ ƯÁ¤ »óŽø¸ 󸮸¦ ½Ç½ÃÇÏ´Â °æ¿ì, ÀÎÅÍ·´Æ® 󸮱⳻¿¡¼ ±× Á¶°ÇÀ» ÆÇº°ÇØ, Á¶°Ç ¼º¸³½Ã´Â
SignalRtInterruptThread(wLevel)·Î ÀÎÅÍ·´Æ® ½º·¹µå ±âµ¿À» ÇØ, ±× Àܴ̿Â
SignalEndOfRtInterrupt(wLevel)·Î ¾ïÁ¦ÇÕ´Ï´Ù.
| | |
| ÀÎÅÍ·´Æ® 󸮱âÀÇ ±â¼ú
ºÎºÐ£º |
__INTERRUPT void Int1Handler(void)
{
__INTERRUPT_PROLOG(); //ÀÎÅÍ·´Æ® 󸮱âÀÇ ¹üÀ§ °³½Ã
// ÀÎÅÍ·´Æ® ·¹º§À» ¼³Á¤ÇÕ´Ï´Ù
EnterRtInterrupt(wLevel);
//ÀÎÅÍ·´Æ® ¿äÀÎÀÇ Æ¯Á¤£º
¡¡ if ((inbyte(strInfo.analogAdd + 0x0c & 0x02 != 0x02)
SignalEndOfRtInterrupt(wLevel);//ƯÁ¤ÀÇ ÀÎÅÍ·´Æ® Á¶°Ç Àܴ̿ ½Ã±×³Î ¹ß½ÅÀ» Á¤Áö
else
SignalRtInterruptThread(wLevel);//ƯÁ¤ÀÇ ÀÎÅÍ·´Æ® Á¶°Ç ¼º¸³½Ã´Â ½Ã±×³ÎÀ» ¹ßÇÏ´Â
__INTERRUPT_RETURN(); //ÀÎÅÍ·´Æ® 󸮱âÀÇ ¹üÀ§ Á¾·á
} |
| ÀÎÅÍ·´Æ® ¿äÀÎÀÌ È®Á¤ÇßÀ» °æ¿ì¸¸ Ãâ·ÂÇÏ´Â(SignalRtInterruptThread)¿¡ ÀÇÇØ
WaitForRtInterrupt()·Î ³¢¾îµé¾î ´ë±â ó¸® ÀÌÇÏÀÇ Ã³¸®°¡ ½ÇÇàµË´Ï´Ù.
½ÇÄÚµå´Â ÀÌÇÏ¿Í °°ÀÌ µÇ°ÚÁö¿ä£º
|
| ½º·¹µåÀÇ ±â¼ú£º
|
while(1){
RtSleep(100); //100 mssleeve
//º¯È¯ µ¥ÀÌÅͰ¡ ¼³Á¤µÉ ¶§±îÁö(ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÒ ¶§±îÁö) ±â´Ù¸°´Ù£º
wLevel´Â ¾Æ³¯·Î±× º¸µåÀÇ ¼¼Ä¡±â ¹øÈ£
if(WaitForRtInterrupt(wLevel,WAIT_FOREVER) != TRUE){
//ºí·Ï
}
¾Æ³¯·Î±× º¯È¯ µ¥ÀÌÅ͸¦ ÃëµæÇÏ´Â
}
| | |
 |
¿À´ÃÀÇ °¨»ó |
|
ÀÎÅÍ·´Æ® ½º·¹µå¶õ, ÀÎÅÍ·´Æ® 󸮱⸦ ¼³Á¤ÇØ, Çڵ鷯¿¡ ÀÇÇØ ±âµ¿µÇ´Â ½º·¹µå·Î ±× Àܴ̿ ƯÈ÷ Åë»óÀÇ ½º·¹µå¿Í º¯È°¡ ¾ø´Ù°í ÇÏ´Â °ÍÀ»
¾Ë¾Ò½À´Ï´Ù(½º·¹µåÀÇ »ý¼º ¹æ¹ý µî···).
|
HOME |
INtime
|