Systemkonstruktion SERIEKOMMUNIKATION Laborationsansvariga: Anders Arvidsson Utskriftsdatum: 2005-04-26
Syfte Laborationen syftar till att ge studenten tillfälle att närmare bekanta sig med RS-232-protokollet, samtidigt som C-programmering och metoder för strukturerad konstruktion övas. Under laborationen demonstreras några C-funktioner för A/D-omvandling och kommunikation, vilka med stor sannolikhet kommer att kunna återanvändas senare och då spara mer tid än laborationen tog. Genomförande Laborationen genomförs i grupper om 2-3 studenter. Ett par grupper kan dock dela på samma uppkoppling, i vilken endast processorn byts. Utdelade föreläsningsanteckningar bör finnas till hands. Redovisning Redovisning sker genom uppvisande av resultat för laborationsansvarig, som kontrollerar att laboranten inte missuppfattat alltför mycket av väsentlig karaktär. Koden från sista uppgiften skickas med e-post till labsansvarig. Anteckna gärna i ditt eget PM även om laborationen utförs i större grupp. Då laborationen är nyutvecklad mottas synpunkter extra tacksamt (även på små detaljer). 2
1 Serieport Laborationen kommer att byggas upp successivt, med början vid undersökning av datorns serieport. Uppgifterna nedan är tänkta att ge en förståelse för hur serieporten fungerar. 1.1 Utrustning Oscilloskop, kopplingsdäck, 9-polig D-SUB, dator, lämplig teckentabell (se ELFA). 1.2 Tillvägagångssätt Löd tre kablar (för kopplingsdäck) på D-SUB-kontaktens stift för data och signaljord (tre stift). Anslut Tx-signalen till ett oscilloskop, lämpligen via ett kopplingsdäck. Ställ in oscilloskopet med lämplig tidbas så att ungefär 15 bitar kommer att synas över hela oscilloskopskärmen. Om 19200 bitar överförs per sekund, hur lång är då varje bit? Starta HyperTerminal och öppna en anslutning enligt nedan. Skicka ett K och trigga oscilloskopet på den startbiten, Med lämpligt konfigurerad trigger behålls senaste tecken. Nu kan tidbasen användas för att zooma i svepet och varje bit undersökas i detalj. Identifiera start-, stopp-, paritets- samt databitar. Skicka gärna olika tecken för att kontrollera att du tolkar bitströmmen rätt. Dokumentera och förklara de olika delarna i bitströmmen. 3
Vilken spänningsnivå motsvarar 1 resp. 0? Nedan kan ett tecken skisseras. Laboration Seriekommunikation Spänning per ruta: Tid per ruta: Justera anslutningen för udda paritet. Hur förändras bitströmmen? Vad innebär udda paritet? Skicka ett vagnretur ( Enter ). Vad skickas? (Decimalt.) Vill du skicka flera tecken i en följd använder du Skicka textfil, vilket fungerar oavsett vilken typ av fil du skickar. (Skillnaden mot Skicka fil är att ingen paketering görs, utan hela filen skickas till porten precis som den ser ut.) 4
2 Nivåkonvertering För att kunna kommunicera med mikroprocessorer måste signalerna konverteras till normala logiknivåer och vice versa. Detta saker med hjälp av en MAX202 som innehåller spänningsdubblare för att kunna lämna ut ±10 V med endast 5 volt matning. Lämna plats för processorkopplingen nedan och koppla upp MAX-kretsen enligt schemat i ELFA och kontrollera spänningsdubblarens funktion genom att mäta på pinne 2 och 6. Anslut två lämpliga nivåkonverterare i MAX-kretsen (rätt sida) till PC:n, men lägg 1 kω motstånd i serie med Rx respektive Tx som extra säkerhet. För att kommande analoga mätningar ska fungera bra bör alla jord och matningsledningar dras till samma list och avkopplas med 0,47-1 µf. 3 PC-multimeter Genom att studera en liknande applikation med många användbara rutiner kommer det gå snabbt att bygga en PC-multimeter. Hämta filen Demo_rs.c och öppna den i ett nytt projekt i MPLAB. Välj PIC16F877 som processor. 3.1 Test av maskinvaran Koppla upp en PIC16F877, klockad med 4 MHz, på däcket. Anslut UART:ens Rx och Tx till lämpliga pinnar på MAX-kretsen, men lägg ett 1 kω motstånd i serie med processorns pinnar. Koppla in tre lysdioder (med lämpliga seriemotstånd) till pinnar som beskrivs i programmets kommentarer. Anslut en 10 kω potentiometer som spänningsdelare till RA0. Glöm inte att ansluta MCLR. Kompilera programmet och programmera processorn konfigurerad enligt nedan. Nu bör du få upp instruktioner från PIC:en i HyperTerminal. Efter instruktionerna kommer allt du skriver ekas tillbaks till terminalen. Om detta inte fungerar; testa att skicka ett g. Den gröna dioden ska då tändas 2 s för att visa att kommunikationen PC -> PIC fungerar. (Dioden tänds även 0,1 s vid varje mottagen byte.) Testa att A/D-omvandling fungerar genom att vrida på potentiometern. Gul och röd diod ska tändas när vissa nivåer passeras (se programkoden). 5
3.2 Kravanalys Första steget mot PC-multimetern är att bestämma vad den ska ha för funktioner och prestanda. Kravet i laborationen är att dess arbetssätt på något sätt går styra från terminalen och att den uppmätta spänningen visas i klartext. Multimetern kan t ex skicka mätdata på angivna intervaller eller vid förändring på ingången. Den kan även utökas med fler kanaler man kan välja bland. Ett krav är att konstruktionen är enkel att felsöka (t ex om orimliga värden börjar visas i terminalen.) Skriv en kravspecifikation och diskutera sedan denna med labhandledaren. Specifikationen ska visa exakt hur multimetern fungerar och vilka prestanda den har (t ex hur många värdesiffror som skrivs ut, och hur de formateras.) 3.3 Design Studera exempelkoden lite snabbt så du får en uppfattning om vad som kan återanvändas. Troligen kan du även använda delar från tidigare laborationer, t ex delar av BinBCD() som kan användas för att omvandla ett tal till ASCII. 3.3.1 Designspecifikation Skriv en designspecifikation som talar om exakt vilka funktioner som ska finnas och vad dessa ska göra. (För att spara tid i ett senare skede kan du skriva tomma funktioner i MPLAB.) Rita även en skiss för huvudprogrammet och illustrera hur funktionerna hänger ihop. Samtliga globala variabler och funktioners argument (gränssnitt) ska också beskrivas. 3.3.2 Testspecifikation Beskriv kort hur konstruktionen kan testas del för del. Hur kan A/D-funktionen verifieras utan terminal? Hur kan kommunikationen verifieras utan A/D-rutin? Om du har glömt något i kravspecifikationen för att möjliggöra detta, börja då om där. Kontrollera även att resterande krav kommer att uppfyllas med den skrivna designspecifikationen och visa sedan specifikationen för labhandledaren. 3.3.3 Kodning Fyll på funktionerna med det som fattas. Separera hårdvarumanipulerande kod och flyttbar kod enligt exempelprogrammet. 3.4 Verifiering Testa din multimeter, kontrollera att allt fungerar enligt kravspecifikationen och visa resultatet för laborationsansvarig. 6