zaterdag 23 maart 2013

I2C en Raspberry Hoofdunit

Zoals in mijn vorige blog verteld had is de bedoeling de Raspberry Pi als Master te gebruiken.
En dat ik zoveel mogelijk info op deze unit wil hebben zonder een monitor erop aan te sluiten en tevens te kunnen bedienen als iets zou zijn.
Wel met die gedachte zoveel mogelijk alles op het I2C bussysteem te laten draaien.


Dit houd dus in dat ik het volgende nodig zou moeten hebben.:
  • Een lcd schermpje.
  • Bedienings-knoppen.
  • Verlengingen van aansluitingen die op de Raspberry Pi zitten naar de buiten kant van de main unit te brengen.
  • Een speciale I2C aansluiting.
  • Eventuele koeling.
  • Voeding

Hoe had ik de unit in gedachte met de indeling?

Op de voorkant van de hoofdunit wil ik dus een LCD  , 6 knoppen om het systeem software wat ik ga schrijven ervoor te bedienen, een indicator voor het verbruik van de cpu te zien en indicators om het verbruik te zien van de I2C lijn.


Dus blijf mijn blog volgen want zowel hardware als codes komen er bij te staan.......

Mijn project met de Raspberry Pi en I2C.

Aangezien de Raspberry Pi een klein maar krachtige pc is en ideaal is om hardware aan te sturen heb ik besloten dit in ons huis toe te passen in een I2C bus systeem.

De Raspberry Pi wil ik gaan gebruiken als master.
Het verbruik van dit boardje is te verwaarlozen dit is zo minimaal en werkt op 5V.

De bedoeling is dus dat boardje dus gaat lopen op het besturing systeem Raspberry Wheezy en de software om het I2Cgebeuren te laten werken schrijf ik in Python.

De benodigde elektronica wat ik gebruik ervoor komt voor 99% van Dick Best , dit is een zeer uitgebreide elektronica webshop waar men vrijwel alles kan krijgen.
Deze webshop is hier te vinden http://www.dickbest.nl

Voor vragen over het maken van hardware kan men uiteraard hier terecht voor vragen op mijn Blog maar men kan ook vragen stellen op http://www.schematheek.net
Op dat forum kan men terecht voor allerlei vragen betreffende alles wat met elektronica te maken heeft.

De Raspberry Pi wil ik gaan wegwerken in een behuizing met de gedachte hier dus enkele nuttige aansluitingen erbij te plaatsen zodat de Raspberry Pi zelf niet meer uit de behuizing hoeft.

Ook is het de bedoeling dat vanuit deze unit veel gegevens afgelezen kunnen worden zonder dat er een monitor aangesloten hoeft te worden.

Ik ben al geringe tijd geleden al het project begonnen , maar aangezien ik veel mails krijg over hoe ik het gedaan heb, hoe het werkt allemaal, dat ze het zeer interessant vinden, heb ik besloten dit te gaan bloggen.

Voor de mensen die mij hierover gemaild hebben , hartelijk dank voor jullie lof.

Wat is I²C?




De I2C-bus (spreek uit als: I kwadraat C bus), eertijds aangeduid met IIC-bus (Inter-IC-bus), is een synchrone, seriële bus, ontwikkeld voor datacommunicatie tussen microprocessoren en andere IC's, meestal op één enkele printplaat.

Geschiedenis

Ze werd in 1979 door Philips ontwikkeld en in 1980 gepatenteerd als betrouwbaar en goedkoop alternatief ter vervanging van een reeks van verschillende andere databussen die destijds werden toegepast in consumentenapparaten.
Het systeem had aanvankelijk enkele nadelen, zoals een lage snelheid (100 kbit/sec) en een geringe storingszekerheid bij lange leidingen (in de praktijk mag de totale lengte van de bus zeker niet langer dan 1m zijn), maar later is de snelheid opgevoerd en zijn er speciale buffer-IC's ontwikkeld om de leidinglengte van de bus te vergroten.

Werking

I2C bestaat uit twee data lijnen namelijk SDA (serial data) en SCL (serial clock).
Over de SDA lijn wordt de data verzonden en over de SCL lijn wordt het kloksignaal verzonden.
Beide lijnen worden hoog gehouden door een Pull-up weerstand te gebruiken van ongeveer 1800 Ohm.
Om te kunnen communiceren heeft I2C één master nodig en minimaal één slave.
De master heeft de controle over de I2C bus en genereert het kloksignaal, startbit en stopbit.
De slaves communiceren alleen nadat de master daartoe een verzoek stuurt.
Om te communiceren stuurt de master eerst een Start bit.
Dit bestaat uit een hoog naar laag signaal op de SDA lijn (flankgestuurd) terwijl de SCL lijn hoog is. Vervolgens stuurt de master een adres + een read/write bit over de I2C lijn.
Het read/write bit houdt in of de master data wil versturen naar de of ontvangen van de slave.
De slave die het aangeroepen adres heeft zal dan reageren met een Acknowledge zodat de master weet dat de aangeroepen IC actief is.
Nu kan de data worden verzonden.
Er wordt één byte per keer verzonden + een Acknowledge van de ontvanger om te bevestigen dat de data is ontvangen.
Nadat de data is verstuurd zal de master het stopbit verzenden:
Een laag naar hoog signaal op de SDA lijn (flankgestuurd) terwijl de SCL lijn hoog is.
De I2C-bus is een tweedraads dataverbinding tussen een of meer processoren (masters) en speciale periferiecomponenten (slaves). 
Al deze componenten zijn op dezelfde bus aangesloten en hebben elk hun eigen unieke adres. 
Adressen en data worden via dezelfde lijnen verzonden. 
De I2C-bus maakt een uiterst eenvoudige verbinding mogelijk tussen vele IC's, waarbij uitbreidingen achteraf probleemloos kunnen worden gerealiseerd.

Op de I2C-bus kunnen alle IC's worden aangesloten die het speciale busprotocol beheersen. 
Naast RAM-, EEPROM- en poort-IC's, MQ-en D/A-omzetters en timers zijn dit vele speciale IC's zoals displaydrivers of IC's voor de televisietechniek. 
Al deze IC's kunnen zonder meer via twee aansluitingen van de parallelle poort van de PC worden aangestuurd. 
Wanneer we bereid zijn een paar extra onderdelen te gebruiken kunnen we de IC's ook via de seriële poort aansturen.

Voordelen

De voordelen zijn echter al even belangrijk, wanneer aangewend in geschikte toepassingen.
De belangrijkste voordelen zijn:
  • Lage kostprijs.
  • Eenvoudige bedrading (slechts twee signaalleidingen).
  • Weinig soldeerpunten, kleine IC's.
  • Uitgebreid gamma IC's met de I2C interface.
  • Compatibele IC's van andere fabrikanten.
  • Robuuste bouw.
  • Langzame perifere chips kunnen wachtcycli afdwingen.
  • Geïntegreerde multimastermogelijkheid, dat wil zeggen meerdere microcontrollers (masters) kunnen dezelfde bus gebruiken en zelfs onderling communiceren.

 

Nadelen

Naast de vele voordelen zijn er ook enkele nadelen:
  • Als er één IC niet goed functioneert in de I2C bus dan kan dit de hele lijn van I2C blokkeren zodat er helemaal geen communicatie meer op de I2C lijnen kan plaatsvinden.
  • I2C is traag bij grotere hoeveelheden data.

 

Latere versies

In latere versies van de I2C-bus zijn er verschillende verbeteringen aangebracht.
Zo is onder andere de maximale snelheid verhoogd naar 400 kbit/sec (Fast-mode) en weer later naar 3,4 Mbit/sec (High-speed mode), is de adresseringsruimte van aangesloten IC's vergroot van 7 naar 10 bit en zijn er voorzieningen gekomen om I2C-bussen met verschillende voedingsspanningen te verbinden.

Adressering van I2C-componenten

Algemeen

 

Iedere bouwsteen die vanuit de bus moet kunnen worden aangesproken (geadresseerd), heeft ter onderscheiding van andere bouwstenen een uniek adres: het slave adres.
Bouwstenen die uitsluitend als master optreden hebben geen adres nodig.
Oorspronkelijk voorzag het I2C-concept in 7-bits adressen.
Hiermee zijn maximaal 128 bouwstenen aan te sturen.
Er zijn echter bepaalde adressen gereserveerd.
Philips heeft echter ook een mogelijkheid gemaakt dat ook 10-bits adressen mogelijk zijn.
Omdat het gebruik van 7-bits en 10-bits adressen gelijktijdig mogelijk is, is de 10 bit modus ietwat geforceerd.
De adressering is voor de 10-bit modus dus wat omslachtig.

 

7-bit adressering

 

Als een master met een slave wil communiceren, moet hij eerst de bus opvragen via een start conditie. 
Dan zendt hij als eerste een byte waarvan de eerste 7 bits het adres vormen. 
Het laatste bit legt de transportrichting vast ('0' = schrijven, '1' = lezen).

Na een startconditie moeten alle aangesloten slaves de bus bewaken om dit byte te lezen. 
Hierbij kunnen langzame slaves de master tot wachten dwingen. 
Nadat alle 8 bits zijn ontvangen vergelijkt iedere slave het ontvangen adres met zijn eigen adres. 
Dit adres ligt vast of het kan handmatig zijn ingesteld. 
Bouwstenen met een afwijkend adres nemen afscheid en wachten op een volgende startconditie. 
De bouwsteen met het juiste adres stuurt een acknowledge-bit.

Nu weet de master dat de geadresseerde slave tot data transport in staat is. 
Komt er geen acknowledge-bit dan is de bouwsteen beschadigd of er is geen bouwsteen aanwezig op dat adres.

 

10-bit adressering

 

Aangezien de meeste adressen binnen de 7 bits adresruimte al bezet zijn, heeft Philips voor toekomstige bouwstenen een 10-bits adresmodus gemaakt. 
Deze modus is compatibel met de 7-bit adresmodus. 
Dus kunnen 7-bit en 10-bit bouwstenen op dezelfde bus worden aangesloten.
Het basisidee achter 10-bit adressering is dat er twee adresbytes worden gebruikt. 
Daartoe bevat het eerste adresbyte een combinatie die is gereserveerd voor deze wijze van adresuitbreiding.

Daarna volgt een tweede byte dat de verdere adresbits bevat. 
Het richtingsbit krijgt hierbij een ietwat andere betekenis. 
De 7-bits in het eerste adresbyte hebben de gedaante 11110XX.XX betekend hierbij de beide hoogst waardige adresbits van het 10-bits adres. 
De andere acht bits volgen in het tweede adresbyte. 
De geadresseerde slave moet beide bytes bevestigen met een acknowledge. 
Bij de behandeling van genaral call adress en de startbyte procedure moet de slave reageren als een 7-bit bouwsteen. 
Dat betekent echter geen beperking en is gewoon logisch.

 

Condities

 

De I2C bus bestaat uit twee actieve lijnen en een massa verbinding.
De actieve lijnen zijn SDA en SCL. Beide lijnen zijn bidirectioneel.
SDA is de Serial DAta lijn en SCL is de Serial CLock lijn.

Elke component die aan de lijn hangt heeft een uniek adres.
Elke component kan afhankelijk van zijn functie zowel als zender als ontvanger werken.
De Master is het IC dat de commando`s op de bus plaatst. In de I2C protocol specificatie staat dat het IC, dat de datatransfer begint, de Master is. Elk ander IC is dan een Slave. De I2C bus is een multi-master bus. Dit houdt in dat er meer dan één IC de mogelijkheid bezit om de datatransfer te beginnen. De Master IC`s zijn meestal microcontrollers die het geheel besturen.

Veronderstel dat de controller met een slave wil communiceren.

(De cursief gedrukte woorden worden in het onderdeel ‘bustoestanden’ uitgelegd.)

De controller begint met een Start conditie op de bus te plaatsen. 
De werkt als een attentie signaal voor alle IC`s op de bus. 
Alle IC`s luisteren nu op de bus naar binnenkomende data.

Dan zendt de controller het Adres van het gewenste IC door. 
Alle IC`s zullen het binnenkomende adres vergelijken met hun eigen adres. 
De IC’s die een ander adres hebben reageren niet en wachten tot de bus terug vrijkomt.
Het IC dat wel het juiste adres heeft geneert een Acknowledge op de bus.

Als de controller deze Acknowledge terugkrijgt, dan begint hij met data te verzenden. 
Bij de overdracht van 8 bits (een byte) heb je acht klokpulsen nodig op de SCL-lijn. 
Deze klokpulsen worden door de master gegenereerd. 
De geadresseerde slave mag echter de laagtoestand naar eigen behoefte verlengen. 
Deze procedure wordt ook wel clock stretching genoemd. 
Zo kunnen langzame slaven wachttijden inlassen. 
De master moet hiermee rekening houden.

Bij het transport wordt het hoogwaardigste bit (MSB) van een byte als eerste verzonden, en het laagstwaardige bit (LSB) als laatste.
Na het verzenden van de data geeft de controller een Stop conditie. 

Hiermee wordt de bus terug vrijgegeven. 
De IC`s die op de bus hangen beginnen nu terug te luisteren naar een nieuwe Start conditie.

Toepassingen van I2C.

Omdat het een eenvoudig toe te passen protocol is, zijn er zeer veel toepassingen van I2C. 
Je kunt ze in bijna alle elektronica producten vinden.
Meestal beseffen we ons niet eens dat er in een product zoveel elektronica aanwezig is en zeker geen protocol om de elektronica met elkaar te laten communiceren. 

Hier volgt een lijst van producten waar I2C in aanwezig kan zijn :

  • TV's
  • Videorecorders
  • Radio's
  • Versterkers
  • Mengpanelen
  • Decoders
  • Wasmachines
  • LCD displays 

I2C interface op de Raspberry Pi

Op de Raspberry Pi kun je de I2C interface gebruiken met de pins aangegeven op het schema hieronder.
De keuze welke voltage je wilt gaan gebruiken is uiteraard aan jezelf.


Wat is een Raspberry Pi?



De Raspberry Pi is een computerboard zo groot als een creditcard dat kan worden aangesloten op een tv en een toetsenbord.
Het is een op ARM-gebaseerd mini-board die veel taken van een normale pc kan uitvoeren, zoals spreadsheets, tekstverwerking, spelletjes en HD-video’s afspelen.

De Raspberry Pi werd ontwikkeld aan de Universiteit van Cambridge en is bedoeld voor educatieve doeleinden.
De productie is op 10 januari 2012 begonnen.
De beschikbare besturingssystemen zijn diverse Linuxdistributies en RISC OS.
Omdat de Raspberry Pi gebruikmaakt van een ARM11-processor moeten bestaande besturingssystemen geport worden.


De Raspberry Pi is ideaal om te leren programmeren en om hardware aan te sturen.

Kenmerken van de Raspberry Pi (Model A en Model B)

  • Broadcom BCM2835 700 MHz ARM1176JZFS-processor met FPU en videocore 4 GPU
  • GPU biedt Open GL ES 2.0, hardware-versnelde OpenVG, en 1080p30 H.264 high-profile decodering
  • GPU bereikt 1 Gpixel/s, 1.5 Gtexel/s of 24 GFLOP's met textuurfiltering en DMA-infrastructuur
  • 256 MB RAM (Model A)/ 512 MB RAM (Model B)
  • Een SD-kaartsleuf, met Linux-versie
  • USB 2.0-aansluiting (model A heeft 1 aansluiting / Model B 2 aansluitingen)
  • 10/100 BaseT Ethernet aansluiting (enkel bij model B)

Veelgestelde vragen Raspberry Pi

Wat zijn de verschillen tussen Raspberry Pi Model A en Model B?

Model A heeft een geheugen van 256 MB RAM, een USB-poort en geen Ethernet (netwerkaansluiting) in vergelijking met model B, die 512 MB RAM, twee USB-poorten en een Ethernet-poort heeft.

 

Maten Raspberry Pi

Board is 85.60 mm x 53.98 mm

Hoogte:
Ethernet poort – 13mm
Usb 2.0 poorten – 15mm
Audio jack – 10mm
RCA video – 13mm
HDMI – 6 mm
SD Kaart – 4.5 mm (onder)
Micro USB power – 2.5 mm
Standaard PCB Board dikte - 1.57mm


Gedetailieerde info over maten van de Raspberry Pi.




Besturingssystemen

Dit is een lijst met werkende besturingssystemen, systemen die geport zijn, óf op het moment geport worden naar de Pi.