Სარჩევი:

გადააქციე შენი არდუინო მაგნიტურ ბარათის მკითხველად!: 9 ნაბიჯი (სურათებით)
გადააქციე შენი არდუინო მაგნიტურ ბარათის მკითხველად!: 9 ნაბიჯი (სურათებით)

ვიდეო: გადააქციე შენი არდუინო მაგნიტურ ბარათის მკითხველად!: 9 ნაბიჯი (სურათებით)

ვიდეო: გადააქციე შენი არდუინო მაგნიტურ ბარათის მკითხველად!: 9 ნაბიჯი (სურათებით)
ვიდეო: ისწავლე Arduino და შექმენი შენი სტარტაპი ტექნოპარკში 2024, ნოემბერი
Anonim
გადააქციე შენი არდუინო მაგნიტურ ბარათის მკითხველად!
გადააქციე შენი არდუინო მაგნიტურ ბარათის მკითხველად!
გადააქციე შენი არდუინო მაგნიტურ ბარათის მკითხველად!
გადააქციე შენი არდუინო მაგნიტურ ბარათის მკითხველად!
გადააქციე შენი არდუინო მაგნიტურ ბარათების მკითხველად!
გადააქციე შენი არდუინო მაგნიტურ ბარათების მკითხველად!

ყველამ გამოიყენა მაგნიტური ბარათის წამკითხველი, მე მჯერა. ვგულისხმობ, ვინ ატარებს ფულს ამ დღეებში? არც მათ უჭირთ ხელში ჩაგდება და ჩემს საყვარელ ელექტრონიკის მაღაზიაში მოგზაურობისას აღმოვაჩინე ამ ბიჭებით სავსე ურნა. ასე რომ … რა თქმა უნდა, მე ავიღე ერთი და მოვიყვანე სახლში, რომ მენახა რა სახის ნივთების გაკეთება შემიძლია მასთან და AVR.

ეს ინსტრუქცია გაჩვენებთ თუ როგორ უნდა დაუკავშიროთ მაგტეკის მაგნიტური ბარათის მკითხველი AVR ან Arduino/კლონს და წაიკითხოთ მონაცემები ბარათის პირველი ბილიკიდან. დააჯექი შენს ადგილებს; მაგნიტური ბარათის მკითხველს აქვს მაღალი ბიტ სიჩქარე!

ნაბიჯი 1: აღჭურვილობის სია

აღჭურვილობის სია
აღჭურვილობის სია
აღჭურვილობის სია
აღჭურვილობის სია

აქ არის რამოდენიმე რამ, რაც თქვენ გჭირდებათ დასაწყებად.

  • მაგნიტური ბარათის წამკითხველი (ჩემი არის Magetk 90 მმ ორმაგი თავის მკითხველი. $ 5.00)
  • AVR, Arduino ან კლონი (ATmega328p 4. 4.30 $ Mouser.com– დან
  • solderless breadboard
  • რაღაც მავთული
  • იქნებ სათაური თუ მოგწონთ ასეთი რამ.
  • რაღაც წაიკითხოთ თქვენი სერიული პორტი. მე ვიყენებ AVR ტერმინალს BattleDroids.net– დან

ეს არის ყველაფერი რაც თქვენ გჭირდებათ რომ დაიწყოთ. დამოკიდებულია მაგის ბარათის მკითხველზე, რომელსაც საბოლოოდ მიიღებთ, შეიძლება დაგჭირდეთ ამ ინსტრუქციის და, უდავოდ, კოდის შეცვლა, თქვენს კონკრეტულ მკითხველთან მუშაობისთვის. თუმცა, ჩემი დაწერილი კოდი საკმაოდ შორს უნდა მიგიყვანოთ, ვიმედოვნებ.

ნაბიჯი 2: მაგნიტური ბარათების წამკითხველების თვითგამორკვევა

მაგნიტური ბარათების წამკითხველები
მაგნიტური ბარათების წამკითხველები
მაგნიტური ბარათების წამკითხველები
მაგნიტური ბარათების წამკითხველები
მაგნიტური ბარათების წამკითხველი
მაგნიტური ბარათების წამკითხველი
მაგნიტური ბარათების წამკითხველი
მაგნიტური ბარათების წამკითხველი

მაგნიტური ბარათების მკითხველები არიან "თვითკონტროლირებადი", რაც იმას ნიშნავს, რომ ისინი უზრუნველყოფენ საათს, რომელსაც ეწოდება სტრობი, რომლის წინააღმდეგაც დაკავშირებულ მიკროკონტროლერს შეუძლია სინქრონიზაცია. ეს არის სიკეთე. ეს იმას ნიშნავს, რომ თქვენ არ უნდა ინერვიულოთ იმაზე, რომ მოძებნოთ საათის სიგნალი და დაადგინოთ სიგნალი ცენტრში უშუალოდ საათის იმპულსზე და არ შეაწუხოთ საათის სიგნალის ტკბილ ადგილას. ეს აზრი აქვს ბარათის დარტყმებზე ფიქრისას: ყველა სხვადასხვა ტემპით იტრიალებს, ზოგი უფრო ნელა, ზოგი უფრო სწრაფად ვიდრე სხვები. თვითგამორკვევა ჩემს ტკბილ ბებიასაც კი აძლევს შესაძლებლობას გამოიყენოს თავისი ბარათი მაჯის გატეხვის გარეშე. მახსენებს, რომ უნდა შევცვალო ის პარამეტრი, რომელიც განსაზღვრავს რამდენ ხანს მოქმედებს დაწკაპუნებებს შორის ორმაგი დაწკაპუნების რეგისტრაციისთვის….

ამ ბარათის მკითხველის მონაცემები ძალაშია 1.0 ჩვენთვის, სანამ სტრობი ხაზზე არ იქნება გადატანილი, ასე რომ არ შეგეშინდეთ „ცოტა დროში“მოხვედრის გადადება. ორმაგი თავით მკითხველისთვის, როგორიც მე ვიყენებ, არის ორი მონაცემთა ბილიკი წასაკითხად. ამ 'ible, მე ვაპირებ ნახოთ კითხულობს პირველადი პირველი სიმღერა დასაწყებად. არსებობს ხუთი კავშირი, რომლის გაკეთებაც დაგჭირდებათ (ოთხი, თუ არ იბადებით უარი თქვან უფრო წვრილკონფიგურირებული კონტროლისთვის ნაკლებად გამოყენებული I/O პორტებისათვის). გადახედეთ ქვემოთ მოცემულ სურათს. წითელი მავთული მიდის +5V– მდე, ხოლო შავი მავთული მიწაზე მიდის. მწვანე მავთული არის /CARD_PRESENT; ყვითელი მავთული არის /STROBE, ხოლო თეთრი მავთული არის /DATA1. წინსვლა (/) ნიშნავს, რომ მონაცემები შებრუნებულია. დაბალი სიგნალი (ანუ 0) იკითხება როგორც ერთი, ან მაღალი. სხვა კონექტორები ყავისფერია /STROBE2- ისთვის და ნარინჯისფერია /DATA2- ისთვის. ჩვენ არ გამოვიყენებთ მათ. თუ გსურთ, შეგიძლიათ დაივიწყოთ /CARD_PRESENT. ეს მონაცემთა ხაზი იკლებს დაახლოებით 17 თავის ნაკადის ბრუნვის შემდეგ, რაც მიუთითებს იმაზე, რომ ბარათი არსებობს (ნაცვლად იმისა, რომ ვთქვათ შემთხვევითი ხმაური თქვენს მკითხველს გაგზავნას ყალბი მონაცემებით) და გამოიყენება იმის დასადასტურებლად, რომ მიღებული მონაცემები არის ბარათის მონაცემები და არა ნაგავი თქვენ შეგიძლიათ გამოტოვოთ ეს კავშირი, თუ მონაცემების ნაკადზე შეამოწმებთ საწყისი სენტინელი. ამის შესახებ მოგვიანებით. როგორც ქვემოთ ხედავთ, მე გამოვიყენე მარჯვენა კუთხის მამრობითი სათაური, რომელიც დაკავშირებულია პურის დაფასთან და ამას ვუკავშირებ ჩემს მკითხველს. მე დავუკავშირე /STROBE PIND2– ს (ციფრული პინი 2 არდუინოზე), /CARD_PRESENT PIND3– ს (საილუსტრაციო მიზნებისთვის) და /DATA1 PIND4– ს. დარწმუნდით, რომ ჩართავთ ამწეებს ამ ქინძისთავებზე ისე, რომ თქვენი ქინძისთავები არ დატრიალდეს. მე ასევე შევცვალე ჩემი არდუინო Bare Bones AVR– ით, რადგან მომწონს ის, თუ როგორ ჯდება ის პურის დაფაზე.

ნაბიჯი 3: მაგნიტური ბარათის საფუძვლები

მაგნიტური ბარათის საფუძვლები
მაგნიტური ბარათის საფუძვლები

ძირითადი ფუნქციები, რაც თქვენ უნდა გააკეთოთ მაგნიტური ბარათის წასაკითხად, არის: 1. ამოიცანით, როდესაც ბარათი გადაფურცლულია. მონაცემები პირველ რიგში, მე გაგაცნობ მაგნიტური ბარათის ძირითად პრინციპებს, რომლებიც უნდა იცოდე საკუთარი კოდის წერის დაწყებისას.

მაგნიტური ბარათის სტანდარტები

მაგნიტური ბარათები სტანდარტიზირებულია ISO– ით შემდეგ დოკუმენტებში: 7810 საკრედიტო ბარათის ზომის დოკუმენტის ფიზიკური მახასიათებლები 7811-1 ჭედური 7811-2 მაგნიტური ზოლი-დაბალი იძულება 7811-3 ამოტვიფრული სიმბოლოების მდებარეობა 7811-4 ბილიკების მდებარეობა 1 და 2 7811- 5 ბილიკის მდებარეობა 3 7811-6 მაგნიტური ზოლი - მაღალი იძულება 7813 ფინანსური ტრანზაქციის ბარათები როგორც ხედავთ, ფინანსური ბარათები მითითებულია ცალკეულ დოკუმენტში და ხშირად აქვთ განსხვავებული ფორმატი, ვიდრე, მაგალითად, თქვენი სასურსათო ბარათი ან საერთაშორისო სავიზიტო ბარათი. თქვენ მოგიწევთ პროგრამირება ამ განსხვავებების გამო. მე მხოლოდ საკრედიტო ბარათი და სადაზღვევო ბარათი მქონდა მოსახერხებელი, ამიტომ დავპროგრამე ამ ტიპისთვის (რომელიც ორივე ფორმატში B ხდება).

ბარათის ფორმატები

მაგნიტური ბარათების რამდენიმე განსხვავებული ფორმატი არსებობს. ფორმატი A და B საერთოა, B არის ყველაზე გავრცელებული, რაც მე მინახავს და რომელიც მხარს უჭერს ამ კოდს. C– დან M– მდე ფორმატები დაცულია ISO– ს მიერ, მე მჯერა, ხოლო N– მდე ?? დაცულია ინსტიტუციონალური პერსონალური გამოყენებისთვის. ტრეკი 1 ფინანსური ბარათებისთვის, პირველი ჩანაწერი ჩაწერილია 210 ბიტზე ინჩზე და არის ბარათის პირველი 0.110 "ზემოდან. მონაცემები დაშიფრულია როგორც" ბარათის მონაცემები ", როგორც 7 ბიტი თითო პერსონაჟზე. ეს არის 6 ბიტიანი ხასიათი და ცოტაოდენი პარიტეტი. არსებობს ~ 79 ალფანუმერული სიმბოლო. 1. ფიზიკური შეკვეთა უკანაა. ანუ, მონაცემები არის, მაგრამ ის უკანადაა დაწერილი ბარათზე (და შესაბამისად, წაიკითხავს თქვენი ფირმა) როგორც. პარიტეტი უცნაურია. ბარათის მონაცემთა ფორმატი ასე გამოიყურება:

[SS] [FC] [ძირითადი ანგარიში #] [FS] [სახელი] [FS] [დამატებითი მონაცემები] [FS] [ES] [LRC] სადაც:

SS დაწყება სენტინელი FC ფორმატის კოდი FS ველის გამყოფი ES ბოლო გზავნილი LRC გრძივი სიჭარბის შემოწმების ხასიათი აკონტროლეთ ერთი SS = '%', FC = ერთ -ერთი ფორმატი (ბევრჯერ იქნება B), FS ხშირად არის '', ES არის '?' და LRC სიმბოლო ჩვეულებრივ არის "<", თუმცა ეს არ არის მითითებული სტანდარტებში. გარდა იმისა, რომ ბარათზე იწერება უკან, მონაცემებს აქვს კენტი პარიტეტული ბიტი და არის 0x20 ASCII– დან. ჩვენ ამას გავუმკლავდებით მონაცემების დამუშავების დროს. ბილიკი 2 ტრეკი ორი არის 0.110 "სიგანე და იწყება 0.110 ბარათის ზემოდან. მისი ჩაწერის სიმკვრივეა 75 ბიტი ინჩზე. მონაცემები არის 5 ბიტი თითო პერსონაჟზე და შედგება მხოლოდ 40 რიცხვითი სიმბოლოსგან. თქვენ არ უნდა შეხვდეთ ასოები ამ ტრეკზე. ბარათის მონაცემთა ფორმატი უნდა ემორჩილებოდეს ამ სტრუქტურას

[SS] [პირველადი ანგარიში #] [FS] [დამატებითი მონაცემები | დისკრეციული მონაცემები] [ES] [LRC]

მეორე ბილიკის SS არის მძიმით: ';' და FS არის '=' ამ წმინდა ცოდნის ქვეშ, განაგრძეთ შემდეგი ნაბიჯები, რომ ნახოთ კოდი, რომელიც ახორციელებს ზემოთ აღწერილ პროცედურას.

ნაბიჯი 4: აღმოაჩინეთ, როდესაც ბარათის გადაფურცვლა ხდება

აღმოაჩინეთ, როდესაც ბარათის გადაფურცვლა ხდება
აღმოაჩინეთ, როდესაც ბარათის გადაფურცვლა ხდება

1. გამოავლინეთ, როდესაც ბარათი გადავიდა ფორმალურად, ერთი შეამოწმებდა /CARD_PRESENT პინს, რომ დაეცა დაბალი. საბედნიეროდ, ეს ნამდვილად არ არის საჭირო. ჩვენ ვამოწმებთ მოქმედ ბარათს მოგვიანებით. ალტერნატიულად, თქვენ შეგიძლიათ წაიკითხოთ თქვენი სტროფის ქინძისთავი, რომ ნახოთ როდის დაიდება სტრობები ქინძისთავზე, თუმცა, ეს დაგიბრუნებთ უამრავ დარტყმის ნულს. მკითხველი გამოგიგზავნით დაახლოებით 60-70 წამყვან ნულს, რათა შეგატყობინოთ, რომ მონაცემების პრეზენტაცია ხდება. თუმცა, ჩვენ ვაპირებთ გამოვიყენოთ ორობითი მონაცემების ბუნება იმის დასადგენად, თუ როდის დავიწყოთ ბიტების ჩაწერა. დასაწყისი სენტინელი (SS) ტრეკისთვის არის პროცენტული ნიშანი (%). მისი ორობითი მნიშვნელობაა 0010 0101, რაც იმას ნიშნავს, რომ ის შეინახება (და წაიკითხება) 1010 001 (ეს არის 7 ბიტიანი, ასე რომ მე -8 ბიტი არ არის გადაცემული). ახლა, გამჭრიახი მკითხველი შეამჩნევს, რომ მიუხედავად იმისა, რომ მონაცემები უკან არის, ის არ ემთხვევა ორობითი ASCII მნიშვნელობას. ეს იმიტომ ხდება, რომ ის არის 0x20 ჰექსაზე. % სიმბოლოა 0x25 და 0100 0101 არის 0x05. ბარათის მონაცემები 0x20 გამოკლებულია მნიშვნელობიდან. ის, რაც იქ მაღლა დგას, უცნაური პარიტეტია. ის ისეა განთავსებული, რომ მნიშვნელობაში არის კენტი რიცხვი "1". ასე რომ, რადგან ჩვენ ვიცით, რომ მოქმედი ბარათი ყოველთვის დაიწყება ამ სენტინელით დაწყებისთანავე და რადგან პარიტეტული ბიტი არის 1, მაშინ როდესაც ჩვენ გამოვავლენთ პირველ HIGH- ზე LOW გადასვლას მონაცემთა პინზე, მაშინ ჩვენ ვიცით, რომ ჩვენ ახლახან დავიწყეთ მიღება დაიწყეთ გუშაგი ბარათიდან. ახლა, ეს ყოველთვის არ იქნება სიმართლე და უტყუარი გეგმა იქნება შეამოწმოთ /CARD_PRESENT ბარათი, რომ ნახოთ თუ არა ის დამატებით დაბალი. SS– ის დაწყების გამოვლენის უმარტივესი გზაა შექმნათ გარე შეფერხება, რომელიც გამოწვეულია /STROBE– ის დაცემის პირას. მონაცემები ძალაშია 1.0 ჩვენამდე დაცემამდე, ასე რომ, როდესაც თქვენ აიღეთ ნიმუში დაცემის ზღვარზე, მაშინ იცით, რომ შეგიძლიათ წაიკითხოთ /DATA1 პინი და მიიღოთ სწორი მნიშვნელობა. აქ არის კოდი თქვენი გარე შეფერხების შესაქმნელად, რომელიც ამოვარდნილია ზღვარზე.

voidInitInterrupt (void) {// BSET წყვეტის დაყენება (EIMSK, INT0); // გარე შეწყვეტის ნიღაბი BSET (EICRA, ISC01); // ჩამოვარდნილი ზღვარი BCLR (EICRA, ISC00); // დაცემის ზღვარი BSET (SREG, 7); // I-bit SREG}-ში

ჩემს საერთო პროგრამაში, რომელიც მე შევიტანე ჩემს ყველა პროგრამაში, შეგიძლიათ ნახოთ BSET და BCLR განმარტებები. მიმართეთ იმ ფაილს, თუ გაქვთ რაიმე შეკითხვა ბიტების დაყენების შესახებ. ახლა, როდესაც შეფერხება ამოქმედდება, ჩვენ გვსურს მოვიყვანოთ მაგალითი /DATA1 (ჩემს კოდში განსაზღვრულია როგორც CARD_DATA) და ცოტა დავაყენოთ ზოგადი დანიშნულების IO რეგისტრში. თუ მე -7 ბიტზე ვართ, დაზოგეთ რეგისტრაცია, როგორც პერსონაჟი ჩვენს გლობალურ ბუფერში. მე ვიყენებ GPIOR0 რეგისტრს, რადგან ის სწრაფი წვდომაა. ფსევდო კოდი მსგავსია:

შეაჩერე 16-ბიტიანი ქრონომეტრი ტაიმერის გასუფთავება თუ DATA არის LOW მითითებული BIT = 1 REGISTER- ში Decrement BIT დააყენეთ დროშა ისე რომ აღარ გამოვტოვოთ სხვა დანარჩენი მონაცემები მაღალია BIT = 0 REGISTER- ში Decrement BIT თუ BIT არის 0 დაამატეთ ბაიტი ბუფერში გაზრდის ინდექსი გადატვირთეთ BIT

თუ თქვენ ჰკითხავთ საკუთარ თავს, თუ რატომ მცირდება გაზრდის ნაცვლად, გახსოვდეთ, რომ მონაცემები უკან არის, ამიტომ ბიტების ჩაწერის ნაცვლად, როდესაც ჩვენ ვიღებთ მათ LSB– დან MSB– ში, ჩვენ ვინახავთ მათ MSB– დან LSB– ში, ასე რომ ჩვენ არ დაგვჭირდება ბიტების გადაბრუნება. მოგვიანებით მონაცემთა დამუშავებისას. თუ თქვენ ნამდვილად გინდოდათ, თქვენ ასევე შეგიძლიათ დაამატოთ 0x20 ექვსკუთხედი აქ, მაგრამ ვინაიდან ეს არის დაახლოებით 5us ამ სტრობებზე, მე ამ პროცესის შეწყვეტის სერვისის დამუშავებას მინიმუმამდე ვატარებ.

ISR (INT0_vect) {StopTimer (); ClearTimer (); თუ (! BCHK (PIND, CARD_DATA1)) // შებრუნებული დაბალი = 1 {BSET (GPIOR0, ბიტი); -ბიტი; bDataPresent = 1; } else if (bDataPresent) {BCLR (GPIOR0, ბიტი); -ბიტი; } if (bit <0) {buff [idx] = (char) GPIOR0; ++ idx; ბიტი = 6; } StartTimer ();} თუ გაინტერესებთ, რა არის დროის ბიზნესი, ეს არის ნაბიჯი, რომელიც განსაზღვრავს, როდის დატოვა ბარათი მკითხველმა.

ნაბიჯი 5: წაიკითხეთ მონაცემთა ნაკადი

წაიკითხეთ მონაცემთა ნაკადი

ისე, მე უკვე გაჩვენეთ, თუ როგორ უნდა წაიკითხოთ მონაცემები, რადგან ეს არის შეწყვეტის სამსახურის რუტინის ნაწილი ჩვენი გარე ზღვრების დაცემისას. ალტერნატიული მეთოდი იქნება დროშის დაყენება ISR– ში, ხოლო მთავარ მარყუჟში გამოკითხვის დროშა და მონაცემების წაკითხვა ისე, მაგრამ მე მჯერა, რომ ის, რაც მე წარმოვადგინე, უფრო სუფთაა. იყავით თქვენი საკუთარი მოსამართლე და დაწერეთ თქვენი, თუმცა თქვენი MCU ამის საშუალებას მოგცემთ. როგორც ითქვა, მოდით გადავიდეთ იმის გასარკვევად, თუ როგორ უნდა ამოვიცნოთ, როდესაც ბარათი ელვისს გაიყვანს და შენობა დატოვა.

ნაბიჯი 6: აღმოაჩინეთ ბარათი, რომელიც ტოვებს მკითხველს

აღმოაჩინეთ ბარათი, რომელიც ტოვებს მკითხველს
აღმოაჩინეთ ბარათი, რომელიც ტოვებს მკითხველს

აღმოაჩინეთ როდესაც ბარათი გაქრა

ფორმალურად, ჩვენ ვიღებდით ნიმუშს /CARD_PRESENT პინზე, რომ გაერკვია თუ არა ისევ მაღლა, მაგრამ ჩვენ არ გვჭირდება steenkin ' /CARD_PRESENT სხვა I /O პორტის აღება. ეს არის ის ადგილი, სადაც ეს ტაიმერები შემოდიან. ყოველ ჯერზე, როდესაც შეფერხებას ეძახიან, რადგან ჩვენ აღმოვაჩინეთ /STROBE- ზე ზღვარი, ჩვენ ვაჩერებთ ტაიმერს, ვასუფთავებთ ტაიმერის მნიშვნელობას და ვიწყებთ კითხვას. როდესაც ჩვენ დავასრულებთ კითხვას, ჩვენ კვლავ ვიწყებთ ტაიმერს. გაიმეორეთ გულისრევა, ან სანამ ტაიმერი მიაღწევს გარკვეულ მნიშვნელობას. ეს ნიშნავს, რომ ბოლო შეფერხება გამოიძახა და აღარ არის მონაცემები, ამიტომ ვივარაუდოთ, რომ ეს არის და ვიწყებთ ჩვენს მიერ შეგროვებული მონაცემების დამუშავებას. ქრონომეტრებისთვის ჩვენ ვიყენებთ TIMER1- ს, ანუ 16-ბიტიან ტაიმერს. მე ვიყენებ 16 Mhz რეზონატორს გარედან ჩემს AVR– ზე. თუ თქვენ იყენებთ არდუინოს, თქვენც ალბათ იყენებთ. ამრიგად, მე ავირჩიე წინასწარი გამყიდველის მნიშვნელობა 1024 რაც ნიშნავს ტაიმერის ყოველ (16, 000, 000 /1024) ჯერ გაზრდას. ანუ, ის წამში 15,625 -ჯერ 'მონიშნავს'. /CARD_PRESENT იქნება მაღალი, რაც მიუთითებს იმაზე, რომ ბარათმა დატოვა მკითხველი ბოლო მონაცემებიდან დაახლოებით 150ms. ამის ცოდნით, მე უბრალოდ გადავწყვიტე წამის ყოველი 1/4 შემოწმება. ეს ასე გამოიყურება:

(((F_CPU) / PRESCALER) / 4) რაც დაახლოებით 3900 -ია. ასე რომ, როდესაც ტაიმერის მრიცხველი TCNT1 აღწევს 3900 -ს, მე ვიცი, რომ ეს იყო დაახლოებით 300ms და შემიძლია საკმაოდ უსაფრთხოდ დავასკვნა, რომ ბარათმა დატოვა მკითხველი. Მარტივი

#განსაზღვრეთ PRESCALER 1024#განსაზღვრეთ CHECK_TIME ((F_CPU / PRESCALER) / 4) // 250 ms#განსაზღვრეთ StartTimer () BSET (TCCR1B, CS10), BSET (TCCR1B, CS12) // 1024 prescaler#define StopTimer () BCLR (TCCR1, CS10), BCLR (TCCR1B, CS12)#განსაზღვრეთ ClearTimer () (TCNT1 = 0) თქვენ ნახეთ ISR– ში, სადაც ტაიმერი იწყება, ჩერდება და გასუფთავებულია თითოეულ შეფერხებაზე. ახლა, მთავარ მარყუჟში ჩვენ უბრალოდ ვამოწმებთ, მიაღწია თუ არა ტაიმერის მრიცხველმა ჩვენს მიზნობრივ მნიშვნელობას და თუ ასეა, დავიწყოთ მონაცემთა დამუშავება

(;;) {if (TCNT1> = CHECK_TIME) {

StopTimer (); ClearTimer (); ProcessData (); ReadData (); idx = 0; ბიტი = 6; bDataPresent = 0; memset (& buff, 0, MAX_BUFF_SZ1); }} ახლა უსაფრთხოა მონაცემების დამუშავება

კოდი ფორმატირებული

ნაბიჯი 7: მონაცემების დამუშავება

მონაცემთა დამუშავება
მონაცემთა დამუშავება

მონაცემების დამუშავება

დამუშავების ეტაპი შედგება:

  • მოქმედი SS- ის შემოწმება
  • პარიტეტის შემოწმება
  • გარდაქმნა ASCII– ზე
  • მოქმედი ES- ის შემოწმება
  • LRC შემოწმება

აქ, მე არ შემაწუხებს პარიტეტის შემოწმება, რადგან ეს ბიტი ნულის ტოლია. მე ასევე არ ვიანგარიშებ LRC ამ პატარა გაკვეთილისთვის. ეს იქნება ის, რისი გაკეთებაც უფრო სრულად გაცნობიერებულ firmware– ს სურს. აქ არის კოდი მონაცემების დამუშავებისათვის ზემოაღნიშნული საფეხურების შესრულების გარეშე (ზემოთ უკვე ნახსენები). იპოვეთ იგი ქვემოთ მოცემულ სურათზე. ეს არის კომენტარი და საკმაოდ თვითგამხსნელი. სპეციალური შენიშვნა პარიტეტულობაზე და ASCII- ზე: მე უბრალოდ ვასუფთავებ პარიტეტულ ბიტს (მე -7 ბიტი … ანუ 1, რომლის უკან არის 6 ნული) და "ბარათის მონაცემებიდან" გადასაყვანად, თქვენ უნდა დაამატოთ 0x20 მნიშვნელობას. ეს დაახლოებით.

ნაბიჯი 8: მონაცემების ჩვენება

მონაცემების ჩვენება
მონაცემების ჩვენება
მონაცემების ჩვენება
მონაცემების ჩვენება

მონაცემების ჩვენება

ეკრანი მიდის ტერმინალურ პროგრამაზე, რომელიც მე სპეციალურად დავწერე AV23– თან RS232 ან USB– ით დასაკავშირებლად. პროგრამას ჰქვია AVR ტერმინალი. ReadData () მეთოდი საკმაოდ მახინჯია და თქვენ გირჩევთ იპოვოთ უფრო სუფთა გამოსავალი ვიდრე მე მოვიფიქრე. ასევე არის AVR ტერმინალში ფუნქციის გამომუშავება. გამომავალი არის პირველი ჯანმრთელობის დაზღვევის ბარათი, ხოლო მეორე არის VISA ბარათი. დააწკაპუნეთ სურათზე ზედა მარცხენა კუთხეში და შეარჩიეთ ორიგინალური ან დიდი სურათი, რომ უკეთ ნახოთ.

ნაბიჯი 9: კოდის ჩამოტვირთვა და შეფუთვა

ამ სახელმძღვანელოში მე განვიხილე მაგნიტური ბარათების წამკითხველების საფუძვლები და გაჩვენეთ კოდი, რომელიც დაგეხმარებათ სწორი მიმართულებით დაიწყოთ მაგნიტური ბარათებიდან მონაცემების კითხვა. კიდევ ბევრი სამუშაოა გასაკეთებელი, როგორიცაა მე -2 ტრეკის კითხვა და გაშიფვრა, LRC გამოთვლა და თითოეული ბაიტის უცნაური პარიტეტის გამოთვლა. სრული კოდის ჩამოტვირთვა შესაძლებელია ქვემოთ. იგი დაიწერა AVR Studio 4.17 -ში. ვიმედოვნებ, რომ თქვენ ისიამოვნეთ ამ სასწავლო ინსტრუქციით და, როგორც ყოველთვის, ველოდები ნებისმიერ კომენტარს ან წინადადებას, რაც შეიძლება გქონდეთ. ბედნიერი კოდირება და AVR'ing!

გირჩევთ: