16F877A secīgiem sakariem

S

shaun_c_m

Guest
hello, i bija jautājums, ja kāds varētu man palīdzēt ar pic vienošanās, izmantojot sērijas protokolu.im mēģināt izveidot vienotu matrici vairākiem slave kombinācija, izmantojot 16F877A pic visām vienībām.

kas man būtu vajadzīgs ir kapteinis ierīces, lai varētu uzsākt nodot vienu no vergiem.Man to vajag risināt vergu kas ir jānosūta, un arī vispārējā pirkšanas iespējas.
kapteinis būs iespējams nosūtīt 10 baitus vergu ierīcei (-s), un tās tiks uzglabātā tempory atmiņā kā mainīgie.Es alocate fiksētās vietās, lai tiem.

pārsūtīšanas ātrums nav svarīgs jautājums.Es būšu darbojas pie 20 MHz kristāls, un man ir nepieciešams nodot pilnīgu saskaņā ar vienu desmito daļu no otrā maks.i bija plāno rakstīt programmatūra šīs daļas, bet, kad es sapratu, ka tur bija aparatūra, lai veiktu tā, es sāku mēģināt izmantot to vietā.

i ir mēģinājis lietot I2C funkciju, bet es esmu ne tikai, lai varētu lietot šo konkrēto metodi.

kapteinis vajadzētu pārtraukt vergu ierīces
vergu vajadzētu ignorēt, ja adrese nesakrīt
ja adrese atbilst tam šādi 10 baiti ir saņemti un glabāti
paziņojums būs tikai 1 virzienā, kapteinis uz slave
starp ierīcēm attālums ir 30 cm (PCB trases garums) maks
i var rezerves 2 piespraudes (3, ja absolūti neccesairy)
tas ir ticami, ti, zems korupcijas protokols
ierīcēm, tiks palaists neatkarīgiem pulksteņiem, bet visu 20 MHz
tur būs 1 master, 5 vergi
ostas, kas ir analogs iespējams ir allready tiek izmantoti
es izmantoju 40 pin versija chip

es lietoju assembler to programmu, bet i dont zināt, ja relocateable kods darbojas droši, jo, izmantojot dīvainu programmētājs (Velleman VM111).kad man bija spēlē par ar PWM es beidzot dabūja to darbu, novēršot pārvietošana un grūti kodēšanas to īpašo bankām, bet man ir tikai neliela pieredze ar attēli, im atrast šajā grūtajā ar I2C.

ņemot zema ātruma prasības uzdevumu, tas droši vien būtu vieglāk rakstīt programmatūru, lai veiktu to.Tomēr, ja kāds varētu man kāds padoms par izmantojot aparatūras i would appreciate it.arī, ja kādam ir kāda koda / soli pa solim "norādi par to, kā īstenot šādu funkciju es būtu pateicīgs.

pateicība
(atvainojiet, ja tas viss bija mazliet ilgi aizdusu)

 
<a href="http://www.komputerswiat.pl/nowosci/internet/2011/09/tapeta-na-weekend-koloseum---amfiteatr-flawiuszow.aspx"> <img align="left" src="http://www.komputerswiat.pl/media/2011/64/1765558/tapeta-zaj.jpg" /></a> Dzisiejsza Tapeta na weekend to arcydzieło rzymskiej inżynierii, które zachwyca od niemal 2 tysięcy lat.<img width='1' height='1' src='http://rss.feedsportal.com/c/32559/f/491281/s/1328a269/mf.gif' border='0'/><br/><br/><a href="http://da.feedsportal.com/r/96614629025/u/0/f/491281/c/32559/s/1328a269/a2.htm"><img src="http://da.feedsportal.com/r/96614629025/u/0/f/491281/c/32559/s/1328a269/a2.img" border="0"/></a>

Read more...
 
PIC ir celta iezīme rīkoties ar to.Paskaties uz datu lapu un USART sadaļā.Jo īpaši izskatīt 9 bitu režīmā.Jūs būtu jāizmanto RS485 multidrop komunikāciju.9. bit izmanto pateikt vergiem, ka adrese ir uz autobusu.Šī metode ļauj tikai viens meistars.

 
I2C veids 16F877A būtu ceļš.Tas sinhrono autobusu un pilnu MSSP (Multi meistars) aparatūras atbalsta.

 
hi guys, paldies par atbildēm.IVE mēģināja abām metodēm.

USART

Man izdevās iegūt USART darbojas diezgan viegli.tas ir diezgan vienkāršs iezīme, salīdzinot ar I2C metodi, diemžēl, ir grūti iegūt to darbu vairāku vergu vidi.

im šobrīd mēģina veidot kodu, lai to varētu risināt vergi, un domāju, ka IVE tikai par managd to, bet tur ir koda daudz kaut ko I2C var rīkoties automaticly.

(lieliska ideja par 9. mazliet! i bija tikai gatavojas slazdošanai visiem citiem vergiem in cilpa līdz pārraide bija beidzies!)

Es tagad mēģina iegūt 2 virzienos sistēma strādā.nekas, ka sarežģītas, bet tikai ļauj vergu pieprasīt datus (par kļūdu un startēšanas).ar USART tā diezgan izaicinājums, lai izvairītos no dēļiem runāt viena otru.IVE ir mucking par mēģinot savienot visas RB0 pārtraukt adatas visu dēļi un izmanto to kā veidu, kā izvairīties no diviem dēļiem mēģina runāt symaltaniously.I2C

ar I2C režīmā, kaut arī tam ir visas iespējas celta kā hardware, i cant get it darbojas.Es vēl pat izdodas iegūt baits starp tiem, datiem vai adreses.

Es domāju, im nāksies lasīt palīdzēt failus I2C vēlreiz, tagad, es saprotu, mazliet vairāk.Tomēr, ja kāds ir kāda tukša kaulus kodu pārraidīt baitu starp 2 16f877a pics pa I2C, tas padara daudz vieglāku.lielākā daļa no internetā piemēri ir pārāk sarežģīta, lai mani atpakaļ enginneer un bez izejas punkts IVE tika iemesti pie dziļā beigās.ir tikai viens kapteinis
tā pārsūta 5 vergiem

 
Vai es varu izmantot valodas pamatkursu, lai programma tai

 
Jā, U var izmantot Basic.piemērs zemāk.

Kods:"Saskarne ar 24LC32 sērijas EEPROM

DEVICE = 16F877 'Lietot ierīce ar MSSP modulis

DIM Loop AS BYTE

DIM Array [10] Kā BYTE

"Transmit baitus I2C autobusu

HBSTART "Nosūtīt START stāvoklis

HBUSOUT% 10100000 "Target EEPROM un nosūtīt RAKSTIET komanda

HBUSOUT 0 "Nosūtīt HIGHBYTE un adrese

HBUSOUT 0 "Nosūtīt LOWBYTE un adrese

FOR LOOP = 48 TO 57 'Izveidot cilpa, kurā ASCII 0-9

HBUSOUT LOOP 'Nosūtīt vērtība LOOP ar EEPROM

NEXT 'Aizvērt cilpa

HBSTOP "Nosūtīt STOP stāvoklis

DELAYMS 10 "Pagaidiet, lai dati, ko ievada EEPROM matricā

"Saņemt bytes no I2C autobusu

HBSTART "Nosūtīt START stāvoklis

HBUSOUT% 10100000 "Target EEPROM un nosūtīt RAKSTIET komanda

HBUSOUT 0 "Nosūtīt HIGHBYTE un adrese

HBUSOUT 0 "Nosūtīt LOWBYTE un adrese

HBRESTART                          ' Send a RESTART condition
HBUSOUT% 10100001 "Target EEPROM un nosūtīt READ komandai

FOR Loop = 0 līdz 9 'Izveidot cilpa

Array [Loop] = HBUSIN 'Ielādēt masīvu ar bytes saņēma

IF Loop = 9 THEN HBSTOP: VĒL HBUSACK "ACK vai STOP?

NEXT 'Aizvērt cilpa

PRINT AT 1,1, STR Array 'Display Array kā STRING

 
paldies nishal, bet i dont know Basic for attēli.Diemžēl es izmantot tikai assembler, tomēr es esmu pateicīgs.

esmu darījis meklēšanu microchip.com un konstatēja, ka pirmkods I2C, bet kad es redzēju, ka tā izmantoja 600 koda rindiņas pārraidīt baitu es biju vairāk nekā mazliet noraizējies.

Es domāju, ka ir plāns.jo man ir darba USART sakarā es domāju, im gatavojas iet ar to.Es domāju, ka labākais risinājums ir izmantot 9. bitu lai norādītu adresi RINTHESUN ieteica, bet gan ieviest ACK funkcija, kā arī.Es droši vien nāksies izmantot papildus tapa par šo, bet shouldn't būt problēma, tas pat varētu būt iespējams multiplekss to ar datiem autobusu.

pseudocode secībamasterTX sūta (address_n baits) (1); sūtīt adreses baits plus adrese norāde bit nokļūt uzmanības vergu
vergu sūta (ACK) par atsevišķu pin

masterTX sūta (datu baits) (0)
masterTX sūta (datu baits) (0)
masterTX sūta (datu baits) (0)
masterTX sūta (datu baits) (0)

masterTX sūta (address_n baits) (1); atkārtot adresi signāla beigām pārraides
vergu sūta (ACK) par atsevišķu pin

ja NACK nosūta kapteinim būs atkārtota pārraide

adreses baits b'00000000 "ir vispārīgs zvans
arī

ik 1/10th otrais ir aptauja visu vergu

masterTX sūta (address_1 baits) (1); saņemt uzmanību vergu 1
vergu sūta (ACK) par atsevišķu pin
masterTX sūta (address_1 baits) (1); end pārraide
vergu sūta (ACK) par atsevišķu pinmasterTX sūta (address_2 baits) (1); saņemt uzmanību vergu 2
vergu sūta (ACK) par atsevišķu pin
masterTX sūta (address_2 baits) (1); end pārraide
vergu sūta (ACK) par atsevišķu pin

utt

ja NACK nosūta kapteinim būs atkārtot nosūtīšanu par šo ierīci.jo būs tikai viena ierīce, nosūtot tur mēdz būt problēmas ar autobusu sadursmēm.ja vergu vajadzībām dati būs gaidīt iznākumu un pēc tam signāls ACK, NACK.

( "Es dzirdu tevi, i need dati")pat ar vergiem nepieciešamības testēt katru baitu, kas nāk caur USART joprojām ir vairāk nekā pietiekami ātri.20 Mhz pulksteni im darbojas vismaz kārtas lielums ātrāk nekā es būs nepieciešams.Es domāju, ka tas būs diezgan viegli ar kodu, salīdzinot ar I2C, un ir jomas paplašināšanai.būtu iespējams pārveidot tā, lai tā būtu bi-directional (lai gan ne pilnībā duplex), un tas varētu vadīt tik daudz ierīču produkciju var atbalstīt.Es domāju, ka paliks I2C citu dienu

thanks everyone!ps.varētu kāds izskaidrot atšķirību starp:

"0x00" un "00h"

 
paldies nishal var u man palīdzēt communucation I2C starp pic PIC izmantot valodas pamatkursu

 

Welcome to EDABoard.com

Sponsor

Back
Top