AVR - लिनक्स में AVR चिप कैसे प्रोग्राम करें


22

मुझे हाल ही में AVRISmkII AVR प्रोग्रामर मिला है, और मेरे पास ATtiny85 और ATmega328 है। मैं सोच रहा था कि मैं इन चिप्स (प्रोग्रामर के साथ) को कैसे प्रोग्राम कर सकता हूं लेकिन जब मैंने Atmel Studio 6 प्राप्त करने की कोशिश की तो यह केवल विंडोज के लिए है। क्या कोई ऐसा तरीका है जो मैं लिनक्स (उबंटू में विशेष रूप से) का उपयोग कर सकता हूं? चींटी के सुझाव? धन्यवाद!

जवाबों:


36

मेरे पास पूर्ण विवरण के लिए समय नहीं है, लेकिन मैं आपको प्रोग्राम बुक करने के लिए अपने लिनक्स बॉक्स पर उपयोग की जाने वाली कमांड को कुकबुक-शैली दे सकता हूं:

तैयारी

  • उबंटू पर, सुनिश्चित करें कि कई आवश्यक पैकेज स्थापित हैं: डिबग और सिमुलेशन के लिए 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
  • एक ELF फाइल बनाने के लिए दूसरा कदम है: 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 (PB3) (जैसे। ATtiny13, ATtiny45, ATtiny85) टॉगल करता है। पिन के लिए एक एलईडी और श्रृंखला रोकनेवाला संलग्न करें और एलईडी को झपकी लेना शुरू करना चाहिए।

  • संपादित करें

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 टूल का उपयोग लिनक्स में स्टैंडअलोन पैकेज के रूप में कर सकते हैं। इनमें avr-gcc, avr-binutils और avr-libc शामिल हैं। यह वही है जिसे टूलचिन कहा जाता है।

एक बार जब आप एक हेक्स फ़ाइल बना लेते हैं और आप उसे अपनी चिप पर फ्लैश करना चाहते हैं, तो आप एवरूड का उपयोग कर सकते हैं।

ये सभी लिनक्स पर स्वतंत्र रूप से और आसानी से उपलब्ध हैं और एक साथ काम करने के लिए कॉन्फ़िगर करना भी मुश्किल नहीं है।

लेडीडा के पास पूरी प्रक्रिया पर स्टेप ट्यूटोरियल द्वारा एक ठोस कदम है ।


0

उबंटू में AVR विकसित करने के लिए बस कुछ कदम हैं:

उपकरण-श्रृंखला स्थापित करें :

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); 
    }
}

Makefile tempelate डाउनलोड करें और उसी डायरेक्टरी में सेव करें जहाँ आपने hello_world.cफाइल सेव की है।

Makefile संपादित करें :

# 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कंसोल में टाइप करें और एंटर करें।

AVR में AVRude का उपयोग करके निर्देश अपलोड करें

कंसोल में कमांड का उपयोग इस प्रकार करें: (यह मान लिया गया कि प्रोग्रामर जो आप उपयोग कर रहे हैं वह usbasp, google है या अन्य विकल्पों के लिए मैनुअल देखें)

$avrdude -c m16 -p usbasp -U flash:w:hello_world.hex
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.