সুচিপত্র:

PIC MCU এবং Python Serial Communication: 5 ধাপ
PIC MCU এবং Python Serial Communication: 5 ধাপ

ভিডিও: PIC MCU এবং Python Serial Communication: 5 ধাপ

ভিডিও: PIC MCU এবং Python Serial Communication: 5 ধাপ
ভিডিও: Arduino Workshop - Chapter 5 - Using SPI 2024, জুলাই
Anonim
PIC MCU এবং Python Serial Communication
PIC MCU এবং Python Serial Communication
PIC MCU এবং Python Serial Communication
PIC MCU এবং Python Serial Communication

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

ধাপ 1: আমাদের কি দরকার?

আমাদের কি চাই?
আমাদের কি চাই?
আমাদের কি চাই?
আমাদের কি চাই?

সুতরাং, প্রথমেই দেখা যাক আমাদের কী প্রয়োজন। হার্ডওয়্যারের ক্ষেত্রে:

  • অবশ্যই, PIC MCU যা আমার ক্ষেত্রে PIC16f877a (আপনার সেই বোর্ডের প্রয়োজন নেই। এটি কিছু নোংরা সংযোগ সহজ করার জন্য)
  • TX এবং RX পিন ব্যবহার করে USB পোর্টের মাধ্যমে PIC MCU- এর সাথে যোগাযোগ করার জন্য USB থেকে TTL রূপান্তরকারী।
  • MCU প্রোগ্রামার যা আমার ক্ষেত্রে K150 প্রোগ্রামার, কিন্তু আপনি PicKit 2, 3 বা অন্য কিছু ব্যবহার করতে পারেন।
  • এবং অবশেষে একটি কম্পিউটার:)

সফটওয়্যারের ক্ষেত্রে:

  • পাইথন কোড লেখার জন্য একটি IDE যা আমার ক্ষেত্রে Pycharm, কিন্তু আপনি নিয়মিত Python IDE ব্যবহার করতে পারেন।
  • এমসিইউ প্রোগ্রাম করার জন্য একটি পরিবেশ যা আমার ক্ষেত্রে এমপিএলএবি এক্স আইডিই সিসিএস সি কম্পাইলারের সাথে।

পদক্ষেপ 2: হার্ডওয়্যার সংযোগ

হার্ডওয়্যার সংযোগ
হার্ডওয়্যার সংযোগ

ছবিতে সংযুক্ত হার্ডওয়্যার সংযোগ দেওয়া হয়েছে যা নীচে PIC MCU এবং USB TTL কনভার্টারের মধ্যে রয়েছে:

RC7 (RX) ------------- TXD

RC6 (TX) ------------- RXD

GND -------------- GND

ইউএসবি টিটিএল কনভার্টারের ভিসিসি পিন সংযুক্ত করার দরকার নেই (তবে, আপনি চাইলে করতে পারেন)। এই 3 টি সংযোগ যথেষ্ট যথেষ্ট।

ধাপ 3: পাইথন সফটওয়্যার

আসুন পাইথন সাইডের জন্য সফ্টওয়্যার লিখতে শুরু করি যা আমাদের ক্ষেত্রে ট্রান্সমিটার হবে, কারণ এটি এমসিইউতে স্ট্রিং পাঠাবে।

আমদানি সিরিয়াল #ইমপোর্ট সিরিয়াল লাইব্রেরি ডাটা = '24' #ডেটা যা আমরা ডাটা = a+'\ 0' সির = সিরিয়াল পাঠাবো। a.encode ()) #ডেটা পাঠান

সর্বপ্রথম সিরিয়াল লাইব্রেরি আমদানি করা হয় যাতে এর ভবিষ্যত ব্যবহার করা যায়। আমরা MCU কোডে নিশ্চিত করার জন্য একটি উদাহরণ স্ট্রিং ডেটা পাঠাতে চাই যে আমরা এটি গ্রহণ করেছি। আমি এখানে একটি জিনিস নোট করতে চাই। এজন্য আমরা স্ট্রিংয়ে '\ 0' যোগ করেছি। এর কারণ হল, এমসিইউয়ের পাশে স্ট্রিংটি পুরোপুরি পড়া অসম্ভব। এটি চরিত্র দ্বারা চরিত্র পড়া হয়। সুতরাং, আমরা পড়া বন্ধ করার জন্য স্ট্রিং এর শেষ জানতে চাই। সুতরাং, আমরা স্ট্রিংয়ে '\ 0' যোগ করি যা স্ট্রিংয়ের শেষ নির্দেশ করে। তারপর আমরা MCU- র সাথে সংযুক্ত পোর্টের সাথে সংযোগ স্থাপন করি। আপনি 'ডিভাইস ম্যানেজার' অনুসন্ধান করে সেই পোর্টটি নির্ধারণ করতে পারেন। সুতরাং, সতর্ক থাকুন যে আপনি একই বন্দরে আছেন। সর্বোপরি, আমরা এমসিইউতে ডেটা প্রেরণ করি। রিসিভারে পাঠাতে সক্ষম হওয়ার জন্য ".encode ()" স্ট্রিং ডেটাতে যোগ করা উচিত।

ধাপ 4: মাইক্রোকন্ট্রোলার সফটওয়্যার

সুতরাং, আসুন MCU এর জন্য আমাদের কোড দেখি। প্রথমে আমি আপনাকে "config.h" ফাইলের ভিতরে দেখাতে চাই যা প্রয়োজন নেই, কিন্তু আমি এটি সরলতার জন্য করেছি। এখানে শুধু আপনার MCU এর ফ্রিকোয়েন্সি পরিবর্তন করুন।

#ifndef CONFIG_H#CONFIG_H সংজ্ঞায়িত করুন

#অন্তর্ভুক্ত

#ডিভাইস ADC = 16

#FUSES NOWDT // No Watch Dog Timer

#FUSES NOBROWNOUT // No Brownout reset #FUSES NOLVP // কোন কম ভোল্টেজের প্রিজমিং, B3 (PIC16) বা B5 (PIC18) I/O এর জন্য ব্যবহৃত

#বিলম্ব ব্যবহার করুন (স্ফটিক = 6000000)

এখন আসুন মূল কোডটি দেখি:

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত

#rs232 ব্যবহার করুন (baud = 9600, xmit = pin_C6, rcv = pin_C7, parity = N, stop = 1)

#LED_RED PIN_D0 নির্ধারণ করুন

char inp; char cmp _ = "24"; চর বাফার [3];

#int_rda

void serial_communication_interrupt () {disable_interrupts (int_rda); স্বাক্ষরবিহীন int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {বাফার = inp; inp = getc (); putc (inp); আমি ++; }}

অকার্যকর প্রধান (শূন্য) {

set_tris_d (0x00); output_d (0xFF); enable_interrupts (গ্লোবাল); যখন (1) {enable_interrupts (int_rda); যদি (strcmp (বাফার, cmp_) == 0) output_low (LED_RED); অন্যথায় আউটপুট_উচ্চ (LED_RED); }}

শুরুতে আমরা স্ট্রিং লাইব্রেরি অন্তর্ভুক্ত করি যা আমরা স্ট্রিং অপারেশনে সহায়ক হব যা আমাদের ক্ষেত্রে স্ট্রিং তুলনা অপারেশন (strcmp)। সুতরাং, এই কোডে আমাদের উদ্দেশ্য হল পিন D0 এর সাথে সংযুক্ত LED চালু করা যদি ট্রান্সমিট করা মান আমাদের প্রদত্ত মানের সমান হয় যা "cmp_" "24" এর সমান।

প্রথমত আমরা ইন্টারাপ্ট "rda" সক্ষম করি যা ডেটা ট্রান্সমিট করার সময় বাধা সৃষ্টি করবে।

দ্বিতীয়ত, আসুন ISR এর ভিতরে দেখি অভ্যন্তরে আমরা প্রথমে প্রাপ্ত মানটি পড়ার জন্য বাধা পতাকা অক্ষম করি এবং আরও বাধা সৃষ্টি করি। তারপরে আমরা '\ 0' না পৌঁছানো পর্যন্ত অক্ষর দ্বারা স্ট্রিং অক্ষরটি পড়ি। স্ট্রিংয়ের ভিতরে পড়ার সময় আমরা প্রতিটি স্ট্রিং বাফারে লিখি যাতে প্রাপ্ত স্ট্রিং পাওয়া যায়।

শেষে, আমরা আবার ভিতরে আসছি যখন। এখানে আমরা আমাদের বাফার স্ট্রিং যা স্ট্রিং এবং cmp_ স্ট্রিং পেয়েছে তা তুলনা করি যাতে আমরা স্ট্রিংটি সঠিকভাবে পাই কিনা। যদি তারা সমান হয় তবে আমি নেতৃত্ব চালু করি, অন্যথায় বন্ধ করুন।

*কোডে আমি বিপরীত করেছি কারণ আমার বোর্ড ডি পোর্ট পিনের মান উল্টে দেয়। আপনার কোডে এটি পরিবর্তন করুন:

যদি (strcmp (বাফার, cmp_) == 0) output_high (LED_RED); অন্যথায় output_low (LED_RED);

অবশেষে, এটি কম্পাইল করুন এবং আপনার MCU এ আপলোড করুন এবং তারপর পাইথনে কোড চালান। আপনি নেতৃত্ব চালু দেখতে হবে।

ধাপ 5: উপসংহার

আমরা একটি কাজ সফলভাবে শেষ করেছি। আমি আশা করি এটি আপনার জন্য দরকারী হবে। যদি আপনার কোন প্রশ্ন থাকে, অনুগ্রহ করে জিজ্ঞাসা করতে দ্বিধা করবেন না:) পরবর্তী প্রকল্প পর্যন্ত।

প্রস্তাবিত: