Atmel Studio + avrdude პროგრამატორი

December 20, 2012

როდესაც Atmel Studio – სთან თავსებადი პროგრამატორი არ გაქვს, საკმაოდ დისკომფორტს გიქმნის მიკროკონტროლერის პროგრამირების პროცესი. მაგ. წერ პროგრამას Atmel Studio-ში აკომპილირებ, შემდეგ ცალკე უნდა გახსნა პროგრამა პროგრამატორი მიუთითო კონტროლერი, მიაბა .hex ფაილი და ჩატვირთო მიკროკონტროლერში (მოცემული პროცესი დეტალურადაა აღწერილი წინა სტატიაში).  პროცესი საკმაოდ მარტივდება პროგრამა პროგრამატორის Atmel Studio -ზე მიბმით. შედეგათ ვწერთ პროგრამას და Atmel Studio-თივე ვაპროგრამებთ მიკროკონტროლერს.  მივყვეთ თანმიმდევრობით და Atmel Studio-ს მივაბათ avrdude პროგრამატორი.

ვინდოუსზე avrdude-ს დაინსტალირებისთვის ვიწერთ WinAVRIDE-ს, რასაც თავისთავად მოყვება avrdude. windows-ზე avrdude-თი პროგრამირების დროს, არის შემდეგი პრობლემა,  avrdude ვერ ხედავს პროგრამატორს რადგან არ აქვს პორტებთან წვდომა, ამიტომ საჭიროა giveio.sys -ის დაინსტალირება. დაინსტალირება შეიძლება მარტივათ cmd-დან C:\WinAVR-20100110\bin\install_giveio.bat ფაილის გაშვებით.  შემდეგი პრობლემა arvdude-ზე რაც შემემთხვა ეს იყო, რომ მინდოდა atmega328 -ის დაპროგრამირება მაგრამ avrdude აპროგრამებს atmega328P (Pico. power) ხოლო atmega328-ს არ აპროგრამებს, რადგან განსხვავებული ID აქვს. სინამდვილეში პრობლემა ადვილათ მოგვარებადია, რადგამ განსხვავება atmega328-სა და atmega328P-ს შორის არის მხოლოდ ის რომ atmega328P უფრო ენერგო ეკონომიურია, დანარჩენი თითქმის ერთიდაიგივეა. იმისთვის რომ ჩვენთვის სასურველი კონტროლერი დაემატოს პროგრამირებად კონტროლერების სიაში საჭიროა შევცვალოთ C:\WinAVR-20100110\bin\avrdude.conf ფაილი, მარტივად დავაკოპიროთ atmega328P-ის პროგრამირების პარამეტრები, ჩავამატოთ და შევცვალოთ დასახელებები atmega328P- ს ნაცვლათ atmega328, m328p-ს ნაცვლათ m328, “signature = 0x1e 0x95 0x0F” ის ნაცვდათ “signature =  0x1e 0x95 0x14”. ამის შემდეგ უპრობლემოთ დავაპროგრამებთ. ( მსგავსი თემა avrfreak-ზე )

პროგრამატორის AtmelStudio-თან დასაკავშირებლათ, შევდივართ AtmelStudio-ში შემდეგ Tools>External Tools> გაიხსნება External Tools ფანჯარა, მოცემულ ფანჯარას ვავსებთ შემდეგნაირად:
ვამატებთ ორ მოწყობილობას პირველი როგორც Debug და მეორე Release.
1) ვავსებთ პროგრამატორის დასახელებას, როგორც გვინდა რომ გამოჩნდეს
Title: STK200 Debug

2) პროგრამა პროგრამატორი
Command: avrdude.exe

3) პროგრამირების ბრძანება
Argument: -c stk200 -P lpt1 -p t2313 -U flash:w:$(ProjectDir)Debug\$(ItemFileName).hex:i

მოცემული ბრძანება ეკუთვნის პროგრამატორის კონკრეტულ ტიპს stk200 და ATtiny2313 კონტროლერს, სხვა შემთხვევაში საჭიროა აღნიშნული დასახელებების შეცვლა, avrdude-ს მიერ მხარდაჭერილი პროგრამატორების ჩამონათვალი შეგვიძლია გავიგოთ CMD-ში avrdude -c asdf ბრძანებით, ხოლო მიკროკონტროლერების ჩამონათვალი avrdude -c avrisp ბრძანებით.  avrdude-სთან მუშაობისათვის და მატებითი ინფორმაციისთვის გადახედეთ ტუტორიალს Starting out with avrdude.

Release-სთვის მონაცემები მსგავსია, განსხვავებაა მხილოდ Argument-ში
ანუ Debug -ის ნაცვლად წერია Release
Arguments: -c stk200 -P lpt1 -p t2313-U flash:w:$(ProjectDir)Release\$(ItemFileName).hex:i

lsadfkjhalsjkdfa

სურ.1 მონაცემები Debug-ისთვის

a;slkdh;laksdf

სურ.2 მონაცემები Release-სთვის

ამის შემდეგ შედარებით გამარტივებულია პროგრამირების პროცესი. მაგ. თუ პროექტი არის Debug რეჟიმში, პროგრამირება მოხდება შესაბამისად Tools>STK200 Debug, ხოლო თუ Release რეჟიმშია Tools>STK200 Release.

Advertisements

პირველი პროექტი AVR მიკროკონტროლერზე

November 24, 2012

პირველათ როდესაც მიკროკონტროლერზე იწყებ მოშაობას, ცდილობ რაც შეიძლება მარტივი მაგალითიდან დაიწყო მაგალითად შუქდიოდის აციმციმება, ისევე როგორც პროგრამირების ენის სწავლისას პირველი პროგრამაა კონსოლზე “hello, world!” -ის დაწერაა. ჩვენს შემთხვევაშიც, მიმოვიხილავთ პირველ რამოდენიმე საფეხურს მიკროკოტროლერებთან სამუშაოთ და ავაწყობთ პირველ საცდელ პროექტს.  პირველი რაც დაგვჭირდება ეს არის პროგრამატორი STK-200 , რისი აწყობაც უმარტივესია LPT პორტზე, დაგვჭირდება პრინტერის პორტის კონექტორი და რამოდენიმე რეზისტორი. პროგრამატორის სქემა მოცემულია ქვემოთ, რეზისტორები შეიძლება შიეირჩეს 220-330 ომის შუალედში, და დაყენდეს კონექტორშივე, დამატებითი პლატის გამოყენების გარეშე.



პროგამატორის აწყობის შემდეგ დაგვჭირდება პროგრამა პროგრმატორი. ერთერთი ასეთი მარტივი პროგრამატორია PonyProg – ი.
(PonyProg-ს გადმოსაწერი ბმული.  ჩამონათვალში პიველი არის ძველი ვერსია, ხოლო მის ქვემოთ ახალი ეწ. ბეტა ვერსიებია, გადმოვიწერთ ახალ ბეტა ვერსია და დავაინსტალიროთ.)
მიკროკოტროლერისთვის პროგრამა შეიძლება დაიწერო ასემბლერში ან რაიმე შედარებით მაღალი დონის ენით მგალითად C, Basic, Pascal, ხოლო შემდეგ დაკომპილირდეს (გარდაიქმნას ორობით კოდათ) ეწ. .hex ფორმატში და შემდგომ ჩაიწეროს მიკოროკონტროლერში. .hex ფორმატი წარმოადგენს ორობითი კოდის ჩანაწერს 16-ით ათვლის სისტემაში და მიღებულია .hex ფორმატში კომპილირება რადგან ადვილია 16-ით კოდში ცალკეული ელემენტების გარჩევა ვიდრე ორობით კოდში.
არა აქვს მნიშვნელობა პროგრამას დაწერ ასემბლერში C -ზე თუ სხვა რომელიმე ენაზე, ყველა შემთხვევაში საჭიროა ეწ. კომპილატორი, პროგრამა რომელიც სიტყვებით და აბრევიატურებით დაწერილ ბრძანებებს გადაიყვანს კონტროლერისთვის გასაგებ ენაზე ორობით კოდში. ასემბლერზე პროგრამის დაწერა შრომატევადია და კომპლექსური ამოცანებისთვის თითქმის გამოუსადეგარი ხდება. ასემბლერზე პროგრამის დაწერა რეკომენდირებულია მაშინ როდასაც საჭიროა რაც შეიძლება ოპტიმალური და მაღალი სიზუსტის პროგრამა. მაგრამ, ჩვენს შემთხვევაში საქმეს არ გავირთულებთ და პროგრამას დავწერთ C ზე.  C კომპილატორები მრავალია და ყველაზე ცნობილი ვარიანტებია: IAR, mikroC, CodeVisionAVR, GCC. აქედან პირველი სამი ფასიანია ხოლო GCC უფასო კომპილატორია. მოცემული კომპილატორებიდან ავიჩიოთ GCC კომპილატორი, რადგან ყველაზე გავრცელებული GNU კომპილატორია თან კონტროლერების და მიკროპროცესორების მწარმოებლებისგან ყველაზე მეტადაა რეკომედირებული.
გადმოვიწეროთ Atmel Studio Atmel-ის IDE (Integrated Development Environment), მომელსაც მოყვება GCC C და C++ კომპილატორები. დავაინსტალიროთ (დაინსტალირების დროს პროგრამა მოითხოვს .net Framework-ის დაყენაბას თუ არა არის უკვე დაყენებული კომპიუტერზე. .Net Framework-ის გადმოწერა შეიძლება აქედან) და მივყვეთ პირველი პროექტის  თანმიმდევრობას (ვისაც .net პროექტეზე უმუშავია, მისთვის გარემო ნაცნობი იქნება, რადგან Atmel Studio იგივე Visual  Studio-ა).

მოციმციმე შუქციოდი

გაუშვათ AtmelStudio და ავირჩიოთ New Project > Installed Templates – C/C++ – GCC C Executable Project დავარქვათ TestProject და OK, მიკროკონტროლერი ავირჩიოთ ATtiny2313. თანმიმდევრობა .gif ანიმაციაზეა ნაჩვენები.

დავწეროთ მარტივი პროგრამა შუქდიოდის ასაციმციმებლათ 0.5 წამიანი ინტერვალით

/*
 * TestProject.c
 *
 * Created: 11/22/2012 6:37:43 PM
 *  Author: scienceasm
 */ 

#define F_CPU 1000000UL //პროცესორის ტაქტური სიხშირის განსაზღვრა 1MHz-ით
#include <avr/io.h>     //input output ფუნქციების ბიბლიოთეკის მიბმა
#include <util/delay.h> 
//ფუნქციების ბიბლიოთეკის მიბმა,_delay_ms ფუნქციის გამოსაყენებლათ

int main(void)   //მთავარი ფუნქციის დასაწყისი
{
    DDRB=0xFF;  //PORT B იყოს Output-ი. 
    // 0x ნიშნავს რომ ჩანაწერი არის თექვსმეტობით ათვლის სისტემაში
    PORTB=0x00; //PORT B -ს განულება

    while(1)    //უწვეტი ციკლის დასაწყისი
    {
        PORTB=0b00000000;//port B რეგისტრის განულება
        // 0b მიუთითებს რომ ჩანაწერი არის ორობით ათვლის სისტემაში
        _delay_ms(500); //დაყოვნების ფუნქცია დაახლოვებით 500ms-ით
        PORTB=0b00000001;//port B0 ბიტი = 1
        _delay_ms(500);        
    }//უწყვეტი ციკლის დასასრული, ამ შემთხვევაში ციკლი არ სრულდება 
     //და მუდმუვათ მეორდება, ანუ მოცემული ადგილიდან ბრუნდება ისევ
     //while ციკლის დასაწყისში.
}

პროგრამა საკმაოდ მარტივია და დამატებით განხილვას არ საჭიროებს მათვის ვინც C პროგრამირების ენის საფუძვლები მინიმალურ დონეზე მაინ იცის. კომპილაციისთვის მენიუდან ავირჩიოთ  Build > Rebuild Solution .  ვნახოთ როგორ მუშაობს ჩვენი პროგრამა Protheus-სში.
პროგრამა Proteus VSM მძლავრი საშუალებაა ელექტრონული სისტემების მოდელირებითვის, პროთეუსით შეგვიძლია ავაწყოთ სქემა მივაბათ კონტროლერს .hex ფაილი ან .elf ფაილი (.elf ფაილი იქმნება AtmelStudio-თი კომპილირების შედეგათ) და ვნახოთ თუ როგორ მუშაობს, თუ რამე შეცდომაა პროგრამაში ან სქემაზე გამოვასწორებთ, ამის შიმდეგ ავაწყობთ ფიზიკურად სქემას და უკვე აღარ მოგვიწევს რაიმეს გადაკეთება თუ პროგრამის ახლიდან გადაწერა) .
ავაწყოთ პროთეუსში სქემა, დაგვჭირდება: კონტროლერი ATtiny2313, რეზისტორი 10k, რეზისტორი 330ომი, შუქდიოდი.


ვისაც პროთეუსში არ უმუშავია კარგი იქნება თუ ელემენტარული უნარჩვევებისთვის გადახედავს ამ ვიდეოგაკვეთილებს მაგ. Proteus Isis Tutorial. 10 კილოომიანი რეზისტორით Reset შესასვლელზე მიწოდებულია დადებითი პოტენციალი, მიკროკონტროლერის Reset გამომყვანი დანიშნულია ყველა მოწყობილობის, რეგისტრები, ტაიმერები, პროგრამული თვლელი იქნება ეს თუ ALU(Arithmetic and Logic Unit)-ს ეწ. აპარატურული რესეტისთვის (ნულოვან მდგომარეობაში გადაყვანისთვის). ანუ იმ შემთხვევაში Reset შესასვლელზე მივაწოდეთ ლოგიკური ნულის ტოლი პოტენციალი (დაახლოვებით 0 ცოლტიდან 1 ვოლტამდე) მიკროკონტროლერს მთლიანად გადაიყვანს საწყის მგომარეობაში, და პროგრამაც დაიწყებს თავიდან მუშაობას. R2 რეზისტორით იზღუდება გამავალი დენის მნოშვნელობა დიოდში რომ არ გადააჭარბოს დასაშვებ დონეს. ადვილი შესამჩნევია, რომ პროთეუსში მიკროკონტროლერი არ არის კვების წყაროსთან შეერთებული, რადგან სიმულაციის პროცესში უბრალოთ იგულისხმება რომ მიერთებულია კვების წყარო.

სიმულაციის ასამუშავებლათ მიკროკოტროლერს მივაბათ .elf გაფართოვების ფაილი, შეგვიძლია ასევე .hex ფაილის მიბმა. თანმიმდევრობა ნაჩვენებია .gif ანიმაციაზე

რადგან ვნახეთ რომ პროგრამა მუშაობს, ამჯერათ ჩავწეროთ პროგრამა კვე ფიზიკურათ კონტროლერში.  მივაერთოთ კონტროლერი პროგრამატორის გამომყვანებს ქვემოთ სურათზე ნაჩვენები თანმიმდევრობით და კონტროლერის GND და VCC გამომყვანები შევაერთოთ 5ვ-იან კვების წყაროსთან.

აუცილებელია გაუშვათ PonyProg “Run as administrator”-ით, წინააღმდეგ შემთხვევაში პროგრამატორმა შეიძლება არ იმუშაოს.

დავაკონფიგურიროთ პროგრამატორის პორტი ისე როგორც ზემოთ არის ნაჩვენები, და ასევე ავირჩიოთ მიკროკონტროლერი რომლის დაპროგრამებაც გვინდა და მივუთითოთ .hex ფაილი, ჩვენს შემთხვევაში ფაილი მოთავსებულია *\Atmel Studio\TestProject\TestProject\Debug ფოლდერში.

ამის შემდეგ უკვე მიკროკოტროლერი მზათ არის დასაპროგრამებლათ, მაგრამ სანამ დავაპროგრამებთ გავხსნათ ისევ “I/O port setup” ფანჯარა და დავაჭიროთ Probe ღილაკს, თუ ფანჯარაში გაიხსნა “Test OK” ე.ი. ყველაფერი რიგზეა. (თუ “Test Failed” დაეწერა, გამოაერთეთ პროგრამატორი კონტროლერს და ახლიდან დააჭირეთ “Probe” ღილაკს, თუ ისევ “Test Failed” ამოაგდო ესეიგი პროგრამატორია არასწორედ აწყობილი.)  პროგრამის ჩასაწერათ დავაწვეთ Write Device -ს, ხოლო წასაკითხათ Read Device.

თუ ყველაფერი რიგზეა შუქდიოდი დაიწყებს ციმციმს დაახლოვებით ნახევარ წამიანი ინტერვალებით.


პროექტი № 9 – ღია ცეცხლის ეფექტი

October 17, 2012
დაგვჭირდება:
წითელი შუქდიოდი                       
2 ცალი ყვითელი შუქდიოდი       
3 ცალი რეზისტორი                         

სქემის აწყობა.

სქემა იგივე რაც მერვე პროექტში. ოღონდ მწვანე და ლურჯი შუქდიოდების ნაცვლად ვიყენებთ ორ ყვითელ შუქდიოდს. აქაც სამივე შუქდიოდს ჩამოაფარეთ თეთრი ქაღალდის ცილიდრი, ან პინგ-პონგის გახვრეტილი ბურთი, პატარა აბაჟურის მსგავსად. რომელიც საჭიროა სამი ფერის დიფუზიური გაბნევა-შერევისათვის.

სურ. 3-6.

პროგრამული კოდი .

აკრიფეთ ქვემოთ მოყვანილი კოდი, შეამოწმეთ და ჩატვირთეთ არდუინოში.

// პროექტი № 9 – ღია ცეცხლის ეფექტი

int ledPin1 = 9;
int ledPin2 = 10;
int ledPin3 = 11; 
void setup()
{
    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
    pinMode(ledPin3, OUTPUT);
} 
void loop()
{
    analogWrite(ledPin1, random(120)+135);
    analogWrite(ledPin2, random(120)+135);
    analogWrite(ledPin3, random(120)+135);
    delay(random(100));
}

თუ ყველაფერი სწორად არის შესრულებული, უნდა მივიღოთ ცეცხლის ალის სიმულაცია..

კოდის განხილვა.

მოკლედ განვიხილოთ კოდი. პირველი რაც გავაკეთეთ, გამოვაცხადეთ integer ტიპის ცვლადები და მივანიჭეთ მათ იმ კონტაქტების ნომრები რომლებზეც მიერთებულია შუქდიოდები.

int ledPin1 = 9;
int ledPin2 = 10;
int ledPin3 = 11;

შემდეგ ეს კონტაქტები გამოვაცხადეთ როგორც გამომავალი.

pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);

პროგრამის მთავარი ციკლი აგზავნის შემთხვევით მნიშვნელობებს [0;120]; და დამატებული 130(მაქსიმალური ნათების მისაღებად) PWM ტიპის კონტაქტებზე 9, 10, and 11:

analogWrite(ledPin1, random(120)+135);
analogWrite(ledPin2, random(120)+135);
analogWrite(ledPin3, random(120)+135);

და ბოლოს შემთხვევითი ხანგრძლივობის დაყოვნება.

delay(random(100));

რომლის შემდეგ ციკლი განმეორდება, და მივიღებთ ციმციმის ეფექტს.