Arduinokurs. Kurstillfälle 4

Relevanta dokument
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Datorteknik 2 (AVR 2)

Arduinokurs. Del 1 - Vett och etikett. Talsystem. Binärt ettor och nollor

Uppgift 1 (grundläggande konstruktioner)

Data, typ, selektion, iteration

PROJEKT STAFFAN STALLEDRÄNG

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

CE_O3. Nios II. Inför lab nios2time

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

Tentamen, Algoritmer och datastrukturer

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

PROJEKT LJUD. KOPIERINGSUNDERLAG Martin Blom Skavnes, Staffan Melin och Natur & Kultur Programmera i teknik ISBN

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

"Crash Course in Programming"

Datorteknik TSIU02 Lab 2 Morsesändare v0.7

Klassdeklaration. Metoddeklaration. Parameteröverföring

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Loopar och datatyper. Föreläsning 3

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

Systemutvecklare SU13, Malmö

i LabVIEW. Några programmeringstekniska grundbegrepp

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

Tentamen i Grundläggande Programvaruutveckling, TDA548

Kontrollskrivning Mikrodatorteknik CDT S2-704

Assemblerprogrammering för ARM del 2

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Laboration Datorteknik TSIU02 2. I/O-programmering

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Enkla datatyper minne

6 Lågnivåprogrammering

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

C++ Slumptalsfunktioner + switch-satsen

ENKEL Programmering 3

TENTAMEN OOP

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Flyttal kan också hantera vanliga tal som både 16- och 32-bitars dataregister hanterar.

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Loopar och datatyper. Föreläsning 3

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Lab5 för prgmedcl04 Grafik

Talsystem Teori. Vad är talsystem? Av Johan Johansson

MMA132: Laboration 2 Matriser i MATLAB

Övning från förra gången: readword

Föreläsning 11. Strängar

Parameteröverföring. Exempel. Exempel. Metodkropp

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Att använda pekare i. C-kod

LEU240 Mikrodatorsystem

F4. programmeringsteknik och Matlab

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Tentamen ges för: Tentamensdatum: Tid:

HI1024 Programmering, grundkurs TEN

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Planering av ett större program, del 2 - for och listor. Linda Mannila

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Tentamen i Programmering grundkurs och Programmering C

Pulsmätare Digitala Projekt EITF11

En kort text om programmering i C.

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Språket Python - Del 1 Grundkurs i programmering med Python

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

2D1339 Programkonstruktion för F1, ht 2004

Tentamen i. för D1 m fl, även distanskursen. lördag 28 maj 2011

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Lathund. C för inbyggda system

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Introduktion till programmering och Python Grundkurs i programmering med Python

TDIU01 - Programmering i C++, grundkurs

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

TDDI16: Datastrukturer och algoritmer

4 Sammansatta datatyper

Lösningsförslag till exempeltenta 1

Programmera i teknik - kreativa projekt med Arduino

C++ Lektion Tecken och teckenfält

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Att programmera arduinon

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Uppgifter teknik HT17 (uppdaterad v. 40)

Användarhandledning Version 1.2

Tentamen i Grundläggande Programvaruutveckling, TDA548

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Lösningar till tentamen i EIT070 Datorteknik

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

STOCKHOLMS UNIVERSITET MATEMATISKA INSTITUTIONEN Avd. Matematisk statistik Anders Björkström

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Transkript:

Kurstillfälle 4 CW-generering Det här kan ses som överkurs men kan ändå vara roligt för att kunna generera CW på ett enkelt sätt. Det blir en hel del nytt men vi tar det steg för steg Som alla vet gäller följande för CW En kort = 1 tidsenhet En lång = 3 tidsenheter Mellanrummet mellan tecknen för samma bokstav/tecken = 1 tidsenhet Mellanrummet mellan bokstav/tecken = 3 tidsenhet Ordmellanrum = 7 tidsenheter. CW är binärt och enkelt att generera i en dator. En etta betyder ton (nyckel nedtryckt) och en nolla betyder tonuppehåll (nyckeln ej nedtryckt). Beroende på vad man vill nyckla väljs en ton eller en digital utgång. En etta kan alltså antingen lägga ut en ton eller en etta på en portpinne. Vi lägger ut en ton. Det första som måste göras är att omvandla vår text till CW och koda den så att vi kan lägga in den i programmet. Det finns program som ordnar saken men vi gör det manuellt. Vi tar ordet HEJ som exempel. HEJ =...--- och det skrivs om till ettor och nollor enligt specen ovan. 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 0 0 0 0 Vi har en 8-bitars processor och då måste vi alltså spara datan med multiplar på 8 och det blir i det här fallet 4 st. 8-bitars tal där sista talet fylls ut med nollor. De 4 talen är: 10101010 = AA HEX 00100010 = 22 HEX 11101110 = EE HEX 11100000 = E0 HEX Implementering Hur gör vi nu för att få ut CW av AA22EEE0? Huvudprogram och initiering ser ut som följer. SM6TOB 1 2016-02-12

#define buzzer 2 //Summern kopplas till Digitalutgång 2 void setup() void loop() sendcw("\xaa\x22\xee\xe0 "); while(1) Nytt här är sendcw(). sendcw() är en sk. funktion. Vi har tidigare stött på funktionerna void setup(), void loop() och Serial.begin(9600). En funktion är en programslinga som anropas (körs) genom att man skriver namnet och bifogar ev. data inom parenteserna. En funktion kan även returnera data. Vår funktion heter sendcw och vill ha text att sändas bifogad som en sträng bestående av hexadecimala data. Hexadecimala tal skrivs med \x före talet. Datan läses mha. pekare. Pekare anses ofta som svårt att förstå men vi behöver inte gå in på djupet utan det räcker med följande förklaring. Pekaren pekar på den bifogade strängens första tecken, i det här fallet AA HEX. Ökas pekaren pekas nästa värde ut i strängen, 22 HEX. Det som återstår att göras är att ta fram ettor och nollor ur den bifogade datan. Det görs genom en skiftfunktion. Skift är enkelt och kraftfullt. Det är dessutom en grundläggande funktion i alla datorer oavsett slag. Det finns vänster och högerskift. Vi skiftar till vänster. Vi tar första byten AA HEX som exempel för att visa skiftoperationen. AA HEX = 10101010 binärt. Vid skift flyttas alla bitar ett steg till vänster och nollor fylls på från höger. Ex. 10101010 skiftas åt vänster med 1 position 01010100 skiftar vi en gång till fås 10101000 osv För att veta om summern ska vara på eller av måste vi nu läsa av ettor och nollor. Det görs genom bitvis OCH. Vi repeterar OCH-funktionen AND f 0 0 0 0 1 0 1 0 0 1 1 1 Vi får en etta endast om båda ingående talen är ettor! Om vi applicerar och-funktionen på datan med masken 10000000 fås följande: (En mask är det vi sätter in att jämföra mot) SM6TOB 2 2016-02-12

1 0 1 0 1 0 1 0 & & & & & & & & Arduinokurs Vi får svaret 10000000 efter att ha kört OCH-funktionen på varje bit. Skiftas nu 1010101010 åt vänster får vi enligt ovan 01010100. Vi kör samma OCH-funktion igen och fär: 0 1 0 1 0 1 0 0 & & & & & & & & 0 0 0 0 0 0 0 0 Vi får svaret 00000000 eller enklare 0. Mha. en if-sats kan vi nu ta reda på om det är en etta eller nolla vi har på första positionen i talet men det behövs även en räknare för att hålla ordning på vilken bit som behandlas. for-satsen for-satsen används för att upprepa kommandon ett bestämt antal gånger, som i exemplet ovan 99 gånger. X är från början satt till noll. X jämförs med 100 och om X är mindre än 100 utförs instruktionen inom måsvingarna annars inte. Efter att instruktionen println är utförd ökas X med 1 (X++ är samma som X = X + 1). X är alltså lika med 2 vid andra varvet i loopen. while-satsen while(n) while-satsen utförs om det inom parenteserna är sant. Är n sant utförs det inom måsvingarna, annars inte. SM6TOB 3 2016-02-12

Nu kan vi titta på sendcw-funktionen. Arduinokurs void sendcw(const char* s) unsigned char i, temp; while(*s) temp = *s; for(i = 0; i < 8; i++) if(temp & 0x80) tone(buzzer,800); Else temp <<= 1; delay(70); *s++; //sendcw------------- //Bifoga en 8-bitars sträng //Läs tecken för tecken tills strängen är slut //temp = första tecknet i strängen //räkna från 0 till 7, alltså 8 steg //maska ut första biten i strängen och //om resultatet är ett summer på //annars //Skifta ett steg åt vänster //Fördröjning CW-hastighet //Öka pekaren med ett = nästa tecken i strängen Det kompletta programmet finns på sista sidan. SM6TOB 4 2016-02-12

#define buzzer 2 //Summern kopplas till Digitalutgång 2 void setup() void loop() sendcw("\xaa\x22\xee\xe0"); while(1) void sendcw(const char* s) unsigned char i, temp; while(*s) temp = *s; for(i = 0; i < 8; i++) if(temp & 0x80) tone(buzzer,800); else temp <<= 1; delay(70); *s++; //sendcw------------- //Bifoga en 8-bitars sträng //Läs tecken för tecken tills strängen är slut //temp = första tecknet i strängen //räkna från 0 till 7, alltså 8 steg //maska ut första biten i strängen och //om resultatet är ett summer på //annars //Skifta ett steg åt vänster //Fördröjning CW-hastighet //Öka pekaren med ett = nästa tecken i strängen SM6TOB 5 2016-02-12