ZEO-S 로 ADC 을 실험해 보겠습니다.

 

 

 

준비

 

먼저 ZEO-S 의 PB13 핀에 360hz 파형을 입력으로 합니다.

(360hz 파형은 Function Generator 를 이용하시거나 DAC 기능이 있는 MCU 로 만들 수 있습니다. )

 

 

 

 

 

분석 1

 

47.619Khz 로 샘플링을 하면 아래와 같이 됩니다.

 

 

 

 

그래프의 397 픽셀 동안 3개의 파형이 발생합니다.

즉 1주기는 약 132 픽셀에 나타납니다.

 

47.619 Khz / 132 는 약 360 Hz 로 계산됩니다.

 

360Hz 의 파형을 47.619 Khz로 정확히 샘플링 합니다.

 

 

 

 

 

 

 

 

분석 2

 

142.857 Khz 로 샘플링을 하면 아래와 같이 됩니다.

 

 

 

그래프의 397 픽셀 동안 1개의 파형이 발생합니다.

즉 1주기는 약 397 픽셀에 나타납니다.

 

142.857 Khz / 397 는 약 360 Hz 로 계산됩니다.

 

360Hz 의 파형을 142.857 Khz로 정확히 샘플링 합니다.

 

 

 

 

 

 

 

분석 3

 

176.470 Khz 로 샘플링을 하면 아래와 같이 됩니다.

 

 

 

 

 

그래프의 490 픽셀 동안 1개의 파형이 발생합니다.

즉 1주기는 약 490 픽셀에 나타납니다.

 

176.470 Khz / 490 는 약 360 Hz 로 계산됩니다.

 

360Hz 의 파형을 176.470 Khz로 정확히 샘플링 합니다.

 

 

 

 

 

 

 

분석 4

 

142.857 Khz 로 샘플링을 하면 아래와 같이 됩니다.

 

 

 

그래프의 397 픽셀 동안 1개의 파형이 발생합니다.

즉 1주기는 약 397 픽셀에 나타납니다.

 

142.857 Khz / 397 는 약 360 Hz 로 계산됩니다.

 

360Hz 의 파형을 142.857 Khz로 정확히 샘플링 합니다.

 

 

 

 

 

분석 3

 

222.222 Khz 로 샘플링을 하면 아래와 같이 됩니다.

 

 

 

 

 

그래프의 617 픽셀 동안 1개의 파형이 발생합니다.

즉 1주기는 약 617 픽셀에 나타납니다.

 

222.222 Khz / 617 는 약 360 Hz 로 계산됩니다.

 

 

360Hz 의 파형을 222.222 Khz로 샘플링하게 되면 손실데이터가 발생하는데, 이는

ZEO-S 에 있는 ADC 데이터를 컴퓨터에서 빠르게 가져오지 못해 발생하는 겁니다.

(위 그림에서는 2151개의 손실 데이터 발생)

 

이 문제를 해결할 수 있는 방법이 몇 가지 있습니다.

  • 컴퓨터 하드웨어 업그레이드
  • ZEO 용 응용 프로그램 외 모든 프로세스 종료(특히 인터넷, 백신)
  • 메모리가 큰 ZEO-M 으로 대체

 

 

ZEO-S 의 빠른 ADC 데이터 처리는 컴퓨터 사양에 큰 영향을 받습니다.

손실된 데이터 값을 잘 체크하여 최대의 샘플링 주기를 찾으셔야 합니다.

 

 

출처: http://whiteat.com/46280

 



Posted by WhiteAT
,

 

ZEO 모듈을 처음 사용하시는 분은 http://whiteat.com/57501 를 참조하여 드라이버를 설치하시고, 프로그래밍 가이드를 따라 해 보시기 바랍니다.

 

 

 

 

하드웨어 연결

 

 

 

데이터시트의 핀명을 참조하여 아래 사진처럼 PWMA-1,2,3, PWMB-1,2,3,4, PWMC-1,2,3,4 에 각각 적색 LED와 1K옴 저항을 연결합니다.

(VCC – 1K옴저항 – 포트로 연결 합니다.)

 

 

 

 

Visual Studio 2008 의 C#으로 PWM11App 라는 응용프로그램을 만들어 보겠습니다.

 

먼저 Windows Forms Application Template 으로 PWM11App 라는 프로젝트를 생성합니다.

C#을 처음 접하시는 분은 http://whiteat.com/31559 를 먼저 해보시기 바랍니다.

 

 

 

 

 

라이브러리 추가 & 기본 코드 추가

http://whiteat.com/product/ZEO/ZEO-Programming_Guide.pdf 의 프로그래밍 가이드를 참조하여 라이브러리를 추가합니다.

 

 

라이브러리를 추가하면 아래와 같이 솔루션 창에 ZeoDotNetLib 와 LibUsbDotNet 이 생성됩니다.

 

 

 

 

 

Form_Load 이벤트와 Form_Closing 이벤트에 각각 ZEO 모듈의 초기화코드와 종료 코드를 추가합니다.

 

 

using ZeoDotNetLib;

 

namespace PWM11App

{

public partial class Form1 : Form

{

ZeoLib ZEO = new ZeoLib();

 

public Form1()

{

InitializeComponent();

}

 

private void Form1_Load(object sender, EventArgs e)

{

this.ZEO.Open();

this.ZEO.InitZeo(0);

this.label1.Text = "ZEO-" + this.ZEO.GetZeroType().ToString();

 

// PWM 초기화 모든 LED 를 최대값으로 ON 한다.

this.ZEO.InitPWMA(PWM_Frequency._2Khz, 0, 0, 0);

this.ZEO.InitPWMB(PWM_Frequency._2Khz, 0, 0, 0,0);

this.ZEO.InitPWMC(PWM_Frequency._2Khz, 0, 0, 0,0);

}

 

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

this.ZEO.Close();

}

}

}

 

 

 

 

컨트롤 추가

11개의 PWM 을 제어하기 위해 11개의 Trackbar ( 슬라이드바)를 추가하고 좌측에 라벨을 붙여 줍니다.

 

 

 

 

 

TrackBar 의 Scroll 이벤트를 걸어 스크롤을 변경할 때마다 LED 밝기를 조절할 수 있습니다.

 

 

private void trbPWMA1_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.A,1,Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMA2_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.A, 2, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMA3_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.A, 3, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMB1_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.B, 1, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMB2_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.B, 2, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMB3_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.B, 3, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMB4_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.B, 4, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMC1_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.C, 1, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMC2_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.C, 2, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMC3_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.C, 3, Convert.ToUInt16((sender as TrackBar).Value));

}

 

private void trbPWMC4_Scroll(object sender, EventArgs e)

{

this.ZEO.SetPWM(ZeoLib.PWM.C, 4, Convert.ToUInt16((sender as TrackBar).Value));

}

 

 

 

 

 

위와 같은 설정이 되면 아래의 결과를 얻을 수 있습니다.

 

 

 

 

PWMA-1부터 PWMC-4 의 PWM 을 차례대로 제어하는 동영상입니다.

 




Posted by WhiteAT
,

 

ZEO 모듈을 사용하시는 분은 http://whiteat.com/57501 를 참조하여 드라이버를 설치하시고, 프로그래밍 가이드를 따라해 보시기 바랍니다.

 

 

 

C#으로 HumanDetectApp 라는 응용프로그램을 만들어 보겠습니다.

여기서는 Visual Studio 2008 의 C#을 사용하게 됩니다.

 

먼저 Windows Forms Application Template 으로 HumanDetectApp 라는 프로젝트를 생성합니다.

C#을 처음 접하시는 분은 http://whiteat.com/31559 를 한번만 해보셔도 금방 따라 하실 수 있습니다.

 

 

 

 

기본 폼이 완성 되면 LABEL 2개를 추가합니다.

각각의 이름을 lblModel, lblAlarm로 하겠습니다.

lblModel에는 현재 사용중인 ZEO 의 모델명과 버전을 표시할 것이고,

lblAlarm 에는 "침입자 발견" 메시지를 보여줄 것입니다.

 

 

그리고 일정시간마다 센서 값을 읽어 올 수 있게 Timer 를 추가하고 타이머의 이름을 tmrMain 이라고 하겠습니다.

 

 

 

이제 각 기능을 구현하면 됩니다.

 

 

 

센서가 감지되었을 경우 경고 표시

 

 

 

 

평상시 화면

 

 

 

 

 

 

아래는 인체감지 센서를 읽어 알람을 화면에 표시하는 전체 코드입니다.

 

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using ZeoDotNetLib;

 

 

namespace HumanDetectApp

{

public partial class Form1 : Form

{

ZeoLib ZEO = new ZeoLib();

 

public Form1()

{

InitializeComponent();

}

 

private void Form1_Load(object sender, EventArgs e)

{

// ZEO 모듈 열기

this.ZEO.Open();

 

// ZEO 모듈 초기화

this.ZEO.InitZeo(0);

 

// 모델명 버전 표시

this.lblModel.Text = "MODEL: ZEO-" + this.ZEO.GetZeroType().ToString();

this.lblModel.Text += " VERSION: " + this.ZEO.GetBoardVersion();

 

// PA16을 입력으로 설정 (센서 값 읽기)

this.ZEO.PORT_DirInput(PIN_NAME.PA16);

 

}

 

private void tmrMain_Tick(object sender, EventArgs e)

{

// 만약 ZEO와 연결되지 않았다면 아무것도 안하겠다.

if (!this.ZEO.IsOpened) return;

 

// 모든 포트의 값을 읽어

UInt32[] uiData = this.ZEO.ReadPortAll();

 

// PA16의 값이 HIGH 이면

if ((uiData[0] & 0x10000) == 0x10000)

{

// 알람 표시

lblAlarm.Visible = true;

}

else

{

lblAlarm.Visible = false;

}

}

 

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

// 프로그램 종료시에는 반드시 Close 를 해줘야 한다.

this.ZEO.Close();

}

}

}

 

 

 

 

Posted by WhiteAT
,

 

ZEO 모듈과 인체감지 센서 모듈로 침입자를 감시하는 예제를 만들어 보겠습니다.

 

침입자 감시 시스템

 

 

 

 

회로 꾸미기

 

아래처럼 ZEO-S 모듈과 인체감지모듈을 브레드보드에 연결합니다.

 

 

 

 

센서에는 VCC, GND, OUT 핀 명이 표기되어 있으며

VCC 에는 3.3V(양극)

GND 에는 그라운드(음극)

OUT 에는 ZEO-S 의 PA16번에 연결합니다.

 

GND 옆의 신호가 OUT 이라서 별도의 점퍼선 없이 기판에 바로 연결할 수 있습니다.

센서의 VCC는 ZEO-S의 우측 1번 핀에 연결해 줘야겠죠?

 

 

 

 

 

이제 USB 케이블을 PC에 연결하면

하드웨어 준비는 끝입니다.^^

 

Posted by WhiteAT
,

 

 

16x2 라인의 캐릭터 LCD 를 제어해 보겠습니다.

 

 

< ATMEGA128 과 캐릭터 LCD 연결 회로도 일부 >

 

 

 

 

 

 

 

LCD 의 데이터 선은 ATMEGA128의 PORTB 에 연결하고, 컨트롤 선은 PORTC를 사용합니다.

VR1의 5K 가변 저항은 캐릭터 LCD의 백라이트 밝기를 조절할 수 있습니다.

 

 

캐릭터 LCD 우측 그림처럼 출력하는 예제입니다.

abcdefghijklmnop

0123456789ABCDEF

 

 

 

 

 

 

 

 

원문은 http://whiteat.com 에 있습니다.

 

 

 

 

주요 코드

 

main.c 일부

/*

    EX_02_01.c

 

    필요한보드

    1. WAT-AVR128 (모듈)

    2. WAT-AVR128 EXT (확장보드)

    3. WAT-CLCD (캐릭터그래픽LCD)

 

    Character LCD에영문/숫자출력

    AVRStudio 4.18

    2011-10-04

 

    홈페이지: http://whiteat.com

    MCU자료실: http://avr128.com

    쇼핑몰: http://kit128.com

 

*/

 

#include <avr/io.h>

#include "WAT128.h"

 

int main()

{

 

    CLCD_Init();        // LCD 초기화

 

    CLCD_PutChar('a');

    CLCD_PutString(1,0,"bcdefghijklmnop");

    CLCD_PutString(0,1,"0123456789ABCDEF");

 

    while(1)

    {

    }

}

 

 

 

 

 

 

 

전체 소스 ( AVRStudio용)

EX_02_01.ZIP

 

 

Posted by WhiteAT
,