Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   224 / 1319
(#) Topi válasza watt hozzászólására (») Jún 2, 2008 /
 
Szintúgy. Szerintem elegánsabb módszer nem nagyon van.
Maskolni kell, majd shiftelni.
(#) Soulskater hozzászólása Jún 2, 2008 /
 
Sziasztok!

Épp a Topi féle cikkben leírtakat próbálom végrehajtani csak nekem van pickit2őm.Szóval csinálok egy nyákot amin rajta van a 877, meg az oszcillátor(20Mhz) a két kondi és a pickit kettő lábkiosztása szerint kivezetem a picem lábait hogy összekössem!
1 = VPP/MCLR
2 = VDD Target
3 = VSS (ground)
4 = ICSPDAT/PGD
5 = ICSPCLK/PGC
6 = Auxiliary --->csak ezt nem értem

szóval így jó lesz?Mplabból tudom majd debugolni?

Köszi
(#) szilva válasza Soulskater hozzászólására (») Jún 2, 2008 /
 
Igen, úgy jó lesz. Az AUX lábat normál esetben nem kell sehová bekötni. Azt ne felejtsd el, hogy a NYÁK-odra a PIC tápfeszültségére a VDD és VSS lábakhoz minél közelebbi csatlakozással tegyél egy 100nF körüli hidegítőt! Természetesen a debug is menni fog.
(#) Soulskater válasza szilva hozzászólására (») Jún 2, 2008 /
 
akkor is ha a kitről etetem egyelőre?Mármint a két hidegítő=kondi(bocs de "analfabéta vagyok még)
(#) potyo válasza watt hozzászólására (») Jún 2, 2008 /
 
Az attól függ. Ha a fordítás pillanatában ismert az érték, akkor a fordító simán behelyettesíti a megfelelő értékeket, és ezesetben mindegy a dolog. Ha viszont menet közben kell, akkor vagy az únió, vagy a pointer+castolás adja a legoptimálisabb kódot, mégha ez nemis túl olvasható.
(#) potyo válasza deguss hozzászólására (») Jún 2, 2008 /
 
Idézet:
„Igen, értelek, de mivel az input() függvény 0-ás vagy 1-es bit-et ad vissza, probléma mentesen lehet negálni a "~"-jellel.”


Itt azért emeljük ki, hogy ez csak a CCS fordítóban működik. A legtöbb fordítóban nem létezik bit tipus, a legkisebb adat, amit visszatérési értékként egy rutin tud adni, az egy bájt, vagyis az (unsigned) char tipus. Annál pedig nem mindegy, hogy ~ vagy ! jelet használunk, mert előbbi minden bitet ellentétesre fordít az operandusban, míg utóbbi azt vizsgálja, hogy nulla vagy nem nulla az operandus. Bit esetén ugyanazt adják, de egész bájt esetén már nem!
(#) szilva válasza Soulskater hozzászólására (») Jún 2, 2008 /
 
A Vss és Vdd vezetékek közé, a PIC megfelelő lábaihoz lehetőleg minél közelebb elhelyezve kell a hidegítés. A 877-nek mindkét oldalon vannak tápfeszültséglábai, mindegyiket kösd be! Az nem baj, ha a PIC mindkét oldalára kerül egy-egy hidegítő kondenzátor.
(#) trudnai válasza watt hozzászólására (») Jún 2, 2008 /
 
konstans? Hat beteszed ram-ba es az szetosztodik...

unsigned long szetosztva = 0x12345678;

Utana vagy pointerrel elered (mintha FSR eznel assemblyben), vagy unionnal hozod letre, es akkor egyenkent barmkor megcimezheted. Also 8 bitet meg castolassal

if ((unsigned char)szetosztva == 0x12) ....

es persze lehet ilyen csunyasagokat is muvelni:

if (*(unsigned char*)&szetosztva+1 == 0x34) ....

A jo hir, hogy makrokat lehet irogatni, pl:

#define byte(var,idx) (*(unsigned char*)&var+idx)

es utana mar egyszerubb es szeb a helyzet:

if(byte(szetosztva,1) == 0x34)

(most fordito nelkul csak ugy leirtam, ugyhogy lehet kihagytam zarojelet vagy valamit nagyon elirtam, de kb ez lenne a lenyeg)
(#) Soulskater válasza szilva hozzászólására (») Jún 2, 2008 /
 
köszi találtam itthon 100nF kondit!Akkor indul a szerelés!!
(#) watt válasza trudnai hozzászólására (») Jún 2, 2008 /
 
  1. unsigned long szetosztva = 0x12345678;


Bocsi, azt nem mondtam, hogy a 4 bájt az egy uns. char tömb négy eleme.

  1. cim[4]=UH
  2.       cim[5]=UL
  3.       cim[6]=H
  4.       cim[7]=L
(#) trudnai válasza watt hozzászólására (») Jún 2, 2008 /
 
Tehat akkor egy ilyesmi kellene neked?

unsigned char cim[10];
*(unsigned long*)cim = 0x12345678;

A tomb az pointerkent is felfoghato - vagy ha nem ez kell akkor nem fogom most pontosan mi a kerdes. Be tudnad idezni hogy probalkoztal?
(#) mex válasza Soulskater hozzászólására (») Jún 2, 2008 /
 
Ugyanebbe a cipőben járok én is..
Most jutottam el a Topi-féle cikk alapján a "ledvillogtatáshoz".
Azért tettem idézőjelbe,mert ugyan tudja a leckét mindkét progival,de legalább ötödrészre csökken a ledek váltási ideje a videon láthatóhoz képest...
Az okát nem tudom.
PIC877-04/p, Pickit2,és a kvarc természetesen 4Mhz.
Nem hiszem,hogy működni fog neked a 20megással,mert a progi is 4megásra van irva.
(#) mex válasza mex hozzászólására (») Jún 2, 2008 /
 
Hülyeséget irtam...
Helyesen:a ledek váltási ideje,legalább ötszöröse a videón láthatónak.
Elnézést kérek.
(#) szilva válasza mex hozzászólására (») Jún 2, 2008 /
 
Akkor számoljunk egy kicsit. Ha jól gondolom, az alábbi kódrészlet van időzítésként abban a programban, amit próbálgattok (a "Nullától a robotokig" első részében lévő tesztprogi):

  1. DELAY                                           ;Delay labelje
  2.         MOVLW   d'100'                 
  3.         MOVWF   T1                              ;T1-be bekerül a 200
  4. DEL
  5.         MOVLW   d'255'
  6.         MOVWF   T2                              ;T2-be bekerül a 255
  7. DEL1
  8.         MOVLW   d'20'
  9.         MOVWF   T3                              ;T3-ba bekerült a 10
  10. DEL2
  11.         NOP
  12.         NOP
  13.         NOP
  14.         NOP
  15.         NOP
  16.         NOP
  17.         NOP
  18.         NOP
  19.         NOP
  20.         NOP
  21.         DECFSZ  T3,f                    ;Csökkenti a T3-at, addíg, amig nem nulla
  22.         GOTO    DEL2                    ; mindig visszaugruk a DEL2-re, vagyis a sok NOP-ra
  23.         DECFSZ  T2,f                    ;Ha már nulla, akkor ugyanez eljátszódik a T2-vel
  24.         GOTO    DEL1
  25.         DECFSZ  T1,f                    ;Majd a T1-el is
  26.         GOTO    DEL
  27.         RETURN                                  ;Visszatér a DELAY szubrutinból
  28.         END                                             ;Teljes program végét jelentő END


(A kommentek néhol nem konzisztensek a valódi értékbetöltésekkel!)

Most a nagyfokú pontosságot mellőzni fogom, mert az ugró utasítások pontos végrehajtási idejét és a változók újratöltésére vonatkozó utasításokat nagyvonalúan nem számolom. Ezzel nagyot nem fogok tévedni, mert ezek az idők jóval kisebbek a többihez képest.

Tulajdonképpen három egymásba ágyazott ciklusról van szó, a legbelsőben a ciklusmag 10db NOP utasítás. A legbelső ciklus 20-szor futtatja le ezt a ciklusmagot, az 200db NOP utasítás. A középső ciklus 255-ször futtatja a legbelsőt, azaz a 200db NOP-ot, így már 255*200db NOP-ról beszélhetünk. A legkülső ciklus a középsőt 100-szor futtatja, azaz végül 100*255*200 db NOP-ot fog végrehajtani a CPU, mielőtt eléri a szubrutin végét, a RETURN-t.

A NOP végrehajtási ideje a CPU órajelétől függ. A klasszikus, 4MHz-es órajel ütem azért kényelmes, mert egy NOP-ot a CPU 4 órajel alatt hajt végre, így a végrehajtási ideje pontosan 1us lesz. Ha az órajelet 5-szörösére, 20MHz-re növeled, akkor 200ns lesz egy NOP végrehajtási ideje.

Szóval 4MHz-ről járatva a fenti kódrészlet kb. 100*255*200=5 100 000us lesz, azaz 5.1 másodperc. 20MHz-en ennek az ötöde, azaz kb. 1 másodperc lenne ez az időzítés. Mivel minden kimenetváltás után ugyanez az időzítő rutin van meghivva, így a váltások között ilyen idők telnek el.

Ha már sikerült a progit elindítani, és az MPLAB-ból lefordítva is működésre bírni, akkor érdemes az időzítési konstansokkal eljátszadozni. Pl. kiszámolni, hogy milyen váltási időhöz mekkora konstansok kellenek, és ezt ellenőrizni a valóságban is.

Ha van 16F887-tel szerelt gyári 44-pin demo board, akkor az pl. egy jó feladat, hogy ezt a programot hogy lehet a 887-re átvinni, hogy a demo boardon fusson. Utána el lehet szórakozni a 887 belső oszcillátorával, különböző CPU órajelekkel.
(#) mex válasza mex hozzászólására (») Jún 2, 2008 /
 
Lemértem mechanikus stopperrel:egy "körülfordulásnyi idő" 60.5mp. A kvarc a névleges frekitől 100Hz-el alacsonyabb értéken rezeg,de ez akár a frekimérő hibája is lehet,vagy a mérőzsinór kapacitása is beleszólhat.
(#) mex válasza szilva hozzászólására (») Jún 2, 2008 /
 
Akkor igy még nem kerek(legalábbis nekem).
Erről a progiról van szó: asm_forgo.zip
(#) watt válasza trudnai hozzászólására (») Jún 2, 2008 /
 
Érdekes megoldás, nekem nem jutott volna eszembe.
Én így oldottam meg:

  1. void main(void)
  2. {
  3.         unsigned char cim[10];
  4.         unsigned long const cim_const=(unsigned long)111225896;
  5.        
  6.         cim[3]=((cim_const & 0xFF000000) >> 24);
  7.         cim[4]=((cim_const & 0x00FF0000) >> 16);
  8.         cim[5]=((cim_const & 0x0000FF00) >> 8);
  9.         cim[6]=(cim_const & 0x000000FF);
  10. }


A Tied sokkal tömörebb és egyszerűbb.
(#) szilva válasza mex hozzászólására (») Jún 2, 2008 /
 
Én az "asm_elso.zip"-et szedtem le legelőször, mert az volt a cikkben az első példaprogi. Most megnéztem az "asm_forgo.zip"-et is, abban ugyanaz a DELAY rutin van.

Mi a kérdés? Nem 5mp körüli a lépések közt eltelő idő?
(#) szilva válasza watt hozzászólására (») Jún 2, 2008 /
 
No, én úgy látom, hogy azért a Tied egy szempontból korrekt, a trudnai-é meg másik szempontból

Szóval azt mindenképpen szem előtt kell tartani, hogy a C fordító a több byte-os számokat hogyan ábrázolja: az LSB vagy az MSB van a kisebb címen.

A Te módszereddel biztos lehetsz benne, hogy olyan sorrendben kerül a memóriába, ahogy Te azt elképzeled. Ez akkor lehet jó, ha esetleg valami asm betétben felhasználod az értékeket, esetleg valami PIC-től független kommunikációnál (pl. az USB) kötött byte-sorrend kell. Ha nem úgy csinálod, ahogy beidézted, hanem trudnai módszerével akkor esetleg fordítótól fog függni, hogy milyen sorrendben kerülnek le a byte-ok a pufferedbe.

Ellenben az ő módszere a c-beli feldolgozásoknál lehet kényelmesebb, pont azért, mert rábízza a C-re, hogy hogy kezeli a számokat (még akár a hosszuk is változhat, lehet egy long 8 byte-os), talán rugalmasabban portolható a kód (bár erre itt most nem túl sok szükség van).

(#) mex válasza szilva hozzászólására (») Jún 2, 2008 /
 
Nem. 60.5mp/8=7.56
Aztán lehet,hogy egyszer majd rájövök....
(#) szilva válasza mex hozzászólására (») Jún 2, 2008 /
 
Hát, nagyságrendileg azért helyben vagyunk. A videón szerintem 1-2 tized két váltás közt az idő, azaz biztos nem ez a bazihosszú DELAY van a progiban, mert ez még 20MHz-ről is 1 másodperc felett lenne. Próbálj meg játszani a legkülső ciklus konstansával, az alábbi részletben:

  1. DELAY                                           ;Delay labelje
  2.         MOVLW   d'100'                 
  3.         MOVWF   T1                              ;T1-be bekerül a 200


Ha ezt a 100-at lecsökkented 10-re, máris kicsivel 0.7 másodperc felett lesz a váltások közti idő (mérésed alapján), ha 2-re csökkented, akkor pedig annak az ötöde, azaz 150ms körüli.
(#) mex válasza szilva hozzászólására (») Jún 2, 2008 /
 
Valószinű nem jól vázoltam a helyzetet,igy azután nem is tudsz segiteni...
Amúgyis az egész problémának a kezdő pices topicban lenne a helye.
Tehát mégegyszer:nem az egyes ledek közti váltás idejével van bajom,az tényleg max egy tizedmásodperc(átugrik) hanem ez a hosszú idő úgy jött ki,hogy az első led "kigyulladásától" inditva a stoppert,egy képzeletbeli kör megtételének idejét mérve. A kör befejezésének pontja az első led ismételt "kigyulladásának "a kezdete.
Huhh...
(#) trudnai válasza szilva hozzászólására (») Jún 2, 2008 /
 
Idézet:
„No, én úgy látom, hogy azért a Tied egy szempontból korrekt, a trudnai-é meg másik szempontból”


Lehet neked kellene megoldani a kozep-kelet-azsiai problemakat Nagyon diplomatikus

Ami az LSB/MSB problemat illeti az valoban egy kenyes kerdes, legjobb lemakrozni es a makrokat felteteles forditasi direktivakkal letrehozni, tehat getMSB/setMSB ill getLSB/setLSB makrok tomkelege kellene, de ebbe lehet itt nem erdemes elmelyednunk.

Amire viszont van esely, hogy az eselest ha kicsit maskepp csinaljuk lehet a fordito jobban kepes optimalizalni - ha kepes egyaltalan. Tehat:

  1. cim[3]=(cim_const >> 24) & 0xFF;
  2.         cim[4]=(cim_const >> 16) & 0xFF;
  3.         cim[5]=(cim_const >> 8) & 0xFF;
  4.         cim[6]=(cim_const) & 0xFF;


Persze ki kellene probalni mi az amit jobban le tud a fordito optimalizalni, de itt az lenne a lenyeg, hogy a shifteket esetleg a fordito felismeri, talan a mogotte levo eselest, igy atalakitja sima byte-os muveletekre. De meg kellene nezni ezt a valosagban is persze.
(#) watt válasza trudnai hozzászólására (») Jún 3, 2008 /
 
Az én példámban el tudom képzelni mi történik, azaz hogyan kerülnek kimaszkolásra a nem szükséges bájtok, és utána hogy shiftelődik bele egy 8 bites uns. char változóba. De a Te példádban ez már nehezebben megy.
Biztosan előbb belépteti a 8 bitet a változóba, és csak utána végzi el az és logikai műveletet? A legalsó sor 4bájtos éseléséről nem is beszélve...

Persze ennek kiderítésére a próba a legjobb megoldás, de most nincs a közelemben fordító, majd estefelé ráérek, mert füvet kell nyírnom, aztán a lefordított kódot is megnézem, mi lesz belőle és összehasonlítom a másikkal.
(#) trudnai válasza watt hozzászólására (») Jún 3, 2008 /
 
En mindjart sirva fakadok! Igaz nekem csak a student edition van meg, ami allitolag nem optimalizal, na de ennyire?!

Ez a Te valtozatod:

  1. 79:                    cim[5]=((cim_const & 0x0000FF00) >> 8);
  2.   0308    6A00     CLRF 0, ACCESS
  3.   030A    6801     SETF 0x1, ACCESS
  4.   030C    6A02     CLRF 0x2, ACCESS
  5.   030E    6A03     CLRF 0x3, ACCESS
  6.   0310    50D9     MOVF 0xfd9, W, ACCESS
  7.   0312    0F04     ADDLW 0x4
  8.   0314    6EE9     MOVWF 0xfe9, ACCESS
  9.   0316    CFDA     MOVFF 0xfda, 0xfea
  10.   0318    FFEA     NOP
  11.   031A    50EE     MOVF 0xfee, W, ACCESS
  12.   031C    1600     ANDWF 0, F, ACCESS
  13.   031E    50EE     MOVF 0xfee, W, ACCESS
  14.   0320    1601     ANDWF 0x1, F, ACCESS
  15.   0322    50EE     MOVF 0xfee, W, ACCESS
  16.   0324    1602     ANDWF 0x2, F, ACCESS
  17.   0326    50EE     MOVF 0xfee, W, ACCESS
  18.   0328    1603     ANDWF 0x3, F, ACCESS
  19.   032A    0E08     MOVLW 0x8
  20.   032C    90D8     BCF 0xfd8, 0, ACCESS
  21.   032E    3203     RRCF 0x3, F, ACCESS
  22.   0330    3202     RRCF 0x2, F, ACCESS
  23.   0332    3201     RRCF 0x1, F, ACCESS
  24.   0334    3200     RRCF 0, F, ACCESS
  25.   0336    06E8     DECF 0xfe8, F, ACCESS
  26.   0338    E1F9     BNZ 0x32c
  27.   033A    C000     MOVFF 0, 0x68
  28.   033C    F068     NOP

ez az enyem:
  1. 84:                    cim[9]=(cim_const >> 8) & 0xFF;
  2.   03B8    0E04     MOVLW 0x4
  3.   03BA    CFDB     MOVFF 0xfdb, 0
  4.   03BC    F000     NOP
  5.   03BE    0E05     MOVLW 0x5
  6.   03C0    CFDB     MOVFF 0xfdb, 0x1
  7.   03C2    F001     NOP
  8.   03C4    0E06     MOVLW 0x6
  9.   03C6    CFDB     MOVFF 0xfdb, 0x2
  10.   03C8    F002     NOP
  11.   03CA    0E07     MOVLW 0x7
  12.   03CC    CFDB     MOVFF 0xfdb, 0x3
  13.   03CE    F003     NOP
  14.   03D0    0E08     MOVLW 0x8
  15.   03D2    90D8     BCF 0xfd8, 0, ACCESS
  16.   03D4    3203     RRCF 0x3, F, ACCESS
  17.   03D6    3202     RRCF 0x2, F, ACCESS
  18.   03D8    3201     RRCF 0x1, F, ACCESS
  19.   03DA    3200     RRCF 0, F, ACCESS
  20.   03DC    06E8     DECF 0xfe8, F, ACCESS
  21.   03DE    E1F9     BNZ 0x3d2
  22.   03E0    5000     MOVF 0, W, ACCESS
  23.   03E2    0100     MOVLB 0
  24.   03E4    6F6C     MOVWF 0x6c, BANKED

es ez egy nagyjabol optimalizalt valtozat, na de konyorgom, en ezt 4 utasitassal lerendezem assemblybol (18F-nel ugye, mivel MC18 csak 18F-eknel mukodik...)
  1. 87:                    *(unsigned long*)cim = cim_const;
  2.   0402    0E04     MOVLW 0x4
  3.   0404    CFDB     MOVFF 0xfdb, 0x63
  4.   0406    F063     NOP
  5.   0408    0E05     MOVLW 0x5
  6.   040A    CFDB     MOVFF 0xfdb, 0x64
  7.   040C    F064     NOP
  8.   040E    0E06     MOVLW 0x6
  9.   0410    CFDB     MOVFF 0xfdb, 0x65
  10.   0412    F065     NOP
  11.   0414    0E07     MOVLW 0x7
  12.   0416    CFDB     MOVFF 0xfdb, 0x66
  13.   0418    F066     NOP

ez ugye mind a 4 byte-ot mar atmozgatja, mig az elozo ketto a 4 byte-bol egy byte atmozgatasa, benne a shifteles ciklusban.

Ha meg egyszer nekem azt mondja valaki a C gyorsabb kodot general... Persze ha van olyan C forditoja valakinek amivel ennel nagysagrendekkel jobb eredmenyt lehet elerni, ne tartsa titokban!
(#) trudnai válasza trudnai hozzászólására (») Jún 3, 2008 /
 
A 4 utasitasos megjegyzesem vissza szivtam Ha nem stacken van a dolog akkor normalis kodot fordit:
  1. 88:                    *(unsigned long*)cim = cim_const;
  2.   0364    C074     MOVFF 0x74, 0x63
  3.   0366    F063     NOP
  4.   0368    C075     MOVFF 0x75, 0x64
  5.   036A    F064     NOP
  6.   036C    C076     MOVFF 0x76, 0x65
  7.   036E    F065     NOP
  8.   0370    C077     MOVFF 0x77, 0x66
  9.   0372    F066     NOP

Megjegyzes: az a NOP az nem NOP, mive a MOVFF ket programszot foglal le, csak a disassembly ilyen vacakul jeleniti meg.

Amugy ettol fuggetllen a shiteleses, eseleses kod ugyanugy vacakul forditodik...
(#) watt válasza trudnai hozzászólására (») Jún 3, 2008 /
 
Álljon meg a nászmenet! A fordító RAM-ba teszi a konstanst? Az egész kifejezés nem a fordítóban zajlik le? Én MOVLW és MOWF-el intézném el az egészet, a többit számolja ki a fordító!
(#) trudnai válasza watt hozzászólására (») Jún 3, 2008 /
 
Persze, hogy RAM-ba teszi, a 'const' csak egy megjegyzes a forditonak, hogy nem akarod modositani azt az erteket. 'rom' kulcsszoval beteheted ROM-ba is, de akkor meg ennel is hoszabb kodot general (tblrd-k miatt). Ha ez csak egy ertek, akkor #define -nal hozdd letre:
  1. #define cim_const 0x12345678
  2.  
  3.     cim[3]=((cim_const & 0xFF000000) >> 24);
  4.     cim[4]=((cim_const & 0x00FF0000) >> 16);
  5.     cim[5]=((cim_const & 0x0000FF00) >> 8);
  6.     cim[6]=(cim_const & 0x000000FF);

es akkor mindjart jobb a helyzet:
  1. 41:                     cim[3]=((cim_const & 0xFF000000) >> 24);
  2.   00D6    0100     MOVLB 0
  3.   00D8    0E12     MOVLW 0x12
  4.   00DA    6F87     MOVWF 0x87, BANKED
  5. 42:                    cim[4]=((cim_const & 0x00FF0000) >> 16);
  6.   00DC    0E34     MOVLW 0x34
  7.   00DE    6F88     MOVWF 0x88, BANKED
  8. 43:                    cim[5]=((cim_const & 0x0000FF00) >> 8);
  9.   00E0    0E56     MOVLW 0x56
  10.   00E2    6F89     MOVWF 0x89, BANKED
  11. 44:                    cim[6]=(cim_const & 0x000000FF);
  12.   00E4    0E78     MOVLW 0x78
  13.   00E6    6F8A     MOVWF 0x8a, BANKED

(Ez ugye mind a 4 byte!!!)

Ugyanaz fordul akkor is ha a pointeres megoldast valasztod:
  1. 39:                     *(unsigned long*)cim = cim_const;
  2.   00D6    0100     MOVLB 0
  3.   00D8    0E78     MOVLW 0x78
  4.   00DA    6F84     MOVWF 0x84, BANKED
  5.   00DC    0E56     MOVLW 0x56
  6.   00DE    6F85     MOVWF 0x85, BANKED
  7.   00E0    0E34     MOVLW 0x34
  8.   00E2    6F86     MOVWF 0x86, BANKED
  9.   00E4    0E12     MOVLW 0x12
  10.   00E6    6F87     MOVWF 0x87, BANKED


Ez nyilvanvaloan azert van, mert nem RAM-ban tarolodik igy, hanem forditasi idoben kiertekelodik az osszes movelet (shift+ES) igy a fordito mar egy elore kiszamolt erteket tesz be a W-be...
(#) gyengus hozzászólása Jún 4, 2008 /
 
Sziasztok!

Az AN1199 - 1-Wire Communication with PIC Microcontroller app note-al próbálkozok. Annyi különbséggel, h PIC18F4550-et és DS1820-at használok.
Állítgattam az oszcillátor beállításokat, mert az eredeti kódban nincs 48MHz-re késleltető rutin. Elvileg 24MHz-n megy. Viszont a DS1820 rom code-ját nem olvassa ki, csak 0-ákat, pedig azt állítja megtalálja (vagyis kap választ a reset pulse-ra).
Az 1-Wire data vonalat fehúztam 4,7kOhm-al, de 2,2kOhm-al is próbáltam. Elsőt a DS1820 adatlap írja, viszont néhány Maximos app note-ban 2,2k maxot ír.
Rá van kötve az 5V-ra is.
Kínomban már bootloader és egyéb usb-s firmware nélkül próbálom. Először önmagában működjön.
A read rom command mindkét slave eszköznél ugyanaz, ezért se értem, mi a probléma.
Mégse 24MHz-n menne a pic és rosszak az időzítések?
Előre is köszönöm mindenkinek a segítséget!
(#) potyo válasza gyengus hozzászólására (») Jún 4, 2008 /
 
Én írtam egy programot, ami 4MHz-ről működött annakidején. Szóval a program legalább jó, csak az időzítéseket kell módosítani. Itt található:Link
Következő: »»   224 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem