-
Notifications
You must be signed in to change notification settings - Fork 0
Programare ATmega16
In principiu, el e format din:
- Unitatea centrala de procesare (µP core) pe 8 biti, la o frecventa intre 1 – 16MHz.
- Memorie de date volatila (RAM, 1Kb ) si nevolatila pentru program (Flash, 16Kb)
- Porturi digitale de intrare-iesire
- Interfete seriale (RS232, SPI, I2C)
- Convertoare analog-digitale
- Suport pentru programare si debugging (ISP)
- Timere, generatoare de PWM sau watchdog
El se poate programa in limbaj de asamblare sau in C, cel mai comod este in C.
In urma compilarii programului C se obtine un fisier “prog.hex” care trebuie incarcat pe microcontroller.
Acest program nu face nimic. Fisierul “test.c” contine:
#include <stdio.h>
int main(){
return 0;
}
(Start > Run > cmd.exe)
Se instaleaza WinAVR
In directorul in care se afla “test.c” se dau comenzile:
avr-gcc –mmcu=atmega16 –Os –g –Wall –o test.elf test.c
avr-objcopy -j .text -j .data -O ihex lab5.elf lab5.hex
Poate fi descarcat de aici (trebuie facut cont mai intai – gratis)
- Se creeaza un nou proiect.
- Click dreapta pe Source Files > Add File… > Browse > … test.c.
- Apoi Project > Build.
Acum in directorul cu “test.c” se afla un subdirector “default” unde se afla fisierul “test.hex”.
Se poate face in doua moduri: pe seriala sau prin usb.
Pentru oricare din cele doua variante trebuie o interfata hardware speciala. Aici e schema electrica a placutei pe care am faut-o si aici e un tutorial pentru lipirea placutei pe care ni l-au dat asistentii.
Pentru programarea cu cablu serial se foloseste PonyProg.
Trebuie ales tipul de microcontroller din meniul ‘Device’: atmega16 si la ‘Setup ?’ trebuie setat portul Serial , COM1, SI Prog I/O.
- Se alege “File→Open Program (FLASH) File” și încarcă fișierul .hex.
- Se alege “Command → Write all”.
Pentru varianta usb am folsit tutorialul de aici
Din cate am inteles exista programatoare speciale care se pot cumpara, dar mai multe nu stiu.
Atmega16 poate folosi mai multe surse de ceas ( vezi datasheet). Cea mai rapida este folosirea unui quartz extern de 16 Mhz cum e prevazut si in schema. Pentru a folosi acest ceas in locul unuia generat intern, trebuie setati din “PonyProg” – “Configuration and security bits”. Aici e un tutorial despre cum se seteaza ceasul.
Aici sunt laboratoarele noastre. Primele doua sunt in asamblare, iar urmatoarele 4 in C.
Un exemplu de program care clipeste un led pe portul PA0:
#include <avr/io.h> #define F_CPU 16000000 #include <util/delay.h>
int main(){
// setam toti pinii portului A ca pini de iesire
DDRA = 0xFF;
while(1){ // intr-un ciclu infinit
PORTA = 0×01; // PA0 = 1
_delay_ms(500); // pauza de 500 ms
PORTA = 0×00; // PA0 = 0
}
return 0;
}
Pentru simulare se poate folosi Proteus care insa nu e gratis.