Pregătirea fișierelor pentru vmlab

1. Creați un fișier text, de exemplu z5_start.txt, care va fi fișierul proiectului pentru VMLAB.

2. Tensiunea măsurată va fi alimentată la intrarea PA0 (pinul ADC0 40) al MC cu motorul rezistor variabil. Ieșirile rezistenței variabile sunt conectate la zero și la sursa de alimentare a MC. Astfel, în timpul emulației, putem schimba tensiunea la intrarea ADC0 ADC de la 0 la 5 volți.

3. Vom scoate rezultatul măsurării în portul B la 5 LED-uri emulator - aprins "1" nu luminează "0" - mai precis vom vedea doar cei 5 biți inferiori ai rezultatului.

; Titlu :; ********* www.avr123.nm.ru *********; ; sarcină 5. ADC MK AVR AT90S8535; ; compilarea pe - CodeVision C demo compilator; ; Emulatorul VMLAB are nevoie de fișiere .hex .cof __. C; obținută ca rezultat al compilării. ; ; *********************************; Pentru a utiliza ADC, MK trebuie trimis; tensiunea de referință pe ieșirea AREF - noi; vom furniza 5 volți MC. Dar! în VMLAB; nu puteți conecta direct două noduri; folosim un rezistor de 1 ohm: R1 VDD AREF 1; rezistorul R1 este conectat la; noduri VDD și AREF. Rezistență de 1 Ohm; tensiunea de referință Vref avem 5 volți -; înseamnă atunci când aplicați 5 volți la intrarea ADC; obținem rezultatul: 11111 11111 (ADC în; AT90S8535 10-bit); iar pasul de conversie va fi; Vref / 1024 = 4,883 miVolta; Input0 ADC (acesta este rezultatul PA0 MK) la care ne vom conecta; contactul mobil al unei variabile; Rezistor (cursorul 1 în fereastra "Panou de control") -; pentru a modifica valoarea măsurată în timpul emulației; tensiune la intrarea ADC. V1 PA0 VSS SLIDER_1 (0 5); la capetele variabilei; 0 și 5 volți; 5 LED-uri -; conectați terminalele la portul B D1 VDD PB0 D2 VDD PB1 D3 VDD PB2 D4 VDD PB3 D5 VDD PB4 .PLOT V (PA0); Pe ecranul Osciloscop (fereastra; "SCOPE") vom extrage tensiunea; pe motorul potențiometrului; Totul, fișierul de proiect pentru VMLAB este gata.

Vă rugăm să rețineți că VMLAB permite conectarea directă a LED-urilor la + sursa de alimentare și terminalele MK. În realitate, este necesar un rezistor limitator de curent de 430 - 910 Ohm, conectat în serie cu fiecare LED!

Crearea unui program pentru MK:

1. În dosarul D: CVAVR (unde trebuie să aveți compilatorul CodeVisionAVR) creați dosarul Atmega16 pentru fișierele de proiect.

2. Rulați compilatorul.

3. Pentru a crea un fișier proiect, alegeți File -> New -> Project -> OK -> No

4. Mergeți la dosarul Atmega16 creat pentru proiect și introduceți "Atmega16" în câmpul "nume fișier".

5. Faceți clic pe "Salvați" pentru a deschide fereastra de configurare a proiectului.

6. Deschideți fila "C Compiler" și setați totul astfel:

Fiți atenți la formatele de fișiere de ieșire:

Vom avea nevoie ca de obicei. Hex, dar acum, de asemenea, fișier .COF - conține firmware-ul obligatoriu pentru MC la textul programului în C pentru simulatoare!

Exemplul ADC pentru AT90S8535

AVR "de la zero" în C - sarcina 5

CodeVisionAVR C Compiler

Tensiunea de ieșire AREF = 5.0V
Frecvența cuarțului este de 3,69 MHz
Tensiunea măsurată este aplicată terminalului PA0
Rezultatul (byte scăzut!) Este ieșire în PORTB
LED-urile sunt conectate la biți PORTB 0_4.
* /

#include <90s8535.h> / * cu descrierea "fierului" MK AT90S8535. Textul acestui fișier va fi inserat pur și simplu în locul acestei linii de către preprocesorul compilatorului înainte de compilarea * /

#include // funcții de întârziere gata

#define ADC_VREF_TYPE 0x00 / * Acum, preprocesorul va înlocui "ADC_VREF_TYPE" cu "0x00" oriunde în textul programului.


Directiva #define este foarte puternică și convenabilă. Aflați și aplicați-o!

/ * Vom fi întrerupți după terminarea conversiei AC și vom scoate rezultatul.

Trebuie să scrieți un handler de funcții al acestui lucru
întreruperi - scrie: * /

ADCW;
/ * ieșire la rezultatul PORTB al ADC.

Să analizăm această linie a programului.


Înregistrează-te ADCW nu va găsi DATASHEET dar compilator CVAVR îl puteți utiliza - este un registru virtual de 16 biți, conține toate cele 10 biți de rezultatul - este convenabil, dar puteți utiliza registrele de DATASHEET, și anume: ADCL și ADCH

Apoi vine operația:

- aceasta este inversiunea: UNITĂȚILE devin ZERO și invers, trebuie să facem acest lucru astfel încât "1" să corespundă LED-ului de ardere - la urma urmei, conform diagramei electrice, se aprinde când MK "0"

Un alt punct important: (unsigned char) - aducerea tipul de date - valoarea de doi octeți (ADCW - registre virtuale pe 16 biți există numai în „cap“ compilator KodVizhn.!) Ne-am dat la un tip de caracter nesemnat - un 8-biți - acest tip de date „urcare“ la portul MK * /

delay_ms (20); / * întârziere de 20 de milisecunde

Atenție, vă rog. Nu se recomandă să utilizați pauze în dispozitivul de tratare a întreruperii, dacă nu controlați momentul apariției evenimentelor care provoacă întreruperea și mai mult de o întrerupere a programului.

ADCSR | = 0x40; // executați următoarele
// Transformarea AC.
// citiți DataSheet despre registrul ADCSR!

> // paranteza de închidere a funcției-
// manipulatorul de întrerupere


void principal (void)

PORTB = 0xFF; / * Scriere la „dispozitivul de blocare“ portul „B“ MK edinichki - dar pe constatările MC, acestea vor apărea numai atunci când vom face aceste ieșiri picioare. * /

DDRB = 0xFF; / * Înregistrează direcția portului terminale „B“ MK - am înregistrat opt ​​„1“ - asa ca acum toate picioarele au început să apară, și pe ele erau semnalele sunt în PORTB anticipate, iar linia anterioară a programului ne-am aruncat edinichki - acum ei pe picioarele PB0_PB7 MK. * /

Nivelurile ridicate sunt aproape de tensiunea de alimentare a MK - atunci curentul prin LED-uri nu curge și acestea sunt stinse. LED-urile cu celelalte terminale sunt conectate prin rezistoare la sursa de alimentare! Deci, diferența potențială a LED-ului a dispărut și nu există curent - nu arde. E atât de simplu.

ADCSR = 0x8E; / * am înregistrat în ADCSR numărul 0x8E sau 1000 1110

Bit 7 - ADEN: înregistrat '1' - activat pe ADC (au ghicit-o, da, da. "0" - opriți ADC-ul)

Bit 6 - ADSC: '1' - începe conversia AC, iar pentru noi `0` înseamnă că conversia nu începe încă.

Bitul 5 - ADFR: "1" - convertește ADC la funcționarea automată continuă - în "autonom". La noi Bit 5 = `0` înseamnă că ADC va face fiecare, transformare separată de comanda noastră.

Bit 4 -ADIF: Flag de întrerupere - la sfârșitul ADC devine '1' și se resetează fie prin executarea prelucrării întreruperilor, fie prin scrierea la aceste unități de biți!

Bitul 3 - ADIE: '1' - a permis întreruperea la sfârșitul ADC.

Bits 2..0 - ADPS2..ADPS0: Setarea frecvenței de operare a ADC - avem 110 - apoi coeficientul. diviziunea 64 - frecvența de funcționare a ADC 57.65625 kHz. * /

#asm ("sei") // permite întreruperi globale

ADMUX = 0; // Selectați intrarea ADC, tensiunea la care se va digitiza.
// citiți DataSheet despre registrul ADMUX
// Trebuie să înțelegeți cum să selectați canalul ADC

ADCSR | = 0x40; / * A început prima conversie făcând `1` bit_6 în registrul ADCSR

Pentru a face orice bit al registrului "unul" fără a schimba ceilalți biți ai acestui registru, trebuie să executați o operație bitwise "sau" (marcată cu |) acestui registru cu o mască. O mască este un număr în care toți biți sunt zero, iar valoarea "1" este setată numai de biți.

* /
în timp ce (1); / * buclă infinită - vom sta în ea în timp ce există o sursă de alimentare MK, și la finalizarea ADC vom intra în funcția de procesare întrerupere și a reveni aici * /

> / / închidere bracket pentru main

#include <90s8535.h> #include #define ADC_VREF_TYPE întrerupe 0x00 [ADC_INT] void adc_isr (void)


Salvați fișierul cu testul inițial al programului - faceți clic pe "floppy disk".

De asemenea, ar trebui să fie incluse în proiect: faceți clic pe „ciocan-cheie-șurubelnița“ - în fereastra de configurare a proiectului care se deschide, faceți clic pe - Add - Alegeți Atmega16.c - și „Open“ - acum fișier A8535.c, ca parte a proiectului, faceți clic pe „OK“ . Faceți: Fișier - salvați tot.

Avem nevoie de doar 3 fișiere din procesul de compilare:
A8535 __ C
A8535.hex
A8535.cof

Trebuie să creați un nou proiect

clic pe: Proiect - Proiect nou

a existat o fereastră "Creați un proiect nou", arătați cu atenție - conține câțiva pași pentru a configura proiectul - trebuie doar să-i umpleți cu ușurință.

pasul 1 - dați numele proiectului nostru ad_test.prj asigurați-vă că acesta este localizat în folderul creat de noi!

Pasul 2 - Selectați MC: AT90S8535

pasul 3 - marcați al treilea element - fișierul A8535.cof

pasul 4 - scrieți în câmpul superior numele fișierului sursă pe C A8535 __ c c și faceți clic pe butonul din dreapta: "adăugați acest".
În câmpul "Fișier țintă [HEX]" vom scrie: A8535.hex

Extindeți fereastra fișierului proiectului ad_test.prj - scheletul proiectului este gata! Acum trebuie să deschideți fișierul text z5_start.txt pe care l-am creat la începutul sarcinii.

Am descris în el în limbajul emulatorului structura dispozitivului pe MC - acum trebuie să adăugați câteva linii din fișierul de proiect generat de emulator:

Introduceți următoarele înaintea liniei "; Pentru utilizare":

TARGET "a8535.hex"; firmware-ul emulat MK

COFF "a8535.cof"; fișierul conține o obligație
; din conținutul lui [.hex] la codul din [__ c]

SOURCE "a8535 __ C"; codul sursă pentru C pe care
; fișierul [.cof] este coordonat.
; acest CodeVision a adăugat "__" la compilare


.TRACE; furnizați informații de depanare în fereastră
; SCOPE - roz (vezi emulatorul HELP)

CLOCK 3.69meg; frecvența cuarțului utilizat

; ---------------------------------------------
; Denumiri de contacte electrice -
; nodurile MK la care vă puteți "conecta"
; emulator: RESET, AREF, ACO, TIM1OVF
; PA0-PA7, PB0-PB7, PC0-PC7, PDO-PD7,
;
; __informatia este referinta - pentru
; fiecare MK are propriul său!

Acum: Fișier - salvați tot.

Puteți realiza din proiectul "Construiți - apăsați F9

Aici, o astfel de inscripție ar trebui să vă mulțumească:

Totul este gata pentru a rula programul în emulator.

Dar, înainte de a rula, trebuie să configurați ferestrele de pe ecranul PC-ului pentru a observa în mod convenabil procesul de emulare. Vom avea nevoie de ferestre:

• Panoul de control - pe această variabilă a panoului pentru a schimba tensiunea la intrarea ADC-ului și a LED-urilor
Periferice - apăsați "+" convertor A / D - vom vedea ce se întâmplă în registrele ADC.

· Mesaje - tot felul de rulouri de messagi de-a lungul felului de emulație - puneți-l jos și faceți-l jos și larg.
Domeniul de aplicare - osciloscop virtual - se poate observa tensiunea la intrarea ADC - se stabilește scala verticală de 1 volt pe diviziune.

· Cod - în această fereastră vom vedea codul sursă pe C și progresul programului pe el în procesul de lucru.

În meniul Vizualizare, puteți vedea ce alte ferestre sunt disponibile - și pentru ceea ce au citit în Ajutor.

Apăsăm pe semafor. Emulatorul inteligent și jură: spun că Watchdog Timer (câinele în parlance comun) prietenul meu trebuie să fie resetat! înainte de pornire!

Îi place să se certe - dar nu am folosit ECE - a se vedea fișierul cu o listă de asamblare a programului (este în directorul de proiect compilator) - nu există un astfel de moft este:

Articole similare