Institutionen för Informationsteknologi Lunds Tekniska Högskola Projektarbete Nummerpresentatör Av: Henrik Hall Mattias Larsson Romani Nous 2001-01-15
Abstract For the unexperienced student, designing a digital device can be quite a challenge. During a number of weeks we designed our own Caller ID from scratch. The device is based on the Motorola 68008 micro processor. The rest of the hardware includes a display, memory, a real time clock, programmable logic, a few buttons, a UART and a DTMF transceiver. The UART is used for serial communication with a PC, and the DTMF transceiver is used for detecting signals from the public telephone system. The work started off with setting up goals and composing a requirement specification. By knowing what is expected of the device the suitable components were chosen. The next step was making a wiring diagram, followed by wrapping the pins. Most part of the work was done independently with a little help from the instructor. In this thesis we describe the design, the way of implementation and the debugging of both hardware and software. 2
Innehållsförteckning 1. Inledning... 4 2. Funktionalitet och arbetsgång... 4 2.1 Funktionalitet... 4 2.2 Arbetets gång... 4 3. Hårdvara... 5 4. Mjukvara... 6 4.1 Mjukvara i nummerpresentatör... 7 4.2 Mjukvara på PC... 7 5. Resultat... 8 6. Referenser... 9 Appendix A - Kravspecifikation... 10 Appendix B - Kretsschema... 11 3
1. Inledning Efter många års studier vid LTH, där flertalet kurser behandlar teoretiska ämnen, kan det vara skönt med en praktisk kurs. Kursen Digitala projekt är just en sådan kurs, där man bygger en digital pryl från grunden till en färdig prototyp. Kursen är extra intressant eftersom den spänner över många områden - datorteknik, digitalteknik, elektronik, mjukvara, kommunikation mfl - dvs man får använda sina surt förvärvade kunskaper från tidigare kurser på ett kreativt sätt. Vid kursens start får man antingen, ur en lista med olika förslag, välja en pryl att bygga eller också komma med ett eget förslag. Arbetet drivs till största delen självständigt med lite hjälp från handledaren. Vi är ett gäng på tre grabbar som valt att bygga en avancerad nummerpresantatör. I denna rapport avser vi att beskriva själva konstruktionen hos nummerpresentatören samt vårt tillvägagångssätt från en hög komponenter och sladdar till färdig prototyp. 2. Funktionalitet och arbetsgång 2.1 Funktionalitet Nummerpresentatören har de vanliga funktionerna som brukar ingå i en traditionell nummerpresentatör, t ex att kunna lagra 30 inkomna samtal tillsammans med datum och klockslag, och det går med hjälp av knappar att bläddra i listan av telefonnummer och radera ett eller alla telefonnummer. Men utöver dessa standardfunktioner finns också ett antal mer avancerade finesser. T ex kan nummerpresentatören, via en serielkabel, kopplas till en PC på vilken man kan lägga upp telefonbok. Telefonboken laddas ner till nummerpresentatören och när sedan någon ringer som finns med i telefonboken kommer telefonnumret att mappas till ett namn som tillsammans med telefonnummer, tid och datum visas på displayen. På PC:n finns också möjlighet att lägga upp en lista med nummer som man vill svartlista. Då någon som finns med i denna lista ringer stängs telefonen av så att den ej ringer. Ett önskemål kan också vara att det bara är vissa nummer som får ringa under vissa tider, förslagsvis nattetid. Dessa nummer lagras i en vit lista. 2.2 Arbetets gång Vi har haft 7 veckor till vårt förfogande för att bygga nummerpresentatören. Till en början kändes arbetet överväldigande och man visste inte från vilket håll man skulle angripa problemet. Första anhalten bestod i att formulera kravspecifikationen (se appendix A). Då denna var klar var det dags att bestämma vilka komponenter som behövdes. Därefter ritades ett kretsschema med hjälp av datorprogrammet PADS PowerLogic (se appendix B). Detta schema låg till grund för själva konstruktionsarbetet, som mestadels bestod av virning och lödning på ett virkort. Då hårdvarukomponenterna fåtts att fungera tillsammans på ett bra sätt och testats ingående påbörjades arbetet med mjukvaran. Till vår stora hjälp hade vi då en emulator som bla gjorde att vi slapp bränna om EPROM varje gång vi ändrade i vårt program, istället laddade vi bara ner koden till emulatorn. Dessutom fanns funktioner för 4
debugging, tex möjlighet att sätta brytpunkter under exekvering av vårt program. Utan denna hjälp hade arbetet med utveckling och felsökning av mjukvaran blivit enormt mycket mer tidskrävande, och absolut inte rymts inom ramarna för denna kurs. För att kunna arbeta lite parallellt med både mjukvara och hårdvara byggde vi hårdvaran för de grundläggande funktionerna klar först, och fick mjukvaran till dessa att fungera. Därefter byggde vi på hårdvaran samt tillhörande mjukvara i moduler. 3. Hårdvara Följande huvudkomponenter användes: Processor: MC68008 Då vi påbörjade vår konstruktion ställdes vi att välja om vi ville basera vår konstruktion på Motorolas processor MC68008 eller enchipsdatorn 68HC11. Då vi ansåg oss behöva mer minne än vad HC11:an kunde ge oss valde vi MC68008 som har större möjligheter för utbyggnad. Detta innebar att vi behövde ganska många separata kretsar, något vi inte behövt med HC11. Dock anser vi i efterhand att det var värt det extra besväret att använda 68008, eftersom vi därigenom mer ingående lärde oss samverkan mellan olika kretsar, kontrollsignaler osv. Minne: 16 kb EPROM samt 32 kb SRAM. I SRAM lagras bla inkommande samtal, telefonbok, svartlista och vitlista. I EPROM lagras själva programkoden. Klocka: MM58274CN. Interruptstyrd realtidsklocka som används för att hålla koll på datum och tid, då vi vill lagra dessa vid inkommande samtal samt visa klocka då presentatören ej används. UART: MX68C681-PC. Används för kommunikationen mot PC. En seriell kabel ansluts med 9-polig DSUB via en MAX233 spänningskonverterare till UART:en. Kretsen är interruptstyrd. DTMF-transceiver: MT8880AE. Interruptstyrd krets som avkodar analoga signaler från telenätet samt sänder sådana till telenätet. Anslutningen till telenätet sker via RJ19- kontakter. Display: Sharp 4x20 tecken. På denna visas allsköns information såsom samtalslista, datum och tid mm. Relä: AX121A-4. Denna komponent använder vi för att kunna bryta spänningen till telefonen så att den ej ringer. In/ut-matning: Fyra knappar samt 2 lysdioder användes för detta. Dessutom användes naturligtvis diverse komponenter för kontrollsignaler. Vi använder oss av en gemensam databuss samt en gemensam adressbuss vilket kräver logik för t.ex. 5
chip select och output enable för att avgöra vem som får tillgång till databussen osv. Denna logik samt logik för avbrottsstyrning implementerades i ett antal PAL-kretsar. Eftersom vår DTMF-avkodare och display är synkrona krävdes extra logik för att få dessa att fungera tillfredsställande tillsammans med det övriga systemet som är asynkront. En färdig lösning på detta problem fanns i manualen till processorn och kopierades rakt av. För in- och utmatning användes D-vippor. För att kunna kontrollera om ett samtal besvarats samt om det ringer använde vi två optokopplare som kopplades till telenätet samt två JK-vippor. Anledningen till att vi vill kunna avgöra om det ringer är att vi bryter telefonen då ett svartlistat nummer försöker ringa. Vi måste då veta när det slutat ringa så att vi kan aktivera telefonen igen. Detta görs genom att optokopplaren nollställer JK-vippan då det ringer, och med jämna mellanrum kontrolleras om vippan är nollställd. Är den det ettställs den. Är den fortfarande ettställd nästa gång man kontrollerar den så har det slutat ringa och reläet kan aktivera telefonen på nytt. Lurlyft kontrolleras på motsvarande sätt. Fig 1. Hårdvaran 4. Mjukvara Mjukvaran består av två delar, dels den som körs i själva nummerpresentatören, dels programmet på PC för överföring av telefonbok osv. 6
4.1 Mjukvara i nummerpresentatör Denna är skriven i ANSI C med vissa tillägg i assembler och är till stor del baserad på avbrott. Mycket styrs av realtidsklockan som programmeras att ge avbrott 10 gånger i sekunden. Då kollas knapptryckningar, display och lysdioder uppdateras osv. Dessutom ges avbrott från DTMF-avkodaren då denna tar emot signaler från telenätet samt från UART:en då denna vill utföra kommunikation mot en PC. Klockan och DTMF-kretsen delar på avbrott 5, medan UART:en använder sig av avbrottsnivå 2. Förutom rutiner för att kunna bläddra i listan av samtal och liknande finns även funktioner för att ställa datum och tid med hjälp av knapparna. Målet var att nummerpresentatören skall kunna användas som en traditionell sådan självständigt utan att kopplas till en PC så länge man ej önskar använda specialfunktionerna. Fig 2. Nummerpresentatören igång. 4.2 Mjukvara på PC Denna valde vi att skriva i Visual Basic, pga dess enkelhet att skapa ett snyggt användarvänligt program. Rutiner för seriekommunikationen fanns färdiga vilket ytterligare underlättade. I detta program kan man lägga till samt ta bort nummer och namn i telefonboken, lägga till samt ta bort nummer i svartlistan eller vitlistan samt ladda upp dessa data till nummerpresentatören. En skärmdump från vårt program kan ses nedan. 7
Fig. 3: Användargränssnitt på PC-sidan 5. Resultat Under kursens gång har vi naturligtvis stött på problem, av varierande omfattning. Trots allt har vi kunnat bygga en pryl som fungerar enligt våra förväntningar, med vissa små undantag. Som en vanlig konventionell nummerpresentatör fungerar den alldeles ypperligt, det är möjligen våra extra funktioner som ännu kräver viss finslipning. En sak man skulle kunna förbättra är också att använda EEPROM istället för SRAM för att lagra telefonbok osv, så att dessa ej försvinner då spänningen bryts. För att det skall vara rimligt att använda vår nummerpresentatör i hemmet måste den naturligtvis också bli mycket mindre, något som kanske uppnåtts om man använt 68HC11. Den stora utmaningen under konstruktionen av hårdvaran låg i att få de olika komponenterna att kommunicera med varandra. DTMF- och UART-krestarna var de största utmaningarna. DTMF-kretsen ställde till stora problem då dess statusregister inte betedde sig enligt datablad. Detta innebar förutom att en massa tid gick att vi sköt upp funktionen med uppringning från DTMF-kretsen. Timing var ett annat problem. När man skickar en signal, måste den ju tas emot i rätt ögonblick på andra sidan. Bland annat tvingades vi fördröja DTACK-signalen till processorn för att kommunikationen med realtidsklockan skulle fungera. Även trimning av optokopplarna för att kunna detektera 8
lurlyft och ringsignal visade sig dra ut på tiden, även om det till slut visade sig bli en ganska enkel lösning. Förvånanade nog hade vi inga problem med virningen av sladdar. Vi virade hundratalet sladdar, bestående av kontrollsignaler, databussar och adressbussar. Vi räknade med att sannolikheten för ett fel var enormt stor. Det visade sig att vi virade allting rätt direkt och slapp därmed eventuella problem. Slutligen vill vi bara konstatera att kursen varit både väldigt lärorik och inte minst rolig. 6. Referenser Lindvall, Bertil. It-68 Utvecklingssystem för MC68008 version 4.0 Motorola. MC68008 8-/32-bit microprocessor with 8-bit data bus, 1985. Televerket.Överföring av nummerinformation över analog ledning vid ankommande trafik, 1992. Institutionen för informationsteori. Digitala projekt, datablad 68008 Kernighan, Brian W. och Ritchie, Dennis M. The C Programming Language, 1988 Institutionen för informationsteknologi. http://www.it.lth.se/it/courses/digp/index.html 9
Appendix A - Kravspecifikation Följande är vår ursprungliga kravspecifikation: 1. Nummerpresentatören skall kunna lagra uppringande telefonnummer. Minst 30 nummer skall kunna lagras. 2. Förutom telefonnummer skall även datum och tid för en uppringning lagras. 3. Nummerpresentatören skall ha en display som kan visa alla uppringande nummer och dess tillhörande datum och tid, ett i taget. 4. Med hjälp av knappar skall användaren kunna bläddra i listan av uppringande telefonnummer. 5. Användaren skall med en knapp kunna radera telefonnummer, antingen ett i taget eller alla på en gång. 6. Användaren skall med hjälp av knappar kunna ställa in datum och tid på nummerpresentatören. 7. Då inga nummer finns i listan skall lämpligt meddelande på displayen tala om detta. 8. En lysdiod skall tala om ifall det finns nya ej besvarade samtal. 9. Lysdioden skall blinka samma antal gånger som antalet nya ej besvarade samtal, därefter skall den vara släckt under en viss tid. 10. Nummerpresentatören skall med hjälp av en seriell kabel kunna anslutas till en PC, och skall kunna konfigureras på PC:n med hjälp av en tillhörande programvara. 11. Användaren skall kunna lägga till telefonnummer till en svart lista, vilket innebär att telefonen ej ringer för dessa telefonnummer. 12. Användaren skall kunna bestämma vilka samtal som släpps igenom under vissa tider på dygnet, en s.k. vit lista. 13. Konfigurering av vilka telefonnummer som skall finnas i den svarta respektive vita listan görs på en ansluten PC med tillhörande programvara. 14. Den svarta listan skall kunna aktiveras/deaktiveras utan att tömmas. 15. Den vita listan skall kunna aktiveras/deaktiveras utan att tömmas. Vid aktivering skall tidpunkt för start och stopp anges. 16. På en ansluten PC skall användaren kunna lägga upp ett telefonregister som mappar telefonnummer mot namn. Då någon som finns med i registret ringer upp skall namnet visas i nummerpresentatörens display tillsammans med telefonnumret. 17. Alla inställningar som gjorts på den anslutna PC:n skall kunna överföras till nummerpresentatörens minne, alltså skall den svarta och vita listan samt namnmappningen fungera på nummerpresentatören även då PC:n inte längre är ansluten. 10
Appendix B - Kretsschema 11