আমি এটিমেগ 16 এ কীভাবে ডিজিটাল ইনপুট পড়ব?


18

কি আমি একটি ডিজিটাল ইনপুট (পুশবাটন) পড়তে কি করতে হবে না এটিমেগা 16 ? আমাকে কি পুলআপ-রেজিস্টর সক্ষম করতে হবে বা আমি 10 কোহম ব্যবহার করতে পারি? কিছু সাধারণ কোড কি হতে পারে? একটি সাধারণ 'যখন টিপুন জিনিসটি তখন LED চালু করুন'।

একটি শিক্ষানবিশ টিউটোরিয়াল আছে? আমি গুগলিং এবং এভিআর ফ্রিক্স চেষ্টা করেছি , তবে সবকিছুই কেবল একটি লড়াইয়ে রূপান্তরিত হয় এবং আমি আমার উত্তর পাই না। আমি সত্যিই এই স্টাফ সম্পর্কে কোন টিউটোরিয়াল পাইনি। আমার এভিআর মাইক্রোকন্ট্রোলার সম্পর্কে প্রচুর নির্দিষ্ট জিনিস তবে কিছুই সাধারণ নয় ...


4
এটি কোনও কোনও প্রাথমিক শিক্ষার টিউটোরিয়ালে উত্তর দেওয়া হবে এবং আমি আশঙ্কা করছি যে এখানে একটি সম্পূর্ণ উত্তর সাহায্যের চেয়ে আপনার বোঝার ক্ষতি করবে। আপনি কোন পূর্বের প্রচেষ্টা শিখতে পেরেছেন?
ইয়ান ভার্নিয়ার

আপনি আমার পোস্ট দেখেছেন কিনা তা নিশ্চিত না বা আপনি এটি দেখতে সক্ষম হন কিনা (দুঃখিত এখনও এই সাইটটি সম্পর্কে বিভ্রান্তি রয়েছে ...) তবে আমি কোডটি জানি, আমার প্রশ্নটি বলতে দিন: আমি কি কেবল একটি পিনকে জিএনডি এবং এর নীচে সংযুক্ত করি?
কৌতূহলী

2
আপনার পোস্টকে কেন আরও সঠিকভাবে এটি প্রতিবিম্বিত করতে সম্পাদনা করবেন না এবং নীচের পোস্টটিকেও মূল পোস্টে অন্তর্ভুক্ত করবেন।
আমোস

এই AVR ফ্রিক্স পৃষ্ঠায় থেকে স্ক্র্যাচ AVR টিউটোরিয়াল চেষ্টা করুন । আপনি সেখানে আরও অনেক জিনিস পাবেন find
লিওন হেলার

উত্তর:


24

ব্রাজিলের শুভেচ্ছা!

সবার আগে জবিকে আপনার উদাহরণের জন্য ধন্যবাদ। দ্বিতীয়ত, তার উদাহরণটিতে কেবল একটি ছোট্ট ত্রুটি রয়েছে। 0x20 নম্বরটি সঠিক নয়। এটি 0x04 হওয়া উচিত। এছাড়াও, কেবল একটি পরামর্শ হিসাবে, আমি কোডে 0xFB, 0x20, বা 0x04 এর মতো হেক্সাডেসিমাল নম্বর ব্যবহার করব না। আমি io.h এ পাওয়া পিন পোর্ট সংজ্ঞা এবং শিরোনাম ফাইল দ্বারা রেফারেন্সযুক্ত অন্যান্য ব্যবহার করার পরামর্শ দেব। আমি নীচে জবির উদাহরণটি নতুন করে লিখেছি, নতুনদের জন্য কিছু মন্তব্য সহ।

# include <avr/io.h>

int main (void)
{
    // set all pins on PORTB for output
    DDRB = 0xFF;

    // set port pin PORTD2 as input and leave the others pins 
    // in their originally state (inputs or outputs, it doesn't matter)
    DDRD &= ~(1 << PD2);        // see comment #1

    while (1) 
    {
        if (PIND & (1<<PD2))    // see comment #2
            PORTB |= (1<<PB2);  // see comment #3
        else
            PORTB &= ~(1<<PB2); // see comment #4
    }
    return 0;
}

/ *

নতুনদের জন্য মন্তব্য

মন্তব্য # 1: (1 << পিডি 2) বাইনারি তৈরি করে 00000100. অপারেশন "~" সমস্ত অঙ্ক উল্টে দেয়, বাইনারি এখন 11111011. অবশেষে & = DDRD এবং 11111011 এর মধ্যে "AND" যুক্তি প্রয়োগ করে এবং ফলাফলটি আবার স্থাপন করা হয়েছে ডিডিআরডি স্মৃতিতে। দ্রষ্টব্য: অপারেটর "এবং" যা করে তা ডিডিআরডি মেমরির প্রতিটি বিটের জন্য, এটি উপরের বাইনারি সংখ্যার সাথে তুলনা করে। ডিডিআরডি-তে বিট যদি 0 হয় এবং একই কামড়ের স্থানে বাইনারিতে বিট 1 হয়, তবে ফলস্বরূপ বিট 0 হয়, যদি ডিডিআরডি 1 হয় এবং বাইনারিটিতে বিট 1 হয়, ফলাফল বিট 1 হয়, এবং যদি ডিডিআরডির বিটটি 1 বা 0 এবং বাইনারিতে বিট 0 হয় তবে ফলস্বরূপ বিট সর্বদা 0 হয়। সংক্ষেপে, DDRD & = ~ (1 << PD2) কমান্ডটি কেবলমাত্র PD2 বিটকে শূন্যে পরিবর্তিত করে এবং অন্যগুলি (শূন্য বা এক) কে ছোঁয়াচে রেখে দেয়। এটি কিছুটা জটিল বলে মনে হচ্ছে, তবে আপনি অভ্যস্ত হয়ে যাওয়ার পরে, অন্য বিটগুলি পরিবর্তন না করেই কামড়ায় কিছুটা পরিবর্তন করার সেরা উপায়।

মন্তব্য # 2 : (1 << PD2) বাইনারি তৈরি করে 00000100. মন্তব্য # 1 তে বর্ণিত একই যুক্তি "এবং" ব্যবহার করে, "PIND & 0000100" কমান্ডটি কেবলমাত্র PIND2 (আমাদের ইনপুট পিন যেখানে পুশ বোতামটি সংযুক্ত আছে তা পরীক্ষা করে থাকে) থেকে) উচ্চে সেট করা আছে বা না। অন্যান্য সমস্ত পিনগুলি মিথ্যা হবে যেহেতু বাইনারি বিটগুলি 0 তে সেট করা আছে, এবং যেহেতু বাইনারি বিট # 2 সেট করা হয়েছে, পিডি 2 ইনপুট উচ্চ বা সেট করতে হবে যদি পিডি 2 ইনপুট হয় তবেই যদি বিবৃতিটি সত্য হয় কম সেট।

মন্তব্য # 3 : # 1 মন্তব্যে যুক্তিটি ব্যাখ্যা করার পরে, এই কমান্ডটি পোর্ট পোর্টে আউটপুট পিন PINB2 হাই ভোল্টেজ সেট করে sets যদি আপনার এলইডি সঠিকভাবে এই পিন পোর্টের সাথে ~ 300 ওহমের প্রতিরোধকের সাথে সংযুক্ত থাকে, এবং যে রেজিস্টরটি জমির সাথে সংযুক্ত থাকে, তবে LED চালু করা উচিত turn

মন্তব্য # 4 : পূর্ববর্তী মন্তব্যে বর্ণিত একই কারণে এলইডি বন্ধ করা উচিত।

চূড়ান্ত বিবেচনা:

ক) ইনপুট পিন PD2 এ ভোল্টেজ দোলন এড়াতে যখন পুশ বোতামটি টিপানো হয় না (ওপেন সার্কিট), আমি দৃ strong়ভাবে একটি পুল-ডাউন রোধ (1 কোহম বা উচ্চতর) রাখার পরামর্শ দিই, যাতে দুর্ঘটনাক্রমে এলইডি জ্বলতে না পারে LED এই এলোমেলো ভোল্টেজ দোলায়।

খ) একটি অস্বীকৃতি নোট: এখানে বর্ণিত ধারণাগুলি কেবল শিক্ষামূলক হিসাবে ব্যবহার করা উচিত এবং ইলেকট্রনিক্সের বিশেষজ্ঞের সাথে পরামর্শের আগে এগুলি কোনও বাস্তব ব্যবস্থায় ব্যবহার করা উচিত নয়।

* /


3
আমি আপনাকে আপনার ইমেল দিতে উত্সাহিত করি না কারণ ইমেলের মাধ্যমে সম্পর্কিত যোগাযোগটি ব্যক্তিগত করে তোলে। সুতরাং অন্য কেউ উপকৃত হতে পারে না। তবে যদি আপনি সত্যিই ব্যক্তিগত যোগাযোগের জন্য আপনার ইমেল সরবরাহ করতে চান তবে তা করার জন্য সেরা জায়গাটি আপনার প্রোফাইলে রয়েছে।
ড্যানিয়েল গ্রিলো

এটি কি বিপরীত নয় - # 3 নেতৃত্বটি বন্ধ করে দেয়, # 4 টি নেতৃত্বে চালু করে?
সাইটলিজ

2

https://www.mainframe.cx/~ckuethe/avr-c-tutorial/

https://www.mainframe.cx/~ckuethe/avr-c-tutorial/#digital-in

#include <avr/io.h>

/*
 * Assumptions:
 *  - LED connected to PORTB.2
 *  - Switch connected to PORTD.2
 */

int main (void)
{
    /* set PORTB for output*/
    DDRB = 0xFF;
    /* set PORTD for input*/
    DDRD &= 0xFB;
    PORTD |= 0x04;

    while (1) {
        if (PIND & 0x04)
            PORTB &= ~0x20;
        else
            PORTB |= 0x20;
    }
    return 0;
}

সরবরাহিত লিঙ্কটির জন্য @ জোবি তাফিকে ধন্যবাদ জানাই। আমি ইপ্রোম ফাংশনগুলির জন্য অনুসন্ধান করছি এবং আমি অনেকগুলি সহায়তা পেয়েছিলাম: মেনফ্রেম.সি.এক্স / uetকুয়েটি / অ্যাভার-সি-টিউটোরিয়াল / লেসন 11.c আপনাকে অনেক ধন্যবাদ।
বিশাল পাউডেল

2

হ্যাকাডে এভিআর প্রোগ্রামিংয়ের জন্য দুর্দান্ত লেখার দরকার ছিল, এতে প্রচুর দুর্দান্ত তথ্য রয়েছে যা আপনাকে সহায়তা করতে পারে

http://hackaday.com/2010/11/19/avr-programming-04-writing-code-etc/

http://hackaday.com/2010/11/05/avr-programming-03-reading-and-compiling-code/

http://hackaday.com/2010/10/25/avr-programming-02-the-hardware/

http://hackaday.com/2010/10/23/avr-programming-introduction/



0

যান্ত্রিক সুইচ থেকে ডিজিটাল ইনপুট নিয়ে কাজ করার সময় অন্য কিছু বিবেচনা করা হ'ল পরিচিতিগুলি বাউন্স করা - একক বোতামের কী হওয়া উচিত তা পরিবর্তন করে একাধিক ধাক্কার মতো দেখতে like

বোতামটি চেপে ধরে রাখার সময় কোনও এলইডি চালু করার মতো কোনও কিছুর জন্য, সম্ভবত আপনাকে ডিবাউস করার বিষয়ে চিন্তা করতে হবে না। কিছুটা জটিল জটিলতার জন্য (যেমন বোতাম টিপে এলইডি টগল করা), ডিবাউনিং করা আবশ্যক।

জ্যাক গ্যানসেলের ডেবিউস করার জন্য একটি ভাল গাইড রয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.