260 likes | 412 Views
MIKROPROCESORSKI SISTEMI SEMINARSKI RAD. FUNKCISKI GENERATOR PROIZVOLJNIH TALASNIH OBLIKA REALIZOVAN POMOĆU MIKROKONTROLERA I D-LATCH-a Kandidati: Bošković Milan br. 11042 Petrović Aleksandar br. 10323. UVOD. FUNKCISKI GENERATOR PROIZVOLJNIH TALASNIH OBLIKA
E N D
MIKROPROCESORSKI SISTEMISEMINARSKI RAD FUNKCISKI GENERATOR PROIZVOLJNIH TALASNIH OBLIKA REALIZOVAN POMOĆU MIKROKONTROLERA I D-LATCH-a Kandidati: Bošković Milan br. 11042 Petrović Aleksandar br. 10323
UVOD • FUNKCISKI GENERATOR PROIZVOLJNIH TALASNIH OBLIKA • D- leč sa D/A konvertorom realizovanim sa 2R-R vezom • Opis i analiza mikrokontrolera AT 89S8253 • Asembler • Programiranje programatorom MEC UNP2
FUNKCISKI GENERATOR PROIZVOLJNIH TALASNIH OBLIKA • BLOK DIJAGRAM FUNCISKOG GENERATORA PROIZVOLJNIH TALASNIH OBLIKA:
2. D- leč sa D/A konvertorom realizovanim sa 2R-R vezom • Speifikacija leča TC74HC373 : • Najveca brzina................................... • Režim smanjenje potrošnje:............... • Osetljivost na buku:........................... • Simetrična izlazna inpedansa:.............. • Izlazna kapacitivnost:........................ • Ujednačeno propagaciono kašnjenje..... • Široki opseg operativnog napona.......... • Pinovi i funcionalna kompatibilnost odgovaraju 74LS7373/533
2. D- leč sa D/A konvertorom realizovanim sa 2R-R vezom • TIP KUČIŠTA: DIP 20PIN
2. D- leč sa D/A konvertorom realizovanim sa 2R-R vezom RASPORED PINOVA: Sistemski dijagram D-leča:
2.1 D/A konvertor realozovan mrežom 2R-R : • Digitalno-analogna konverzija je ustvari pretvaranje binarno zapisane brojne vrednosti sa n bita: u analogni napon čija je vrednost Va u voltima proporcionalno digitalnoj vrednosti Dn:
2.1 D/A konvertor realozovan mrežom 2R-R : • D/A konvertori se prave sabiranjem struja tako da su doprinosi svake struje srazmerni težini binarnih cifara zapisane digitalne vrednosti
2.1 D/A konvertor realizovan mrežom 2R-R : • Lestvičasta otporna mreža sa n bita:
3. Opis i analiza mikrokontrolera AT 89S8253 • - Kompatibilan je sa Microsoft-51 procesorom • - 12KB fleš memorija • - SPI serijski unos za učitavanje programa • - 10 000 ciklusa upis/brisanje • - 2KB EEPROM memorija • - 100 000 ciklusa upis/brisanje (64-bajtna korisnička matrica) • - Napon napajanja od 2.7V do 5.5 V • - Frekvencija od 0 do 24 MHz • - Memorijsko zaključavanje u 3 nivoa • - 256 x 8-bitni unutrašnji RAM • - 32 I/O linije za programiranje • - Tri 16-bitna Tajmer/Brojač • - 9 generatora prekida • - Poboljšani UART serijski port sa centriranjem detekcije greške i automatskim prepoznavanjem adrese • - Male snage napajanja • - Uspostavljanje prekida u niskom režimu rada • - Programabilni tajmeri • - Dvostruki pokazivač podataka • - Isključivanje pomoću znaka (Power-off Flag) • - Fleksibilni ISP programator (byte i page modovi) • - Page mode: 64 byte/page za kodnu memoriju, 32 byte/page za memoriju podataka • - 4-nivo poboljšani kontrolor prekida • - Programabilna x2 clock opcije • - Unutrašnji Power-on Reset • - 42-pin PDIP model kućišta za redukovanje EMS emisije • - Zeleni (Pb/Holide-free) opcija kućišta
3. Opis i analiza mikrokontrolera AT 89S8253 • Blok dijagram AT89S53 jezgra:
3. Opis i analiza mikrokontrolera AT 89S8253 • Detaljnastrukturamikrokontrolera AT89S53:
3. Opis i analiza mikrokontrolera AT 89S8253 • Opis pinova:
4. Asembler • Asembler smo simulirali i kompajlirali u Keil uVision 3 kompajleru. Na osnovu asemblera napisanog u Keil-u generisali smo heksadecimalni fajl koji smo kasnije koristili za programiranje našeg mikrokontrolera pomoću univerzalnog programatora, koga će mo opisati malo kasnije. • Da bi konfigurisali Tajmer/Brojač 2 kao generator takta, bit (T2CON.1) mora biti obrisan i bit T2OE (T2MOD.1) mora biti postavljen. Frekvencija izlaznog takta se računa po obrascu
4. Asembler • Name DAC • Program segment code • // Definisali smo konstante koje kasnije koristimo za programiranje sekvenci (komande koje zadajemo) • uspon equ 1 • mirno equ 2 • dole equ 3 • nanulu equ 4 • pocetak equ 5 • settimer equ 6 • cseg at 002BH // Naredba se pozicionira na toj memorijskoj lokaciji (lokacija na koju se postavlja registar programskog brojača kad se javi prekid Tajmera 2), memorijska lokacija koja se odnosi na fleš memoriju • jmp Timer_2 • Potprogram koji definiše prekide kod tajmera 2 • Timer_2: CLR TF2 // briše marker za prekid
4. Asembler • Generisanje signala za LE kod D-leča • SETB P2.0 // Postavlja bit0 na portu P2.0 • CLR P2.0 // Odmah se zatim briše bit0 na portu P2.0 • Dekrementira i skače ako nije R2=0 (R2 je pomoćni registar i on odbrojava dužinu sekvence) • DJNZ R2,S0 // Registar R2 određuje dužinu trajanja deonice u okviru zadate sekvence • Ako je kraj sekvence (R2=0) pozivamo potprogram nova_deonica • CALL NOVA_DEONICA // Kada je R2=0 poziva se čitanje nove deonice • RETI // Povratak iz prekida • Nešto nalik case strukturi (u odnosu na R1) kojom se određuje koja je deonica trenutno aktivirana • S0: CJNE R1,#USPON, S1 // Skoči ako nije jednako • CALL PP1 // Ako jeste izvrši PP1 (potprogram) • S1: CJNE R1,#MIRNO, S2 • CALL PP2 • S2: CJNE R1,#DOLE, S3 • CALL PP3 • S3: CJNE R1,#NANULU, S4 • CALL PP4 • S4: CJNE R1,#POCETAK, S5 • CALL PP5 • S5: CJNE R1,#SETTIMER RET_I • CALL SET_TIMER • RET_I: RETI // Završavamo case strukturu i vraćamo se iz prekida • Posle ispitivanja R1 registra izvršava se neki od sledećih potprograma • PP1: INC P1 // PP1 rastući • RET • PP2: RET // PP2 mirno • PP3: DEC P1 // PP3 opadajući • RET • Dodeljuje portu P1 nulu, vraća ga na nulu • PP4: MOV P1,#0 // PP4 vrati na 0 • MOV R2,#1 • RET • Pošto R0 registar koristimo kao indeksni registar u PP5 vraćamo na početnu lokaciju u memoriju u koju je upisana sekvenca koja se izvršava • PP5: MOV R0,#020H // PP5 na sekvenca od početka • MOV R2,#1 • RET
4. Asembler • Potprogram kojim podešavamo trajanje Tajmera 2 tako što u capture registrima upisujemo vrednost od koje Tajmer 2 broji (to smo izračunali iz jednačine gore) • Podešavanje Tajmera 2 • SET_TIMER: MOV RCAP2H,@R0 // Iz memorijske lokacije na koju ukazuje registar R0 (indirektno adresiranje) • INC R0 // Pređi na sledeću memorijsku lokaciju • MOV RCAP2L,@R0 • INC R0 • MOV R2,#1 • RET // Vrati se iz potprograma • Potprogram koji iščitava podatke o nova_deonica (šta treba sledeće da uradi) • nova_deonica: MOV A,@R0 // Isčitavanje parametara za novu deonicu • MOV R1,A // R1 dobija vrednost iz memorijske lokacije R0 • U registru R1 se smešta kod stanja sekvence tj. da li je uspon, mirno, opada, vraća na nulu, vrati na početak sekvence ili podesi trajanje Tajmera 2 • INC R0 // Registar R0 služi kao indeksni registatr za čitanje zadate sekvence iz RAM-a • Ako je u R1 upisano uspon, mirno ili opada tada treba da se pročita još jedan parametar koji odrežđuje trajanje trajanje stanja, zato služi sledeća case struktura kojom se ispituje da li je u R1 upisano jedno od ovih tri stanja, ako jeste onda se vrši čitanje parametara u sledeće memorijske lokacije, ako nije završava se potprogram • CJNE R1,#USPON , SD1 // Struktura kojom ispitujemo da li je potrebno isčitati drugi parametar • JMP READ_SP // Ako je sekvenca uspon, mirno, dole onda je potrebno pročitati drugi parametar • SD1: CJNE R1,#MIRNO, SD2 • JMP READ_SP • SD2: CJNE R1,#DOLE, RET_ND // Ako nije jedna od tri gore navedene sekvence onda nema drugog parametra pa treba preskočiti njegovo čitanje • READ_SP: MOV A,@R0 • MOV R2,A • INC R0 • RET_ND: RET • Sledeći potprogram služi za unošenje sekvence • START_V: MOV R0,#020h // U R0 se smešta početna lokacija na kojoj se u RAM-u smešta sekvenca • MOV R2,#1 // U R2 se nalazi brojač u ovom slučaju treba da se izrši samo jedna prekidna rutina
4. Asembler • Programiranje sekvence koja se izvršava • MOV @R0,#SETTIMER // Postavimo vrednost Tajmera • INC R0 // Pređi na sledeću mem lokaciju • MOV @R0,#0FFH // Prvi parametar za viši registar Tajmera 2 • INC R0 // Pređi na sledeću mem lokaciju • MOV @R0,#0F0H // Drugi parametar za niži registar Tajmera 2 • INC R0 • MOV @R0,#USPON • INC R0 • MOV @R0,#15 // Uspon traje 15 vremenskih intervala INC R0 • mov @R0,#MIRNO • INC R0 • MOV @R0,#10 // Mirno traje 10 vremenskih intervala • INC R0 • MOV @R0,#DOLE • INC R0 • MOV @R0,#12 • INC R0 • MOV @R0,#NANULU // Traje jedan vremenski interval • INC R0 • MOV @R0,#pocetak • MOV R0,#020H • RET • Potprogram za inicijalizaciju Tajmera 2, upisujemo početne vrednosti u registre Tajmera 2 • Init_timer: MOV TH2,#0FEH • MOV TL2,#0EBH • MOV RCAP2H,#0FEH • MOV RCAP2L,#0EBH • SETB ET2 // Omogućava prekide Tajmera 2 • SETB eEA // Omogućava sve prekide • SETB TR2 // Start brojača Tajmera 2 • RET • RSEG PROGRAM // segment glavnog programa startuje od nulte memorijske lokacije u memoriji za program (fleš memoriju)
4. Asembler • U glavnom programu inicajalizuje se Tajmer 2, postavljaju se početne vrednosti na portovima i upisuje se u RAM memoriju sekvence (poziva se potprogram koji upisuje sekvencu u RAM memoriju), zatim ulazi u beskonačnu petlju i čeka prekid Tajmera 2. • MAIN: CALL INIT_TIMER • CLR P2.0 // Brisanje bita 0 porta P2 • MOV P1,#0 // Postavi port P1 u 00000000 • CALL START_V // Programiranje sekvencu • JMP $ // Vrti se u beskonačnu petlju • END
4. Programiranje programatorom MEC UNP2 • Generalni opis UNP2 : • Mali, mocni i brzi univerzalni programator. • DIL40 ZIF adapter ,uređaji u DIL paketu do 40 pina su podržani bez adaptera. • Konekcija sa PC paralelni port . • Visoko brzinski IEEE 1284 izlazni port sa brzinom od 1Mb/s . • Lak za korišcenje u DOC i Windows 95/98/Me/NT/200/XP • Adapter za napajanje i softver su sastavni delovi paketa.
4. Programiranje programatorom MEC UNP2 • To je uređaj koji služi za programiranje ražličitih tipova čipova ,tako što već gotov heksadecimalni fajl koji smo dobili u keil-u (asembler) učitava u čip.
4. Programiranje programatorom MEC UNP2 • Početni korisnički ekran izgleda ovako: