একটুস খানি লাইফ আর মাইক্রোকন্ট্রোলার লাইফ!

উদাসী স্বপ্ন
Published : 8 March 2011, 03:56 PM
Updated : 8 March 2011, 03:56 PM

মাথার মধ্যে মাঝে মাঝেই ঘুরা ফিরা করে হাজার হাজার বর্তনীর নোডে কিভাবে সব সিগন্যাল গুলো ঘুরে ফিরে এত বড় বড় কাজ করে!

মাইক্রোকন্ট্রোলার দিয়ে বেশ কিছু প্রেজেক্টে দেখলাম যে ওখানে সবকিছুই ইদানিং উইজার্ড বেজড। ইউরোপের দেশগুলোতে বেশীর ভাগ এভিআর ৮ ব্যাবহার হচ্ছে যার মূল্য মনে হয় এখন ৪ ডলার। ৪ ডলার ছোট্ট একটা মাইক্রোকন্ট্রোলার ইউএসবি পোর্টে লাগিয়ে প্রোগ্রাম করে তার পর ঐ সার্কিটে শুধু জুড়ে দিলেই হলো!
যতক্ষন না রিফ্রেশ হচ্ছে ততক্ষন এটা একই কাজ খুব ভালো ভাবে করে যাবে!
ইন্ডাস্ট্রিয়াল সেক্টরে এর ব্যাব হার প্রচুর!

একটা উদাহরন দেয়া যাক। হোম অটোমেশনে মাইক্রোকন্ট্রোলার দিয়ে পুরো বাসাটা একটা সেন্সর নেটওয়ার্কের আন্ডারে আনা যায়! আমার উদাহরনটি হলো এভিআর ৩২ দিয়ে যেখানে মূলত টেম্পারেচার সেন্সর বিলট্ ইন থাকে! শুধু সি প্রোগ্রামিং এ নীচের লাইন গুলো লিখে দিলেই চলা শুরু করবে, শুধু এর ডিসপ্লে বোর্ডটির জন্য আলাদা কিছু প্রোগ্রাম ডিক্লারেশন দেয়া হয় বৈকি!

#include "board.h"
#include "compiler.h"
#include "dip204.h"
#include "gpio.h"
#include "pm.h"
#include "delay.h"
#include "spi.h"
#include "adc.h"

void init (void)
{
// Enter your code here

static const gpio_map_t DIP204_SPI_GPIO_MAP =
{
{DIP204_SPI_SCK_PIN, DIP204_SPI_SCK_FUNCTION }, // SPI Clock.
{DIP204_SPI_MISO_PIN, DIP204_SPI_MISO_FUNCTION}, // MISO.
{DIP204_SPI_MOSI_PIN, DIP204_SPI_MOSI_FUNCTION}, // MOSI.
{DIP204_SPI_NPCS_PIN, DIP204_SPI_NPCS_FUNCTION} // Chip Select NPCS.
};

// Switch the CPU main clock to oscillator 0
pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP);

// Assign I/Os to SPI
gpio_enable_module(DIP204_SPI_GPIO_MAP,
sizeof(DIP204_SPI_GPIO_MAP) / sizeof(DIP204_SPI_GPIO_MAP[0]));

// add the spi options driver structure for the LCD DIP204
spi_options_t spiOptions =
{
.reg = DIP204_SPI_NPCS,
.baudrate = 1000000,
.bits = 8,
.spck_delay = 0,
.trans_delay = 0,
.stay_act = 1,
.spi_mode = 0,
.modfdis = 1
};

// Initialize as master
spi_initMaster(DIP204_SPI, &spiOptions);

// Set selection mode: variable_ps, pcs_decode, delay
spi_selectionMode(DIP204_SPI, 0, 0, 0);

// Enable SPI
spi_enable(DIP204_SPI);

// setup chip registers
spi_setupChipReg(DIP204_SPI, &spiOptions, FOSC0);

// initialize delay driver
delay_init( FOSC0 );

}

# define EXAMPLE_ADC_TEMPERATURE_CHANNEL 0
# define EXAMPLE_ADC_TEMPERATURE_PIN AVR32_ADC_AD_0_PIN
# define EXAMPLE_ADC_TEMPERATURE_FUNCTION AVR32_ADC_AD_0_FUNCTION

int main(void)
{
// Assign the on-board sensors to their ADC channel.

static const gpio_map_t ADC_GPIO_MAP =
{
{EXAMPLE_ADC_TEMPERATURE_PIN, EXAMPLE_ADC_TEMPERATURE_FUNCTION}
};
volatile avr32_adc_t *adc = &AVR32_ADC; // ADC IP registers address

// signed short adc_value_pot = -1;
float adc_value_tem;

unsigned short adc_channel_tem = EXAMPLE_ADC_TEMPERATURE_CHANNEL;
init();

dip204_init(backlight_PWM, TRUE);

while (1)
{
adc_configure(adc);
adc_enable(adc,adc_channel_tem);
adc_start(adc);

//float x = 0.000;

adc_value_tem = adc_get_value(adc, adc_channel_tem);
//adc_value_pot = adc_get_value(adc,x);
float value;
float d;

d = 3.3/1024;
value = adc_value_tem * d;

//Value=adc_value_pot*3.3/1024;

dip204_set_cursor_position(4,1);
dip204_write_string("Temperature");

dip204_set_cursor_position(6,3);
dip204_printf_string("%f",value);
dip204_printf_string(" V");

dip204_hide_cursor();
}

}

এই প্রোগ্রামটিকে আরও দু'তিনভাবে আমরা লিখতে পারি। এখানে সেন্সরটি ব্যাব হারের ব্যাপারে যেটা করা হেয়ছে সেটা হলো ঐ তাপমাত্রার অনুপাতে কত ভোল্টেজ পাওয়া যাচ্ছে সেটা পরিমাপ করা হচ্ছে! আপনার ইচ্ছে করলে রিয়েল টাইম ভোল্টেজ ভার্সেস তাপমাত্রা গ্রাফ তৈরী করে সেটা ব্যাব হার করতে পারেন!

আসলে আমি এটা সামান্য উদাহরনের জন্য ব্যাব হার করছি! মাইক্রোকন্ট্রোলার নিয়ে আরও ডিটেলসে লিখবো সেখানে দুয়েকটা প্রজেক্ট যেখানে এর জন্য কিভাবে সার্কিট বানিয়ে এর পোর্টে সেগুলো লাগিয়ে পিসির ইউএসবিতে ডাটা ফীড করিয়ে হাইপারটার্মিনাল করতে হয় আর সেখানে থেকে আরও বড় বড় প্রোগ্রামিং করতে হয়!

উল্লেখ্য এভিআর বিষয়ক সব লেখাই মূলত সি দিয়ে লেখা হলেও বাকি গুলোর জন্য অন্যান্য প্রোগ্রামিং ব্যাব হার করা হবে!

আসলে আমার এসব পোস্টের মূল উদ্দেশ্য হলো আমাদের দেশে এসব ইন্ডাস্ট্রিয়াল অটোমেশন বা মাইক্রোকন্ট্রোলা প্রোগ্রামিং এর জন্য সিঙ্গাপূর বা চীনের দিকে তাকুিয়ে থাকি। কিন্তু পার্শ্ববর্তী দেশ যেমন ভারত পাকিস্তানের দিকে তাকাই তাহলে দেখা যাবে তারা অলরেডী এটার উপর কাজ শুরু করে দিয়েছে!

যেটা আমরা নিজেরা করতে পারি সেটার জন্য কেন আমরা বিদেশী কোম্পানী অথবা বিদেশীদের কাছে টাকা গচ্চা দেব?

ভেবে দেখা দরকার!