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

AVR Μικροελεγκτή Fuse Bits Διαμόρφωση. Δημιουργία και μεταφόρτωση στη μνήμη flash του μικροελεγκτή του προγράμματος αναβοσβήνει LED .: 5 βήματα
AVR Μικροελεγκτή Fuse Bits Διαμόρφωση. Δημιουργία και μεταφόρτωση στη μνήμη flash του μικροελεγκτή του προγράμματος αναβοσβήνει LED .: 5 βήματα

Βίντεο: AVR Μικροελεγκτή Fuse Bits Διαμόρφωση. Δημιουργία και μεταφόρτωση στη μνήμη flash του μικροελεγκτή του προγράμματος αναβοσβήνει LED .: 5 βήματα

Βίντεο: AVR Μικροελεγκτή Fuse Bits Διαμόρφωση. Δημιουργία και μεταφόρτωση στη μνήμη flash του μικροελεγκτή του προγράμματος αναβοσβήνει LED .: 5 βήματα
Βίντεο: Переходник QFN-32 для Atmega fusebit doctor 2024, Ιούνιος
Anonim
Image
Image

Σε αυτήν την περίπτωση θα δημιουργήσουμε απλό πρόγραμμα σε κώδικα C και θα το γράψουμε στη μνήμη του μικροελεγκτή. Θα γράψουμε το δικό μας πρόγραμμα και θα μεταγλωττίσουμε το εξάγωνο αρχείο, χρησιμοποιώντας το Atmel Studio ως ολοκληρωμένη πλατφόρμα ανάπτυξης. Θα διαμορφώσουμε bit ασφάλειας και θα ανεβάσουμε εξάγωνο αρχείο στη μνήμη του μικροελεγκτή AVR ATMega328P, χρησιμοποιώντας τον δικό μας προγραμματιστή και λογισμικό AVRDUDE.

AVRDUDE - είναι ένα πρόγραμμα για τη λήψη και τη μεταφόρτωση των αναμνήσεων στα τσιπ των μικροελεγκτών AVR της Atmel. Μπορεί να προγραμματίσει το Flash και το EEPROM, και όπου υποστηρίζεται από το πρωτόκολλο σειριακού προγραμματισμού, μπορεί να προγραμματίσει bits ασφάλειας και κλειδώματος.

Βήμα 1: Γραφή προγράμματος και μεταγλώττιση του αρχείου Hex, χρησιμοποιώντας το Atmel Studio

Πρόγραμμα γραφής και μεταγλώττιση του Hex αρχείου, χρησιμοποιώντας το Atmel Studio
Πρόγραμμα γραφής και μεταγλώττιση του Hex αρχείου, χρησιμοποιώντας το Atmel Studio
Πρόγραμμα γραφής και μεταγλώττιση του Hex αρχείου, χρησιμοποιώντας το Atmel Studio
Πρόγραμμα γραφής και μεταγλώττιση του Hex αρχείου, χρησιμοποιώντας το Atmel Studio

Εάν δεν έχετε Atmel Studio, πρέπει να το κατεβάσετε και να το εγκαταστήσετε:

Αυτό το έργο θα χρησιμοποιήσει το C, οπότε επιλέξτε την επιλογή GCC C Executable Project από τη λίστα προτύπων για να δημιουργήσετε ένα εκτελέσιμο έργο γυμνού οστού.

Στη συνέχεια, είναι απαραίτητο να καθορίσετε για ποια συσκευή θα αναπτυχθεί το έργο. Αυτό το έργο θα αναπτυχθεί για τον μικροελεγκτή AVR ATMega328P.

Πληκτρολογήστε τον κώδικα του προγράμματος στην περιοχή Επεξεργαστής κύριας πηγής του Atmel Studio. Ο κύριος επεξεργαστής πηγής - Αυτό το παράθυρο είναι ο κύριος επεξεργαστής για τα αρχεία προέλευσης στο τρέχον έργο. Ο επεξεργαστής διαθέτει ορθογραφικό έλεγχο και αυτόματη πλήρη λειτουργία.

1. Πρέπει να πούμε στον μεταγλωττιστή με ποια ταχύτητα λειτουργεί το τσιπ μας ότι μπορεί να υπολογίσει σωστά τις καθυστερήσεις.

#ifndef F_CPU

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

2. Συμπεριλαμβάνουμε το προοίμιο, όπου τοποθετούμε τις πληροφορίες συμπερίληψης από άλλα αρχεία, που ορίζουν καθολικές μεταβλητές και συναρτήσεις.

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

#include // header για να ενεργοποιήσετε τη λειτουργία καθυστέρησης στο πρόγραμμα

3. Μετά το προοίμιο έρχεται η κύρια () συνάρτηση.

int main (άκυρο) {

Η κύρια () συνάρτηση είναι μοναδική και ξεχωρίζει από όλες τις άλλες συναρτήσεις. Κάθε πρόγραμμα C πρέπει να έχει ακριβώς μία κύρια () συνάρτηση. Το Main () είναι το σημείο όπου το AVR ξεκινά την εκτέλεση του κώδικα σας όταν αρχίσει να τροφοδοτείται για πρώτη φορά, οπότε είναι το σημείο εισόδου του προγράμματος.

4. Ορίστε τον ακροδέκτη 0 του PORTB ως έξοδο.

DDRB = 0b00000001; // Ορίστε το PORTB1 ως έξοδο

Το κάνουμε αυτό γράφοντας έναν δυαδικό αριθμό στον Μητρώο Κατεύθυνσης Δεδομένων Β. Ο Μητρώος Κατεύθυνσης Δεδομένων Β μας επιτρέπει να κάνουμε τα δυαδικά ψηφία του καταχωρητή Β εισόδου ή εξόδου. Γράφοντας ένα 1 τα βγάζει, ενώ ένα 0 τα κάνει εισαγωγή. Δεδομένου ότι συνδέουμε ένα LED για να λειτουργήσει ως έξοδος, γράφουμε έναν δυαδικό αριθμό, κάνοντας τον πείρο 0 του PORT B ως έξοδο.

5. Βρόχος.

ενώ (1) {

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

6. Ενεργοποιήστε το LED που είναι προσαρτημένο στη θύρα PB0

PORTB = 0b00000001; // ανάβει το LED που είναι συνδεδεμένο στη θύρα PB0

Αυτή η γραμμή, δίνει ένα 1 στο PB0 του PortB. Το PORTB είναι ένας καταχωρητής υλικού στο τσιπ AVR που περιέχει 8 ακίδες, PB7-PB0, από αριστερά προς τα δεξιά. Βάζοντας ένα 1 στο τέλος δίνει ένα 1 στο PB0. αυτό θέτει το PB0 υψηλό το οποίο το ενεργοποιεί. Επομένως, η λυχνία LED που είναι προσαρτημένη στον ακροδέκτη PB0 θα ανάψει και θα ανάψει.

7. Καθυστέρηση

_delay_ms (1000); // δημιουργεί καθυστέρηση 1 δευτερολέπτου

Αυτή η δήλωση δημιουργεί καθυστέρηση 1 δευτερολέπτου, έτσι ώστε η λυχνία LED να ανάβει και να παραμένει αναμμένη για ακριβώς 1 δευτερόλεπτο.

8. Απενεργοποιήστε όλες τις ακίδες Β, συμπεριλαμβανομένου του PB0

PORTB = 0b00000000; // Απενεργοποιεί όλες τις ακίδες Β, συμπεριλαμβανομένου του PB0

Αυτή η γραμμή απενεργοποιεί και τους 8 ακροδέκτες της θύρας B, έτσι ώστε ακόμη και το PB0 να είναι απενεργοποιημένο, οπότε το LED σβήνει.

9. Άλλη καθυστέρηση

_delay_ms (1000); // δημιουργεί άλλη καθυστέρηση 1 δευτερολέπτου

Απενεργοποιείται ακριβώς για 1 δευτερόλεπτο, πριν ξεκινήσει ξανά ο βρόχος και συναντήσει τη γραμμή, η οποία τον ενεργοποιεί ξανά, επαναλαμβάνοντας τη διαδικασία σε όλη την έκταση. Αυτό συμβαίνει απεριόριστα έτσι ώστε η λυχνία LED να αναβοσβήνει συνεχώς και να σβήνει.

10. Δήλωση επιστροφής

}

επιστροφή (0)? // αυτή η γραμμή δεν φτάνει ποτέ στην πραγματικότητα}

Η τελευταία γραμμή του κωδικού μας είναι μια δήλωση επιστροφής (0). Παρόλο που αυτός ο κώδικας δεν εκτελείται ποτέ, επειδή υπάρχει ένας άπειρος βρόχος που δεν τελειώνει ποτέ, για τα προγράμματά μας που εκτελούνται σε επιτραπέζιους υπολογιστές, είναι σημαντικό το λειτουργικό σύστημα να γνωρίζει αν λειτουργούσε σωστά ή όχι. Για το λόγο αυτό, το GCC, ο μεταγλωττιστής μας, θέλει κάθε κύρια () να τελειώνει με έναν κωδικό επιστροφής. Οι κωδικοί επιστροφής είναι περιττοί για τον κώδικα AVR, ο οποίος λειτουργεί ανεξάρτητα από οποιοδήποτε λειτουργικό σύστημα υποστήριξης. Ωστόσο, ο μεταγλωττιστής θα προειδοποιήσει εάν δεν τελειώσετε το κύριο με επιστροφή ().

Το τελευταίο βήμα είναι η κατασκευή του έργου. Σημαίνει μεταγλώττιση και τέλος σύνδεση όλων των αρχείων αντικειμένων για τη δημιουργία του εκτελέσιμου αρχείου (.hex). Αυτό το δεκαεξαδικό αρχείο δημιουργείται μέσα στο φάκελο εντοπισμού σφαλμάτων που βρίσκεται μέσα στο φάκελο Project. Αυτό το εξάγωνο αρχείο είναι έτοιμο για φόρτωση στο τσιπ μικροελεγκτή.

Βήμα 2: Αλλαγή της Προεπιλεγμένης Διαμόρφωσης των Μπιτ Ασφαλείας Μικρού Ελεγκτή

Αλλαγή της Προεπιλεγμένης Διαμόρφωσης των Μπιτ Ασφαλείας Μικρού Ελεγκτή
Αλλαγή της Προεπιλεγμένης Διαμόρφωσης των Μπιτ Ασφαλείας Μικρού Ελεγκτή
Αλλαγή της Προεπιλεγμένης Διαμόρφωσης των Μπιτ Ασφαλείας Μικρού Ελεγκτή
Αλλαγή της Προεπιλεγμένης Διαμόρφωσης των Μπιτ Ασφαλείας Μικρού Ελεγκτή
Αλλαγή της Προεπιλεγμένης Διαμόρφωσης των Μπιτ Ασφαλείας Μικρού Ελεγκτή
Αλλαγή της Προεπιλεγμένης Διαμόρφωσης των Μπιτ Ασφαλείας Μικρού Ελεγκτή

Είναι σημαντικό να θυμόμαστε ότι μερικά από τα κομμάτια ασφάλειας μπορούν να χρησιμοποιηθούν για να κλειδώσουν ορισμένες πτυχές του τσιπ και να το φτιάξουν (να το κάνουν αχρησιμοποίητο)

Υπάρχουν συνολικά 19 bits ασφάλειας που χρησιμοποιούνται στο ATmega328P και χωρίζονται σε τρία διαφορετικά byte ασφάλειας. Τρία από τα κομμάτια ασφάλειας περιέχονται στο "Extended Fuse Byte", οκτώ περιλαμβάνονται στο "Fuse High Byte" και οκτώ άλλα περιέχονται στο "Fuse Low Byte". Υπάρχει επίσης ένα τέταρτο byte που χρησιμοποιείται για τον προγραμματισμό των μπιτ κλειδώματος.

Κάθε byte είναι 8 bit και κάθε bit είναι μια ξεχωριστή ρύθμιση ή σημαία. Όταν μιλάμε για ρύθμιση, όχι ρύθμιση, προγραμματισμένες, μη προγραμματισμένες ασφάλειες, στην πραγματικότητα χρησιμοποιούμε δυαδικό. 1 σημαίνει μη ρυθμισμένο, μη προγραμματισμένο και μηδέν σημαίνει καθορισμένο, προγραμματισμένο. Κατά τον προγραμματισμό των ασφαλειών μπορείτε να χρησιμοποιήσετε δυαδική σημειογραφία ή πιο συχνά δεκαεξαδική σημειογραφία.

Τα τσιπ ATmega 328P έχουν ενσωματωμένο ταλαντωτή RC που έχει συχνότητα 8 MHz. Νέα τσιπ αποστέλλονται με αυτό το σετ ως πηγή ρολογιού και την ασφάλεια CKDIV8 ενεργή, με αποτέλεσμα ένα ρολόι συστήματος 1 MHz. Ο χρόνος εκκίνησης έχει οριστεί στο μέγιστο και η περίοδος λήξης είναι ενεργοποιημένη.

Τα νέα τσιπ ATMega 328P έχουν γενικά τις ακόλουθες ρυθμίσεις ασφάλειας:

Χαμηλή ασφάλεια = 0x62 (0b01100010)

Υψηλή ασφάλεια = 0xD9 (0b11011001)

Εκτεταμένη ασφάλεια = 0xFF (0b11111111)

Θα χρησιμοποιήσουμε τσιπ ATmega 328 με εξωτερικό κρύσταλλο 16MHz. Επομένως, πρέπει να προγραμματίσουμε ανάλογα τα κομμάτια του "Fuse Low Byte".

1. Τα δυαδικά ψηφία 3-0 ελέγχουν την επιλογή ταλαντωτή και η προεπιλεγμένη ρύθμιση του 0010 είναι η χρήση του βαθμονομημένου εσωτερικού ταλαντωτή RC, κάτι που δεν θέλουμε. Θέλουμε τη λειτουργία κρυσταλλικού ταλαντωτή χαμηλής ισχύος από 8,0 έως 16,0 MHz, οπότε τα bits 3-1 (CKSEL [3: 1]) πρέπει να ρυθμιστούν σε 111.

2. Τα bit 5 και 4 ελέγχουν τον χρόνο εκκίνησης και η προεπιλεγμένη ρύθμιση 10 είναι για καθυστέρηση εκκίνησης έξι κύκλων ρολογιού από την απενεργοποίηση και την εξοικονόμηση ενέργειας, συν μια επιπλέον καθυστέρηση εκκίνησης 14 κύκλων ρολογιού συν 65 χιλιοστά του δευτερολέπτου από την επαναφορά.

Για να είμαστε ασφαλείς για έναν ταλαντωτή κρυστάλλου χαμηλής ισχύος, θέλουμε τη μέγιστη δυνατή καθυστέρηση 16.000 κύκλων ρολογιού από την απενεργοποίηση και την εξοικονόμηση ενέργειας, οπότε το SUT [1] πρέπει να ρυθμιστεί σε 1, συν μια επιπλέον καθυστέρηση εκκίνησης από 14 κύκλους ρολογιού συν 65 χιλιοστά του δευτερολέπτου από την επαναφορά, οπότε το SUT [0] πρέπει να ρυθμιστεί στο 1. Επιπλέον, το CKSEL [0] πρέπει να ρυθμιστεί στο 1.

3. Το bit 6 ελέγχει την έξοδο ρολογιού στο PORTB0, κάτι που δεν μας ενδιαφέρει. Έτσι, το bit 6 μπορεί να αφεθεί σε 1.

4. Το bit 7 ελέγχει τη λειτουργία διαίρεσης προς 8 και η προεπιλεγμένη ρύθμιση 0 έχει ενεργοποιημένη τη δυνατότητα, κάτι που δεν θέλουμε. Έτσι, το bit 7 πρέπει να αλλάξει από 0 σε 1.

Επομένως, το νέο Fuse Low Byte θα πρέπει να είναι 11111111 το οποίο, σε δεκαεξαδική συμβολή, είναι 0xFF

Για να προγραμματίσουμε κομμάτια του "Fuse Low Byte" μπορούμε να χρησιμοποιήσουμε τον προγραμματιστή μας (https://www.instructables.com/id/ISP-Programmer-fo…) και το λογισμικό AVRDUDE. Το AVRDUDE είναι ένα βοηθητικό πρόγραμμα γραμμής εντολών που χρησιμοποιείται για λήψη και μεταφόρτωση από μικροελεγκτές Atmel.

Λήψη AVRDUDE:

Πρώτον, πρέπει να προσθέσουμε περιγραφή του προγραμματιστή μας στο αρχείο διαμόρφωσης του AVRDUDE. Στα Windows το αρχείο διαμόρφωσης βρίσκεται συνήθως στην ίδια θέση με το εκτελέσιμο αρχείο του AVRDUDE.

Επικολλήστε το κείμενο στο αρχείο διαμόρφωσης avrdude.conf:

# ISPProgv1

προγραμματιστής id = "ISPProgv1"; desc = "σειριακή θύρα χτυπήματος, επαναφορά = dtr sck = rts mosi = txd miso = cts"; type = "serbb"; connection_type = σειριακό; επαναφορά = 4; sck = 7; mosi = 3; miso = 8; ?

Πριν ξεκινήσουμε το AVRDUDE, πρέπει να συνδέσουμε τον μικροελεγκτή στον προγραμματιστή, σύμφωνα με το σχήμα

Ανοίξτε το παράθυρο προτροπής DOS.

1. Για να δείτε τη λίστα προγραμματιστών που υποστηρίζει το avrdude, πληκτρολογήστε εντολή avrdude -c c. Εάν όλα είναι καλά, η λίστα πρέπει να έχει αναγνωριστικό προγραμματιστή "ISPProgv1"

2. Για να δείτε τη λίστα των συσκευών Atmel που υποστηρίζονται από το avrdude, πληκτρολογήστε εντολή avrdude -c ISPProgv1. Η λίστα θα πρέπει να διαθέτει συσκευή m328p για το Atmel ATMega 328P.

Στη συνέχεια, πληκτρολογήστε avrdude -c ISPProgv1 –p m328p, η εντολή πείτε στον avrdude ποιος προγραμματιστής χρησιμοποιείται και τι είναι προσαρτημένος ο μικροελεγκτής Atmel. Παρουσιάζει την υπογραφή ATmega328P με δεκαεξαδική σημειογραφία: 0x1e950f. Παρουσιάζει τον προγραμματισμό μπιτ ασφάλειας που βρίσκεται επί του παρόντος στο ATmega328P επίσης σε δεκαεξαδική σημειογραφία. Σε αυτήν την περίπτωση, τα byte ασφάλειας προγραμματίζονται ανά εργοστασιακή προεπιλογή.

Στη συνέχεια, πληκτρολογήστε avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, Είναι μια εντολή να πείτε στον avrdude ποιος προγραμματιστής χρησιμοποιείται και ποιος είναι ο μικροελεγκτής Atmel και να αλλάξετε το Fuse Low Byte σε 0xFF.

Τώρα το σήμα του ρολογιού θα πρέπει να προέρχεται από κρυσταλλικό ταλαντωτή χαμηλής ισχύος.

Βήμα 3: Κάψιμο του προγράμματος στη μνήμη του μικροελεγκτή ATMega328P

Κάψιμο του προγράμματος στη μνήμη του μικροελεγκτή ATMega328P
Κάψιμο του προγράμματος στη μνήμη του μικροελεγκτή ATMega328P
Κάψιμο του προγράμματος στη μνήμη του μικροελεγκτή ATMega328P
Κάψιμο του προγράμματος στη μνήμη του μικροελεγκτή ATMega328P

Αρχικά, αντιγράψτε το hex αρχείο του προγράμματος που δημιουργήσαμε στην αρχή της οδηγίας στον κατάλογο AVRDUDE.

Στη συνέχεια, πληκτρολογήστε στο παράθυρο προτροπής DOS την εντολή avrdude –c ISPProgv1 –p m328p –u –U flash: w: [όνομα του δεκαεξαδικού αρχείου σας]

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

Βήμα 4: Ελέγξτε ότι ο μικροελεγκτής λειτουργεί σύμφωνα με τις οδηγίες του προγράμματός μας

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

Συνδέστε εξαρτήματα σύμφωνα με το σχηματικό διάγραμμα του κυκλώματος LED που αναβοσβήνει AVR

Πρώτον, χρειαζόμαστε ενέργεια, όπως κάνουν όλα τα κυκλώματα AVR. Περίπου 5 βολτ ισχύος είναι αρκετά για τη λειτουργία του τσιπ AVR. Μπορείτε να το πάρετε είτε από μπαταρίες είτε από τροφοδοτικό DC. Συνδέουμε +5V ισχύος στον πείρο 7 και συνδέουμε τον πείρο 8 στη γείωση στο breadboard. Μεταξύ των δύο ακίδων, τοποθετούμε έναν κεραμικό πυκνωτή 0.1μF για να εξομαλύνουμε την ισχύ του τροφοδοτικού, έτσι ώστε το τσιπ AVR να έχει μια ομαλή γραμμή τροφοδοσίας.

Η αντίσταση 10KΩ χρησιμοποιείται για να παρέχει Power On Reset (POR) στη συσκευή. Όταν η τροφοδοσία είναι ενεργοποιημένη, η τάση στον πυκνωτή θα είναι μηδενική, οπότε η συσκευή επανεκκινείται (εφόσον η επαναφορά είναι χαμηλή), τότε ο πυκνωτής φορτίζεται στο VCC και η επαναφορά θα απενεργοποιηθεί.

Συνδέουμε την άνοδο του LED μας στον πείρο AVR PB0. Αυτό είναι το pin 14 του ATMega328P. Δεδομένου ότι είναι LED, θέλουμε να περιορίσουμε το ρεύμα που ρέει στο LED, ώστε να μην καεί. Αυτός είναι ο λόγος για τον οποίο τοποθετούμε μια αντίσταση 330Ω σε σειρά με το LED. Η κάθοδος του LED συνδέεται με τη γείωση.

Ο κρύσταλλος 16 MHz χρησιμοποιείται για την παροχή ρολογιού για τον μικροελεγκτή Atmega328 και οι πυκνωτές 22pF χρησιμοποιούνται για τη σταθεροποίηση της λειτουργίας του κρυστάλλου.

Αυτές είναι όλες οι απαραίτητες συνδέσεις για να ανάψει το LED. Παροχή ηλεκτρικού ρεύματος.

Εντάξει. Η λυχνία LED αναβοσβήνει με καθυστέρηση ενός δευτερολέπτου. Το έργο του μικροελεγκτή αντιστοιχεί στις εργασίες μας

Βήμα 5: Συμπέρασμα

Ομολογουμένως, αυτή ήταν μια μακρά διαδικασία για να αναβοσβήνει ένα LED, αλλά η αλήθεια είναι ότι έχετε ξεπεράσει με επιτυχία τα σημαντικά εμπόδια: τη δημιουργία μιας πλατφόρμας υλικού για τον προγραμματισμό ενός μικροελεγκτή AVR, τη χρήση του Atmel Studio ως την ολοκληρωμένη πλατφόρμα ανάπτυξης, χρησιμοποιώντας το AVRDUDE ως λογισμικό για διαμόρφωση και προγραμματισμός μικροελεγκτή AVR

Αν θέλετε να ενημερώνεστε για τα βασικά μου έργα μικροελεγκτών, εγγραφείτε στο YouTube μου! Η παρακολούθηση και η κοινή χρήση των βίντεό μου είναι ένας τρόπος για να υποστηρίξω αυτό που κάνω

Εγγραφείτε στο κανάλι YouTube FOG

Συνιστάται: