William Sandqvist william@kth.se Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.

Slides:



Advertisements
Liknande presentationer
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Advertisements

William Sandqvist Simulera med ModelSim ModelSim kan användas till att simulera VHDL-kod, för att avgöra om den är "rätt" tänkt. Man kan.
Föreläsning1. • Boken?!?! • Vad är ett program? • Kompilerande-Interpreterande • Programmeringsmiljö • Hello World! • Att programmera och ett enkelt program.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Många studenter använder en LCD-display till sin programmeringsuppgift
Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
William Sandqvist Störskydd William Sandqvist
De fundamentala datatyperna
Spolen och Kondensatorn motverkar förändringar
PICKit2 programmer-to-go
PC-teknik Repetition enligt önskemål som inkommit via mail. (täcker alltså inte alla moment i kursen)
William Sandqvist Programmet onoffred.c.
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
SmartCard laborationen
William Sandqvist Varför använda en liten 8-bitars processor när det finns billiga kraftfulla 32-bitars? William Sandqvist
William Sandqvist PIC Comparator Tips 'n Tricks William Sandqvist
C-programmering ID120V William Sandqvist Länkad lista
Grundläggande programmering
Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion – Implementering (med exempel från PIC)
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
Programmering B PHP Lektion 2
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Pekare och speciell programstruktur i inbyggda system
Repetition inför slutprovet
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Programmering B PHP Lektion 3
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
William Sandqvist Digitalt oscilloskop William Sandqvist
Styrteknik: Programmering med MELSEC IL PLC2A:1
William Sandqvist C:s minnesmodell.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Modulär programutveckling
William Sandqvist Kodlåsmall lockmall.vhd William Sandqvist
Styrteknik: Grundläggande logiska funktioner D2:1
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Styrteknik 7.5 hp distans: SFC Introduktion SFC_A:1
Namnrum, räckvidd och rekursion Linda Mannila
William Sandqvist Databuffer Omvandlar mellan olika storlekar på dataobjekt Anpassar mellan olika dataöverföringshastigheter Databuffer.
William Sandqvist PIC PIC (Peripheral Interface Computer) är en datorkrets med ”allt i ett”. Prog Mem. Programminnet är 2048 instruktioner.
Styrteknik 7.5 hp distans: SFC Introduction PLC5A:1 Bilder SFC = Sequential Function Chart Language SFC är ett grafiskt programspråk som används.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Problemlösningsmetodik
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
William Sandqvist Polling och Interrupt Antag att Du sitter i en skön fåtölj och läser en bok. Plötsligt blir Du avbruten av att telefonen.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
William Sandqvist PIC-programmeringsmiljön i skolan Datorerna i skolans labsalar är centralt underhållna. Du har inte rättigheter att installera.
Din rapport ? Beskriv din applikation.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
William Sandqvist ReadModifyWrite-problemet PORTB = 0; PORTB.0 = 1; PORTB = PORTB; Vilket värde har portpinnen RB1 nu ? Förmodligen ”1”,
William Sandqvist DA-omvandling, oftast PWM.
William Sandqvist Binärkod och Graykod 7 Bitars Kodskiva för avkodning av vridningsvinkel. Skivans vridnings-vinkel finns tryckt som binära.
1 Ingenjörsmetodik IT & ME 2007 Föreläsare Dr. Gunnar Malm.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
William Sandqvist PWM Sinusoidal Hur tillverkar man en sinusformad spänning? En PWM-signal kan ge en sinusapproximation. Efter filtrering.
Kronljusströmställaren 0, 1, 2, 3
William Sandqvist Datorteknik övning 1 Introduktion till assemblerprogrammering av Nios II William Sandqvist
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
DA-omvandling, oftast PWM William Sandqvist En DA-omvandlare tar stor plats på processor- chippet. Den vanligaste DA-lösningen är i stället.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
William Sandqvist Låskretsar och Vippor Låskretsar (latch) och vippor (flip-flop) är kretsar med minnesfunktion. De ingår i datorns minnen.
Anders Sjögren Funktioner något in och något annat ut.
KPP053, HT2015 MATLAB, Föreläsning 4
Microprocessor / Microcontroller
Python.
Digitalteknik 3p - Kombinatoriska Byggblock
Digitalteknik 3p - Kombinatoriska Byggblock
Presentationens avskrift:

William Sandqvist william@kth.se Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket C, och hur man "laddar ned det" det till en PIC-krets ( Perpherial Interface Computer ) med en kretsprogrammerare. Om PIC-kretsen förses med några elektroniska kringkomponenter kan den sedan utföra den uppgift den programmerats för. Som programmeringsuppgift har vi valt att låta PIC-kretsen spela upp en melodi. Detta är inte bara en "lek", utan det kan faktiskt vara en viktig funktion hos en datorstyrd konsumentprodukt av idag. Möjligheten att få en personlig ringsignal till sin mobiltelefon har varit ett av de viktigaste konkurensmedlen mellan mobiltelefontillverkarna! Uppgiften är tillräckligt komplex för att visa PIC-kretsens möjligheter, och för den delen, egenheter. William Sandqvist william@kth.se

William Sandqvist william@kth.se Stämgaffel Vi börjar med att göra en "stämgaffel", det vill säga låta PIC-kretsen avge en kontinuerlig 440 Hz ton. William Sandqvist william@kth.se

William Sandqvist william@kth.se playtone.c /* playtone.c Generates a 440 Hz "A4" tone */ /* Use processor 16F628 */ #include " 16F628.h" #pragma config |= 0x3f90 void main(void ) { char note = 114; /* gives pitch A4 440 Hz */ TRISB = 0b11111110; /* B.0 is output */ while (1) /* forever */ { char i; /* local variable */ for(i = note; i > 0; i--) { /* Delay. Loop + nop()'s totals 10 us */ nop(); nop(); nop(); nop(); } PORTB.0 = !PORTB.0; /* Toggle bit B.0 */ } } William Sandqvist william@kth.se

William Sandqvist william@kth.se Delay 10 s När man kompilerar C-programmet får man också en fil med motsvarande assemblerkod! Man undersöker assemblerkoden, varje instruktion kommer att ta 1 s, förutom hoppinstruktioner som tar 2 s. Vid behov ”kryddar” man med att lägga till eller ta bort någon NOP, nop() i C-koden. ; The 10 us delay loop. m002 MOVF i,1 ; 1 us BTFSC 0x03,Zero_ ; 2 us (When skipped) GOTO m003 ; NOP ; 1 us NOP ; 1 us NOP ; 1 us NOP ; 1 us DECF i,1 ; 1 us GOTO m002 ; 2 us ; Total of 10 us! William Sandqvist william@kth.se

William Sandqvist william@kth.se Hela skalans toner … Tabellen innehåller tal mellan 51…255. Bland de lediga talen låter vi 0 betyda “slut på melodin” och 1 betyda “paus”. William Sandqvist william@kth.se

William Sandqvist william@kth.se TIMER0 TIMER0 är en 8-bitars modulo 256-räknare som kan läsas/skrivas med program. Om biten TOCS i OPTION -registret är "0" så räknas var fjärde av processorns klockcykler ( Fosc/4 ). Om biten TOCS är "1" räknas de pulsflanker som inkommer på pinnen T0CKI. Med biten TOSE bestämmer man om det är positiva eller negativa "flanker" som ska räknas. Med biten PSA=0 kan man koppla in en prescaler, en frekvensdelare. Med den inkopplad räknas bara en bråkdel av de inkommande pulserna, och det tar då längre tid innan TIMER0 "räknar runt". Med bitarna PS2 PS1 PS0 ställer man in prescalerns delningstal. William Sandqvist william@kth.se

William Sandqvist william@kth.se Strukturdiagram Strukturdiagrammet är ett enkelt tvådimensionellt diagram som kan användas för att dokumentera datorprogram. I diagrammet används symboler för sekvens, selektion och iteration, vilka är de grundläggande operationer som bygger upp alla datorprogram. I horisontell ledd visas tidsdimensionen, dvs i vilken ordning saker utförs. I vertikal led visas upplösningen, för varje nivå nedåt ökas detaljrikedomen i beskrivningen. William Sandqvist william@kth.se

Strukturdiagram Melodyplayer Alla noter är 1/8 långa. En ”helnot” får man genom att upprepa 1/8 not 8 ggr. Funktionen LookUpNote( i) returnerar melodins not nr i. Notvärdet 0 betyder att melodin är slut och notvärdet 1 att det är en paus. William Sandqvist william@kth.se

William Sandqvist william@kth.se Computed GoTo ? PIC-processorns instruktioner är 14 bitar långa. Konstanter, sk "literals", lagras i programminnet inbakade i instruktioner. Tabellvärden lagras i med assemblerinstruktionen RETLW k ( RETurn with Litteral in W ), där k är den 8 bitars konstant som ska bakas in i instruktionen. Om processorn "hoppar" till en sådan instruktion, skickas den tillbaks med talet k i arbetsregistret, W-registret. Vid assemblerprogrammering används detta tillsammans med indexerad adressering så att man med hjälp av ett index kan styra vilken av tabellens konstanter man ska komma tillbaks med. Detta kallas för Computed GOTO. William Sandqvist william@kth.se

Tabell i assemblerprogram Tabell i assemblerprogram. k1 k2 k3 är tabellens tre konstanter. CALL TABLE ; W contains table offset ... TABLE ADDWF PC ; W = offset, go to offset table entry RETLW k1 ; Begin table, return with k1 in w RETLW k2 ; return with k2 in w RETLW k3 ; End of table, return with k3 in w Det finns inget "självklart" sätt att utrycka detta med C-språket. B Knutsen har infört en (inbyggd) funktion skip(i) som ska lösa detta. Denna betyder att man hoppar över det antal C-instruktioner som anges med "i". William Sandqvist william@kth.se

William Sandqvist william@kth.se Tabell i C-program Exempel C-funktion (enligt CC5X). k1 k2 k3 är tabellens tre konstanter. char table(char i) { skip(i); /* internal function in CC5X */ return k1; return k2; return k3; } William Sandqvist william@kth.se

William Sandqvist william@kth.se En melodi char LookUpNote(char W) { skip(W); /* internal function to CC5X compiler */ return 1; /* Pause */ return 76; /* E5 */ return 85; /* D5 */ return 76; /* E5 */ return 76; return 76; return 76; return 114; /* A4 */ return 114; return 114; . . . return 101; /* B4 */ return 101; return 1; /* Pause */ return 0; /* End */ } Här använder vi arbetsregistret W som variabel, på så sätt ”sparar” vi en lokal variabel i funktionen. Provkör programmet så får Du veta vilken melodi det är … William Sandqvist william@kth.se