Χρήστος Μαργιώλης

Προγραμματισμός μικροελεγκτών PIC στο FreeBSD

Ελεγμένο στο FreeBSD 13.0. Το άρθρο υπάρχει επίσης στο FreeBSD Wiki.

Προαπαιτούμενα

Ο sdcc είναι ένας μεταγλωττιστής C για μικροεπεξεργαστές. Λέει ότι οι μικροεπεργαστές PIC δεν συντηρούνται, αλλά τον βρήκα αρκετά αξιόπιστο μέχρι στιγμής (με επιφύλαξη, δεν είμαι ειδικός). Το FreeBSD port είναι lang/sdcc.

Στην σελίδα 75 του εγχειριδίου χρήσης του sdcc αναφέρονται οι υποστηριζόμενες συσκευές PIC. Τα header files βρίσκονται στο /usr/local/share/sdcc.

Για τον προγραμματισμό του MCU, βρήκα ότι το pk2cmd δουλέυει μία χαρά με το PICKit2 (ή τους κινέζικους κλώνους), αλλά δεν υπάρχει port για το FreeBSD πια. Το Makefile δεν εγκαθιστά τα αρχεία σωστά, οπότε έχουμε λίγη ακόμα δουλειά να κάνουμε:

$ git clone https://github.com/psmay/pk2cmd.git
$ cd pk2cmd/pk2cmd
# gmake freebsd install clean
# mv /usr/share/pk2/PK2DeviceFile.dat /usr/local/bin
# rm -rf /usr/share/pk2

Οι υποστηριζόμενες συσκευές για το pk2cmd αναφέρονται στο here.

Ανίχνευση και προγραμματισμός του MCU

Αποφύγετε να χρησιμοποιείτε μόνο την επιλογή -P για την αυτόματη ανίχνευση του MCU, διότι το VPP που εφαρμόζει το PICKit2 στην πλακέτα ενώ προσπαθεί να την ανιχνεύσει, μπορεί να προκαλέσει ζημιά στο MCU. Αντ’ αυτού, χρησιμοποιήστε τον αριθμό της πλακέτας όπως φαίνεται παρακάτω. Επίσης, χρησιμοποιείτε την επιλογή -C για να ελέγξετε ότι η πλακέτα είναι κενή.

Εάν κάποια από τις παρακάτω εντολές pk2cmd αποτύχουν, σιγουρευτείτε ότι όλα είναι πράγματι καλωδιωμένα σωστά:

$ pk2cmd -P PIC16F877A -C
Device is blank

Operation Succeeded

Μεταγλωττίστε τον πηγαίο κώδικά σας. Το εκτελέσιμο είναι το αρχείο .hex που θα παράξει ο sdcc. Αντικαταστήστε τα pic14 και 16f877a με τα κατάλληλα ονόματα της συσκευής σας:

$ sdcc --use-non-free -mpic14 -p16f877a main.c

Σβήστε το PIC (εάν δεν ήταν ήδη κενό) και κάντε flash τον νέο κώδικα. Ξανά, χρησιμοποιήστε τα κατάλληλα ονόματα:

$ pk2cmd -P PIC16F877A -E
$ pk2cmd -P PIC16F877A -X -M -F main.hex

Εάν όλα πήγαν καλά, θα πρέπει να δείτε έξοδο παρόμοια με αυτήν:

PICkit 2 Program Report
23-1-2022, 21:01:29
Device Type: PIC16F877A

Program Succeeded.

Operation Succeeded

← Προηγούμενο Ευρετήριο Επόμενο →