এভিআর - লিনাক্সে কীভাবে একটি এভিআর চিপ প্রোগ্রাম করবেন


22

আমি সম্প্রতি একটি AVRISmkII এভিআর প্রোগ্রামার পেয়েছি এবং আমার কাছে এটিটিনি 85 এবং এটিমেগ 328 রয়েছে। আমি ভাবছিলাম কীভাবে আমি এই চিপগুলি প্রোগ্রাম করতে পারি (প্রোগ্রামার সহ) তবে যখন আমি এটমেল স্টুডিও 6 পাওয়ার চেষ্টা করি তখন এটি কেবল উইন্ডোজের হয়ে থাকে। আমি কি লিনাক্সে (উবুন্টু বিশেষত) ব্যবহার করতে পারি? পিপড়া পরামর্শ? ধন্যবাদ!

উত্তর:


36

আমার সম্পূর্ণ ব্যাখ্যার জন্য সময় নেই, তবে আমি আপনাকে লিনাক্স বাক্সে 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=attiny2313avrdude -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

  • ফ্ল্যাশ করা

সম্পন্ন.


2
হ্যালো ওয়ার্ল্ডের নির্দিষ্ট টিউটোরিয়াল!
ভোরাক

11

আপনি লিনাক্সের স্ট্যান্ডেলোন প্যাকেজ হিসাবে AVR GNU সরঞ্জাম ব্যবহার করতে পারেন। এর মধ্যে রয়েছে এআরআর-জিসিসি, এভিআর-বাইনুটিস, এবং এভিআর-লিবিসি। এটি হ'ল টুলচেন হিসাবে পরিচিত।

একবার আপনি একটি হেক্স ফাইল তৈরি করে ফেললেন এবং আপনি নিজের চিপটিতে এটি ফ্ল্যাশ করতে ইচ্ছুক হয়ে গেলে আপনি আর্দুড ব্যবহার করতে পারেন।

এগুলি সমস্ত লিনাক্সে অবাধে এবং সহজেই উপলভ্য এবং একসাথে কাজ করার জন্য কনফিগার করা খুব কঠিন নয়।

পুরো প্রক্রিয়াটির উপর লেডিএডির একটি স্টেপ বাই স্টেপ টিউটোরিয়াল রয়েছে


0

উবুন্টুতে এভিআর বিকাশের জন্য কয়েকটি পদক্ষেপ রয়েছে:

সরঞ্জাম-চেইন ইনস্টল করুন :

sudo apt-get install gcc-avr binutils-avr gdb-avr avr-libc avrdude

একটি হ্যালো ওয়ার্ল্ড কোড তৈরি করুন এবং সংরক্ষণ করুন:

#include<avr/io.h>
#define F_CPU 8000000UL
#include<util/delay.h>
int main() {
    DDRB = 0xff; // make PORTB as O/P   
    PORTB = 0xFF;
    while(1) {
        PORTB |= (1 << 0);               
        _delay_ms(100); 
        PORTB &= ~(1 << 0);     
        _delay_ms(100); 
    }
}

মেকফিল টিমেলেট ডাউনলোড করুন এবং যেখানে hello_world.cফাইলটি সংরক্ষণ করেছেন সেই একই ডিরেক্টরিতে সংরক্ষণ করুন।

মেকফিল সম্পাদনা করুন :

# MCU name (Specify the MCU you are using)
MCU = atmega16
# Processor frequency.
F_CPU = 8000000
# Target file name (without extension).
#in this case file name is hello_world
TARGET = main

লক্ষ্য তৈরি করুন

শুধু makeকনসোলে টাইপ করুন এবং এন্টার টিপুন।

এভিআরডে অর্ডারকে ব্যবহার করে নির্দেশাবলী আপলোড করুন

কনসোলে এইভাবে কমান্ডটি ব্যবহার করুন: (ধরে নেওয়া যায় যে আপনি যে প্রোগ্রামারটি ব্যবহার করছেন তা হ'ল ইউএসবাপ, গুগল বা অন্যান্য বিকল্পের জন্য ম্যানুয়াল দেখুন)

$avrdude -c m16 -p usbasp -U flash:w:hello_world.hex
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.