এটি অভ্যন্তরীণ পুল আপ রেজিস্টারের সাথে কিছু করতে পারে। এসএএম 3 এক্স / এ ডাটাশিট অনুসারে,
আই / ও লাইনের কনফিগারেশন নির্বিশেষে পুল-আপ প্রতিরোধকের নিয়ন্ত্রণ সম্ভব
পুনরায় সেট করার পরে, সমস্ত পুল-আপ সক্ষম হয়।
আপনি যদি অন্তর্ভুক্ত সমস্ত ফাইল খনন করেন তবে:
../Arduino/hardware/arduino/samd/cores/arduino/wiring_digtal.c
লাইন 124 pinMode(uint32_t ulPin, uint32_t ulMode)
ফাংশনটি সংজ্ঞায়িত করে । INPUT বনাম INPUT_PULLUP বনাম OUTPUT এর জন্য স্যুইচ / কেস স্টেটমেন্ট পরীক্ষা করে নিচের বিষয়গুলি দেখুন:
- ইনপুট এতে একটি রেজিস্টার সেট করে
reg = PORT_PINCFG_INEN
।
- INPUT_PULLUP এতে একটি রেজিস্টার সেট করে
reg = (PORT_PINCFG_INEN | PORT_PINCFG_PULLEN)
- OUTPUT এতে একটি রেজিস্টার সেট করে
reg &= ~PORT_PINCFG_INEN
।
প্রতিটি ক্ষেত্রে 'নিবন্ধক' একই। আমি আমার জীবনের জন্য এটি খুঁজে পাচ্ছি না যে PORT_PINCFG_INEN বা PORT_PINCFG_PULLEN এর মূল্য নির্ধারণ করা হয়েছে তবে তারা 8-বিট মুখোশগুলিই নিঃসন্দেহে রয়েছেন (যখন তারা 'রেজিস্টারে' অর্পণ করা হয় তখন তারা uint8_t এ নিক্ষিপ্ত হন)। সুতরাং, আমরা ধরে নিতে পারি যে জোর দেওয়া অবস্থায় যে কোনও বিট নিয়ন্ত্রণ ইনপুট / আউটপুট সক্রিয় রয়েছে, যেমন পুলআপ বিট। উদাহরণ স্বরূপ:
PORT_PINCFG_INEN = b'00000001';
PORT_PINCFG_PULLEN = b'00000010';
~PORT_PINCFG_INEN = b'11111110';
রিসেটের পরে যদি পুল-আপগুলি সক্ষম হয়, তবে আমরা এটি পুনরায় সেট করতে পারি:
reg = b'xxxxxx1x';
উপরের পয়েন্ট (3) দৃ strongly়ভাবে নির্দেশ দেয় যে নির্দেশটি হ'ল:
reg = b'xxxxxx1x' & 'b11111110';
so
reg = b'xxxxxx10'; // pull-up is enabled!
অতএব, আপনি যদি অন্য কোনও কিছুর আগে পিনমোড (এক্স, আউটপুট) কল করেন তবে আপনি পুলআপ প্রতিরোধক সক্ষম হয়ে শেষ করবেন। একটি ইনপুটটিতে পিনটি সেট করা পুলআপ সক্ষম বিটটি সাফ করবে, এর পরে আপনি পিনটিকে একটি আউটপুটে সেট করতে পারবেন এবং বিটটি পরিষ্কার থাকবে।
যাইহোক, পুরো arguement সহজ সত্য যে আপনি যদি pinMode () কল না দিয়ে নিচে পড়ে এ সব , সমস্যা ঘটবে না ...
SPI.setDataMode(10, SPI_MODE1);
? এছাড়াও কেবল দ্বিতীয়টি দরকারী,begin()
কল সেটডেটামোড হিসাবে । এ খুঁজছি সোর্স কোড এটা SPI গ্রন্থাগার পিন আপনার নির্দিষ্ট করা পরিবর্তন নেই দেখে মনে হচ্ছে (যদিও আমি এআরএম জানি না)।