AVR-LAB 07 Echo: Seriell I/O side 1 av 5 Hensikt I denne øvelsen benytter vi RS-232 overføring av data mellom STK-200 og vår PC. Programmet Terminalprogrammet på CodevisionAVR benyttes på PC. Karakterer som sendes til kitet legges ut på lysdiodeporten og sendes tilbake (ECHO) til vår PC. Litteratur I denne øvelsen trenger du noen sider fra databladet for 8535 Vi kaller dette databladet for hardware manual 8535 Databladet finnes i PDF format på Internett Les gjennom hele oppgaven før du programmerer. Kabler I øvelsen trenger vi en RS-232 kabel (9 pinns) fra PC COM1 port til STK-200 kit RS-232 konnektor. Dette er en vanlig RS232-kabel - ikke krysskoplet. PortD Vi har tidligere benyttet trykk-knappene inn til PortD Når vi benytter serieporten vil denne benytte: PortD bit 0 RXD data inn fra PC PortD bit 1 TXD data inn til PC Egentlig bør vi derfor fjerne de to strappene men det holder at vi ikke trykker på trykk-knapp 0 eller 1. ASCII kode I denne øvelsen vil vi sende vanlige ASCII karakterer fra programmet CodevisionAVR. En ASCII kodetabell er grei å ha for å se hva vi sender (kopi legges ut til lysdiodene) Oppkopling Kople til STK-200 som vanlig med programmeringskabel og kraftforsyning. Kople så inn modemkabelen mellom serieporten COM1 på PC og den tilsvarende serieport på STK-200 kitet. Ikke sett på spenning til kitet under dette. Assemblering og nedlasting Skriv inn programmet på neste side. Kall det A007 De programmene du lager skal legges i avrtools\work Assembler det og kontroller at det ikke er feil Start nedlasteprogammet og hent inn hex-filen. Slå på spenningen til kitet og last inn programmet. Bruk Program Verify Device for å se at alt er i orden. CodevisionAVR Start CodevisionAVR Velg Settings Terminal og sett opp kommunikasjonsparametrene som figur 1 viser
AVR-LAB 07 Echo: Seriell I/O side 2 av 5 Port: COM1 dette må tilsvare den port bak på din PC der seriekabelen er plassert. Baudrate: 19200 er den raskeste vi kan benytte med STK200 kitet når vi har 4 Mhz krystallfrekvens. figur 1 Programmet I programmet står det noen steder??? Du må da slå opp i hardwaremanualen for 8535 - finne rett tall og sette det inn I kommentaren til programmet må du forklare hvorfor du valgte det tallet ;------------------------------------- ; et enkelt ECHO program ; karakterer som sendes fra PC ; vises på lysdioder og sendes tilbake ;-------------------------------------.include "8535def.inc".def temp = r16.org 0 rjmp reset.org 20 ;----------subrutiner------------------ putc: sbis usr,5 ; sjekk om datareg er tomt rjmp putc out udr,temp ; send data com temp out portb,temp ret getc: sbis usr,7 ; har det kommet inn en karakter?
AVR-LAB 07 Echo: Seriell I/O side 3 av 5 rjmp getc ; nei, test igjen in temp,udr ; ja, hent karakteren ret ;--------------hovedprogram------------- reset: ldi temp,low(ramend) ;sett stakkpeker out spl,temp ldi temp,high(ramend) out sph,temp ldi temp,0xff ; lysdiodeport utport out???,temp ldi temp,0xaa ; testdata til lysdioder out portb,temp init: ldi temp,??? ; aktiver receiver og transmitter out ucr,temp ; aktiver receiver og transmitter ldi temp,??? ; erstatt??? med rett tall fra ; baudrate tabellen out ubrr,temp ; 19200 baud 8 databits clr temp out udr,te mp ; send null loop: rcall getc ; hent karakter fra PC rcall putc ; send karakteren tilbake til PC rjmp loop ;-------------------end--------------------- Test av programmet Skriv "Dette er en test" og trykk return Teksten skal da være skrevet ut. Hvordan får du tatt linjeskift? (forklar), Trykk en A og se på lysdiodene 0100 0001 skal vises (Dette er ASCII koden for A) Trykke en a og se på lysdiodene 0110 0001 skal vises (Dette er ASCII koden for a) Programmet og oppsetting av I/O Gå gjennom denne delen av øvelsen før du starter progammeringen Forsikre deg om at du forstår alle detaljer Dersom det er noe du ikke forstår - noter spørsmålet til bruk i forelesningen Programmet inkluderer 8535def.inc og bruker R16 som temporær lagringsplass Data som kommer fra PC og skal til PC blir mellomlagret i temp (R16)
AVR-LAB 07 Echo: Seriell I/O side 4 av 5 Hovedprogrammet går etter initialisering i evig løkke der den først henter en karakter fra PC (getc) og så sender karakteren tilbake til PC (putc) Kopiering til lysdiodene skjer i subrutinen putc Ved oppstart hopper programmet til label reset: Der settes først stacken Så settes portb til utport (for lysdiodene) Deretter initialiserer vi mikrokontrolleren for seriell I/O Vi går her igjennom hvordan vi skal initialisere UART Merk at den skal kommunisere med PC gjennom en RS232-kabel U ART side 37-41 For å kunne programmere og benytte den innebygde seriekretsen (UART) må vi se på de I/O registrene som den benytter udr usr ucr ubrr uart data register udr benytter vi i putc subrutinen. Der legger vi data som skal til PC udr benytter vi også i getc subrutinen. Der henter vi data som er kommet fra PC Dette er egentlig to registre som har samme adresse i I/O området. (Beskrevet på side 62) uart status register Dette registeret inneholder blant annet følgende informasjon bit 7=1 når det er kommet inn en karakter til udr bit 5=1 når forrige karakter ser sendt ut fra udr og vi kan legge inn en ny karakter som skal til vår PC Vi bruker usr i både putc og getc (Beskrivelse på side 62) uart control register Dette er uart control register I vårt eksempel trenger vi bare bruke : bit 4=1 TXEN (TX enable) sending til PC kan utføres bit 3=1 RXEN (RX enable) data kan tas inn fra PC Dataordet vi legger ut på dette register er derfor 0001 1000 (0x18) (Beskrivelse side 63) Uart baud rate register Kommunikasjonsparametrene er: baudrate 19200 Dette må 8 bits data Dette er standard ingen paritet Dette er default et stoppbit Dette er default vi programmere (default) ikke tenk mer på det Tabell 26 forteller oss hvilket tall vi må legge inn i ubrr. Vi må bruke tabellen med 4 Myz krystallfrekvens og med baudrate som angitt i programmet. (tabell 26 er beskrevet på side 64)
AVR-LAB 07 Echo: Seriell I/O side 5 av 5 Word dokument med navn, dato program og kommentarer skal godkjennes av lab.ing.