আমার সম্পূর্ণ ব্যাখ্যার জন্য সময় নেই, তবে আমি আপনাকে লিনাক্স বাক্সে AVR গুলি প্রোগ্রাম করার জন্য যে কমান্ডগুলি ব্যবহার করি তা আপনি রান্না বই-স্টাইলে দিতে পারি:
উদ্যতি
- উবুন্টুতে, নিশ্চিত হয়ে নিন যে বেশ কয়েকটি প্রয়োজনীয় প্যাকেজ ইনস্টল রয়েছে: ডিবাগ এবং সিমুলেশন জন্য optionচ্ছিকভাবে
sudo apt-get install avr-libc avrdude binutils-avr gcc-avr srecord
ফেলে দিন gdb-avr simulavr
।
- আমি একটি ডিরেক্টরি তৈরি করতে শুরু করেছি যাতে আমার সমস্ত এটিটিইজ প্রকল্পগুলি একটি বাড়ি খুঁজে পায়:
mkdir ~/attiny: cd ~/attiny
- প্রতিটি প্রকল্পের জন্য আমি একটি উত্সর্গীকৃত সাবফোল্ডার তৈরি করি (এবং আমি দীর্ঘ নামগুলিতে কিছু মনে করি না):
mkdir waveShare4digit8segmentDisplay; cd waveShare4digit8segmentDisplay
উত্স তৈরি করুন
- আপনার প্রিয় পাঠ্য সম্পাদক সহ উত্স ফাইলটি সম্পাদনা করুন:
vi project.cpp
সেটিংস
রক্ষণাবেক্ষণ সহজ রাখার জন্য নীচের কমান্ডগুলি পরিবেশের ভেরিয়েবলগুলিতে প্রচুর নির্ভর করে।
- ব্যবহৃত / তৈরি করা ফাইলগুলির ভিত্তির নাম:
src=project
- সাধারণ সংকলক পতাকা:
cflags="-g -DF_CPU=${avrFreq} -Wall -Os - Werror -Wextra"
নীচের ভেরিয়েবলগুলি আপনি যে সঠিক প্রোগ্রামারটি ব্যবহার করছেন তার উপর নির্ভর করে পরিবর্তন করা দরকার। বিশদ জন্য man
পৃষ্ঠাগুলি দেখুন।
baud=19200
আপনার প্রোগ্রামারটি বোড্রেট পিসির সাথে যোগাযোগ করে:
programmerDev=/dev/ttyUSB003
আপনার প্রোগ্রামারটি যেখানে রয়েছে সেই ডিভাইসের নাম। dmesg
বিশদ জন্য আউটপুট পরীক্ষা করুন।
programmerType=avrisp
এটি আপনার সঠিক প্রোগ্রামারটির জন্য আলাদা হতে পারে।
নীচের ভেরিয়েবলগুলি আপনি যে সঠিক নিয়ন্ত্রকটি প্রোগ্রাম করতে চান তার উপর নির্ভর করে:
avrType=attiny2313
avrdude -c $programmerType
সমর্থিত ডিভাইসগুলির জন্য পরীক্ষা করুন ।
avrFreq=1000000
ডিফল্ট ঘড়ির জন্য নিয়ামকের ডেটাশিটটি পরীক্ষা করে দেখুন।
কম্পাইল
- প্রথম পদক্ষেপটি একটি অবজেক্ট ফাইল তৈরি করা:
avr-gcc ${cflags) -mmcu=${avrType) -Wa,-ahlmns=${src).lst -c -o ${src).o ${src).cpp
- দ্বিতীয় পদক্ষেপটি একটি ইএলএফ ফাইল তৈরি করা:
avr-gcc ${cflags) -mmcu=${avrType) -o ${src).elf ${src).o
- তৃতীয় পদক্ষেপটি হ'ল একটি ইন্টেল হেক্স ফাইল তৈরি করা, এটি সেই ফাইল যা আসলে প্রোগ্রামারকে প্রেরণ করা হয়:
avr-objcopy -j .text -j .data -O ihex ${src).elf ${src).flash.hex
প্রোগ্রামিং
- চূড়ান্ত পদক্ষেপটি হল ডিভাইসটি প্রোগ্রাম করা:
avrdude -p${avrType} -c${programmerType} -P${programmerDev} -b${baud} -v -U flash:w:${src}.flash.hex
Makefile নামক
আদেশগুলি মনে রাখার বিকল্প হিসাবে, আমি আমার ব্যক্তিগত পছন্দ অনুসারে একটি মেকফাইল রান্না করেছি, আপনি এটি Makefile
(মূলধনের কথা মনে রাখবেন M
) নামে সংরক্ষণ করতে পারেন । এটি নিম্নলিখিত হিসাবে কাজ করে:
make makefile
মেকফিল সম্পাদনা করুন;
make edit
উত্স ফাইলটি সম্পাদনা করুন;
make flash
ডিভাইসের ফ্ল্যাশ মেমরি প্রোগ্রাম করুন;
make help
অন্যান্য কমান্ড তালিকাভুক্ত করুন।
এই মেকফাইলটি এখানে:
baud=19200
src=project
avrType=attiny2313
avrFreq=4000000 # 4MHz for accurate baudrate timing
programmerDev=/dev/ttyUSB003
programmerType=arduino
cflags=-g -DF_CPU=$(avrFreq) -Wall -Os -Werror -Wextra
memoryTypes=calibration eeprom efuse flash fuse hfuse lfuse lock signature application apptable boot prodsig usersig
.PHONY: backup clean disassemble dumpelf edit eeprom elf flash fuses help hex makefile object program
help:
@echo 'backup Read all known memory types from controller and write it into a file. Available memory types: $(memoryTypes)'
@echo 'clean Delete automatically created files.'
@echo 'disassemble Compile source code, then disassemble object file to mnemonics.'
@echo 'dumpelf Dump the contents of the .elf file. Useful for information purposes only.'
@echo 'edit Edit the .cpp source file.'
@echo 'eeprom Extract EEPROM data from .elf file and program the device with it.'
@echo 'elf Create $(src).elf'
@echo 'flash Program $(src).hex to controller flash memory.'
@echo 'fuses Extract FUSES data from .elf file and program the device with it.'
@echo 'help Show this text.'
@echo 'hex Create all hex files for flash, eeprom and fuses.'
@echo 'object Create $(src).o'
@echo 'program Do all programming to controller.'
edit:
vi $(src).cpp
makefile:
vi Makefile
#all: object elf hex
clean:
rm $(src).elf $(src).eeprom.hex $(src).fuses.hex $(src).lfuse.hex $(src).hfuse.hex $(src).efuse.hex $(src).flash.hex $(src).o
date
object:
avr-gcc $(cflags) -mmcu=$(avrType) -Wa,-ahlmns=$(src).lst -c -o $(src).o $(src).cpp
elf: object
avr-gcc $(cflags) -mmcu=$(avrType) -o $(src).elf $(src).o
chmod a-x $(src).elf 2>&1
hex: elf
avr-objcopy -j .text -j .data -O ihex $(src).elf $(src).flash.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex $(src).elf $(src).eeprom.hex
avr-objcopy -j .fuse -O ihex $(src).elf $(src).fuses.hex --change-section-lma .fuse=0
srec_cat $(src).fuses.hex -Intel -crop 0x00 0x01 -offset 0x00 -O $(src).lfuse.hex -Intel
srec_cat $(src).fuses.hex -Intel -crop 0x01 0x02 -offset -0x01 -O $(src).hfuse.hex -Intel
srec_cat $(src).fuses.hex -Intel -crop 0x02 0x03 -offset -0x02 -O $(src).efuse.hex -Intel
disassemble: elf
avr-objdump -s -j .fuse $(src).elf
avr-objdump -C -d $(src).elf 2>&1
eeprom: hex
#avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U eeprom:w:$(src).eeprom.hex
date
fuses: hex
avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U lfuse:w:$(src).lfuse.hex
#avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U hfuse:w:$(src).hfuse.hex
#avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U efuse:w:$(src).efuse.hex
date
dumpelf: elf
avr-objdump -s -h $(src).elf
program: flash eeprom fuses
flash: hex
avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U flash:w:$(src).flash.hex
date
backup:
@for memory in $(memoryTypes); do \
avrdude -p $(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U $$memory:r:./$(avrType).$$memory.hex:i; \
done
এটি avrdude
যেমন চালানো প্রয়োজন বলে মনে হয় root
, যদি এটি ঘটে তবে এটি একটি নিজস্ব প্রশ্নকে ন্যায্যতা দেয় । এটির সাথে সমাধান করা যেতে পারে udev
তবে অপারেটিং সিস্টেমের মাধ্যমে প্রোগ্রামারকে কীভাবে স্বীকৃত করা যায় তার থেকে কিছুটা নির্দিষ্ট তথ্য প্রয়োজন।
ওহে বিশ্ব
আমাকে এমন একটি 'হ্যালো ওয়ার্ল্ড' ফেলে দিন যা 1Hz এ টগল করে একটি কন্ট্রোলার পিন 2 (পিবি 3) (যেমন, এটিটিনি 13, এটিটিনি 45, এটিটিনি 85) তৈরি করে। পিনের সাথে একটি এলইডি এবং সিরিজ প্রতিরোধক সংযুক্ত করুন এবং এলইডি জ্বলতে শুরু করা উচিত।
i
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0x08;
while (1) {
PORTB = 0x00; _delay_ms(500);
PORTB = 0x08; _delay_ms(500);
}
}
<ESC>:wq
সম্পন্ন.