Enchipsdatorer med tillämpningar LABORATION 7, ROBOT Laborationsansvariga: Anders Arvidsson Utskriftsdatum: 2005-05-14 Laboranter:
1 Syfte Denna laboration syftar till att introducera interrupt och watchdog i PIC-processorern. Även processorn PIC16F877 kommer att presenteras. (877:an ingår inte i tentan, men många delar gemensamma med 84:an). Efter laborationen förväntas studenten bl a kunna konfigurera interrupt för att åstadkomma en exakt timing. Förutom de nya momenten som nämnts ovan ska laborationen ge studenten möjlighet att ganska fritt öva olika moment. Försök därför välja en lösning där sådant du tycker är besvärligt och vill öva mer på ingår. På tentamen förväntas du kunna skriva små program för båda processorena och använda de flesta tekniker om gåtts igenom i kursen. Laborationen ger också möjlighet att t ex testa att använda EEPROM dataminne för att spela in ett rörelseschema (avancerad uppgift ). Till tentan förväntas studenten kunna använda samtliga delar av 84:an och 705:an m h a datablad vilka bifogas som hjälpmedel. Repetera gärna 705:an genom att t ex lägga till en funktion i en tidigare lab. Då detta är sista laborationen testas studentens förmåga att lösa ett praktiskt problem med enchipsdatorn. Förutom en del restriktioner får studenten fritt strukturera uppgiften och välja lösning. 2 Genomförande Hela laborationen utförs i MPLAB. Datablad mm finns på kursens hemsida. Laborationen är uppbyggd som en mindre projektuppgift där lösning kan väljas ganska fritt, förutsatt att vissa grundkriterier uppfylls. Det är ytterst lämpligt att åtminstone ha ritat schema för maskinvaran och flödesschema för programvaran före laborationstillfället. Kopplingen byggs på labdäck GL-24 eller de röda kopplingsdäcken. Till roboten ansluts endast logiksignalerna till servona (M1 M4) och jord. Roboten drivs med en egen transformator så +5V i kopplingsplinten på roboten är en utgång! Denna ska ej användas! Redovisning sker genom att laboranten visar upp resultatet för laborationsansvarig. Koderna sparas i filer med namnen lab7_namn1_namn2.705 respektive lab7_namn1_namn2.asm. Skriv även fullständiga namn i filerna. Filerna kopieras till laborationsansvariges diskett vid redovisning. Om laborationen inte godkänns senast veckan efter tentaveckan lämnar gruppen istället in en skriftlig rapport med koder och kommentarer enligt labrapportmall. Det ska även finnas text som beskriver uppgift och tankegång, samt ett schema som besktiver kopplingen. Koderna (med namn enligt ovan) ska även skickas till laborationsansvarig med e-post. 2
3 PIC16F877 877:an innehåller allt som finns i F84an, men utöver det också en mängd andra periferienheter och register. Det man behöver tänka på när man lägger in kod och funktioner från 84:an i 877:n är främst att register och dataminne kan ligga på andra adresser. RAM är också fördelat på flera banker så bankbitarna måste vara rätt satta när man accessar en variabel. Dessutom måste A/Domvandlaren konfigureras även om PORTA ska användas som en digital port. 3.1 Databladet Plocka fram databladet för 877:an, antingen i pärmen eller på kursens hemsida. Skumma igenom första sidan så du får en grov uppfattning om processorn. Studera även blockschemat ca sex sidor längre bak. (Observera att det finns ett schema även för andra varianter.) Hur mycket programminne, dataminne och EEPROM har 877:an? Ögna igenom beskrivningen av pinnarna och bläddra vidare till Data Memory Orgaisation. Läs på om bankbitarna och studera sedan Register File Map. På vilken adress börjar dataminnet (GPR)? 3.2 Exempelprogram På kurshemsidan finns ett exempelprogram för 877an. Spara detta i en lämplig mapp och skapa ett nytt projekt i MPLAB. Testa att programmet går kompilera. Studera sedan beskrivningen längst upp i koden så du ser vad programmet gör. Kolla också igenom koden så du ser hur uppgiften är implementerad. Vad programmet har för praktisk funktion blir tydligare i nästa avsnitt. Tanken är att programmet ska vara så skrivet att du inte behöver kunna mycket om 877:an för att t ex kunna använda A/D-omvandlarrutinen i ett helt annat sammanhang. Vid programmering av chippet används nedanstående inställningar. 3
4 Robot LABORATION 7, Robot En robotarm ska styras med hjälp av pulser till ett servo. Pulserna ska genereras med 20 ms mellanrum och vara 1 2 ms långa. Se i bilagan hur detta påverkar respektive robotarms läge. En operatör ska med två joystickar kunna styra robotarmen till önskat läge och t ex kunna flytta ett mindre föremål mellan olika platser. (Varje joystick innehåller två potentiometrar.) 4.1 Konstruktionsbeskrivning Att skapa pulser med varierande varaktighet med jämna mellanrum kan vara ganska bevärligt i en processor med bara en timer. 84:an ska därför kompletteras med en 877:a som läser in och behandlar information om robotarmens position, samt genererar periodtiderna. Var 5:e ms skickar denna processor information om respektive robotarmens önskade läge till PIC-processorn, som genererar en puls till rätt servo med lämplig längd. Varje servo kommer alltså pulsas var 20:e ms. 4.1.1 Kriterier Användargränssnittet består av joystick, potentiometer eller knappar. PIC-processorn ska generera servopulsen (1-2 ms) i en interruptrutin som aktiveras av 877:an. PIC-processorn använder alltså extern pinne som interruptkälla. Watchdog (i PIC) ska vara aktiv och får inte resettas av interruptrutinen. Robotarmens läge ska kunna bestämmas med en upplösning av minst 80 steg. 877:an ska ges någon ny funktion jämfört med exempelprogrammet, t ex en lysdiod som visar när en A/D-ingång passerat ett visst värde, men testa gärna något mer. Tillägg och ändringar ska beskrivas i programkoden på avsedd plats. 4.1.2 Konstruktionstips Då 84:an har lite begränsat med I/O kan 7 bitar räcka för att föra över positionen från 877:an. Man kan även låta 877:an räkna om värdet före överföring till något som passar 84:ans timer. Tänk på att 877:an har dubbla Vdd/Vss. Avkoppla dessa med 100 nf och dubbelkolla att processorn inte sätts i ett steg fel! Blockera raderna i däcket ovan och under processorn så går den inte sätta fel. Glöm inte att konfigurera om TRIS-registren om du behöver några fler ingångar på 877:an. 4.2 Genomförande Bestäm vilka funktioner din robot ska ha och rita ett schema med de komponenter som kommer att krävas. Framförallt sammankopplingen av processorerna måste vara med. Rita ett flödesschema eller motsvarande för varje processor innan kodning sker. Efter simulering ska pulsen verifieras med oscilloskop innan robotarmen styrs, då servot som driver robotarmen kan ta skada av alltför felaktiga styrsignaler. Bygg programmen så att du kan testa så mycket som möjligt individuellt, annars blir avlusningen mycket besvärlig. En potentiometer kan anslutas som spänningsdelare i däcket för att testa A/D-omvandlingen innan joysticken ansluts. 84:an kan börja med att endast ta hand om kanal 0 och styra ett servo (var 20:e ms). 4
5 Bilaga 5
6