KYBERNETIKKLABORATORIET FAG: Industriell IT DATO: 08.15 OPPG.NR.: LV3 LabVIEW seriekommunikasjon med mikrokontroller Oppgave Denne oppgaven går ut på å lage et LabVIEW-program som kan kommunisere med en mikrokontroller via serieporten. Mikrokontrolleren er koblet til 8 brytere på et treningsbrett se figuren over. Den er programmert slik at hver gang den mottar karakteren R, sender den tilbake en streng bestående av 3 karakterer. De første to karakterer er et to-sifret heksadesimalt tall tilsvarende verdien på knappene, se eksempelet på neste side. Siste karakter er karakteren for ny linje. Mikrokontrollerprogrammet er vist i appendiks Dere skal altså lage et LabVIEW-program som sender karakteren R, leser de to først karakterene i strengen som mottas fra mikrokontrolleren, konverterer denne heksadesimale verdien til et binært tall og skriver verdien til 8 lysdioder på skjermen. LV3 Seriekommunikasjon med mikrokontroller Side 1 av 5
Eksempel, kommunikasjon mellom LabVIEW og Mikrokontroller LabVIEW Mikrokontroller R 8 2 \n Mønsteret på knappene er Send R for Read Sender f.eks 8 Etterfulgt av 2 Stringen avsluttes med new line 1000 0010 = 0x82 Tips til løsning. Knappearray: På frontpanelet kan dere lage et knappearray slik : 1. Velg Controls / Modern / Array, Matrix & Clusters / Array 2. Velg deretter Controls / Modern / Boolean/ Round LED og plasser denne inn i Array-feltet. 3. Trekk arrayfeltet ut til det får 8 dioder. 4. Høyreklikk på feltet, velg Visible items og fjern avmerkingen for Index display Alle funksjonene kan også finnes vha. Search. VISA Vi velger å bruke VISA-driveren i LabVIEW. VISA står for Virtual Instrument Software Architecture og er et generalisert sett med styringskommandoer som kan brukes både mot GPIB instrument, mot VXI-instrument og porter på PCen. VISA-funksjonene finner dere i diagramdelen under Functions / Instrument IO / VISA. Vi foreslår at dere bruker disse VISA-funksjonene : VISA Open, VISA Write, VISA Read og VISA Close Konvertering, heksadesimal kode til bit-array For å plukke ut de to første karakterene av strengen på 3 karakterer som leses fra mikrokontrolleren, har LabVIEW funksjonen String Subset som dere finner under Programming / String. De to hexadesimale karakterene kan konverteres til et tall med Hexadecimal String to Number som dere finner under Programming / String / Number/String Conversion. Til sist må dette tallet konverteres til et bit-array for å vises på Knappearrayet. Dette kan gjøres med funksjonen Number to Boolean Array som dere finner under Programming/ Boolean LV3 Seriekommunikasjon med mikrokontroller Side 2 av 5
Eksempel på løsning. Diagram: Legg merke til at VISA resource name settes til den COM-porten som brukes i VISA Open og at dette føres videre til VISA Write, deretter videre til VISA Read og til slutt til VISA Close. VISA Open gir en status-utgang, error out, som kobles til error in på VISA Write. Dette status-signalet føres videre gjennom VISA Read til VISA Close. FRONTPANEL: Det kan være lurt å ha en visning av ev. feil i forbindelse med VISA-funksjonene. Dette gjøres enklest ved å høyre-klikke på Error-utgangen, velge Create og deretter Indicator. Her har vi bare vist dette for VISA Close, men spesielt under utviklingen av programmet kan det være lurt å ha en slik status-visning for alle VISA-funksjonene. LV3 Seriekommunikasjon med mikrokontroller Side 3 av 5
TIDSEFFEKTIVT PROGRAM : Programmet vist på forrige side viser en programsløyfe(while-loop). Hver gang sløyfen kjøres åpnes og lukkes kommunikasjonskanalen. I dette eksempelet er det ikke satt noe krav til hvor fort sløyfen skal gjennomløpes. Men dersom vi ønsker å skrive til og lese fra tidskritiske prosesser, kan vi flytte disse to funksjonene utenfor sløyfen: Du skal nå teste hvor mye tid vi sparer på å flytte disse to funksjonene utenfor sløyfen. Mål først tiden på det opprinnelige programmet. Mål så tiden når Visa Open og Visa Close står utenfor sløyfen. TIPS: Erstatt WHILE-løkken med en FOR-løkke (høyreklikk på rammen og velg replace). FORløkken kan for eksempel kjøres 100 ganger. Tiden dette tar kan eksempelvis måles ved bruk av funksjonen Get Date / Time in Seconds som vist nedenfor: Hvor lang tid brukte det opprinnelige programmet, med VISA Open og VISA Close inne i sløyfen? Hvor lang tid brukte programmet med VISA Open og VISA Close utenfor sløyfen? LV3 Seriekommunikasjon med mikrokontroller Side 4 av 5
APPENDIKS Mikrokontrollerprogrammet: /********************************************* Program for kommunikasjon med LabVIEW Forfatter : Georg Milvang Chip type : AT90S8515 Clock frequency : 4,000000 MHz *********************************************/ #include <90s8515.h> // Standard Input/Output functions #include <stdio.h> // Standard Input/Output functions #include <stdio.h> int tohex(int c) if (c<10)return c; else return (c+7); void main(void) int b,c; // Port B initialization DDRB=0xFF; // UART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // UART Receiver: On // UART Transmitter: On // UART Baud rate: 9600 UCR=0x18; UBRR=0x19; ACSR=0x80; while (1) c=getchar(); if(c=='r') c=~pinc; PORTB=~c; b=(c&0xf0)>>4; b=tohex(b); c=tohex(c&0xf); putchar(0x30+b); putchar(0x30+c); putchar('\n'); LV3 Seriekommunikasjon med mikrokontroller Side 5 av 5