MDS Wireless PLC and SCADA data transmission radio system in the Waterworks

MDS Wireless PLC and SCADA data transmission radio system in the Waterworks




S7-200 PLC to the terminal for the on-site water supply wireless dispatch system composition and function. And focus on the PLC Modem with Wireless Interface and PLC software design into the analysis and explanation, given some of the process flow diagram and system applications.

[Key words]
  Programmable Logic Controller (PLC) Monitoring data radio   communication interface   IPC   MCGS configuration software
  an overview of
  a water plant control systems located in more than ten kilometers from the five deep water pumping stations, storage tanks, a network of user control. Gap between the level of the water supply system up to 150 meters, due to the water supply system, the special structure of the composition and topography, the last artificial control, to production management, water supply scheduling inconvenience.
  implemented a computer monitor because it can real-time monitoring of the main parameters of the water supply system (such as pressure, flow, level, voltage, current, etc.), control of deep well pump, to monitor the operational status of pumps, while providing the necessary production management statements, curve, data query functions. It runs on the safety of water supply systems, scientific control of great significance.
  2, system
  computer monitoring system uses the master-slave structure of distributed wireless real-time monitoring method (referred to as SCADA), shown in Figure 1.


  system consists of monitoring centers, wireless communication systems, on-site monitoring devices, sensors and instrumentation in four parts.
  control center: the computer, MCGS configuration software, wireless data radio, omni antenna, and UPS mimic panel composed of the main terminal to complete the on-site real time data acquisition, monitoring, control, data storage, printing reports, data query and so on.
  wireless communication system: pump station monitoring center and the use of wireless communication terminals. Monitoring center to active stations, and other passive terminal station from the station vice, the system uses radio management committee given the data frequency to one way and from the station-to-multipoint communication, control centers for the omnidirectional antenna, the deputy station directional antenna.
  site surveillance terminal: the core of the PLC, is an intelligent device, it has its own CPU, and control software, mainly to complete the field data collection, conversion, storage, alarm, control and other functions, and with the monitoring center via wireless channel Microcomputer data communications. According to the order of the respective control center system self-test, data transfer, control output and other tasks.
  sensors and instrumentation: a PLC signal to monitor on-site “Eyes”, the scene all the signals are subject to change through the sensor and the instrument can output standard signals, the terminal has been accepted by PLC. System is mainly measuring voltage, current, level, pressure, flow and power consumption parameters.

Well lose control of water pumps l manual control. Operator on the basis of the input pump clear water tank level to start and stop operation.
l control. PLC under the clear water tank level and the input pump start and stop the water level of the input pump in the automatic mode to start and stop operation.
Third, on-site PLC terminal
  scene PLC control terminal is the industrial field and a bridge link between the monitoring center, on the one hand it is acquiring the instruments, transmitters, signal equipment, such as running, on the other hand it communication with the monitoring center, the implementation of the order. On-site terminal generally unattended. Therefore, the terminal s performance and quality of a great impact on system reliability. After full argument, use of Siemens S7-200 series PLC to the terminal site has a high cost performance, it has a small, easy to expand, excellent performance characteristics, is ideal for small-scale on-site monitoring.
  1, PLC hardware design
  site require monitoring and control of a terminal input signal switch, the switch output signal path analog input signal. Therefore, we choose the basic unit of S7-212, analog input expansion module (EM231), analog output expansion module (EM232). Meet site requirements.
  2, communication interface
  from the station PLC and radio communications: S7-214PLC basic unit of a RS-485 interface with the wireless channel for data transmission machine (power, data radio) is connected, we have designed a dedicated RS-485 Interface Modem and the use of photoelectric isolation technology, so the two are completely independent in the electrical and avoid mutual interference, as when data transfer plane firing RTS signal, the RS-485 interface, not Tigong RTS signal, two methods to resolve this issue. First, the Wireless Modem PLC launch information generated under the RTS signal, which requires the Modem must be intelligent, while PLC required before sending the message first and Modem communications, let the output signals RTS and RTS have been generated to send back information, then PLC and then send the site information. Second, the use of a PLC I / O output point, RTS signal generated by the PLC is connected before sending information to the point, the control data transmission machine launch, after a period of delay (the establishment of the carrier radio time), then send information. The latter method is simple, practical, better solve the problem of wireless communication interface. The news of two, currently incolor = red> 1????1   2    

آموزش کامل ساخت پروگرامر (%100) AVR910 USB-ISP Programmer

آموزش کامل ساخت پروگرامر (%100) AVR910 USB-ISP Programmer 

هدیه :

   لطفا هرکسیکه این فایل ها رو دانلود میکنه ۱۴ صلوات همراه با وعجّل فرجهم برای سلامتی و تعجیل در فرج آقا صاحب الزمان (عج) هدیه کنه . ممنون

شماتیک مدار AVR910 :

 فایل PDF   دریافت فایل فشرده AVR910-Schematic  (فرمت PDF)

مدار چاپی AVR910 :

 فایل PDF   دریافت فایل فشرده AVR910-PCB  (فرمت PDF)

( تذکر : دوستان توجه کنید که در فایل PCB در نام گذاری المانها اسم C4 و C5 رو جابجا نوشتم و لي شماتيك كاملاً درسته . )

سخت افزار مورد نیاز برای ساخت  پروگرامر  AVR910

 فایل PDF    دریافت فایل فشرده AVR910-Hardware  (فرمت PDF)

درباره AVR910 :

 فایل PDF   دریافت فایل فشرده AVR910-Application Note  (فرمت PDF)

برنامه اصلی (AVR910 Source) :

 فایل فشرده   دریافت فایل فشرده AVR910 Source v.1.05 

 لیست آی سی های قابل پروگرام  توسط پروگرامر AVR910 :

فایل PDF دریافت فایل فشرده List of supported chips (فرمت PDF)

تذکر :

    بنده این پروگرامر ۶ پین رو بر اساس نیاز بچه های برق دانشگاه آزاد نجف آباد برای آی سی های Atmega32 و Atmega16 و کلاً خانواده آی سی هایی که پایه های مشابه این دو دارند طراحی کردم و کسانی که می خوان آی سی های دیگه رو پروگرام کنند یا باید رو بِرد بُرد یکی یکی دنبال پایه ها بگردند و یا باید از آداپتور آی سی استفاده کنند .


راه اندازی پروگرامر AVR910 :

   برای راه اندازی پروگرامر AVR910 بعد از اینکه برد رو ساختین و المانها رو در جای خودشون قرار دادین . توسط یه پروگرامر دیگه فایل هگزی (.Hex) که گذاشتم رو توسط یکی از برنامه که مخصوص قرار دادن فایل هگز است بارگیری کنید و سپس روی آی سی ATmega8 بنویسید ( توسط دستور Write ) .

نکته مهم :

   تجربه میگه بچه ها با تنظیم فیوز بیت های آی سی مشکل دارند ; توجه کنید منبع کلاک خارجی 12MHz داریم که در شکل زیر تنظیم فیوز بیت ها در حالتی که کریستال 12MHz است در برنامه CodevisionAVR می بینید (حتماً از يه استاد يا شخص مسلط به AVR كمك بگيريد )


راهنمای تنظیم فیوز بیت های AVR910 :

 فایل PDF دریافت فایل فشرده HELP AVR910 Fuse Bits

تنظيم فيوزبيت ها


بهره برداری از پروگرامر AVR910 :

روش اول:

   بمنظور سهولت بهره‌برداری از پروگرامر در مراحل برنامه‌نويسی ميكرو ، مواردی در نرم‌افزار پيش‌بينی شده كه با استفاده از آن ، كار برنامه‌نويسی و تست مكرر آسان می‌گردد. در اين جهت كافی است فايل اجرايی نرم‌افزار (AVRProg.exe) را در كامپايلر معرفی نماييد بطوری كه بعنوان پروگرامر يا ابزار بعد از كامپايل قابل فراخوانی باشد . ( در نرم‌افزار CodeVision AVR در گزينه After Make از قسمت تنظيمات پروژه و در نرم‌افزار BASCOM در گزينه External Programmer از قسمت تعيين پروگرامر ، قابل معرفی می‌باشد) با اين روش نرم‌افزار AVRProg از درون كامپايلر قابل فراخوانی است .


روش دوم:

   علاوه بر امكان فوق ، باتوجه به نياز و علاقه برخی از کاربران برای برخورداي از امكان انجام مستقيم عمليات مرتبط با آی‌سی ، از درون   نرم‌افزارهای كامپايلر نظير CodeVisionAVR ، ابزار خاصی برای اين قابليت دربرنامه تعبيه شده‌است كه با استفاده از آن ، يكی از پروتكل‌های آشنا برای نرم‌افزار CodeVisionAVR و AVR Studio شبيه‌سازی مي‌گردد. اين شبيه‌سازی براساس AVR910 Atmel Application Note صورت‌پذيرفته‌است كه با  محض  اتصال و شبیه سازی پورت، پروگرامر بعنوان پروگرامر AVR Prog يا AVR910 قابل شناسايی و كار است.

تذکر :

   برای امكان استفاده از قابليت شبيه‌سازی بايد ابزار نرم‌افزاری  پورت سریال مجازی  نصب گرديده و پورت مربوطه تنظيم گردد. در اين خصوص اگر با ويندوز32 bit   Seven يا Vista كار می‌كنيد، بايد قبل از نصب ، User Account Control را خاموش نماييد و اگر از ويندوز64 bit   Seven يا Vista استفاده می كنيد بايد فرمان :

 bcdedit.exe -set TESTSIGNING ON

را RUN كرده باشيد.

   هنگام نصب ، ويندوز وارد مراحل نصب دو سخت‌افزار مجازی با نام‌های CNCA0 و CNCB0 می‌گردد كه بايد در پنجره‌ نصب ، گزينه نصب نرم افزار بصورت اتوماتیک را انتخاب كنيد.

پس از نصب، گزينه Setup را از برنامه اضافه شده به دكمه استارت ويندوز انتخاب كنيد.

(Start\All Programs\com0com\Setup)

   در پنجره ظاهر شده (شكل زير)، پورت مجازي با نام CNCA0 را به يكی از نام‌هاي COM1 تا COM4 (يک تا چهار بخاطر محدوديت Codevision می‌باشد) و پورت مجازی با نام CNCB0 را به AVR910 تغيير دهيد . شماره پورت انتخاب شده نبايد تكراری باشد (سخت‌افزار ديگری با همان كانال ارتباطی وجود نداشته‌باشد و با پورت ارتباطی خود پروگرامر نيز يكی نباشد) . سپس كليد Apply را فشار دهيد. ( اگر پنجره زير باز نشد احتمالاً Net Framework Version 2.0. Microsoft  در سيستم شما قبلاً نصب نشده‌است. آنرا از قسمت پائین ( فايل dotnetfx.exe ) دريافت كرده، نصب كنيد. در غير اينصورت می‌توانيد بجای Setup   از  Setup Command Prompt استفاده نموده ، در پنجره سياه رنگی كه باز می‌شود ، دو فرمان :

 change CNCA0 Portname=COM3
 change CNCB0 Portname=AVR910

را صادر كنيد ، (COM3 بعنوان نمونه انتخاب شده‌است)

تنظیم فیوز بیت های AVR910 

اكنون پروگرامر AVR910 با استاندارد ارتباطی AVR910 در شماره COMی كه در پنجره بالا انتخاب نمو‌ده‌ايد، شبيه سازی می‌گردد.

توجه :

   اين پروگرامر در منوی Tools برنامه AVR Studio تحت عنوان AVR Prog ، و در برنامه CodeVision تحت عنوان Atmel AVRProg -AVR910 شناخته می‌شود. تنظيم شماره COM، یکی بودن شماره ی پورت وارد شده در پنجره فوق، در Codevision ضروری می‌باشد ولی مقدار Baudrate در اين خصوص اهميتی ندارد.

   همچنين برنامه اينترنتی AvrOspII در اين خصوص قابل استفاده است (اين برنامه مورد تأييد نيست زيرا باگ‌هايی دارد – ضمناً بهتر است در زمان استفاده از آن، دو عبارت emulate baud rate را در پنجره تنظيمات پورت سریال مجازی ، تيک دار كنيد ).



فایل های مخصوص راه اندازی :


   دریافت فایل هگس (USB.910.Programmer.Hex)

   دریافت درایور 1.05 AVR910 USB-ISP

   دریافت 5.10 AVRDUDE

   دریافت نرم افزار 1.40 AVRProg

   دریافت نرم افزار AvrOspII_547

دریافت نرم افزار ( ProgISP ( New English Version

دریافت نرم افزار Net Framework version 2.0 :

   نسخه ۳۲ بیتی

   نسخه ۶۴ بیتی

دریافت درایور پورت سریال مجازی ( Null Modem Emulator-com0com)


نرم افزار های جانبی :

   دریافت کامپایلر Atmel® AVR Studio® 5

    دریافت نرم افزار Codevison AVR 2.05

   دریافت نرم افزار WinAVR 2010.01.10

   دریافت نرم افزار ‌Bascom_1.11.9.8

میکروکنترلر چیست ؟

میکروکنترلر چیست ؟

میکروکنترلر چیست :


قطعه ای که این روزها دارد جای خود را در خیلی از وسایل الکتریکی باز میکند .از تلفن گرفته تا موبایل از ماوس لیزری که الان دستتان روی آن است و دارین باهاش کامپیوتر رو کنترل میکنید تا هر وسیله ای که بتوان پیچیدگی رو در اون دید میتونید یک میکروکنترلر رو ببینید .


کلمه میکروکنترلر:


این کلمه از دو کلمه 1- میکرو2-کنترلرتشکیل شده


1-میکرو : میدونین که این یک واحد یونانی است و برابر با 10 به توان منفی 6 متر است. یعنی یک ملیونیوم متر واحده خیلی کوچیکیه نه….ولی واحدهای خیلی کوچیکتر از این هم داریم که در الکترونیک مورد استفاده قرار میگیرند در قسمتهای بعدی توضیحیهاتی راجع به این واحد ها و موارد استفاده آنها داده میشه.


2-کنترلر : که همه معنی و مفهومشو میدونین . یعنی کنترل کننده به تعبیری یعنی “مغز ” البته بدون تفکر فقط دستوراتی که به اون داده میشه به نحو احسن انجام میده.



حال نحوه انجام دادن کار میکروکنترلر را به صورت کلی بررسی میکنیم


تا حالا همه شما با ماشین حساب کار کردین تا حالا به نحوه کار کردنش فکر کردین شما اطلاعاتتون را که همون عملیات ریاضی هست به وسیله صفحه کلید به اون میدید بعد ماشین حساب این اطلاعات رو بر مبنای دستوراتی که قبلا به اون داده شده پردازش میکند و جواب را رویlcd نمایش میدهد. در واقع یک میکروکنترلر برنامه ریزی شده به عنوان مغز ماشین حساب این اطلاعات یا داده رو از صفحه کلید میگیره روشون پردازش انجام میده و بعد بر روی lcd نمایش میده.

کار میکروکنترلر دقیقا مشابه این است میکرو کنترلر بر مبنای یک سری ورودی که به اون داده میشه مثلا این ورودی از یک سنسور دما باشه که درجه حرارت رو میگه یا از هر چیز دیگه مثل صفحه کلید بر مبنای این ورودی ها و برنامه ای که قبلا ما به اون دادیم خروجیشو تنظیم میکنه که ممکنه خروجیش یک موتور باشه یا یک lcd یا هر چیز دیگری که با الکتریسیته کار بکند. حالت دیگری هم میتونه باشه که فقط میکروکنترلر بر مبنای برنامه ای که به اون دادیم عمل کند و خروجیش رو فقط بر اساس برنامه بگیرد.


ساختمان داخلی میکروکنترلر:


کامپیوتری که الان بر روی اون دارین کار انجام میدین دارای یک پردازنده مرکزیه به نام cpu که از کنار هم قرار گرفتن چندین ملیون ترانزیستور تشکیل شده و بر روی اطلاعات پرداژش انجام میده . میکرو کنترلر هم عینا دارای یک پردازنده مرکزی به نام cpu است که دقیقا کار cpu کامپیوتر رو انجام میده با این تفاوت که قدرت و سرعت پردازشش از cpu کمتره که به اون میکروپرسسور میگن در بخش بعدی فرق میکرو پرسسور و میکروکنترلر را بررسی میکنیم. میکروکنترلر علاوه بر cpu دارای حافظه است که ما برنامه ای که بهش میدیم در اون قرار بگیره در کنار حافظه در میکروکنترلرهای امروزی تایمرها برای تنظیم زمان کانتر ها برای شمردنکانال های آنالوگ به دیجیتالپورت هایبرای گرفتن و دادن اطلاعات و امکاناتی دیگر که بعدا مفصل راجع به هر کدام توضیح داده میشه تشکیل شده و همه اینها در یک چیپ قرار گرفته که تنکنولوژی جدید اونو تو یک تراشه به اندازه یک سکه قرار داده.


تفاوت میکروپروسسور و میکروکنترلر:


میکروپرسسور همانطور که گفته شد یک پردازنده است و برای کار باید به آن چیپ های حافظه و چیز های دیگری را به اون اضافه کرد این امکان به درد این میخورد که بر حسب کارمان حافظه مناسب و دیگر قطعات را مانند تایمرها و غیره به صورت بیشتری استفاده کنیمولی مدار خیلی پیچیده میشود و از لحاظ هزینه هم هزینه بیشتر میشود به همین دلیل امروزه از میکروپرسسورها کمتر استفاده میشود اما این روزها میکرو کنترلر های جدید با حافظه های زیاد تعداد تایمر زیاد پورت های زیاد و تنوع بسیار زیاد انها بر حسب این امکانات دست ما را باز گذاشته است تا دیگر میکروپرسسورها را فراموش کنیم.


آیا میکروکنترلر چیز جدیدی را با خود آورده است ؟


جواب منفی است تمام کارهایی که ما با میکروکنترلر میتوانیم انجام بدهیم با قطعات دیگر هم میتوانیم انجام بدهیم چون ما قبلا هم تایمر داشتیم هم کانتر هم حافظه هم پردازنده و…. در واقع میکروکنترلر قطعه ای است با تمام این امکانات که به صورت یک آی سی آماده شده است و هزینه پیچیدگی و حجم را به نحوه قابل ملاحضه ای کاهش میدهد.


معرفی انواع میکروکنترلر

تمام میکروکنترلرها جزء این 5 قسمت هستنند:
1) 8051
2) Pic
3) Avr
4) 6811
5) Z8

البته مدل های۶۸۱۱ ساخت شرکت موتورلا وz8 ساخت شرکت زایلوگ حداقل در ایران خیلی کم استفاده می شوند و رقابت اصلی بین سه نوع دیگر است.

تا به امروز هر میکروکنترلری که ساخته شده زیر مجموعه یکی از این5 نوع است. البته کارخانه های خیلی زیادی با مارک های مختلف میکرو کنترلر تولید میکنند ولی همه اونها زیر مجموعه یکی از این 5 قسمت هستنند .شما برای هر کدام از این5 نوع میکروکنترلر میتوانید میکروکنترلر های مختلفی از شرکت های مختلفی را پیدا کنید.(البته در بازار ایرن کمی با مشکل).
اما خوشبختانه همه میکروکنترلر هایی که جزء هر کدام از 5 نوع بالا باشند از یک برنامه پیروی میکنند. بدین معنا که اگر شما کار با یکی از مدل های آن میکرو را یاد گرفته باشید مثل اینکه کار با تمام میکروکنترلرهای آن نوع را یاد گرفته اید.

مثلا شما اگر با یکی از مدل های میکروکنترلرavr مثلا   atmega8 را یاد گرفته باشید دیگر با صد ها مدل دیگر میکروکنترلرavr  مشکلی ندارید وتقریبا بدون هیچ مشکلی میتوانید با دیگر مدل های این میکرو کار کنید


اما یه مشکل که در میکروکنترلر ها وجود دارد این است که این5 نوع از لحاظ برنامه نویسی به هیچ وجه با هم دیگر سازگاری ندارند . به طور مثال اگر شما میکروکنترلر هایavr  و 8051 را کامل یاد گرفته باشید حتی ساده ترین برنامه رو روی یک میکروکنترلرpic  نمیتوانید اجرا کنید. واین یکی از بزرگترین عیب و مشکل برای یاد گیری میکرو است


معایب و مزایای میکروکنترلر های مختلف


از آن جای که 6811 وz8خیلی کمتر استفاده میشوند به معرفی سه نوع دیگر میپردازیم


میکروکنترلر PIC
واقعا میکروکنترلر خیلی قوی است که بر اساس بعضی آمار ها بیشترین کاربر را به خود اختصاص داده است البته متذکر شوم که در ایران این آمار به نفعAVR است. این میکروکنترلر ساخت شرکت میکرو چیپ است کهPIC  رو در مدل های خیلی زیادی با امکانات مختلف برای کارهای مختلف میسازد . این میکروکنترلر با مدل های مختلف PIC16XXXX و PIC12XXXکه به جایX دوم از چپ به راست حروفC,x,E,F  قرار میگره که هر کدام مفهوم خاصی داره که چون بحث ما آموزش AVR  هست از روی اون سریع میگذریم وX های بعدی هم اعدادی هستنند که نشان دهنده مدل های مختلف هستنند


AVR Programming:

AVR Programming:

Programming is the simplest part in robotics. We will use avr-gcc version of ‘C’, which is specifically designed for avr based microcontrollers.

Before you start any of your projects:

1. Plan your actions and visualize your expectations and outcome of the project
2. When writing a program, it is always good to write a pseudo code of what you expect the code to do. Note down all steps in simple English, or in any other language you prefer
3. You do not need to learn complex software to create a simple circuit. A rough sketch on a paper or even a paint program on your desktop would suffice. Once you are comfortable, get into those advanced simulators and circuit design software.
4. Working with electricity and these tiny components can be dangerous. Be cautious.
5. Last but not the least, do not try to overdo anything in a single day. If you are stressed, go out and enjoy. Love what you do and be proud of your mistakes too.

Let’s get started. Here is the code required to turn on a LED. You can download a copy of this program with necessary comments and the makefile, upload it to your microcontroller and see the results (To upload the code, you need a programmer which connects your computer and the microcontroller). Later I will explain what each line means, why and how are they used.

File Name      : LEDON.c
Title          : Basic LEDON Program. 
Notes          : This is the first program in Basic LED series. 
All this program does is set DDR and Port registers to turn on a LED
#ifndef F_CPU
#define F_CPU 1000000UL
#include <avr/io.h>    
int main(void)
DDRC = 0xff;
while (1)
PORTC = 0xff;
return (0);

Now we will understand what each line means.

File … blah… blah…

Anything between  /* and */ is considered as comments and is ignored by the complier. It is always a good practice to include brief description of your program. This practice helps you in better identification and documentation of what the program does. For inline comments, you can use //.

// This is an example of inline comment

#ifndef F_CPU
#define F_CPU 1000000UL

F_CPU is used to define the clock frequency in Hertz. It is surrounded by #ifndef (If not defined) and #endif which means this code should be executed if F_CPU is not already defined. This is necessarily not required as we will define the clock frequency in makefile.

Makefile??? Now what is a makefile? makefile is a set of instructions for any specific project which directs ‘make'(utility that builds executable programs and libraries using your source code) on how to compile and link a program. It supports in finding the target file and dependencies if any. It also specifies what avr device is being used. Since we are using AVRStudio, makefile is automatically generated.

WinAVR already has a template for makefile where you need to make minimal changes for your project to get it up and running. If you have installed WinAVR, then you are most likely to find the file at <install>\sample directory, where <install> is the directory where you have WinAVR installed.

#include <avr/io.h>

Programmers generally separate certain elements of code from the program’s source code which can be reused in other programs when required. #include is used to include these separate chunks of code from an external file into this program. avr/io.h is one such file which contains I/O definitions for the particular device we use. If we use Atmega8, then respective file is included. But how does the compiler know which device we use? Very simple; we define the type of device in the “makefile” and appropriate device file ioxxxx.h (where xxxx is the device name) is included. It further includes additional header files:  #include <avr/sfr_defs.h>, #include <avr/portpins.h>, #include <avr/common.h>, #include <avr/version.h>. provides a complete description of io.h. If you have read the documentation, it clearly tells you not to include ioxxxx.h file directly and always get it called from io.h.

int main(void)

 The actual processing starts from main() which is common in most programming languages

DDRC  = 0xff;

To understand this line, you should have already referred to AVR basics. If not, take a break, read through the details in AVR Basics and return. Summarizing those details, all we do in this line is to set DDRC (Data-Direction-Register) as output. Be informed that 0xff (hexadecimal) is the same as 0b11111111 (binary), where “0x” refers to hexadecimal value, and “0b” refers to binary. You can as well write DDRC = 0b11111111;
If you are still not clear, refer to number-system tutorial for number conversion. In your program, you can either use binary or hexadecimal although I personally prefer hexadecimal values as it is easier to remember and write.


Most of the time you want your microcontroller to do repetitive tasks. You do not want your robot to process an activity and then sit idle for the rest of its life. Hence we will put the entire code in an infinite loop.  You can even use “for” loop for the same purpose. I generally use “for” loop when I know the number of iterations and “while” loop otherwise.

PORTC = 0xff;

DDRC = 0xff sets DDR as output. Each Port register is responsible for I/O pins for the respective port. So, PORTC controls the pins in PORTC. We can either set the pins to high or low. In the example, we have set all Pins in PORTC as output.


Once all the processing is complete the control is returned. But do note that our program never reaches this line as we have the entire logic within an infinite loop.

Build this program using AVR Studio. If you are unsure, refer to software requirements under How-To section. Once you click build all, your program should compile without any errors.  Locate the folder where you had saved this program and open “default” folder. Makefile, .hex file and other supporting files should be stored there. LEDON.hex is the file of interest.

Open this .hex file from PonyProg and upload it to your microcontroller. You should see that the LED is on.

Did the LED turn ON? Congratulations! You are successful. No? Don’t worry, it is normal. Go back to the start of this tutorial and check if something has gone wrong. Check if:
1. You have powered up your microcontroller.
2. You are supposed to upload the hex code into your microcontroller. Did you successfully do that?
3. You have fried the poor LED. Test it by connecting it to a battery and a resistor in series and see if it still works.
4. If you still do not have any idea, upload your code, circuit diagram, and questions in the forum and you might find help.
Do not connect your LED to a battery without a resistor. It will almost instantly fry your LED as too much current flows through it.

 If everything went well, you have a platform which can be upgraded further. We started with an intention to make a blinking LED circuit, not just an LED which turns ON and stays forever. Ofcourse we will do that too. If everything worked perfectly, all that is needed is to add few more lines to our program to achieve desired result. The concept is simple. Set Pins to High to turn on LED, wait for sometime and then set Pins to Low to turn it off. Wrap this in an infinite loop and you have your desired result.

Next you will see how to blink a LED. This tutorial is created not to just showcase a blinking LED but try to cover as much of details as possible which includes Programming Basics, AVR basics etc.,