ohje SPI ohjelmointi (C) PIC16F877!

R

reddster

Guest
Hei kaikille!

Olen opiskelija, joilla on meneillään hanke, joka liittyy rajapinnat
on PIC16F877 joka vaiheen lukittu loop laite (ADF4360 -

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Viileä" border="0" />

käyttäen SPI.

Pohjimmiltaan Minun täytyy lähettää kautta SDO, 3 eriä 24 bittejä
laitteen initialise sitä.Olen huolissani siitä, että voisin jättää muutaman rivin
koodia, koska en voinut havaita SCK signaali sen SCK nastainen (RC3).
Lisäksi teen sen oikein, että alustus on SSPSTAT, SSPCON
ja lähettävän osa?

Olen täysin teidän apuanne!

Tämä on minun koodi C-kieli:#
include <pic1687x.h>
#
include "delay.c"mitätön tärkeimmät () (PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTD = 0x00;
PORTE = 0x00;

TRISC = 0b00010000; / / RC4 = SPI tiedot
TRISD = 0x00;
TRISB = 0b00000001; / / RB0 = tulo
TRISA = 0x00;
TRISE = 0x00;/ / initialise PLL
/ / R counter = 0011 0000 0000 0000 0111 1001
/ /
Ohjaus linkku = 0000 1111 1111 0001 0000 0100
/ / N counter = 0000 0000 1011 0100 0000 0010SSPSTAT = 0b01000000;
SSPCON = 0b00100010;

SSPBUF = 0b00110000; / / R counter
SSPBUF = 0b00000000;
SSPBUF = 0b01111001;
RA5 = 1; / / LE korkea siirtää siirtää rekisteristä salpa
RA5 = 0;

SSPBUF = 0b00001111; / /
OhjausSSPBUF = 0b11110001;
SSPBUF = 0b00000100;
RA5 = 1; / / LE korkea siirtää siirtää rekisteristä salpa
RA5 = 0;

DelayMs (20); / / välinen viive valvontavaliokunnan ja N Counter

SSPBUF = 0b00000000; / / N Counter
SSPBUF = 0b10110100;
SSPBUF = 0b00000010;
RA5 = 1; / / LE korkea siirtää siirtää rekisteristä salpa
RA5 = 0;while (1) (

if (RB0 == 1) / / Kun RB0 on korkea, vedä CE nastainen korkea päälle PLL
RC1 = 1;
if (RB0 == 0) / / Kun RB0 on alhainen, vedä CE nastainen alhainen sammuttaa PLL
RC1 = 0;

)
) / /
End tärkeimmistäKiitos vielä kerran!

 
En ole käyttänyt 877s MMSP mutta luulen, että sinun täytyy varmista SSPBUF on tyhjennettävä ennen kirjallisesti seuraavaan tavu.The apnote kertoo jotain tarkkailun WCOL.
[edit] juuri löytänyt tämän ihmisarvoisen opetusohjelman koko Mikrosirun sivuston http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf Siinä sanotaan, sinun täytyy tarkistaa Puskuriliuos täyden lipun lukemaan puskuria vaikka vain kirjallisesti tiedot .[/ edit]

kuinka nopeasti on PLL laite?Olet asettanut SPI kello klo Fosc/64 At 20MHz kello, sinulla on käynnissä sen 20/65 MHz.tai 3.2 meitä kohti bit.Joudut mahdollisesti bittinen bang SPI, jos se
on liian nopea.Bitbanged SPI on erittäin helppoa.Jos et tarvitse nopeutta lisätään MSSP laite, I'd bittinen bang SPI, sillä a) sen hyvin yksinkertainen protokolla ja b) Haluaisin tallentaa MSSP korkea suorituskyky käyttötarkoituksiin (kuten sarjaportin I / O tai I2C).

Phil

 
Voi .. kiitos paljon vastauksestanne ja linkkiä .. siis pohjimmiltaan Minun täytyy tehdä harjoitustestien lukea tyhjentää SSPBUFF ennen kuin voin tehdä ensi välittää?Myös, mitä tarve tarkastaa puskurin tila ennen trnsmitting seuraavan byte, olen hämmentynyt joka bit i tarvitse tarkistaa.Onko WCOL tai SSPOV.

-------------------------------------------------- -------------------------------------
Tässä on ote PIC16F877 tekninen osalta 2 bittiä:

WCOL: (Master Mode) 1 = A kirjoittaa SSPBUF oli yrittänyt kun I2C edellytykset eivät kelpaa
0 = Ei yhteentörmäyksen

SSPOV: (SPI Mode) 1 = Uusi tavu on saanut, kun taas SSPUF omistaa edellisen tietoihin.Tiedot SSPSR on menetettäväksi overflow.Vuonna Slave-tilassa, käyttäjän on luettava SSPBUF, vaikka vain lähettämällä tietoja, jotta voidaan välttää ylivuotojen.Vuonna Master tilassa, overflow bittinen ei ole asetettu, sillä kullakin toiminta aloitetaan kirjallisesti, SSPBUF rekisteriin.(On oltava poistamistasi ohjelmistot).
0 = Ei overflow
-------------------------------------------------- -------------------------------------

From linkkiä antama Phil,
ymmärrän, että on tarpeen tehdä harjoitustestien lukea jokaisen välittää.Mutta miten voin tietää, milloin välittää ei tehdä ennen kuin voin itse suorittaa harjoitustestien lukea?

Kiitos ystävällisistä apua!

 
ei, sinun on loop odottaa puskurin täyden lipun tehdä lukea.

 
Thanks for the info!

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />

Joten, olen tehnyt sen oikeassa seuraava koodi?#
include <pic1687x.h>
#
include "delay.c"

char dummy_read_byte;

mitätön spi_send (char);

mitätön tärkeimmät () (PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTD = 0x00;
PORTE = 0x00;

TRISC = 0b00010000; / / RC4 = SPI tiedot
TRISD = 0x00;
TRISB = 0b00000001; / / RB0 = tulo
TRISA = 0x00;
TRISE = 0x00;SSPSTAT = 0b01000000;
SSPCON = 0b00100010;

dummy_read_byte = SSPBUF; / / tehdä harjoitustestien lukea

spi_send (0b00110000);
spi_send (0b00111110);
spi_send (0b10100011);

)
) / /
End tärkeimmistämitätön spi_send (char data) (

int i = 0;
char dummy_read;
char bf_status;

SSPBUF = tiedot; / / lähettää bytewhile (i! = 1) (/ / ei poistu loop ellei BF bit = 0
bf_status = SSPSTAT & 0x01; / / onko BF bit on 0
if (bf_status == 0x00)
i = 1;
)

dummy_read = SSPBUF; / / harjoitustestien lukea

)Thanx in advance!

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top