HD44780 एलसीडी मॉड्यूल का पावर-अप इनिशियलाइज़ेशन


10

मैं एक HD44780 क्लोन एलसीडी मॉड्यूल एक KS0066U का उपयोग कर रहा हूँ। मॉड्यूल पर सब कुछ ठीक काम करता है, सिवाय इसके जब मैं डिवाइस को तेजी से चक्रित करता हूं (ऑन-> ऑफ-> ऑन)। किसी कारण से शक्ति में बहुत कम रुकावट के कारण डिस्प्ले मॉड्यूल 2-लाइन एलसीडी डिस्प्ले के बजाय 1-लाइन एलसीडी के रूप में अनुचित रूप से आरंभ करने का कारण बनता है। इस व्यवहार का क्या कारण होगा? क्या सॉफ्टवेयर में इसे रोकने का कोई तरीका है?

संपादित करें: मैं 4-बिट मोड में डिस्प्ले कंट्रोलर का उपयोग कर रहा हूं न कि 8-बिट मोड में।


ऐसा लगता है कि किसी ने भी आपके सवाल को वोट देने लायक नहीं समझा, काफी अजीब है।
कोर्तुक

कुछ HD44780 क्लोन के लिए डेटाशीट बहुत खराब तरीके से लिखे गए हैं। मेरा लक्ष्य एक वार्तालाप प्राप्त करना था कि उन्हें शुरू करने का उचित तरीका क्या था। शायद मैं केवल एक ही हूं, जिन्हें 4-बिट मोड में उपयोग करने में समस्या थी।
mjh2007

नहीं, मैं एक ही मुसीबत से गुजर रहा हूँ अभी 4-बिट मोड में चल रहा है। लगभग 15 साल हो गए हैं जब मैंने आखिरी बार एक साधारण चरित्र एलसीडी प्रोग्राम किया था, और मुझे याद है कि जब मैं स्कूल में था तब इसे डिबग करने के लिए एक वास्तविक दर्द था। मैं आप के रूप में दूर नहीं हूँ, हालांकि - मैं भी आरंभीकरण सही नहीं मिल सकता क्योंकि मैं अभी तक एक भी चरित्र प्रदर्शित नहीं कर सकता। :)
डेव

जवाबों:


4

मैंने अपना इनिशियलाइज़ेशन कोड बदल दिया ताकि यह दो बार फ़ंक्शन सेट कमांड के ऊपरी 4-बिट निबल को भेजे। जिसके बाद मैं ऊपरी 4-बिट निबल से नाराज होता हूं, उसके बाद निचले 4-बिट निबल के साथ। यह उस डेटाशीट से मेल नहीं खाता है, जो यह इंगित करती है कि आप ऊपरी 4-बिट को भेज सकते हैं, फिर फ़ंक्शन सेट कमांड को ऊपरी 4-बिट और उसके बाद निचले 4-बिट पर भेजें।

// कभी-कभी छद्म कोड
पोर्ट = 0x20 काम करता है;
ई = 1; ई = 0;
पोर्ट = 0x20;
ई = 1; ई = 0;
पोर्ट = 0xC0;
ई = 1; ई = 0;

// हर समय छद्म कोड
पोर्ट = 0x20 काम करता है;
ई = 1; ई = 0;
ई = 1; ई = 0;
पोर्ट = 0x20;
ई = 1; ई = 0;
पोर्ट = 0xC0;
ई = 1; ई = 0;


2

मेरा अनुमान यह होगा कि आप अपने आरंभिक अनुक्रम में एक आवश्यक देरी को याद कर रहे हैं। यदि आप कमांड भेजने का प्रयास करते समय डिस्प्ले व्यस्त है, तो उस कमांड को नजरअंदाज कर दिया जाएगा। जब आप अपनी प्रक्रिया शुरू करते हैं, तो डिस्प्ले चार बिट मोड में होता है और इसमें कमांड के पहले भाग के रूप में "0000" लिखा होता है, तब जब आप "0011" में देखते हैं तो डिस्प्ले पूरे कमांड को "00000011" के रूप में देखेगा। , जो प्रदर्शन को 1.6ms तक व्यस्त होने का कारण बनेगा।

संयोग से, यह संभव है कि डिस्प्ले से कम-ऑर्डर वाले डेटा तारों को इस तरह से तार किया जाए कि जब "0011" कमांड को डिस्प्ले में भेजा जाए, तो डिस्प्ले द्वारा देखे गए पूरे 8 बिट्स एक मोड-सेट कमांड बनाएंगे जो आपके द्वारा उपयोग किए जा रहे प्रदर्शन के प्रकार के लिए सही है। किसी डिस्प्ले को रीसेट करते समय किसी भी डिस्प्ले ग्लिच से बचने में मदद मिलेगी जो पहले से ही उपयोग में है (समय-समय पर डिस्प्ले को रीसेट करना एक अच्छा विचार है, अगर इसे ग्लिचलेस तरीके से किया जा सकता है, क्योंकि यह सुनिश्चित करेगा कि यदि डिस्प्ले किसी तरह खराब मोड में आ जाए तो यह ठीक हो जाएगा अपने आप)।


1

मुझे समस्या के लिए एक समाधान मिला:

मैंने एलसीडी कंट्रोलर को इनिशियलाइज़ / कॉन्फिगर करने से पहले, स्टार्टअप पर 1000milisecond विलंब जोड़ा। यह मेरे लिए बहुत अच्छा काम किया।

एक कम देरी (100, 200ms) इतनी अच्छी तरह से काम नहीं किया। बस एक नोट: यह केवल 4 बिट डेटाबेस में हुआ।

सौभाग्य!


0

अपने कोड में देरी डालने पर जब यह चालू होता है तो एलसीडी को प्रारंभ होने पर इसे प्रारंभ करने के लिए काफी लंबा समय मिलता है। अधिकतम कुछ सौ मिलीसेकंड।

आप एलसीडी पावर को माइक्रोकंट्रोलर से कनेक्ट करने की कोशिश कर सकते हैं और स्टार्ट अप के बाद एलसीडी को एक सेकंड के लिए पावर ऑफ कर सकते हैं।


स्टार्ट-अप पर पहले से ही 100 एमएस की देरी है
mjh2007

मेरे अन्य सुझाव की कोशिश करो। आप एलसीडी पावर को सीधे पिन से भी नियंत्रित कर सकते हैं; इसे कुछ मा से अधिक नहीं खींचना चाहिए।
थॉमस ओ

क्या वास्तव में अधिकतम स्वीकार्य विलंब है? मुझे लगा कि इन एलसीडी के साथ मुख्य बात यह है कि आप न्यूनतम राशि की प्रतीक्षा करते हैं, लेकिन यदि आपको समय सही नहीं मिलता है, तो आप इसे सुरक्षित रूप से खेल सकते हैं और बस अधिक समय तक प्रतीक्षा कर सकते हैं।
डेव

@ क्या, आपने "अधिकतम विलंब" की गलत व्याख्या की हो सकती है, यह सिर्फ एक समझदार देरी है जिसकी मैं सिफारिश करूंगा। उदाहरण के लिए, कुछ घंटों का इंतजार थोड़ा चरम होगा ...
थॉमस ओ

जबरदस्त हंसी! वैसे मुझे लगा कि आपका क्या मतलब है, लेकिन मैं यह सुनिश्चित करना चाहता था कि मैं कुछ याद नहीं कर रहा था, क्योंकि मुझे अभी तक अपने एलसीडी को इनिशियलाइज़ करना है। मुझे आश्चर्य है कि अगर मुझे जाना चाहिए और यह सुनिश्चित करने के लिए एक पॉट को पकड़ना चाहिए कि यह विपरीत नहीं है जो मुझे यहां परेशान कर रहा है। :)
डेव

0

यकीन नहीं होता कि अगर यह AT ALL की मदद करता है, लेकिन मैंने Arduino प्रोजेक्ट पर KS0066U के साथ खिलवाड़ किया। यहाँ लिंक है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.