elomax

[ Techniek ] [ Shop ] [ Site map
Inleiding ] Processor ] Ontwikkelomgeving ] Interrupts ] Digitale I/O ] Seriele communicatie ] Timers ] A/D Conversie ] Puls teller ] [ SPI ] Watchdog ] Clock monitor ] EEPROM ] Configuratie ] Ontwerp technieken ] Toepassings voorbeeld ]

Terug
Omhoog

De seriële uitbreidingspoort

De uitbreidingspoort op de micro-controller is eveneens een seriële poort, waarbij echter ook de clock wordt meegestuurd. De poort kan gebruikt worden voor communicatie tussen twee of meer micro-controllers, en voor uitbreiding van de I/O capaciteit. Dit type poort wordt SPI (Serial Peripheral Interface) genoemd.

De communicatie gaat via twee datalijnen. Deze datalijnen zorgen voor communicatie in twee richtingen tegelijk (full-duplex.) De clock-lijn geeft het ritme aan waarmee de bits verstuurd en ontvangen worden.

Netwerken

Elke micro-controller kan als 'master' of als 'slave' ingesteld worden. De master beheert de communicatie tussen de processoren. De master genereert de clock (op de PD4 pin.) Voor de slaves is de clock een ingang (ook op de PD4 pin.) Een controller is een master wanneer de SS-pin op PD5 een '1' is. Als deze pin een '0' wordt gemaakt, is de controller een slave. In een netwerkje mag op elk moment maar één van de controllers een master zijn, de anderen zijn dan allemaal een slave.

Twee pinnen verzorgen het datatransport tussen de controllers. De data gaat van de master naar de slave(s) via de MOSI pinnen op PD3, en van de slaves naar de master via de MISO pinnen op PD2. De communicatie gaat in twee richtingen tegelijk. Op het moment dat de master een byte in het zend-register zet (het SPDR register), wordt dit seriëel naar de slave(s) verstuurd. Daar komt het aan in het SPDR register van de slave(s).
Tegelijkertijd kan het byte dat door één van de slaves in zijn SPDR register werd gezet naar de master verstuurd worden. Een slave kan zelf bepalen of hij data naar de master terugstuurt of niet. Uiteraard mag er maar één slave tegelijkertijd data naar de master terugsturen.

Speciale I/O functies toevoegen

Uitbreiding van de I/O capaciteit kan via speciale IC's die over een seriële poort beschikken zoals die ook op de micro-controller is aangebracht. Dergelijke IC's zijn beschikbaar voor het besturen van LCD displays, analoge ingangen, analoge uitgangen, etc.

Ook gewone TTL IC's kunnen gebruikt worden om het aantal digitale I/O's te vergroten. Een voorbeeld is verderop gegeven.

De I/O uitbreiden

De uitbreiding van de digitale I/O kan via goedkope TTL of CMOS IC's, die in staat zijn seriële data om te zetten naar parallel (voor het uitbreiden van het aantal uitgangen), of van parallel naar seriëel (voor het uitbreiden van het aantal ingangen.)

Deze IC's hebben een data in- of uitgang, en een clock ingang. Daarnaast moeten ze beschikken over een 'strobe' of 'load' ingang. Geschikte IC's zijn bijvoorbeeld de 74HC4094 voor extra uitgangen, of de 74HC165 voor extra ingangen.

De procedure is als volgt:

  1. De 'load' ingang van het IC met de extra ingangen wordt geaktiveerd, zodat de parallelle data in dit IC wordt ingelezen.

  2. Het byte dat bestemd is voor het IC met de extra uitgangen wordt in het SPDR register gezet.

  3. De micro-controller verstuurt nu het te verzenden byte seriëel naar het IC met de extra uitgangen, en tegelijkertijd wordt het IC met de extra ingangen seriëel gelezen.

  4. De 'strobe' ingang van het IC met de extra uitgangen wordt geaktiveerd, zodat de door het IC seriëel ontvangen data op de parallelle uitgangen wordt gezet.

  5. Het uit het IC met de extra ingangen opgehaalde byte kan worden gelezen uit het SPDR register.

Met behulp van de SPR1 en SPR0 bits in het SPCR register wordt geprogrammeerd hoe snel het transport van de data gaat.

SPR1

SPR0

bitrate

0

0

1 MHz

0

1

500 kHz

1

0

125 kHz

1

1

62.5 kHz

Twee andere bits in het SPCR register bepalen hoe de clock-uitgang zich zal gedragen. Als CPOL een '0' is, is de clock-uitgang een '0' wanneer er geen datatransport is. Als het CPOL bit een '1' is, is de clock-uitgang in rust een '1'. Het CPHA bit bepaalt of het bittransport op een opgaande flank van de clock moet gebeuren (CPHA is een '1'), of op een neergaande flank (CPHA is een '0'.) Wanneer de bovengenoemde IC's gebruikt worden, moet zowel CPOL als CPHA een '1' gemaakt worden.

Het SPCR register bevat ook een bit waarmee de micro-controller als master geprogrammeerd kan worden. Als de poort gebruikt wordt voor uitbreiding van de digitale I/O, moet de micro-controller als master functioneren. Het MSTR bit in het SPCR register moet dus een '1' gemaakt worden.

Interrupts

Wanneer het te verzenden byte verstuurd is, kan een interrupt gegenereerd worden. Dit gebeurt wanneer het SPIE bit in het SPCR register een '1' gemaakt wordt.

Open-collector uitgangen

Het DWOM bit in het SPCR register bepaalt of de uitgangen van poort D (alle uitgangen) gewone uitgangen zijn (en zowel naar de +5V als naar massa kunnen  schakelen) of 'open-collector' uitgangen (dan kunnen ze alleen naar massa schakelen.) Het is verstandig om dit bit op '0' te zetten.

Seriële poort aanzetten

Het SPE bit in het SPCR register bepaalt of de seriële poort aan staat, of is uitgeschakeld. Dit bit moet een '1' zijn om de poort te kunnen gebruiken.

Statusregister

De status van de seriële poort kan worden afgelezen van het SPSR register. Het WCOL bit in dit register wordt een '1' wanneer naar het SPDR register wordt geschreven terwijl er nog een byte getransporteerd wordt. Dit bit is vooral van belang wanneer de micro-controller als 'slave' in een netwerk is opgenomen.

Het MODF bit wordt een '1' gemaakt wanneer de SS pin op PD5 een '0' gemaakt wordt, terwijl het MSTR bit in het SPCR register een '1' is. Ook dit bit is alleen van belang wanneer de micro-controller in een netwerk is opgenomen.

Wanneer de seriële poort als uitbreidingspoort wordt gebruikt, kan de SS pin op PD5 gewoon als digitale ingang of uitgang gebruikt worden. De richting van de pin wordt vastgelegd met behulp van bit5 in het DDRD register. Met een '1' in dit bit, is de SS pin een uitgang, en met een '0' in dit bit is de pin een ingang.

8 extra uitgangen

Het onderstaande voorbeeld geeft aan hoe het aantal digitale uitgangen uitgebreid kan worden met 8 extra bits.

In dit schema wordt de SS pin gebruikt om de seriëel in het IC geladen data door te geven naar de parallelle uitgangen.

Het aantal uitgangen kan zeer eenvoudig verder uitgebreid worden, door meerdere van deze IC's achter elkaar te zetten. De seriële uitgang van het eerste IC (beschikbaar op pin 9) wordt dan verbonden met de seriële ingang van het volgende IC, etc. Wanneer op deze wijze bijvoorbeeld 6 IC's achter elkaar zijn geplaatst, moeten via de seriële poort 6 bytes worden verstuurd. Het byte dat als eerste verstuurd werd, komt terecht in het laatste IC. Als alle bytes verstuurd zijn, hebben alle IC's een nieuwe waarde ingelezen. Deze nieuwe waarde kan naar de uitgangen worden doorgegeven via de 'strobe' pinnen, die allemaal parallel kunnen zijn aangesloten op PD5. Ook de clocks kunnen parallel worden aangesloten, op PD4.

Een subroutine om data via de uitbreidingspoort te versturen is hieronder gegeven.

spiss 		equ bit5 	|SS pin op PD5, gebruikt voor de strobe
spimosi 	equ bit3 	|data uitgang
spiclk 		equ bit4 	|seriële clock
* initialiseer de uitbreidingspoort
		ldab ddrd 	|maak de pinnen uitgangen
		orab #(spiss or spiclk or spimosi)
		stab ddrd
		ldab portd 	|en maak de strobe een '0'
		andb #(not(spiss))
		stab portd
		ldab spcr 	|kies de snelheid en andere opties
		orab #(spe or mstr or cpol or cpha)
		andb #not(spie or dwom or spr1 or spr0)
		stab spcr
		rts
* stuur een byte naar de uitbreidingspoort
putspi 		equ $
		stab spdr 	|zet het byte in de zender
putspi0 	tst spsr
		bpl putspi0 	|en wacht tot het weg is
		rts
* strobe de nieuwe data naar de uitgangen van het IC
strobespi 	equ $
		pshb
		ldab portd
		orab #spiss
		stab portd 	|maak de strobe een '1'
		andb #not(spiss)
		stab portd 	|en daarna weer een '0'
		pulb
		rts

Registers voor de uitbreidingspoort

De registers die voor de instellingen van de uitbreidingspoort van belang zijn, zijn:

SPCR $1028

spie

spe

dwom

mstr

cpol

cpha

spr1

spr0

 

SPSR $1029

spif

wcol

-

modf

-

-

-

-

 

SPDR $102A

bit7

bit6

bit5

bit4

bit3

bit2

bit1

bit0

© 2005...2008 Elomax [Voorwaarden ]