Πίνακας περιεχομένων:

Μικροελεγκτής AVR. LED αναβοσβήνει χρησιμοποιώντας χρονοδιακόπτη. Διακοπές χρονοδιακόπτη. Λειτουργία χρονοδιακόπτη CTC: 6 βήματα
Μικροελεγκτής AVR. LED αναβοσβήνει χρησιμοποιώντας χρονοδιακόπτη. Διακοπές χρονοδιακόπτη. Λειτουργία χρονοδιακόπτη CTC: 6 βήματα

Βίντεο: Μικροελεγκτής AVR. LED αναβοσβήνει χρησιμοποιώντας χρονοδιακόπτη. Διακοπές χρονοδιακόπτη. Λειτουργία χρονοδιακόπτη CTC: 6 βήματα

Βίντεο: Μικροελεγκτής AVR. LED αναβοσβήνει χρησιμοποιώντας χρονοδιακόπτη. Διακοπές χρονοδιακόπτη. Λειτουργία χρονοδιακόπτη CTC: 6 βήματα
Βίντεο: LDmicro 11: Serial LCD Temperature Controller (Microcontroller PLC Ladder Programming with LDmicro) 2024, Νοέμβριος
Anonim
Image
Image

Γεια σε όλους!

Τα χρονόμετρα είναι μια σημαντική έννοια στον τομέα των ηλεκτρονικών. Κάθε ηλεκτρονικό στοιχείο λειτουργεί σε χρονική βάση. Αυτή η χρονική βάση βοηθά να διατηρηθεί συγχρονισμένη όλη η εργασία. Όλοι οι μικροελεγκτές λειτουργούν σε κάποια προκαθορισμένη συχνότητα ρολογιού, όλοι έχουν μια πρόβλεψη για τη ρύθμιση χρονοδιακόπτη. Το AVR διαθέτει ένα χρονόμετρο που είναι πολύ ακριβής, ακριβής και αξιόπιστος. Προσφέρει πολλά χαρακτηριστικά σε αυτό, καθιστώντας το έτσι ένα τεράστιο θέμα. Το καλύτερο μέρος είναι ότι ο χρονοδιακόπτης είναι εντελώς ανεξάρτητος από την CPU. Έτσι, λειτουργεί παράλληλα με την CPU και δεν υπάρχει παρέμβαση της CPU, γεγονός που καθιστά το χρονόμετρο αρκετά ακριβές. Σε αυτή την ενότητα εξηγώ τις βασικές έννοιες των AVR Timers. Γράφω απλό πρόγραμμα με κωδικό C για τον έλεγχο του φλας LED, χρησιμοποιώντας χρονοδιακόπτες.

Βήμα 1: Περιγραφή

Δήλωση προβλήματος 1: Let's Flash First LED (πράσινο) Κάθε 50 Ms
Δήλωση προβλήματος 1: Let's Flash First LED (πράσινο) Κάθε 50 Ms

Στο ATMega328 υπάρχουν τρεις τύποι χρονοδιακόπτη:

Timer/Counter0 (TC0) - είναι μια ενότητα χρονοδιακόπτη/μετρητή γενικής χρήσης 8 bit, με δύο ανεξάρτητες μονάδες σύγκρισης εξόδου και υποστήριξη PWM

Χρονόμετρο/Μετρητής1 (TC1) - Η μονάδα χρονοδιακόπτη/μετρητή 16 -bit επιτρέπει ακριβή χρονισμό εκτέλεσης προγράμματος (διαχείριση συμβάντων), δημιουργία κύματος και μέτρηση χρονισμού σήματος

Χρονόμετρο/μετρητής2 (TC2) -είναι γενικός σκοπός, κανάλι, μονάδα χρονοδιακόπτη/μετρητή 8 bit με PWM και ασύγχρονη λειτουργία

Βήμα 2: Δήλωση προβλήματος 1: Let's Flash First LED (πράσινο) Κάθε 50 Ms

Δήλωση προβλήματος 1: Let's Flash First LED (πράσινο) Κάθε 50 Ms
Δήλωση προβλήματος 1: Let's Flash First LED (πράσινο) Κάθε 50 Ms
Δήλωση προβλήματος 1: Let's Flash First LED (πράσινο) Κάθε 50 Ms
Δήλωση προβλήματος 1: Let's Flash First LED (πράσινο) Κάθε 50 Ms

Μεθοδολογία:

- χρήση προμετρητή χρονοδιακόπτη Timer0 για μείωση ηλεκτρικού σήματος υψηλής συχνότητας σε χαμηλότερη συχνότητα με διαίρεση ακέραιων

- χρησιμοποιώντας μια διακοπή κάθε φορά που το Timer0 υπερχειλίζει.

Timer0 (8 bit) μετράει από 0 έως 255 μετά από αυτό, ξεχειλίζουν, αυτή η τιμή αλλάζει σε κάθε παλμό ρολογιού.

F_CPU = 16MHz: Χρονική περίοδος ρολογιού = 1000ms / 16000000Hz = 0.0000625ms

Αριθμός χρονοδιακόπτη = (Απαιτούμενη περίοδος καθυστέρησης / χρόνου ρολογιού) -1 = (50ms / 0.0000625ms) = 799999

Το ρολόι έχει ήδη χτυπήσει 799999 φορές για να δώσει καθυστέρηση μόλις 50 ms!

Μπορούμε να χρησιμοποιήσουμε την τεχνική της διαίρεσης συχνότητας που ονομάζεται prescaling για να μειώσουμε τον αριθμό του χρονοδιακόπτη. Το AVR μας προσφέρει τις ακόλουθες τιμές prescaler για να διαλέξουμε: 8, 64, 256 και 1024. Δείτε τον πίνακα συνοψίζει τα αποτελέσματα της χρήσης διαφορετικών prescalers.

Η τιμή του μετρητή πρέπει πάντα να είναι ακέραιος. Ας επιλέξουμε ένα prescaler 256!

Στους περισσότερους μικροελεγκτές, υπάρχει κάτι που ονομάζεται Διακοπή. Αυτή η διακοπή μπορεί να ενεργοποιηθεί όποτε πληρούνται ορισμένες προϋποθέσεις. Τώρα κάθε φορά που ενεργοποιείται μια διακοπή, το AVR σταματά και αποθηκεύει την εκτέλεση της κύριας ρουτίνας, παρακολουθεί την κλήση διακοπής (εκτελώντας μια ειδική ρουτίνα, που ονομάζεται ρουτίνα διακοπής υπηρεσίας, ISR) και μόλις ολοκληρωθεί με αυτήν, επιστρέφει στο βασική ρουτίνα και συνεχίζει να την εκτελεί.

Δεδομένου ότι η απαιτούμενη καθυστέρηση (50ms) είναι μεγαλύτερη από τη μέγιστη δυνατή καθυστέρηση: 4, 096ms = 1000ms / 62500Hz * 256, προφανώς ο χρονοδιακόπτης θα υπερχειλίσει. Και κάθε φορά που το χρονόμετρο υπερχειλίζει, ενεργοποιείται μια διακοπή.

Πόσες φορές πρέπει να απολυθεί η διακοπή;

50ms / 4.096ms = 3125 /256 = 12.207 Εάν ο χρονοδιακόπτης έχει υπερβεί 12 φορές, θα είχαν περάσει 12 * 4.096ms = 49.152ms. Στην 13η επανάληψη, χρειαζόμαστε καθυστέρηση 50ms - 49,152ms = 0,848ms.

Σε συχνότητα 62500Hz (prescaler = 256), κάθε τσιμπούρι διαρκεί 0,016ms. Έτσι, για να επιτευχθεί καθυστέρηση 0,848ms, θα απαιτούνταν 0,848ms / 0,016ms = 53 τσιμπούρια. Έτσι, στην 13η επανάληψη, επιτρέπουμε στο χρονόμετρο να μετράει έως και 53 και στη συνέχεια να το επαναφέρουμε.

Αρχικοποίηση χρονομέτρου 0/μετρητή (δείτε την εικόνα):

TCCR0B | = (1 << CS02] // ρύθμιση χρονοδιακόπτη με προκαθοριστή = 256 TCNT0 = 0 // προετοιμασία μετρητή TIMSK0 | = (1 << TOIE0] // ενεργοποίηση διακοπή υπερχείλισης sei () // ενεργοποίηση καθολικών διακοπών tot_overflow = 0 // αρχικοποίηση μεταβλητής μετρητή υπερχείλισης

Βήμα 3: Δήλωση προβλήματος 2: Ας αναβοσβήνουμε το δεύτερο LED (μπλε) κάθε 1 δευτ

Δήλωση προβλήματος 2: Let's Flash Second LED (μπλε) κάθε 1 δευτ
Δήλωση προβλήματος 2: Let's Flash Second LED (μπλε) κάθε 1 δευτ
Δήλωση προβλήματος 2: Ας αναβοσβήνουμε το δεύτερο LED (μπλε) κάθε 1 δευτ
Δήλωση προβλήματος 2: Ας αναβοσβήνουμε το δεύτερο LED (μπλε) κάθε 1 δευτ
Δήλωση προβλήματος 2: Let's Flash Second LED (μπλε) κάθε 1 δευτ
Δήλωση προβλήματος 2: Let's Flash Second LED (μπλε) κάθε 1 δευτ

Μεθοδολογία:

- χρησιμοποιώντας έναν χρονοδιακόπτη χρονομέτρησης 1 για τη μείωση ενός ηλεκτρικού σήματος υψηλής συχνότητας σε χαμηλότερη συχνότητα με διαίρεση ακεραίων.

- χρησιμοποιώντας τη λειτουργία Clear Timer on Compare (CTC)

- χρήση διακοπών με τη λειτουργία CTC

Timer1 (16 bit) μετράει από 0 έως 65534 μετά από αυτό, ξεχειλίζουν. Αυτή η τιμή αλλάζει σε κάθε παλμό ρολογιού.

F_CPU = 16MHz: Χρονική περίοδος ρολογιού = 1000ms / 16000000Hz = 0.0000625ms Καταμέτρηση χρονομέτρου = (Απαιτούμενη περίοδος καθυστέρησης / χρόνου ρολογιού) -1 = (1000ms / 0.0000625ms) = 15999999

Το ρολόι έχει ήδη χτυπήσει 15999999 φορές για να δώσει καθυστέρηση 1 δευτ.!

Μπορούμε να χρησιμοποιήσουμε την τεχνική της διαίρεσης συχνότητας που ονομάζεται prescaling για να μειώσουμε τον αριθμό του χρονοδιακόπτη. Το AVR μας προσφέρει τις ακόλουθες τιμές prescaler για να διαλέξουμε: 8, 64, 256 και 1024. Δείτε τον πίνακα συνοψίζει τα αποτελέσματα της χρήσης διαφορετικών prescalers. Η τιμή του μετρητή πρέπει πάντα να είναι ακέραιος. Ας επιλέξουμε ένα prescaler 256!

Στη λειτουργία Clear timer on Compare (CTC), ο καταχωρητής OCR1A ή ICR1 χρησιμοποιείται για τον χειρισμό της ανάλυσης του μετρητή. Στη λειτουργία CTC ο μετρητής καθαρίζεται στο μηδέν όταν η τιμή του μετρητή (TCNT1) ταιριάζει είτε με το OCR1A είτε με το ICR1. Το OCR1A ή το ICR1 καθορίζουν την κορυφαία τιμή για τον μετρητή, επομένως και την ανάλυση του. Αυτή η λειτουργία επιτρέπει μεγαλύτερο έλεγχο της συχνότητας εξόδου σύγκρισης αντιστοίχισης Απλοποιεί επίσης τη λειτουργία καταμέτρησης εξωτερικών συμβάντων. Πρέπει να πούμε στο AVR να επαναφέρει το Timer1/Counter μόλις η τιμή του φτάσει την τιμή 62500, ώστε να επιτευχθεί καθυστέρηση 1 δευτ.

Αρχικοποίηση χρονομέτρου 1/μετρητή (δείτε την εικόνα):

TCCR1B | = (1 << WGM12] | (1 << CS12] // ρυθμίστε χρονοδιακόπτη με προ -ζυγοσταθμιστή = 256 και λειτουργία CTC TCNT1 = 0 // αρχικοποίηση μετρητή TIMSK1 | = (1 << OCIE1A] // ενεργοποίηση σύγκρισης διακοπής OCR1A = 62500 // αρχικοποίηση σύγκρισης τιμής

Βήμα 4: Δήλωση προβλήματος 3: Ας αναβοσβήνουμε το τρίτο LED (κόκκινο) κάθε 16ms

Δήλωση προβλήματος 3: Ας αναβοσβήνουμε το τρίτο LED (κόκκινο) κάθε 16ms
Δήλωση προβλήματος 3: Ας αναβοσβήνουμε το τρίτο LED (κόκκινο) κάθε 16ms
Δήλωση προβλήματος 3: Ας αναβοσβήνουμε το τρίτο LED (κόκκινο) κάθε 16ms
Δήλωση προβλήματος 3: Ας αναβοσβήνουμε το τρίτο LED (κόκκινο) κάθε 16ms
Δήλωση προβλήματος 3: Ας αναβοσβήνουμε το τρίτο LED (κόκκινο) κάθε 16ms
Δήλωση προβλήματος 3: Ας αναβοσβήνουμε το τρίτο LED (κόκκινο) κάθε 16ms
Δήλωση προβλήματος 3: Ας αναβοσβήνουμε το τρίτο LED (κόκκινο) κάθε 16ms
Δήλωση προβλήματος 3: Ας αναβοσβήνουμε το τρίτο LED (κόκκινο) κάθε 16ms

Μεθοδολογία:

- χρησιμοποιώντας έναν προμετρητή χρονομέτρησης Timer2 για να μειώσετε ένα ηλεκτρικό σήμα υψηλής συχνότητας σε χαμηλότερη συχνότητα με ακέραιη διαίρεση ·

- χρησιμοποιώντας τη λειτουργία Clear Timer on Compare (CTC)

- χρήση της λειτουργίας Hardware CTC Mode χωρίς διακοπή.

Timer2 (8 bit) μετράει από 0 έως 255 μετά από αυτό, ξεχειλίζουν. Αυτή η τιμή αλλάζει σε κάθε παλμό ρολογιού.

F_CPU = 16MHz: Χρονική περίοδος ρολογιού = 1000ms / 16000000Hz = 0.0000625ms

Αριθμός χρονοδιακόπτη = (Απαιτούμενη περίοδος καθυστέρησης / χρόνου ρολογιού) -1 = (16ms / 0.0000625ms) = 255999

Το ρολόι έχει ήδη χτυπήσει 255999 φορές για να δώσει καθυστέρηση 16 ms!

Δείτε τον πίνακα συνοψίζει τα αποτελέσματα της χρήσης διαφορετικών προ -ταξινομητών. Η τιμή του μετρητή πρέπει πάντα να είναι ακέραιος. Ας επιλέξουμε ένα prescaler 1024!

Στη λειτουργία CTC ο μετρητής καθαρίζεται στο μηδέν όταν η τιμή του μετρητή (TCNT2) ταιριάζει είτε με το OCR2A είτε με το ICR2. Ο ακροδέκτης PB3 είναι επίσης ο ακροδέκτης σύγκρισης εξόδου του TIMER2 - OC2A (δείτε διάγραμμα).

Timer/Counter2 Control Register A - TCCR2A Bit 7: 6 - COM2A1: 0 - Compare Output Mode for Compare Unit A. Δεδομένου ότι πρέπει να αλλάξουμε τη λυχνία LED, επιλέγουμε την επιλογή: Εναλλαγή OC2A on Compare Match Κάθε φορά που συμβαίνει σύγκριση, Ο πείρος OC2A εναλλάσσεται αυτόματα. Δεν χρειάζεται να ελέγξετε κανένα bit σημαίας, δεν χρειάζεται να παρακολουθήσετε τυχόν διακοπές.

Αρχικοποίηση χρονοδιακόπτη2/μετρητή

TCCR2A | = (1 << COM2A0] | (1 << WGM21) // ρυθμίστε τον ακροδέκτη OC2A του χρονοδιακόπτη σε λειτουργία εναλλαγής και λειτουργία CTC TCCR2B | = (1 << CS22] | (1 << CS21) | (1 << CS20) // ρύθμιση χρονοδιακόπτη με prescaler = 1024 TCNT2 = 0 // μετρητή προετοιμασίας OCR2A = 250 // αρχικοποίηση σύγκρισης τιμής

Βήμα 5: Γράψιμο κώδικα για ένα πρόγραμμα σε C. Μεταφόρτωση αρχείου HEX στη μνήμη flash του μικροελεγκτή

Γράψιμο κώδικα για ένα πρόγραμμα στο C. Μεταφόρτωση αρχείου HEX στη μνήμη Flash Microcontroller
Γράψιμο κώδικα για ένα πρόγραμμα στο C. Μεταφόρτωση αρχείου HEX στη μνήμη Flash Microcontroller
Γράψιμο κώδικα για ένα πρόγραμμα στο C. Μεταφόρτωση αρχείου HEX στη μνήμη Flash Microcontroller
Γράψιμο κώδικα για ένα πρόγραμμα στο C. Μεταφόρτωση αρχείου HEX στη μνήμη Flash Microcontroller

Σύνταξη και δημιουργία της εφαρμογής μικροελεγκτή AVR σε κωδικό C χρησιμοποιώντας την πλατφόρμα ενσωματωμένης ανάπτυξης - Atmel Studio.

Το F_CPU καθορίζει τη συχνότητα ρολογιού σε Hertz και είναι συνηθισμένο σε προγράμματα που χρησιμοποιούν τη βιβλιοθήκη avr-libc. Σε αυτήν την περίπτωση, χρησιμοποιείται από τις ρουτίνες καθυστέρησης για τον προσδιορισμό του τρόπου υπολογισμού των χρονικών καθυστερήσεων.

#ifndef F_CPU

#define F_CPU 16000000UL // ειδοποίηση κρυστάλλινης συχνότητας ελεγκτή (16 MHz AVR ATMega328P) #endif

#include // header για να ενεργοποιήσετε τον έλεγχο ροής δεδομένων στις ακίδες. Ορίζει ακίδες, θύρες κ.λπ.

Το πρώτο αρχείο περιλαμβάνει μέρος του avr-libc και θα χρησιμοποιηθεί σε σχεδόν οποιοδήποτε έργο AVR στο οποίο εργάζεστε. Το io.h θα καθορίσει τη CPU που χρησιμοποιείτε (γι 'αυτό καθορίζετε το μέρος κατά τη μεταγλώττιση) και με τη σειρά της θα περιλαμβάνει την κατάλληλη κεφαλίδα ορισμού IO για το τσιπ που χρησιμοποιούμε. Ορίζει απλώς τις σταθερές για όλες τις καρφίτσες, τις θύρες, τους ειδικούς καταχωρητές κ.λπ.

#include // header για να ενεργοποιήσετε τη διακοπή

πτητικό uint8_t tot_overflow? // καθολική μεταβλητή για να μετρήσει τον αριθμό των υπερχειλίσεων

Μεθοδολογία Δήλωσης Προβλήματος: LED Πρώτη (Πράσινη) LED ανά 50 ms

- χρησιμοποιώντας έναν προμετρητή χρονομέτρησης Timer0 για τη μείωση ενός ηλεκτρικού σήματος υψηλής συχνότητας σε χαμηλότερη συχνότητα με διαίρεση ακέραιων αριθμών ·

- χρησιμοποιώντας μια διακοπή κάθε φορά που το Timer0 υπερχειλίζει.

void timer0_init () // αρχικοποίηση timer0, διακοπή και μεταβλητή

{TCCR0B | = (1 << CS02); // ρυθμίστε το χρονόμετρο με prescaler = 256 TCNT0 = 0; // αρχικοποίηση μετρητή TIMSK0 | = (1 << TOIE0]; // ενεργοποίηση υπερχείλισης αδιάκοπη sei (); // ενεργοποίηση καθολικών διακοπών tot_overflow = 0; // αρχικοποίηση μεταβλητής μετρητή υπερχείλισης}

Μεθοδολογία δήλωσης προβλήματος: Αναβοσβήνει το δεύτερο LED (μπλε) κάθε 1 δευτ

- χρησιμοποιώντας έναν χρονοδιακόπτη χρονομέτρησης 1 για τη μείωση ενός ηλεκτρικού σήματος υψηλής συχνότητας σε χαμηλότερη συχνότητα με διαίρεση ακεραίων.

- χρησιμοποιώντας τη λειτουργία Clear Timer on Compare (CTC)

- χρήση διακοπών με τη λειτουργία CTC

void timer1_init () // αρχικοποίηση timer1, διακοπή και μεταβλητή {TCCR1B | = (1 << WGM12] | (1 << CS12); // ρυθμίστε το χρονόμετρο με prescaler = 256 και λειτουργία CTC TCNT1 = 0; // προετοιμασία μετρητή OCR1A = 62500; // αρχικοποίηση σύγκρισης τιμής TIMSK1 | = (1 << OCIE1A); // ενεργοποίηση σύγκρισης διακοπής}

Μεθοδολογία δήλωσης προβλήματος: Αναβοσβήνει τρίτο LED (κόκκινο) κάθε 16ms

- χρησιμοποιώντας έναν προμετρητή χρονομέτρησης Timer2 για να μειώσετε ένα ηλεκτρικό σήμα υψηλής συχνότητας σε χαμηλότερη συχνότητα με ακέραιη διαίρεση ·

- χρησιμοποιώντας τη λειτουργία Clear Timer on Compare (CTC)

- χρήση της λειτουργίας Hardware CTC Mode χωρίς διακοπή.

void timer2_init () // προετοιμασία timer2 {TCCR2A | = (1 << COM2A0] | (1 << WGM21); // ρυθμίστε τον ακροδέκτη OC2A του χρονοδιακόπτη στη λειτουργία εναλλαγής και τη λειτουργία CTC TCCR2B | = (1 << CS22] | (1 << CS21] | (1 << CS20) · // ρυθμίστε το χρονόμετρο με prescaler = 1024 TCNT2 = 0; // προετοιμασία μετρητή OCR2A = 250; // αρχικοποίηση σύγκρισης τιμής}

Η ρουτίνα υπηρεσίας διακοπής υπερχείλισης TIMER0 καλείται κάθε φορά που υπερχειλίζεται το TCNT0:

ISR (TIMER0_OVF_vect)

{tot_overflow ++; // παρακολουθείτε τον αριθμό των υπερχειλίσεων}

Αυτό το ISR ενεργοποιείται κάθε φορά που συμβαίνει αντιστοίχιση, η εναλλαγή οδήγησε εδώ:

ISR (TIMER1_COMPA_vect) {PORTC ^= (1 << 1); // εναλλαγή led εδώ}

int main (άκυρο)

{DDRB | = (1 << 0]; // συνδέστε 1 (πράσινο) led στο pin PB0 DDRC | = (1 << 1); // συνδέστε 2 (μπλε) led στο pin PC1 DDRB | = (1 << 3); // σύνδεση 3 (κόκκινο) led στο pin PB3 (OC2A) timer0_init (); // αρχικοποίηση timer0 timer1_init (); // αρχικοποίηση timer1 timer2_init (); // αρχικοποίηση χρονοδιακόπτη2 ενώ (1) // βρόχος για πάντα {

Εάν ο Χρονοδιακόπτης 0 έχει πετάξει 12 φορές, θα είχαν περάσει 12 * 4.096ms = 49.152ms. Στην 13η επανάληψη, χρειαζόμαστε καθυστέρηση 50ms - 49,152ms = 0,848ms. Έτσι, στην 13η επανάληψη, επιτρέπουμε στο χρονόμετρο να μετράει έως και 53 και, στη συνέχεια, να το επαναφέρουμε.

εάν (tot_overflow> = 12) // ελέγξτε αν όχι. των υπερχειλίσεων = 12 ΣΗΜΕΙΩΣΗ: '> =' χρησιμοποιείται

{if (TCNT0> = 53) // ελέγξτε αν ο αριθμός χρονοδιακόπτη φτάνει το 53 {PORTB ^= (1 << 0]; // εναλλάσσει το led TCNT0 = 0; // επαναφορά μετρητή tot_overflow = 0; // επαναφορά μετρητή υπερχείλισης}}}}

Μεταφόρτωση αρχείου HEX στη μνήμη flash του μικροελεγκτή:

πληκτρολογήστε στο παράθυρο προτροπής DOS την εντολή:

avrdude –c [όνομα προγραμματιστή] –p m328p –u –U flash: w: [όνομα του δεκαεξαδικού αρχείου σας] Στην περίπτωσή μου είναι: avrdude –c ISPProgv1 –p m328p –u –U flash: w: Timers.hex

Αυτή η εντολή γράφει ένα δεκαεξαδικό αρχείο στη μνήμη του μικροελεγκτή. Δείτε το βίντεο με μια λεπτομερή περιγραφή της καύσης μνήμης flash του μικροελεγκτή:

Μνήμη flash μικροελεγκτή που καίγεται…

Εντάξει! Τώρα, ο μικροελεγκτής λειτουργεί σύμφωνα με τις οδηγίες του προγράμματός μας. Ας το ελέγξουμε!

Βήμα 6: Δημιουργία ηλεκτρικού κυκλώματος

Κάνοντας το ηλεκτρικό κύκλωμα
Κάνοντας το ηλεκτρικό κύκλωμα
Κάνοντας το ηλεκτρικό κύκλωμα
Κάνοντας το ηλεκτρικό κύκλωμα
Κάνοντας το ηλεκτρικό κύκλωμα
Κάνοντας το ηλεκτρικό κύκλωμα

Συνδέστε εξαρτήματα σύμφωνα με το σχηματικό διάγραμμα.

Συνιστάται: