AN001
Control MML pentru microcontrollere ATMEL AVR
Procesoare AVR suportate:
Toate microcontrollerele AVR care au port SPI pentru comunicatie Master-Slave
Ce inseamna MML?
MML=Man-Machine Language. Nu este un limbaj de programare, ci este un termen care defineste o modalitate de comunicare om-masina, folosind un set de comenzi
Pentru masini complicate, setul de comenzi este unul mai complicat(nu in mod necesar), pentru masini simple, setul de comenzi este unul foarte limitat. Cel prezentat aici este din ultima categorie.
Unde se poate folosi controlul MML?
Sa presupunem ca avem o masina construita in jurul unui microcontroller. Ar fi interesant sa putem monitoriza unii parametri in timpul functionarii, fara ca sa implementam ceva special in programul de lucru, si de asemenea, sa putem monitoriza in acelasi fel diferite aplicatii.
Schema generala(Structura ATMML standard)
Ne imaginam ca masina construita in jurul controllerului este reprezentata de 8 LED-urim D1-D8. Masina are un conector DB9 unde se conecteaza calculatorul de diagnoza, folosind un cablu.
Diagrama cablului
Porturile neutilizate in schema pot fi folosite in aplicatie. Destinatia urmatorilor pini nu trebuie schimbata, pentru a avea un concept MML functional:
X1, X2 - pinii cuartului
RESET - resetul se intampla la pornire-alimentare. Dupa alimentare, R6 pull-up tine procesorul in starea RUN. Pinul de reset este conectat la conectorul DB9 pentru a putea reseta circuitul si de la distanta.
irq - intrerupere externa. Programul de pe PC trimite o comanda dupa ce activeaza aceasta intrerupere.
SS - intotdeauna "0" pentru a forta MCU in mod slave(PC-ul este Master in acest caz)
MOSI,MISO,SCK - the liniile portului SPI.
inversoarele - inversoarele sunt introduse pentru a proteja intrucatva procesorul. Este obligatorii de a avea inversoarele, deoarece programul de monitorizate tine cont de existenta lor.
Protocolul interfetei
La interfata dintre Master(PC de diagnosticare) si Slave(AVR) comunicatia urmeaza un protocol, numit "3-byte protocol" - un protocol proprietar. Because the cyclical structure of SPI interface, the command sent by the master and the response sent by the slave are 3 octeti. Explicatia fiecarui bit este data in fisierul urmator:
3-Byte protocol
Ideea de baza consta in faptul ca in programul care ruleaza pe MCU si controleaza masina, este inserat un interrupt handler care preia comenzi "3-Byte", le executa si intoarce rezultatul.
un SPI handler de 100 octeti
Am scris un mic program de test care ruleaza pe circuitul cu LED-uri si are incorporat handlerul SPI.
Folosind un asamblor, se obtine un fisier binar, care trebuie introdus in controller.
fisierul sursa ASM si binar pentru programul de test. zip, 2.4KBytes
Fisierul binar este scris in MCU, fara a extrage procesorul din circuit, folosind acelasi cablu.
Programul cu care se incarca fisierul binar in MCU:
Programator "epoca de piatra" zip, 32KBytes
Programul de diagnosticare(ATMML)
Programul de diagnostic ruleaza pe PC-ul de diagnostic:
ATMML zip, 19KBytes
Comenzi ATMML:
brst - [development command] trimite o rafala de 8 tacturi de ceas catre MCU
irq0 - [development command] trimite o cerere de intrerupere catre MCU.
Programul utilizator se opreste, rutina SPI asteapta cei 3 octeti. Pentru ca programul utilizator sa ruleze din nou,
rutina SPI trebui sa promeasca cei 3 octeti[folositi "send"]
send - [development command] trimite 3 octeti. Raspunsul se poate vedea in culoare diferita
rese - trimite un mesaj de restet catre MCU
[exit] - Iesire din programul ATMML
[disp][reg,mem,eprom,mnemonic] - comanda de afisare
exemple:
dispreg
address/register=100 sau 0x64 //intrarea poate fi in zecimal sau in hexa, folosind 0xhh
dispmem
address/register=0
range=128 //marimea(range) poate fi zecimala sau hexa, pana la 0xff
disptimsk //timsk is o mnemonica pentru un anumit registru. Consultati "comm.dat"
[conf][reg,mem,eprom,mnemonic]
Se aplica acelasi principiu ca pentru "disp"
* * *
Bibliografie:
[1] www.atmel.com