تعديل السجلات النقدية. الجزء الأول

يوم جيد للجميع. قبل بضع سنوات ، سقط سجل نقدي قديم خارج الخدمة عن غير قصد في يدي. كان يطلق عليه "Elves Micro-F". لأن أنا مهتم بالإلكترونيات والبرمجة ، بما في ذلك بناء أجهزة مختلفة على وحدات التحكم الدقيقة ، قرر الجهاز التحقيق. بعد تفكيكه ، رأيت:


  • لوحة بها حشوة إلكترونية وميكروكونترولر AT89C52 في مقبس
  • عرض
  • طابعة حرارية
  • البطارية
  • لوحة مفاتيح الفيلم
  • اثنين من المصابيح

الصورة
صورة 1 مظهر مكتب النقدية


في ذلك الوقت ، كان لدي بالفعل تجربة إنشاء أجهزة بسيطة من الصفر (ساعات ، مرحلات يتم التحكم فيها بواسطة منفذ COM ، إلخ). بدا فهم الجهاز النهائي أكثر صعوبة. بادئ ذي بدء ، وجدت على الشبكة وصفًا لهذا الجهاز ومخططًا ووثائق الإصلاح. كما اتضح ، هناك العديد من المخططات ، فهي تختلف بشدة ، على الرغم من أن الأجهزة تسمى نفسها تقريبًا. ولكن في النهاية ، وجدت الدائرة المناسبة. نظر إليها وأدرك أنه في الواقع ، جهاز الخروج ليس معقدًا للغاية.


كان علي معرفة:


  • مدى سهولة برمجة وحدة التحكم الدقيقة حتى لا تسحبها ذهابًا وإيابًا ، ثم إلى المبرمج ، ثم العودة إلى اللوحة
  • كيفية تأسيس التبادل مع الكمبيوتر
  • كيفية العمل مع ذاكرة الوصول العشوائي (وكان هناك AT24C08 تسلسلي)
  • كيفية رسم شيء على الشاشة
  • كيفية الحصول على ضربات المفاتيح
  • والأهم من ذلك! كيفية إخراج شيء ذي معنى للطابعة الحرارية

في هذه المقالة ، سأتحدث عن بداية عملي. الهدف النهائي هو إنشاء طابعة حرارية من مكتب صرف شطب قديم.


الجزء الأول
ابدأ


في البداية ، قررت التخلي عن وحدة التحكم الدقيقة الموجودة على اللوحة. أولاً ، يمكن برمجته فقط على مبرمج ، لم أكن أملكه لهذا النوع من وحدة التحكم. ثانيًا ، كان لديه ذاكرة فلاش داخلية صغيرة للبرامج.
بعد أن عذبني الاختيار ، استقرت على وحدة التحكم الدقيقة Winbond w78e58b. كان في نفس الحزمة (plcc44) ، وكان يحتوي على 32 كيلوبايت من ذاكرة البرنامج وذاكرة ثابتة داخلية أكبر لتخزين المتغيرات ، والأهم من ذلك ، سمح لك ببرمجة نفسك باستخدام مبرمج الدائرة دون إزالته من المقبس!


ولكن كانت هناك صعوبة: لبدء البرمجة ، استغرق الأمر مبرمجًا موازيًا لهذا النوع من وحدة التحكم الدقيقة إلى برنامج bootloader ، والذي يمكنني من خلاله تحميل البرامج الثابتة الخاصة بي. لقد وجدت معلومات حول كيفية جعل مثل هذا المبرمج على الإنترنت ، وجمع مبرمج ، ومحمل إقلاع مصحح!


ثم حدثت مشكلة أخرى - لم يكن لهذه الوحدة موصل للتوصيل بجهاز كمبيوتر!


الصورة
صورة 2 لوحة الواجهة الأصلية

على الرغم من أنه ، كما قرأت في الكتيبات ، كان هناك مثل هذا المنديل ، وكانت هناك مقابس في علبة الجهاز لذلك وموصل على اللوحة ، لكنني لم أستطع الحصول على هذا الإقران. في ذلك الوقت كانت معروضة للبيع في أي مكان ، ولم تكن تكلف مالا مريضا. ثم قررت أن أجعل الواجهة بنفسي. لقد كسرت قابسًا واحدًا من العلبة ، وقمت بتفكيك المقبس من الشبكة المحلية بموصل لـ RJ45 ، وقطع هذا الموصل إلى قطعة من اللصق ولصقه في شباك التذاكر من أجل المادة اللاصقة المذوبة بالحرارة. ونتيجة لذلك ، تم إدخال الزوج الملتوي المعتاد بشكل مثالي من الخارج حتى نقرة! يبقى لتوصيل دبابيس الموصل إلى متحكم. بالطبع ، هذا مستحيل مباشرة ، إنه ضروري من خلال محول المستوى ، على سبيل المثال MAX232. على قطعة صغيرة من اللوح ، وضع الشريحة نفسها ، مكثفات الربط ، ملحومة الأسلاك. لقد قمت بلحام كبل للتوصيل بجهاز كمبيوتر من قطعة من الزوج الملتوي. من ناحية ، موصل RJ45 عادي ، من ناحية أخرى ، أم DB9 لموصل منفذ COM.


كانت المهمة التالية هي العثور على مترجم ، مجاني وليس صعبًا بشكل خاص لهذه الأغراض. جئت عبر ميكروفيجن كيل. كان نوعًا من الإصدار التجريبي مع حد طول الرمز. يكفي لأهدافي. كان البرنامج الأول بسيطًا: للإخراج إلى الكمبيوتر في برنامج المحطة الطرفية شيء يشبه Hello world!


كتبت برنامج ، كانت الصعوبة فقط في التهيئة الأولية للمنافذ وسجلات الخدمة. ولكن بعد البحث في الشبكة عن أمثلة ، تعاملت مع هذا بسرعة. بعد ذلك ، أطلقت البرنامج
8051IspWriter ، الذي يقوم بتحميل البرامج الثابتة. من أجل أن يتحول الميكروكونترولر إلى وضع bay للبرنامج الثابت ، كان من الضروري تنشيط محمل الإقلاع المدمج. كما اتضح ، يمكن القيام بذلك عن طريق تقصير خرج وحدة التحكم على الأرض قبل تطبيق الطاقة. أيهما موجود في ورقة البيانات على وحدة التحكم الدقيقة. تم تحميل البرنامج الثابت ، وبعد ذلك قمت بإيقاف تشغيله ، وشغّل أمين الصندوق وشاهد النص الخاص بي على الشاشة الطرفية! يعمل النظام!


علاوة على ذلك ، قررت التحكم في تسجيل النقد نفسه قليلاً ، أو بالأحرى وميض LED. وفقًا للمخطط ، حددت أي جزء من وحدة التحكم الدقيقة التي يذهب إليها هذا LED ، كتبت مصباحًا بسيطًا وبدأ مصباح LED في الوميض عند الخروج! لقد أصبح الطريق إلى الهدف النهائي مرئيًا بالفعل!


مقتطفات من كود المصدر:


void main(void) { UCHAR i; char c; static int data value; UCHAR bCassaTypeOld; UCHAR iNumSymbolsOld; jmpLDROM=0; //            P0 |= 0x01; // PPWR = 1 P1 |= 0x20; // PM1 = 1 P1 |= 0x40; // PM2 = 1 P3 &= ~0x40; // SI = 0 P3 &= ~0x20; // CLOCK = 0 P3 |= 0x80; // LATCH = 1 P3 |= 0x10; // STBA = 1 P3 |= 0x08; // STBB = 1 //          initUart(BAUD_RATE_19200); puts("Hello world!"); while(1) ; } 

Source: https://habr.com/ru/post/ar424627/


All Articles