Skip to content

Programare ATmega16

ctalau edited this page Sep 13, 2010 · 4 revisions
Datasheet-ul de la ATmega16 este aici

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.

Exemplu de program

Acest program nu face nimic. Fisierul “test.c” contine:


#include <stdio.h>

int main(){
  return 0;
}

Compilarea programului

In linie de comanda

(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

Cu AVR Studio

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”.

Incarcarea fisierului 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.

Configurarea ceasului

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.

Programul efectiv

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


Simulare

Pentru simulare se poate folosi Proteus care insa nu e gratis.