[INTERFACE]/PIC18F_ETHERNET2009. 12. 25. 16:33

[PIC18F67J60 EVM] Ethernet Test - C#을 이용한 TCP/IP 네트웍 제어

[PIC18F67J60 EVM] Ethernet Test -  C#을 이용한 TCP/IP 네트웍 제어


PIC18F67J60은 소형 페키지에 Ehternet MAC + Ehternet Phy + PIC18 + ACD + SPI + I2C + UART 가 포함된 MCU로 소형 웹서버나 이더넷 제어에 편리하다. Microchip사에서 제공하는 무료 TCP/IP 스텍을 이용하여 간단한 TCP/IP제어를 해보았다.


C#을 이용한 PC프로그램 작성
C#을 이용하면 PC프로그램을 쉽게 작성가능하다.



private void button1_Click(object sender, EventArgs e)
{
            try
            {
                String ia_addr;
                ia_addr = textIP1.Text + "." + textIP2.Text + "." + textIP3.Text + "." + textIP4.Text;
                
                client = new TcpClient();
                client.Connect(ia_addr, Convert.ToInt16(textPort.Text));

                label1.Text = "서버에 접속 했습니다.";

            }
            catch
            {
                label1.Text = "서버에 접속하지 못 했습니다.";
            }
}


PIC18F67J60 펌웨어 소스
void main (void)
{
 char sw_flag = 0;
 //Init System
 SystemInit();
 
 //Init LED
 Led1Init();
 Led2Init();

 Led2On();
 Led1On(); 

 Sw1Init();
 U0_Init(0);
 Delay(10);

 U0_PutStr("PIC18F67J60 EVM\r\n");

    // Initialize all stack related components.
    // Following steps must be performed for all applications using
    // PICmicro TCP/IP Stack.

    TickInit();

    // Following steps must be performed for all applications using
    // PICmicro TCP/IP Stack.

    MPFSInit();

    // Initialize Stack and application related NV variables.
    InitAppConfig();

    StackInit();
    whlile(1)
   {
        // This task performs normal stack task including checking
        // for incoming packet, type of packet and calling
        // appropriate stack entity to process it.

        StackTask();

        // In future, as new TCP/IP applications are written, it
        // will be added here as new tasks.
       ProcessTCPClient();
       ProcessDebug();
   }
}

[PIC18F67J60 EVM] Ethernet테스트 동영상 - C#을 이용한 TCP/IP 제어

Posted by nexp

댓글을 달아 주세요

  1. 주인장님 얼굴은 왜 안나오나요?

    2010.01.03 17:27 [ ADDR : EDIT/ DEL : REPLY ]
  2. 비밀댓글입니다

    2010.02.09 13:22 [ ADDR : EDIT/ DEL : REPLY ]
  3. 비밀댓글입니다

    2010.04.26 15:50 [ ADDR : EDIT/ DEL : REPLY ]

[Proramming]/C#2009. 11. 28. 14:46

Serial LCD 제어 - C#을 이용한 LCD제어

Serial LCD 제어 - C#을 이용한 LCD제어


 Serial LCD 모듈을 이용하면 시간, 온도등 PC상의 기타 정보를 쉽게 표시할 수 있다. 특히 인터넷을 이용하면 오늘의 날씨, 뉴스 등도 쉽게 정보를 얻어올 수 있다. 일단 간단이 PC에서 입력한 정보가 LCD에 출력되는 프로그램을 작성해 보았다.

C#을 이용하여 Serial LCD 모듈을 제어 하는 프로그램 작성
USB2UART를 이용하여 Serial Prot로 데이터를 출력하도록 했다. 특히 C#을 이용하면 화면 출력에 관련된 여러가지 기능들을 쉽게 처리할 수 있어 상당히 편리하다.



간단히 몇줄의 코드를 이용하여 작성가능하다.
        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = "C# Serial Test";
            serialPort1.Open();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            char[] str = new char[2];
            if (index > 0)
            {
                if ((index % 16) == 0)
                {
                    textBox1.Text = "";
                    serialPort1.Write("\r");
                    return;
                }
            }
            str = textBox1.Text.ToCharArray(index++, 1);
            serialPort1.Write(str[0].ToString());
        }


USB2Serial모듈을 이용한 Serial LCD모듈 연결



테스트 동영상

Posted by nexp

댓글을 달아 주세요

[Proramming]/C#2009. 10. 31. 11:59

C# 을이용한 하드웨어 제어 - USB FIFO FT245 제어

C# 을이용한 하드웨어 제어 - USB FIFO FT245 제어

C#을 이용하면 윈도우 인터페이스는 쉽게 제작할 수 있다. FTDI사의 USB FIFO FT245제어를 C#으로 해 봤는데 생각보다 쉽고 간단하게 작성할 수 있다. FT2232, FT232도 동일하게 사용가능하다.




FT245 C# Programming Source Code

        //------------------------------------------------------------------------------
        //FT245 DLL 등록
        [DllImport("kernel32.dll")]
        extern static short QueryPerformanceCounter(ref long x);
        [DllImport("kernel32.dll")]
        extern static short QueryPerformanceFrequency(ref long x);


        // FT Open
        [DllImport("ftd2xx.dll")]
        unsafe private static extern uint FT_Open(Int16 DeviceNumber, uint* ftHandle);

        // FT Close
        [DllImport("ftd2xx.dll")]
        private static extern uint FT_Close(uint ftHandle);

        // FT_SetBitMode
        [DllImport("ftd2xx.dll")]
        private static extern uint FT_SetBitMode(uint ftHandle, Byte Mask, Byte Mode);

        // FT_GetBitMode    
        [DllImport("ftd2xx.dll")]
        unsafe private static extern uint FT_GetBitMode(uint ftHandle,
                      [MarshalAs(UnmanagedType.LPArray)] byte[] bdata);

        // FT_SetBaudRate
        [DllImport("ftd2xx.dll")]
        private static extern uint FT_SetBaudRate(uint ftHandle, uint BaudRate);

        // FT_Write
        [DllImport("ftd2xx.dll")]
        unsafe private static extern uint FT_Write(uint ftHandle,
                     [MarshalAs(UnmanagedType.LPArray)] byte[] bdata,
                     uint BufferSize, uint* BytesWriten);
        //------------------------------------------------------------------------------


        //FT245 초기화
        unsafe private void button1_Click(object sender, EventArgs e)
        {
            const uint FT_OK = 0;
            uint ftHandle;          

            m_ftStatus = FT_Open(0, &ftHandle);
            m_ftHandle = ftHandle;

            if (m_ftStatus != FT_OK)
            {
                return;   // 에러처리
            }

            // BitBang Mode
            m_ftStatus = FT_SetBitMode(m_ftHandle, 0xFF, 0x01);
            m_ftStatus = FT_SetBaudRate(m_ftHandle, 115200);

            //연결되면 Icon Image변경
            button1.Image = global::WindowsFormsApplication1.Properties.Resources.connect;
        }

        unsafe private void button2_Click(object sender, EventArgs e)
        {
            //데이터 출력 - LED On
            uint writesize;
            InOut_data[0] = 0x00;

            FT_Write(m_ftHandle, InOut_data, 1, &writesize);
        }

        unsafe private void button3_Click(object sender, EventArgs e)
        {
            //데이터 출력 - LED Off
            uint writesize;
            InOut_data[0] = 0xFF;

            FT_Write(m_ftHandle, InOut_data, 1, &writesize);
        }


FT245 USB제어 테스트 동영상

Posted by nexp

댓글을 달아 주세요

  1. 소미

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.11.26 18:31 [ ADDR : EDIT/ DEL : REPLY ]
  2. HighEndGuy

    관리자의 승인을 기다리고 있는 댓글입니다

    2015.05.07 12:24 [ ADDR : EDIT/ DEL : REPLY ]

[Proramming]/C#2008. 4. 28. 21:17

C#을 이용한 시리얼 포트 제어 - AVR AtMega128 제어

C#을 이용한 시리얼 포트 제어 - AVR AtMega128 제어
 
사용자 삽입 이미지
 

Visual Studio .Net에 시리얼 포트 제어 컴포넌트가 기본으로 제공된다. 이를 이용하면 시리얼 포트를 이용한 제어가 상당히 편리해 지는데 C#을 이용하여 하드웨어(시리얼 포트)제어 프로그램 작성을 해 보았다.
하드웨어는 Usb2Serial을 가지고 있는 [Meag128 EVM]을 이용하였고 예전에 작성해 둔 시리얼 포트 제어 펌웨어를 그대로 사용 하였다.
 
 
VC#을 실행하고 새로운 프로젝트를 생성한다.
적당히 폼을 생성하고 시리얼 포트 제어를 위해 'SerialPort' 컴포넌트도 배치한다.
시리얼 포트의 속성은 속성창에서 설정해도 되고 소스코드상에서 입력가능하다.
사용자 삽입 이미지
 
 
코드작성
코드는 상당히 간단히 작성할 수 있고 Byte Buffer나 String데이터를 시리얼 포트로 전송할 수 있다.
초기에 설정해야 하는 프로퍼티로 COM Port를 설정하는 PortNmae와 Baudrate를 설정하는 BaudRate가 있다.
PC에서 시리얼 포트로 데이터를 전송하기 위해 Write() 매소드를 사용하면 된다. 문자열 단위 혹은 Byte단위로 전송 가능하다.
아래 코드를 보면 쉽게 이해 가능하다.
 
 
프로그램 실행
프로그램 실행해서 포트 초기화 하고 [Mega128 EVM]의 Led를 PC프로그램으로 제어 가능하다.


 
테스트 동영상
C# 으로 작성한 시리얼 포트 제어 프로그램으로 Atmeag128 EVM의 LED를 제어 하는 프로그램
 
결론적으로 말하면 "정말 간단한다" 이다. 하드웨어 엔지니어 입장으로 보면 PC는 그냥 도구일 뿐이므로 내부 사정은 자세하게 알 필요가 없다. 그저 좀더 쉬운 환경에서 명령 내리고 데이터 수집해서 분석하는 용도로 사용하기에 Visual툴을 이용하면 너무 좋은것 같다. 한가지 아쉬운 점이 있다면 C#코드 자체가 C와 완벽히 호환되지 않기 때문에 임베디드로 포팅을 할때는 조금 무리가 있을듯... 그렇다면 C++.net으로 가는것이 맞을것 같다.

다른 예제
Cortex-M3 STM32 USB를 이용하여 각도값 표시 - 윈도창에 센서 데이터를 그래프로 표시해서 디버깅을 쉽게 할 수 있다.
")//]]>
Posted by nexp

댓글을 달아 주세요

  1. gimchiii

    씨샵이 편리하군요...
    기능도 좋은듯 하고...
    써보고 싶군요...

    2008.10.21 14:16 [ ADDR : EDIT/ DEL : REPLY ]
  2. gimchiii

    실례지만 C# 2005는 닷넷 2005의 일부인가요?

    2008.10.21 14:21 [ ADDR : EDIT/ DEL : REPLY ]
  3. nowdream

    저기 전 8051 을 c#으로 제어하려고 합니다..
    8051에 미리 프로그램을 구워놓고 c#으로 제어하면 되는 겁니까 ?ㅠ

    2009.05.02 11:43 [ ADDR : EDIT/ DEL : REPLY ]
  4. 비밀댓글입니다

    2009.05.14 09:46 [ ADDR : EDIT/ DEL : REPLY ]
  5. dsu

    저기 질문이 있는데 atmega 의 플래쉬 메모리에 별다른 프로그래밍이 되어 있지않은 상태에서 저렇게 제어가 가능하다는 것입니까? 결국에는 플래쉬메모리에 저장된 프로그래밍이 데이터를 받고 작동시킨다는 것입니까? 너무 초보적인 질문같아서 죄송합니다.

    2010.01.26 08:57 [ ADDR : EDIT/ DEL : REPLY ]
  6. 이동현

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.03.04 17:32 [ ADDR : EDIT/ DEL : REPLY ]