I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET

Størrelse: px
Starte visningen fra side:

Download "I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET"

Transkript

1 Mandag den 14 januar 2013 I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET OZ1QK Knud Krogsgaard Jensen 1

2 ARDUINO I 2 C - BUSSEN ELLER?? Plan for I aften: Jeg siger noget i 10 minutter I fortæller lidt om hvad I kan og vil med programmering (20 min.) I arbejder med programmering eller hvad det bliver til! (1 time) Jeg fortæller noget (mere) om I 2 C- bussen (½ time) 2

3 ARDUINO I 2 C - BUSSEN ELLER?? Håbet med dette er: Samle dem der har lyst til at arbejde med programmering i EDR Hillerød. Danne et forum hvor vi hjælper hinanden. Foreløbig er planen at vi mødes her hver 14. dag i januar og februar. Det vil sige mandag den 28. januar mandag den 11. februar mandag den 25. februar og vi forsætter hvis der er tilslutning 3

4 ARDUINO eller PIC og I 2 C - BUSSEN Hvordan kommer vi videre med programmering? Et bud kunne være at samles om I 2 C bussen I 2 C bussen er en mulighed for at koble enheder sammen omkring et mikroprocessor Der kan formuleres små og overskuelige opgaver. Opgaverne kan gøres så små, at det er ok at flere løser samme opgave. Vi kunne måske dele løsninger med hinanden. 4

5 I 2 C BUSSEN Hvad er I 2 C bussen SDA : Serial Data Kilde: Wikipedia SCL: Serial Clock 5

6 I 2 C BUSSEN Fordele med I 2 C bussen: Med to ledninger kan man kommunikere med mange enheder I Arduino og PIC verdenen er der indbygget muligheder for bruge færdige biblioteker Du skal ikke programmere selve kommunikationen på bussen. Man kan flytte programmer fra apparat til apparat. Der er tusindvis af komponenter som kan styres af I 2 C. Opgaver kan gøres passende små og overskuelige Bemærk: I 2 C række max 1 meter 6

7 MIT PROJEKT MED I 2 C I 2 C kommunikation mellem Arduino og PIC Arduino I 2 C bus PIC Display R 7

8 DIT PROJEKT MED I 2 C ELLER?? Nu er tanken at I skal sige noget. Prøv at svare på: Hvad har du lyst til at lave her? Hvilke projekter har du gang i? Hvad er din erfaring med programmering? 8

9 DIT PROJEKT MED I 2 C ELLER?? Tiden er jeres 9

10 NU SKAL DER ARBEJDES Jeg ved ikke hvordan vi nu kommer videre. Meget er op til jer hver især. Det er din tid og dit ansvar. Mit forslag er at du: Sætter dig et mål i form af et apparat, en opstilling eller noget andet. Det skal være udfordrende, realistisk, og målbart. Målbart betyder at du og andre kan afgøre at målet er nået. Tænker lidt over hvordan du når der hen. Prøv at dele opgaven op og se om der er dele som du har særlig behov for hjælp til. 10

11 DIT PROJEKT Tiden er jeres Om en time vil jeg gerne fortælle om I 2 C - Hvis I vil høre om det 11

12 OM I 2 C BUSSEN Grundlaget for I 2 C bussen er her 12

13 I 2 C BUSSEN Oversigt over det følgende: I 2 C beskrivelse af funktion Grundbegreber: Master slave Protokolbeskrivelse Hastighed Rækkevidde Komponenter (eksempel fra RS) Arduino og I 2 C programeksempel 13

14 I 2 C BUSSEN Grundbegreber Transmitter / Sender Receiver / Modtager Master Save Enhed som sender data til bussen Enhed som modtager data fra bussen Enhed som starter en overførelse, danner takten (clock)og som afslutter overførelsen. Enhed som adresseres af master Det er muligt at lade mere end en enhed styrer bussen Råd: Lad der kun være en master det er lettest. 14

15 I 2 C BUSSEN Egenskaberne ved I 2 C bussen: Kun to linjer er nødvendige, (samt naturligvis stel og forsyning) Hver komponent forbundet til bussen har en unik adresse Enkel master / slave systematik Mekanismer til at hindre data kollision I det mindste op til 3,4 Mbit/s 15

16 I 2 C BUSSEN Hvad er vores opstilling egentlig: SDA : Serial Data SCL : Serial Clock 16

17 I 2 C BUSSEN Transmission af data: Data skal være stabile når SCL er høj Data kan ændres når SCL er lav 17

18 I 2 C BUSSEN START og STOP af datatransmission: START: SDA går lav medens SCL er høj, STOP : SDA går høj medens SCL er lav. Det er altid master der udsender START og STOP. 18

19 I 2 C BUSSEN BYTE formatet Enhver byte er 8 bit lang. Der kan sendes et ubegrænset antal byte. Slaven kan holde SCL nede hvis den er optaget af noget andet. 19

20 I 2 C BUSSEN Acknowledge (ACK) Godkendelse / ikke godkendelse sker efter hvert byte. Alle ni clock pulser dannes af master. Hvis modtageren acceptere data holder den SDA ned under den niende puls. (Husk at det er lavet med en modstand til forsyningsspændingen.) Acknowledge (ACK) angivers ved SDA LOW Not Acknowledge (NACK) angives ved SDA HIGH 20

21 I 2 C BUSSEN NACK gives hvis: Hvis der ikke findes en enhed med den pågældende adresse (Det første der udsendes er en adresse se om lidt.) Modtageren ikke er i stand til at modtage eller sende fordi den er optaget af anden opgave. Der modtages data eller kommando som ikke forstås. Modtagere kan ikke modtage flere data. Master modtageren skal signalere datatransmission slut til slave sendere. Programmet må så tage hånd om den situation! 21

22 I 2 C BUSSEN Slave adresse og R/W bit Read = 1, Write = 0. 22

23 I 2 C BUSSEN Første byte efter start ser således ud: Der er nu følgende muligheder for hvad der videre sker 23

24 I 2 C BUSSEN Master-sender transmitterer til slave-modtager: Retningen for data transmission ændres ikke. Slaven giver acknowledge efter hver byte. 24

25 I 2 C BUSSEN Master læser slaves umiddelbart efter adresse Efter det første acknowledge bliver master-sender til master-modtager. Første acknowledge dannes stadig af slaven. Master danner de følgende. STOP dannes af master og umiddelbart før sendes NACK. 25

26 I 2 C BUSSEN Det var nogle hovedpunkter. Der er meget mere: Retningen på data transmissionen kan ændres under vejs. Der er muligheder for længere adresser. Jeg vil foreslå at vi tager det op efterhånden som vi får brug for det. 26

27 I 2 C BUSSEN Hastighed Bidirectional bus: Standard-mode (Sm), op til 100 kbit/s Fast-mode (Fm), op til 400 kbit/s Fast-mode Plus (Fm+), op til1 Mbit/s High-speed mode (Hs-mode), op til 3.4 Mbit/s Unidirectional bus: Ultra Fast-mode (UFm), op til 5 Mbit/s 27

28 I 2 C BUSSEN Rækkevidde Den væsentlige begrænsning i rækkevidden kommer af: Maksimal kapacitet til stel : C b = 400 pf En tommefingerregel : op til 1 meter. I 2 C er beregnet til brug inde i et apparat. Muligheder for at forlænge rækkevidden: Brug af regeneratorer (bruges når mange enheder er på) Brug af kabler med lave kapacitet (koaksial kabler) Der findes en række opstillinger / forsøg på nettet Det er ikke I 2 C man bruger til lange strækninger 28

29 I 2 C KOMPONENETER RS hjemmeside 29

30 I 2 C BUSSEN OG ARDUINO I Arduino verdenen har vi følgende funktioner at gøre godt med. begin() requestfrom() begintransmission() endtransmission() write() available() read() onreceive() onrequest() Findes i biblioteket wire 30

31 I 2 C BUSSEN OG ARDUINO En simpel opstilling kunne være denne: 31

32 I 2 C BUSSEN OG ARDUINO Master processoren indeholder følgende: /* I2C_Master Echo Serial data to an I2C slave*/ #include <Wire.h> const int address = 4; /* the address to be used by the communicating devices*/ void setup() { Wire.begin(); } void loop() { char c; if(serial.available() > 0 ) { // send the data Wire.beginTransmission (address); // transmit to device Wire.write(c); Wire.endTransmission(); } } 32

33 I 2 C BUSSEN OG ARDUINO Slaven indeholder: /* I2C_Slave monitors I2C requests and echoes these to the serial port*/ #include <Wire.h> const int address = 4; /* the address to be used by the communicating devices*/ void setup() { Serial.begin(9600); Wire.begin(address); // join I2C bus using this address Wire.onReceive(receiveEvent); // register event to handle requests } void loop() { /*nothing here, all the work is done in receiveevent */ } void receiveevent(int howmany) { while(wire.available() > 0) { char c = Wire.read(); /* receive byte as a character */ Serial.write(c); // echo } } 33

34 I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET Hvad nu??? Er der nogen som vil bruge I2C? Eller er det en helt anden vej vi skal?? 34

35 I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET Næste møde er Mandag den 28. januar 2013 kl. 19:30 35