Warning: Illegal string offset 'name' in [path]/includes/functions.php on line 6439
SPI/PIC18f4550 -
+
1 2 3

thread: SPI/PIC18f4550

  1. #11
    Senior Member
    Nov 2005
    Latvija, Kuldīga
    1,059

    Re: SPI/PIC18f4550

    Nē, uz COM portu sūtu caur 25. kāju (TX), bet SPI izmantoju: 26, 33, 34.
    SPI mēģināju startēt ar 32KHZ un vēl 64 dalītāju, bet tāpat līdz sakarīgam variantam netiku.
    Nu bet tas ir viens kontrollers, kurš var darīt tikai vienu darbību konkrētā laika brīdī. Ja tas sūta datus pa COM, bet tajā pašā laikā pa SPI tam grūž iekšā kaut ko - lōģiski, ka nespēs korekti saņemt.
    Tev raidītāja kodā ir koments:
    :
    // garāka pauze....
    Nu to tad arī ieliec. Būs laiks izpildīt:
    :
     while (true) {
        if (DataRdySPI()) {
            comOut(getcSPI());
         }
    Un, manuprāt, vari droši celt augšā SPI frekvenci. Es ar 4Mhz kvarcu no PIC16 sūtīju uz 74HC595 reģistru (tas nav PIC, bet SPI protokols tik un tā) ar max ātrumu, ko var izspiest, nebija nekādu problēmu ar 20..30 cm vadiem.
    Signalizācijas, videovērošanas ierīkošana Kuldīgā.
    Temperatūras, gaisa mitruma, atmosfēras spiediena u.c. mērījumi, to publicēšana internetā. Data logging.
    http://narodmon.ru/1191

  2. #12
    Senior Member
    Apr 2006
    979

    Re: SPI/PIC18f4550

    Nav taisnība par vienu darbību konkrētā brīdī. Ja izmanto aparātiskos portus un pareizi uzstāda pārtraukumus, viss notiek paraleli. Nostrādā pārtraukums tajā brīdī, kad porta bīdes reģistrs tukšs un tajā var rakstīt nākošo porciju, vai arī, kad uz porta saņemta jauna datu vienība.

  3. #13
    Senior Member
    Feb 2007
    4,624

    Re: SPI/PIC18f4550

    nu te, skjiet, peec buutiibas nav ponjas.
    1. SPI iebuuveetie [receive/transmit] buferi ir ljoti iisi - baits/4 baiti, ar kaartu
    2. par sho buferi piepildiishanos/iztukshoshanu zinjo konkreti statusa biti [nezinu c, moska vinjsh maak korekti izcelt tos]
    3. normaalai komunikaacijai ir nepiecieshami normaala izmeera receive/transmit buferi [ram] - nelielu apgabalu gadiijumaa: regjistrus, lielaaku - regjistrus [buferzona] un porcijaam uz aareeju ram [da arii kaut aareeja SPI ram, vai caur paraleelo shinu/regjistru]
    4. jaa, normaali ir straadaat ar irq: tajaa piepildam sho receive/transmit buferi + saliekam karogus lielaa bufera lietaam, paarbiidam to pointerus
    5. staavu zemaak [ok, var arii ar irq, bet to atstaat tikai karoga liimenii, karogs regulaari tiek apskatiits, un pie nepiecieshamibas tiek apkalpota shii subprogramma] darbojamies ar lielaako buferu lietaam.
    6. lielos buferus, peec vajadziibas: var kaa blokus, var ar peldoshajiem pointeriem, var ar shadow blokiem..

    ceru, ka kaads ko saprata

  4. #14
    Moderator
    May 2007
    Rīga
    1,862

    Re: SPI/PIC18f4550

    Vispār jā, priekš komunikācijām buferu lietas ir ļoooti noderīgas. Piemēram, ja pa seriālo jāpārraida čupa baitu bez IRQ tad sanāk daudz liekas gaidīšanas. Reiz uzrakstīju softisku FIFO buferi seriālā porta datu apmaiņai. Sanāk, ka softs ieraksta buferī datus un palaiž pārraidi. Tikko baits pārraidīts - IRQ, ja buferī vēl ir dati, izvada nākošo baitu un tā līdz brīdim, kad buferis ir tukšs. + status biti, ka buferis ir tukšs vai pilns. Saņemšanai - tas pats. Sanāk, ka tagad varu piekrāmēt kaut pilnu buferi momentā un tad darīt citas lietas kamēr buferis tiek palēnām iztukšots tik ik pa brīdim apstrādājot IRQ.
    Ir 10 veidu cilvēki - tādi, kas saprot bināro kodu un tādi, kas nesaprot.

  5. #15
    Moderator
    Jan 2009
    Rīga
    4,417

    Re: SPI/PIC18f4550

    Man kaut kur bija 20 baitu pašrakstīts fifo buferis. Murgaini bija ar ASM rakstīt bet gala sānā kaut kas arī strādāja.

    PS: Kods, diemžēl, piekš AtMega48.

  6. #16
    Senior Member
    Feb 2007
    4,624

    Re: SPI/PIC18f4550

    korektaa softaa prastu gaidiishanu neizmanto. tas ir iesaaceeju/rupjsh tonis.
    respektiivi, normaali ir:
    daudzliimenju irq [vai nu hardwariski, ja to paredz mcu, vai softiski, kaa piciem]
    pamatliimenii loop notiek leeno/pamatprocesu apstraade nonstopaa
    vienigaa gaidiishana varetu buut: ja pamatlaikaa nav nepieciesamiibas loop, tad taa staav/gaida kaadu irq vai taa karogu.

    gaidiishana irg, apaksprogrammaas - kategoriski jaaizmirst.

  7. #17
    Junior Member
    Mar 2008
    22

    Re: SPI/PIC18f4550

    To gaidīšanu es tur iebāzu tikai uzskatāmībai un izmantoju tikai testam. Dabīgi, ka nopietnākā risinājumā iesaldēt visu ar loop nav smuki..

    ar buferi te lieliski noder pics ar lielāku atmiņu. Taisīju savu "video adapteri", kur viens PIC18 sūta otram PIC (sākotnēji 18, pēc tam 32) caur UART datus (0,5Mbit). Izmantojot ārējo RAM (SPI) uzkāpu uz izaicinājuma, ka tas strādāja lēnāk par manu UART, turklāt grūti caur SPI vienlaicīgi ķeksēt datus ārā un rakstīt uz IRQ, kā nekā IRQ bremzēt nevar. Tad taisīju otru iekšējo rindu, bet nu figņa...
    Par laimi PIC32 atmiņas ir pietiekami lai šo realizētu... Vispār 32nieks izskatās baigā pasaka..

    Par to paralēlo darbību ar SPI un UART - arī biju iedomājies, ka šie nevar darboties vienlaicīgi, tāpēc atslēdzu UART eksperimentāliem nolūkiem, bet ar "ciet acīm" grūti strādāt. Rezultāti neuzlabojās... Osciļa man nav, tas visu mazliet sarežģa...

    Pagaidām esmu izdīrājis savu risinājumu un atgriezīšos pie tā vēlāk, liels paldies visiem par komentiem!

  8. #18
    Senior Member
    Feb 2007
    4,624

    Re: SPI/PIC18f4550

    To gaidīšanu es tur iebāzu tikai uzskatāmībai un izmantoju tikai testam. Dabīgi, ka nopietnākā risinājumā iesaldēt visu ar loop nav smuki..

    ar buferi te lieliski noder pics ar lielāku atmiņu. Taisīju savu "video adapteri", kur viens PIC18 sūta otram PIC (sākotnēji 18, pēc tam 32) caur UART datus (0,5Mbit). Izmantojot ārējo RAM (SPI) uzkāpu uz izaicinājuma, ka tas strādāja lēnāk par manu UART, turklāt grūti caur SPI vienlaicīgi ķeksēt datus ārā un rakstīt uz IRQ, kā nekā IRQ bremzēt nevar. Tad taisīju otru iekšējo rindu, bet nu figņa...
    Par laimi PIC32 atmiņas ir pietiekami lai šo realizētu... Vispār 32nieks izskatās baigā pasaka..

    Par to paralēlo darbību ar SPI un UART - arī biju iedomājies, ka šie nevar darboties vienlaicīgi, tāpēc atslēdzu UART eksperimentāliem nolūkiem, bet ar "ciet acīm" grūti strādāt. Rezultāti neuzlabojās... Osciļa man nav, tas visu mazliet sarežģa...

    Pagaidām esmu izdīrājis savu risinājumu un atgriezīšos pie tā vēlāk, liels paldies visiem par komentiem!

    pag, Tu iedoamajies taapeec, ka Tev nav datasheet pieejams, Tev patiik ko izdomaat, nespeej datasheet atrast aprakstu, vi kas par vainu.
    ir mcu, kas ljauj vuenlaikus, ir kas ljauj vainu/vainu..
    cilveek, Tev bi iemaaciities 16F84, un tad taalaak. a to buus veel viens, kas 32 series meegjinaas gismas diodi mirkskjinaat..

  9. #19
    Junior Member
    Mar 2008
    22

    Re: SPI/PIC18f4550

    a to buus veel viens, kas 32 series meegjinaas gismas diodi mirkskjinaat..
    Ļaušu Tev mirkšināt savu gaismas diodi. Gan jau Tev vēl vienu palīgu nevajadzēs

  10. #20
    Senior Member
    Sep 2006
    Riga
    3,053

    Re: SPI/PIC18f4550

    imho, izspiest no čipa 99% var tikai rūdīts specs.
    Jauniņiem jau "atļauts" ņemt jaudīgāku dzelzi .. kaspich, vai tev žēl, ka kāds mācās!?

    es pats uz atmega128 miršķināju LED-u.. un pārāk nestresoju, arhitektūru jau izprast var tikai eksperimentējot. Tas ka gatavā produktā izmanto 1% no čipa - tad gan fail.

+