Ηλεκτρονική Ταμιακή Μηχανή με Δημοσιονομική Μνήμη

 

Στην κατασκευή αυτή παρουσιάζεται η μέθοδος ανάπτυξης Ηλεκτρονικής Ταμιακής Μηχανής με Δημοσιονομική Μνήμη. Η κατασκευή διαθέτει τις υπομονάδες ώστε να εκτελεί όλες τις απαραίτητες λειτουργίες (πρόσθεση, πολλαπλασιασμό, υπολογισμό ΦΠΑ, έκδοση αποδείξεων και αποθήκευση φορολογικών στοιχείων σε μνήμη). Η αρχιτεκτονική του συστήματος βασίζεται στην επικοινωνία μικροελεγκτών, οι οποίοι ελέγχουν τα υποσυστήματα, μέσω διαύλου I2C. Οι υπομονάδες που υλοποιούν το σύστημα είναι η μονάδα απεικόνισης, εκτύπωσης, η κεντρική μονάδα επεξεργασίας και η δημοσιονομική μνήμη. Οι μικροελεγκτές που χρησιμοποιήθηκαν είναι οι AVR ATmega8 και ATmega32 και εκτυπωτής ο Citizen DP630.

 

Συγγραφέας: Πορλιδάς Δημήτριος

Βιογραφικό Σημείωμα

electronics@porlidas.gr

Facebook

Linkedin


 

 

Η Ηλεκτρονική Ταμιακή Μηχανή (ΗΤΜ) αποτελείται από επτά διαφορετικές υπομονάδες: Μητρική Πλακέτα (MB), Εκτυπωτής (Prt), Πλακέτα Εκτύπωσης (PB), Πλακέτα Απεικόνισης (DB), Προγραμματιστής (ISP) και τροφοδοτικό (PS).

Στη Μητρική Πλακέτα βρίσκεται ο μικροελεγκτής (MCU) ο οποίος εκτελεί όλες τις λειτουργίες επεξεργασίας. Διαθέτει βοηθητική τροφοδοσία από επαναφορτιζόμενη μπαταρία (NiMH 650mAh) για τις ανάγκες της MCU και του ρολογιού πραγματικού χρόνου (RTC). Επίσης ενσωματώνει το δίαυλο I2C και τη διασύνδεση του πληκτρολογίου.

Ο εκτυπωτής είναι κρουστικός ακίδας και εκτυπώνει σε δύο χαρτοταινίες των 37mm. Η Πλακέτα Εκτύπωσης είναι υπεύθυνη για τη διασύνδεση και επικοινωνεί με την MCU μέσω δίαυλου I2C. Η αρχιτεκτονική του συστήματος επιτρέπει την αλλαγή του συστήματος εκτύπωσης αλλάζοντας μόνο την Πλακέτα Εκτύπωσης και τον εκυπωτή.

 

Η Πλακέτα Απεικόνισης εμφανίζει τις χρεώσεις και τους υπολογισμούς και επικοινωνεί με την MCU μέσω δίαυλου I2C. Η αρχιτεκτονική του συστήματος επιτρέπει και εδώ την αλλαγή του συστήματος απεικόνισης αλλάζοντας μόνο την πλακέτα απεικόνισης.

Το πληκτρολόγιο είναι συνδεδεμένο απευθείας στην MCU και αποτελείται μόνο από διακόπτες επαφής. Ο προγραμματιστής ISP τοποθετήθηκε μόνο για τον προγραμματισμό της MCU για αναβάθμιση του λογισμικού ή εγκατάσταση νέων λειτουργιών στην ταμιακή μηχανή. Το τροφοδοτικό παράγει 5V DC για όλα τα ψηφιακά και αναλογικά κυκλώματα και 24V DC για τον κινητήρα και την κεφαλή του εκτυπωτή.

Όπως αναφέρθηκε παραπάνω, στη μητρική πλακέτα βρίσκεται ο μικροελεγκτής ο οποίος είναι ο ATmega32, το ρολόι πραγματικού χρόνου το οποίο είναι το DS1302 και επίσης ενσωματώνεται ο δίαυλος I2C και η διασύνδεση του πληκτρολογίου. Το DS1302 επικοινωνεί με την MCU στη διεύθυνση $09 μέσω απλής σειριακής διασύνδεσης με τη θύρα PB0-2. Η επικοινωνία γίνεται μόνο: κατά την έκδοση έντυπων αναφορών, κατά την εγγραφή δεδομένων στη δημοσιονομική μνήμη και κατά τον προγραμματισμό ημερομηνίας και ώρας. Τον υπόλοιπο χρόνο βρίσκεται σε Timekeeping mode (Osc On) και η κατανάλωσή του σε ρεύμα είναι 1μA.

 

 

 

Ο δίαυλος I2C είναι απευθείας συνδεδεμένος στην MCU της μητρικής πλακέτας γιατί διαθέτει το υλικό για την υποστήριξη του πρωτοκόλλου. Η MCU είναι ο master του διαύλου με διεύθυνση $01. Στη μητρική υπάρχουν 4 υποδοχές για σύνδεση συσκευών στο δίαυλο. Οι 3 από αυτές είναι πανομοιότυπες και διαθέτουν τα σήματα SDA and SCL και γραμμές τροφοδοσίας 5V (V1 and GND). Οι δύο χρησιμοποιούνται για τη σύνδεση με τις πλακέτες εκτύπωσης και απεικόνισης, ενώ η τρίτη είναι εφεδρική. Η τέταρτη υποδοχή είναι για τη σύνδεση με τη δημοσιονομική μνήμη και διαθέτει, εκτός από τα παραπάνω σήματα, Write Protect (WP) σήμα για τις εγγραφές στη μνήμη. Στη μητρική πλακέτα υπάρχει υποδοχή για τον ISP για αναβάθμιση του λογισμικού της MCU και θύρα USART RS232, με τα απαραίτητα κυκλώματα, για μελλοντική χρήση.

Η τροφοδοσία ρεύματος της MCU και του RTC γίνεται από την τάση VccAcc. Όταν το τροφοδοτικό βρίσκεται σε λειτουργία (V1=5V) το Τ1 βρίσκεται στον κόρο εξαιτίας του διαιρέτη τάσης R2-R3 με αποτέλεσμα το Τ2 να βρίσκεται και αυτό στον κόρο και για αυτό VccAcc~5V (ενώ παράλληλα φορτίζεται και η μπαταρία μέσω της R1). Όταν το τροφοδοτικό δε βρίσκεται σε λειτουργία (V1=0V) το Τ1 βρίσκεται σε αποκοπή. Η μπαταρία τότε πολώνει ανάστροφα την επαφή CE του T2 και για αυτό το Τ2 δεν άγει, απομονώνοντας έτσι την VccAcc από το κύκλωμα του τροφοδοτικού. Η VccAcc σε αυτή την περίπτωση είναι ίση με την τάση της μπαταρίας.

 

Η MCU βρίσκεται σε κανονική λειτουργία όταν η τάση V1=5V και μεταβαίνει σε Sleep mode όταν V1<4.7V. Όταν η V1=5V το T3 βρίσκεται στον κόρο εξαιτίας του διαιρέτη τάσης R17-R18 και για αυτό η PD2 βρίσκεται σε λογικό 0 (κανονική λειτουργία). Όταν η V1 αρχίσει να ελαττώνεται και γίνει μικρότερη από 4.7V, το Τ1 μεταβαίνει σε αποκοπή και η PD2 σε λογικό 1 από την R5 και τη VccAcc. Η MCU τότε εκτελεί μια ρουτίνα κατά την οποία αποθηκεύει τα περιεχόμενα των καταχωρητών της στη RAM, προγραμματίζει όλες τις θύρες ως εξόδους σε λογικό 0, εκτός από την PD2, την οποία προγραμματίζει ως IRQ INT0 και μεταβαίνει σε Sleep mode. Η συνολική κατανάλωση ρεύματος σε αυτή τη φάση είναι 23μA σύμφωνα με πραγματικές μετρήσεις. Λογικό 0 στην INT0 (εξαιτίας επαναφοράς της V1) επανατοποθετεί την MCU σε κανονική λειτουργία επαναφέροντας τα δεδομένα των καταχωρητών στην προηγούμενη κατάσταση.

Η διασύνδεση του πληκτρολογίου καταλαμβάνει τη θύρα Α. Το 74HC238 χρησιμοποιείται για επέκταση της θύρας ώστε να γίνει χρήση περισσότερων πλήκτρων. Η MCU κατά την εκκίνηση προγραμματίζει τις PA0-3 ως εξόδους και τις PA4-7 ως εισόδους με τις εσωτερικές Pull up αντιστάσεις απενεργοποιημένες. Στις εισόδους (PA4-7) τοποθετήθηκαν εξωτερικές αντιστάσεις Pull down ώστε να εξασφαλίζουν λογικό 0 σε αυτές όταν δεν πατιέται κάποιο πλήκτρο ή σε αστοχία της σύνδεσης του πληκτρολόγιου.

 

 

 

Οι έξοδοι PA0-2 είναι συνδεδεμένες στις εισόδους του 74HC238, ενώ η PA3 είναι συνδεδεμένη σε βομβητή για ηχητική σήμανση κατά το πάτημα πλήκτρου. Οι έξοδοι του 74HC238 Y0-6 είναι συνδεδεμένες στις στήλες ενός πληκτρολόγιου matrix 4x7 δια μέσω διόδων, ενώ η Υ7 είναι συνδεδεμένη στην κοινή επαφή ενός επιλογικού διακόπτη τεσσάρων θέσεων, ο οποίος προσδιορίζει την κατάσταση λειτουργίας της ταμιακής (OPER, X, Z, PROG). Οι γραμμές του πληκτρολόγιου με τις τέσσερις θέσεις του επιλογικού διακόπτη είναι συνδεδεμένες στις εισόδους PA4-7 της MCU.

Κατά την εκτέλεση του προγράμματος η MCU αυξάνει την PA0-2 από $00 ως $07 και παρακολουθεί το περιεχόμενο του PINA. Αν αυτό είναι μεγαλύτερο του $07 το πρόγραμμα ελέγχει τη θέση του επιλογικού. Αν δεν ταιριάζει με καμία από τις θέσεις σημαίνει ότι κάποιο πλήκτρο έχει πατηθεί και περιμένει να ελευθερωθεί. Όταν το πλήκτρο ελευθερωθεί το πρόγραμμα εξετάζει τη συνθήκη που ταιριάζει με το περιεχόμενο του καταχωρητή, ενεργοποιεί το βομβητή και εκτελεί την κατάλληλη λειτουργία.

 

Η πλακέτα εκτύπωσης αποτελείται από έναν μικροελεγκτή, ο οποίος είναι ο ATmega8 και 3 ολοκληρωμένα ως ενισχυτές ισχύος για τον εκτυπωτή. Επικοινωνεί με την MCU της μητρικής μέσω δίαυλου I2C στη διεύθυνση $06 ως slave. Οι PD0-7 και PC0-2 είναι προγραμματισμένες ως έξοδοι ενώ οι PB0-2 είναι προγραμματισμένες ως είσοδοι. Οι PD0-7 είναι συνδεδεμένες στους ενισχυτές ισχύος οι οποίοι οδηγούν τις ακίδες της κεφαλής, ενώ οι PC0-2 είναι συνδεδεμένες στους ενισχυτές ισχύος οι οποίοι οδηγούν το μοτέρ κίνησης και τα πηνία προώθησης των χαρτοταινιών. Οι PB0-2 λαμβάνουν σήματα από τον εκτυπωτή τα οποία καθορίζουν τη θέση της κεφαλής.

Οι ενισχυτές ισχύος είναι τρία STA401A. Κάθε ένα από αυτά ενσωματώνει 4 ζευγάρια Darlington τρανζίστορ, διόδους και αντιστάσεις πόλωσης. Κάθε Darlington έχει δυνατότητα να παρέχει ρεύμα 3Α. Οι δίοδοι D1-11 χρησιμοποιούνται για να αποφευχθεί η εφαρμογή υψηλής τάσης στην MCU της πλακέτας εκτύπωσης σε περίπτωση βραχυκυκλώματος  των STA401A από αστοχία. Οι δίοδοι πολώνονται ανάστροφα σε αυτή την περίπτωση όποια και αν είναι η κατάσταση των εξόδων της MCU.

 

 

 

Ο εκτυπωτής διαθέτει ένα μοτέρ DC το οποίο δίνει κίνηση σε ένα μειωτήρα στροφών ώστε να κινείται η κεφαλή εκτύπωσης, να προωθούνται οι χαρτοταινίες και να γυρίζει η μελανοταινία. Δύο δίσκοι με εγκοπές είναι τοποθετημένοι στον άξονα του μοτέρ και με τη βοήθεια LED και φωτοτρανζίστορ ανιχνεύουν την κίνηση της κεφαλής ώστε η MCU της πλακέτας εκτύπωσης να εκτελεί τις ρουτίνες εκτύπωσης. Ένας διακόπτης στη μια άκρη της διαδρομής της κεφαλής εκτύπωσης προσδιορίζει τη θέση της.

Κατά την εκτέλεση του προγράμματος η MCU της πλακέτας εκτύπωσης παρακολουθεί το δίαυλο I2C για λήψη δεδομένων και ξεκινάει τη διαδικασία εκτύπωσης σε περίπτωση που λάβει κάποιο πακέτο. Κάθε πακέτο αποτελείται από χαρακτήρες ASCII. Η MCU χρησιμοποιεί έναν πίνακα που έχει αποθηκευμένο στη μνήμη της για να μετατρέψει τους ASCII χαρακτήρες σε στήλες σημείων ώστε να εκτυπωθούν από την κεφαλή ακίδων. Κάθε χαρακτήρας αποτελείται από 5 στήλες, ενώ υπάρχει διάστημα δύο στηλών μεταξύ των χαρακτήρων. Για την εκτύπωση κάθε κολώνας ενεργοποιούνται οι κατάλληλες ακίδες για 0.5ms. Κάθε σειρά έχει 15 χαρακτήρες και στο τέλος κάθε σειράς ενεργοποιούνται τα πηνία προώθησης των χαρτοταινιών για 7.5ms για την προώθησή τους.

 

 

 

 

Η πλακέτα εκτύπωσης αποτελείται από έναν μικροελεγκτή (MCU), ο οποίος είναι ο ATmega8, 8 Seven Segment Display LED κοινής καθόδου και τρανζίστορ για την πολύπλεξή τους. Επικοινωνεί με την MCU της μητρικής μέσω δίαυλου I2C στη διεύθυνση $05 ως slave.

Τα Display είναι συνδεδεμένα παράλληλα στις θύρες PD0-7 οι οποίες είναι προγραμματισμένες ως έξοδοι. Οι αντιστάσεις R1-8 περιορίζουν το ρεύμα στα LED των Display ώστε ακόμα και αν είναι όλα αναμμένα να μην υπερφορτώνουν την MCU. Η κοινές κάθοδοι των Display είναι συνδεδεμένες στα τρανζίστορ Q1-8. Κάθε Display ενεργοποιείται από τρανζίστορ του για 2.5ms. Οι βάσεις των τρανζίστορ είναι συνδεδεμένες στις θύρες PC0-3 και PB1-4 μέσω των αντιστάσεων R9-16, οι οποίες είναι επίσης προγραμματισμένες ως έξοδοι.

 

 

 

     Κατά την εκτέλεση του προγράμματος η MCU της πλακέτας απεικόνισης παρακολουθεί το δίαυλο I2C για λήψη δεδομένων. Τα δεδομένα αποτελούνται από αριθμούς σε χαρακτήρες ASCII. Όταν ληφθούν η MCU χρησιμοποιεί έναν πίνακα που έχει αποθηκευμένο στη μνήμη της για να μετατρέψει τους ASCII χαρακτήρες ώστε να απεικονιστούν στα Seven Segment Display. Οι αριθμοί απεικονίζονται με αντίστροφη σειρά από αυτή που λαμβάνονται, ώστε κάθε νέος αριθμός που εισάγεται από το πληκτρολόγιο να καταλαμβάνει την πρώτη δεξιά θέση ενώ οι υπόλοιποι αριθμοί που ήδη εμφανίζονται ολισθαίνουν κατά μια θέση αριστερά. Η MCU της πλακέτας απεικόνισης εκτελεί επίσης και τις απαραίτητες ρουτίνες για την πολύπλεξη των Display. Η MCU της μητρικής πλακέτας διατηρεί σε έναν καταχωρητή το περιεχόμενο των Display και κάθε φορά που επανέρχεται από Sleep Mode στέλνει τα δεδομένα στην πλακέτα απεικόνισης. Αυτό γίνεται γιατί η πλακέτα απεικόνισης τροφοδοτείται από την V1 με αποτέλεσμα να σβήνει όταν αυτή πέσει και να χάνει τα δεδομένα της.

Το τροφοδοτικό λειτουργεί με ρεύμα δικτύου πόλης (230V AC) και παράγει σταθεροποιημένες τάσεις 5V DC και 23.3V DC. Αποτελείται από ένα τοροειδή μετασχηματιστή 24V AC 100VA, μια γέφυρα ανόρθωσης, ένα παλμοτροφοδοτικό 5V/3A DC, και ένα γραμμικό τροφοδοτικό 23.3V DC. Η δυνατότητα του τροφοδοτικού για παροχή ισχύος είναι μεγαλύτερη από ότι απαιτείται από το σύστημα.

 

Ένα κύκλωμα ηλεκτρονικής ασφάλειας είναι προσαρμοσμένο στη γραμμή τροφοδοσίας των 5V προκειμένου να προστατευτούν τα ηλεκτρονικά κυκλώματα σε περίπτωση αύξησης της τάσης της γραμμής από αστοχία. Αποτελείται από μια δίοδο Zenner 6.2V (D3) και ένα θυρίστορ (T1). Αν η τάση στη γραμμή των 5V ξεπεράσει τα 6.2V (τάση Zenner) το θυρίστορ μεταβαίνει σε κατάσταση αγωγιμότητας με αποτέλεσμα να καεί η ασφάλεια (F4) και να απομονωθεί η γραμμή.

Η δημοσιονομική μνήμη φυσιολογικά δεν αποτελεί μέρος της μητρικής πλακέτας, αλλά είναι μια διαφορετική υπομονάδα σε απομακρυσμένη θέση και σφραγισμένη, ώστε να μην είναι δυνατή η αλλοίωση των δεδομένων της. Επικοινωνεί με το υπόλοιπο σύστημα μέσω κάποιου διαύλου και αποτελεί το μέσο αποθήκευσης των φορολογικών στοιχείων. Στη συγκεκριμένη κατασκευή ενσωματώθηκε στη μητρική πλακέτα για λόγους απλότητας, χωρίς όμως να έχει κάποια ηλεκτρική σύνδεση με αυτή, παρά μόνο μέσω καλωδιοταινίας, έτσι ώστε να είναι δυνατό οποιαδήποτε στιγμή να αποκοπεί το μέρος της πλακέτας που την υλοποιεί και να απομακρυνθεί. Τα δεδομένα των εγγραφών είναι κωδικοποιημένα σε δεκαεξαδικό σύστημα αρίθμησης, εκτός από την ημερομηνία, η οποία είναι σε BCD. Κάθε εγγραφή καταλαμβάνει 32 bytes και αποτελείται από 11 πεδία: 1 byte έναρξης (AA), 1 byte έγκυρης εγγραφής (FF), 3 bytes για την ημερομηνία, 2 bytes τον σειριακό αριθμό της εγγραφής, 6 πεδία των 4 bytes το καθένα για φορολογικά στοιχεία και 1 byte για έλεγχο ισοτιμίας CRC. Παρακάτω παρουσιάζεται ένα παράδειγμα από δύο εγγραφές όπως διαβάστηκαν από τον I2C EEPROM Reader - Programmer.

 

 

 

 

     

Σας ευχαριστώ για την υποστήριξή σας ώστε να γίνει η ιστοσελίδα μου καλύτερη.

© 2017 Πορλιδάς Δημήτριος