Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   787 / 1210
(#) kaito83 válasza Hp41C hozzászólására (») Máj 6, 2016 /
 
De király vagy köszi belökte ahogykell
(#) diablo válasza sonajkniz hozzászólására (») Máj 6, 2016 /
 
Kettő. Egyiken küldöd az adatot (TX), másikon fogadod (RX).
Sok helyen használhatod. Nemrég volt szó a HMI kijelzőkről itt a topic-ban, az is UART-tal kommunikál. De ezzel tudod a legkönnyebben a PIC-et a számítógéphez is kötni.
Vagy nem ez volt a kérdés?
(#) sonajkniz válasza diablo hozzászólására (») Máj 6, 2016 /
 
De igen.
Az a kijelző engem is megihletett, úgyhogy érdekel ez az átviteli mód.
Egyébként, miben jobb ez pl. az I2C-nél?
(#) diablo válasza sonajkniz hozzászólására (») Máj 6, 2016 /
 
I2C-t még nem használtam, de szerintem nincs olyan, hogy "jobb".
Egyébként szerintem alapesetben ez a legegyszerűbb kommunikáció. Az 1-wire-től biztos egyszerűbb.

Elektro.on: Igaz, ott a pont.
A hozzászólás módosítva: Máj 6, 2016
(#) Elektro.on válasza diablo hozzászólására (») Máj 6, 2016 /
 
I2C -t még én sem használtam.
De az alapvető különbség az, hogy az I2C -nél van a master és több slave eszközt is fel lehet elvileg fűzni egy buszra.
(#) usane válasza Elektro.on hozzászólására (») Máj 6, 2016 /
 
Azért több eltérés is van, és nem ez az alapvető. Sebesség, max áthidalható távolság, Uart általában aszinkron IIC szinkron ,az órajel külön vezeték, azaz az adat a másik, vagyis egy időben csak egy irányba mehet a kommunikáció, stb.
(#) Hp41C válasza Elektro.on hozzászólására (») Máj 6, 2016 /
 
Tiszta vizet a poharakba:
UART: aszinkron adatátvitel (nincs külön órajel vezeték), nagytávolságú, de nagyon lassú (~ms / bit) adatátvitelre. RS232 konverterrel pont-pont kapcsolat valósítható meg két eszköz között. RS485 -tel megoldható több készülék összekötése 2 vagy 4 veztékkel.
I2C: már a neve is arra utal, hogy kártyán belüli kapcsolat megvalósítására készült. Külön órajel és külön adatvezetéket használ. Mind a kettő nyitott kollektoros meghajtású.
1-Wire: Egy vezetékes (és a föld) kommunikáció, aminél a vezeték a tápellátást is biztosíthatja. Lassú (8 .. 65 us / bit). A 1-Wire szabvány lehetővé teszi, hogy egy vezetékkel több eszközt is lehessen kezelni. Minden eszköz egy 64 bites egyedi azonosítóval rendelkezik (csere esetén a cím változást a program tudtára kell adni). Ha automatikus címfelderítést is meg kell valósítani a programozása a legbonyolultabb (64 mélységű, rekurzív eljárás). A hibadetektáláshoz CRC képző, ellenőrző rutint is kell írni.
(#) sonajkniz válasza Hp41C hozzászólására (») Máj 6, 2016 /
 
Elvileg maga az internet is egy vezetékes. Ha az 1-Wire kommunikáció ilyen lassú, akkor az hogyan működik?
(#) Hp41C válasza sonajkniz hozzászólására (») Máj 6, 2016 /
 
Idézet:
„Elvileg maga az internet is egy vezetékes.”

Inkább az Ethernet 10Mbit -es verziója, azzal a bizonyos BNC csatlakozókkal. A sok kontakthiba miatt mára már mindenki elfelejtette.
Idézet:
„Ha az 1-Wire kommunikáció ilyen lassú, akkor az hogyan működik?”

Most tényleg csak én olvasom az adatlapokat????
(#) sonajkniz válasza Hp41C hozzászólására (») Máj 6, 2016 1 /
 
Bocs, de nem gondoltam, hogy az internetnek is van adatlapja.
Mindjárt utána nézek.
(#) Hp41C válasza sonajkniz hozzászólására (») Máj 6, 2016 /
 
Visszakérdeznék: Ha nem lenne a különböző megvalósításainak adatlapja, szabványa, leírása hogyan tudna az a rengeteg gyártó egymás termékeivel együttműködő eszközöket gyártani?
(#) sonajkniz válasza Hp41C hozzászólására (») Máj 6, 2016 /
 
Gondolom, maga a működés van olyan formában leírva számukra, hogy abból ki lehessen fejleszteni egy eszközt.
Ilyen leírást szerettem volna én is beszerezni, mikor a DS1821-el szenvedtem. DE NINCS!
Példaprogramok a DS 1820-hoz PIC16-ra. Az volt dömpingben. Illetve ugyanezen típushoz egy magyar nyelvű leírás. De abból is csak általánosságok derültek ki. Az időzítésekre és a jelalakokra vonatkozó leghasznosabb leírás a Wikipédián volt. Azt pedig már tényleg példaprogramokból kellett kimazsoláznom, hogy a biteket küldéskor, illetve fogadáskor jobbra, vagy balra kell léptetni. Egy értelmes, összefüggő, szájbarágós leírás sincs a témában. Ugyanez a bajom az I2C-vel is. Nem példaprogramok kellenek. Az csak egymás vak másolása. Még ha működik, akkor sem. Meg akarom érteni a felépítését, a működését. És ha ez már megvan, utána akarom használni. Amint egy oldallal korábban már írtam, mindenki, aki tanácsot adott az 1-Wire-el kapcsolatban, felhívta a figyelmemet a nagyon pontos időzítésekre. Miután sikerült megértenem a működését kiderült, sokkal rugalmasabb, mint azt legtöbben gondolják. Ha tudsz a kívánalmamnak megfelelő leírást I2C, SPI, UART vonatkozásában, és azt meg is osztod velem, nagyon szépen megköszönöm.
(#) diablo hozzászólása Máj 6, 2016 /
 
Hogyan lehetne a leghatékonyabban különböző portokon elhelyezkedő digitális be- vagy kimeneteket egy darab változóba bepakolni?
Pl. van 8 bemenetem ami összesen három különböző porton foglal helyet. Ezt szeretném egy 8 bites változóban kezelni. Pontosabban meghívni egy függvényt ami kiolvassa a bemeneteket és egy char típusú változóval térne vissza amiben a 8 bemeneten lévő értékek foglalnak helyet.

C-ben programozok, de legjobb lenne talán in-line asm-ben egy gyors kód.
Én ennyit tudtam csak kiötleni asm-ben:

  1. #define IN0 PORTB,2
  2. #define IN1 PORTC,2
  3. ...
  4. #define IN7 PORTA,3
  5. unsigned char read_inputs()
  6. {
  7.   unsigned char inputs;
  8.   #asm
  9.     INPUT0:
  10.         BTFSS IN0
  11.         GOTO ZERO0
  12.         BSF _inputs,0
  13.         GOTO INPUT1
  14.     ZERO0:
  15.         BCF _inputs,0
  16.     INPUT1:
  17.         BTFSS IN1
  18.         GOTO ZERO1
  19.         BSF _inputs,1
  20.         GOTO INPUT2
  21.     ZERO1:
  22.         BCF _inputs,1
  23.     INPUT2:
  24.     ....
  25.     ....
  26.   #endasm
  27.   return inputs;
  28. }


Bár ez sem biztos hogy jó, rég nem programoztam assembly-ben.
Van valami jobb ötlet ennél, ami gyorsabb?
(#) sonajkniz válasza diablo hozzászólására (») Máj 6, 2016 / 1
 
Ilyesmire gondoltál?
  1. CBLOCK
  2.     BEMENETEK
  3.     ENDC
  4.  
  5.  
  6. #define BE_0    PORTA,0
  7. #define BE_1    PORTA,3
  8. #define BE_2    PORTA,5
  9. #define BE_3    PORTB,2
  10. #define BE_4    PORTB,4
  11. #define BE_5    PORTC,1
  12. #define BE_6    PORTC,2
  13. #define BE_7    PORTC,4
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22. MAIN
  23.     BCF     BEMENETEK,0
  24.     BTFSC   BE_0
  25.     BSF     BEMENETEK,0
  26.     BCF     BEMENETEK,1
  27.     BTFSC   BE_1
  28.     BSF     BEMENETEK,1
  29.     BCF     BEMENETEK,2
  30.     BTFSC   BE_2
  31.     BSF     BEMENETEK,2
  32.     BCF     BEMENETEK,3
  33.     BTFSC   BE_3
  34.     BSF     BEMENETEK,3
  35.     BCF     BEMENETEK,4
  36.     BTFSC   BE_4
  37.     BSF     BEMENETEK,4
  38.     BCF     BEMENETEK,5
  39.     BTFSC   BE_5
  40.     BSF     BEMENETEK,5
  41.     BCF     BEMENETEK,6
  42.     BTFSC   BE_6
  43.     BSF     BEMENETEK,6
  44.     BCF     BEMENETEK,7
  45.     BTFSC   BE_7
  46.     BSF     BEMENETEK,7
(#) diablo válasza sonajkniz hozzászólására (») Máj 6, 2016 /
 
Trükkös megoldás az ugrások elkerülésére. Köszi.
Ennél kevesebb utasítással igaz már nem lehet megcsinálni?
(#) benjami válasza diablo hozzászólására (») Máj 6, 2016 / 1
 
Én ezt a verziót használom (C18-al kicsit máshogy kell megadni a paramétereket, de kis módosítással azon is használható):
  1. #define  IN0  B, 2
  2. #define  IN1  C, 2
  3. #define  OUT0  A, 4
  4. #define  OUT1  A, 3
  5.  
  6. #if defined(__AVR__)
  7. #define GLUE(a, b)             a##b
  8. #define SET_(what, p, m)       GLUE(what, p) |= (1 << (m))
  9. #define CLR_(what, p, m)       GLUE(what, p) &= ~(1 << (m))
  10. #define IOIN(x)                CLR_(DDR, x)
  11. #define IOOUT(x)               SET_(DDR, x)
  12. #define SET(x)                 SET_(PORT, x)
  13. #define CLR(x)                 CLR_(PORT, x)
  14. #define GET_(p, m)             GLUE(PIN, p) & (1 << (m))
  15. #define GET(x)                 (GET_(x))
  16. #else // #if defined(__AVR__)
  17. #define TRIS_(p, m)            TRIS ## p ## bits.TRIS ## p ## m
  18. #define LAT_(p, m)             LAT ## p ## bits.LAT ## p ## m
  19. #define PORT_(p, m)            PORT ## p ## bits.R ## p ## m
  20. // PIC16Fxx (HTC, XC)
  21. #if defined(_PIC14)
  22. #define IOIN(x)                TRIS_(x) = 1
  23. #define IOOUT(x)               TRIS_(x) = 0
  24. #define SET(x)                 PORT_(x) = 1
  25. #define CLR(x)                 PORT_(x) = 0
  26. #define GET(x)                 PORT_(x)
  27. // PIC18Fxxx (C18)
  28. #elif defined(__18CXX)
  29. #define IOIN(x)                x(TRIS_) = 1
  30. #define IOOUT(x)               x(TRIS_) = 0
  31. #define SET(x)                 x(LAT_) = 1
  32. #define CLR(x)                 x(LAT_) = 0
  33. #define GET(x)                 x(PORT_)
  34. #define NOP()                  Nop()
  35. // PIC16F1xxx, PIC18F (HTC18)
  36. #else
  37. #define IOIN(x)                TRIS_(x) = 1
  38. #define IOOUT(x)               TRIS_(x) = 0
  39. #define SET(x)                 LAT_(x) = 1
  40. #define CLR(x)                 LAT_(x) = 0
  41. #define GET(x)                 PORT_(x)
  42. #endif
  43. #endif // #else defined(__AVR__)
  44.  
  45. void main(void)
  46. {
  47.   IOIN(IN0); IOIN(IN1); IOOUT(OUT0); IOOUT(OUT1);
  48.   CLR(OUT0); SET(OUT1);
  49.   while(1)
  50.   {
  51.     if(GET(IN0) && GET(IN1))
  52.     {
  53.       SET(OUT0); CLR(OUT1);
  54.     }
  55.     else
  56.     {
  57.       CLR(OUT0); SET(OUT1);
  58.     }
  59.   }
  60. }
(#) sonajkniz válasza diablo hozzászólására (») Máj 6, 2016 /
 
Még egy kicsit rövidíthetsz rajta.
Így kezded:
MAIN
CLRF BEMENETEk

Ekkor a BCF sorokat elhagyhatod.
(#) diablo válasza sonajkniz hozzászólására (») Máj 6, 2016 /
 
Tényleg, az úgy már egész gyors.
A hozzászólás módosítva: Máj 6, 2016
(#) Hp41C válasza sonajkniz hozzászólására (») Máj 6, 2016 /
 
Egy régi vicc jut eszembe, aminek a csattanója: Nem jól tetszik kérdezni....
Goooogle barátunk segít:
Book of iButton Standards - Maxim
THE I 2 C-Bus Specification Version 2.1
Az uart egy kicsit szerteágazóbb, de az "asynchronous serial communication standard" kérdésre a goooogle egy rakás dokumentumot ad.

A kényes időzítésekről. Minden kommunikációnak van/lehet kétféle megvalósítása: 1 - a kontroller programból állítgatja a jeleket és figyeli a jelváltásokat, 2 - egy kis hardver modullal kezeli a kommunikációt, így mentesül a kritikus időzítésektől. Az első módszenél nincs addig gond, amíg egy időben csak egy folyamat zajlik, de amint más dologgal (az is lehet időkritikus) is foglalkoznia kell, előjönnek a problémák.
A legtöbb PIC -ben van uart támogatás (hány, de hány programozott megoldás született azokra, amiben nincs 16C84), de az egyikban sincs 1-Wire. A másik dolog a megszakítás kezelése. A megszakítás lekezelése alatt a főprogram futása megszakad, idő telik el, ami alatt nem tudja figyelni a jeleket, lemaradhat lényeges döltések meghozataláról, beállítások elvégzéséről. Ezért többeknek kritikusnak tűnik a megvalósítás.
Kicsit régebben, itt a fórumon tárgyáltuk ki, hogy a 1-Wire kommunikáció megszakítható a bites között is...
(#) Hp41C válasza diablo hozzászólására (») Máj 6, 2016 /
 
Ha kimenetet keszelsz így, nemkívánatos tüskék jelenhetnek meg amennyiben közvetlenül a PORT / LAT regiszterrel végzed a beállításokat. Inkább a memória egy rekeszében készítsd el a megfelelő mintázatot és onnan másold a PORT / LAT regiszterbe. Ez még a RMW hibától is megkímél...
(#) diablo válasza Hp41C hozzászólására (») Máj 6, 2016 /
 
Arra gondoltam én is, hogy ott már nem lenne jó.
De nem akar lefordulni.
Szintaktikai hiba, pedig én nem látok semmi hibát. Meg érdekes, hogy a függvényben létrehozott változót nem látja az asm programrészlet, csak ha globális változóként deklarálom.
Az #asm #endasm direktívával meg végképp nem fordul le, nincs kiemelés sem.
Ezért így próbálom, de nem jó:
  1. asm
  2. ("\
  3. utasítás1 \
  4. utasítás2 \
  5. ");

Lehet függvényben sem működik...? Adatlap csak az if(), while(), for()-okra tér ki, hogy ezekben nem lehet használni.

Mellesleg hogy is kell ezeket külön .asm fájlban tárolni és úgy hozzácsatolni a .c-hez?
(#) pajti2 válasza sonajkniz hozzászólására (») Máj 6, 2016 / 1
 
Egy nyögvenyelősebb fejlesztés után mindig rá kell szánni egy kicsike időt, amíg leereszted a fáradt gőzt. Időnként látni kell valami szépet is. Gyönyörűen süt a nap, a középiskolák előtt a cicás friss tini lányok már egy szál semmiben flangálnak, eridj csajozni
(#) sonajkniz válasza pajti2 hozzászólására (») Máj 6, 2016 /
 
De szép is lenne. Csakhogy a főnökeim még azt sem várják meg, hogy befejezzem az egyik projektet, mielőtt másikat adnának. A csajozásról meg csak annyit, hogy irgalmatlanul t...kön rúgna a feleségem, ha megpróbálnám.
(#) Hp41C válasza diablo hozzászólására (») Máj 7, 2016 /
 
C18:
  1. unsigned char BitReverse(unsigned char val)
  2. {
  3.         unsigned char rev = 0;
  4.         _asm
  5.                 movlw   val
  6.                 btfsc   PLUSW2, 7, ACCESS
  7.                 bsf             INDF2, 0, ACCESS
  8.                 btfsc   PLUSW2, 6, ACCESS
  9.                 bsf             INDF2, 1, ACCESS
  10.                 btfsc   PLUSW2, 5, ACCESS
  11.                 bsf             INDF2, 2, ACCESS
  12.                 btfsc   PLUSW2, 4, ACCESS
  13.                 bsf             INDF2, 3, ACCESS
  14.                 btfsc   PLUSW2, 3, ACCESS
  15.                 bsf             INDF2, 4, ACCESS
  16.                 btfsc   PLUSW2, 2, ACCESS
  17.                 bsf             INDF2, 5, ACCESS
  18.                 btfsc   PLUSW2, 1, ACCESS
  19.                 bsf             INDF2, 6, ACCESS
  20.                 btfsc   PLUSW2, 0, ACCESS
  21.                 bsf             INDF2, 7, ACCESS
  22.         _endasm
  23.         return rev;
  24. }

XC8:
  1. asm("swapf PMDATL & 0x7F,w");
  2.         asm("xorwf PMDATL & 0x7F,f");
  3.         asm("rrcf  PMDATL & 0x7F,w");
  4.         asm("xorwf PMDATL & 0x7F,f");
  5.         asm("btfsc PMDATL & 0x7F,2");
  6.         asm("incf  PMDATL & 0x7F,f");
(#) diablo válasza Hp41C hozzászólására (») Máj 7, 2016 /
 
Példával nem sokra megyek így magyarázat nélkül. Minek oda az a 0x7f?

Az xc8 manual-jában is szerepel ez a 0x7f példaként, de nem találtam rá magyarázatot:

  1. unsigned int var;
  2. void main(void)
  3. {
  4.  var = 1;
  5. #asm // like this...
  6.  BCF 0,3
  7.  BANKSEL(_var)
  8.  RLF (_var)&07fh
  9.  RLF (_var+1)&07fh
  10. #endasm
  11.  // do it again the other way...
  12.  asm(“BCF 0,3);
  13.  asm(“BANKSEL _var”);
  14.  asm(“RLF (_var)&07fh”);
  15.  asm(“RLF (_var+1)&07fh”);
  16. }


De nem fordul le így se.
Kiszűrtem, hogy a BTFSC-ben lévő definícióval van a baja.
Így le fordul:
  1. asm("BTFSC  PORTB, 2");

Így meg nem:
  1. #define IN0  PORTB,2
  2. asm("BTFSC IN0");


Mellesleg nem szeretném minden sor előtt használni az asm(); funkciót.
(#) diablo válasza diablo hozzászólására (») Máj 7, 2016 /
 
Én azt találtam, hogy azért nem működik mert idézőjelek között szerepel és azt string-nek veszi az előfordító, ezért nem tudja behelyettesíteni.
Az #asm #endasm tagok között működnie kellene, de mégsem működik...
(#) sonajkniz válasza Hp41C hozzászólására (») Máj 7, 2016 / 1
 
Ez mi akar lenni? "Book of iButton Standards - Maxim" Mert ha ezt szántad az 1-Wire dokumentációjának, ez az általam megfogalmazott leírás igény kapcsán csupán 158 oldal tömény mellébeszélés. Az I2C leírás már jóval többet mondó. Mármint azok számára, akik valamilyen iskolában már megtanulták az I2C alapjait, működését, konkrétan ilyen vonalon tanulnak és mozognak, valamint leállamvizsgáztak műszaki angolból. De egy hobbista majom, mint én, ebből ugyan nem tanul meg semmit. Össze - vissza csapong a témák között, nincs benne rendszer, és legfőképp pedig nem azzal kezd, hogy elmagyarázza mi is az az I2C. Pedig a 4. oldal elején még úgy tűnt, hogy lesz egy szép kerek leírás, de végül nem lett.
Többször hangsúlyozod az adatlap végigolvasását. Olvasgatom én szorgalmasan. Csakhogy mivel a PIC adatlapok rendszerében sem leltem még logikát, így bizonyos dolgokat nehezen, vagy egyáltalán nem találok meg.
Pedig azok is jól indítanak. Előszőr rajz a PIC-ről és a lábak kiosztásáról, azután táblázat a lábak funkcióiról, de utána vége.
Előszőr talán az utasításkészlettel és az utasítások leírásával kellene foglalkozni. Azután a regiszterek felsorolásával, és azok táblázataival.
Így megkapjuk az alapot. De nem. Ezen dolgok a több századik oldalon vannak. Többnyire rendszertelenül.
Amikor a PIC18F46K22-es D portjával szenvedtem, megírtad nekem, hogy azok már más tartományban lévő bankban vannak. Szuper. Később nekiveselkedtem az adatlapnak, de sehol nem leltem azt a leírást, amely megmondaná, hogy figyeljek oda a regiszterek tartózkodási helyére, mert ez és ez a tartomány másképp hívható meg. Pedig lehet, hogy ott van valahol az 575 oldal valamelyikén, csak épp nem a legelején, ahol lennie kellene.
Épp azért van ez a fórum, hogy azok, akik iskolájuk, szakmájuk, sok éves tapasztalatuk vagy jó ötleteik alapján tudják, azok segítsék a kezdőket, a kevesebbet tudókat. Mármint ha van türelmük és kedvük hozzá.
Köszönök minden eddigi,és ez utáni segítségedet, de ezzel most nem jutottam előrébb.
(#) Hp41C válasza diablo hozzászólására (») Máj 7, 2016 /
 
Idézet:
„Az xc8 manual-jában is szerepel ez a 0x7f példaként, de nem találtam rá magyarázatot:”

Nézd meg a PIC16 család utasítás kódolásában a field regiszter elérését. Az utasításkód alsó 7 bitje határozza meg a field regiszter címét. Hogy 128 resiztrenél több van a PIC16 -ban? Az alsó 7 bithez hozzáteszi a STATUS RP1 és RP0 bank kiválasztó bitejelt és ezzel meg is van a 9 bites RAM cím. A továbbfejelesztett 16F1xxx családban már 32 bank lehet, itt az alsó 7 bithez a BSR regiszter 5 bitjét használják a cím előállítására.
A regiszterek címe tehát 9 ill. 12 bites, de az utasítás közvetlenül csak az alsó 7 bitet tartalmazza. Azért alkalmazzák az "& 0x7F" -et, hogy a felső bitek eltünjenek, ne okozzanak figyelmeztetést.
Idézet:
„asm("BTFSC PORTB, 2");”

A C nyelv kisbetű - nagybetű érzékeny.
Idézet:
„Mellesleg nem szeretném minden sor előtt használni az asm(); funkciót.”

Sajnos ez nem szeretet kérdése, csak így fogadja el a fordító. Másik lehetőség egy asm állomány felvétele a projectbe...
(#) Hp41C válasza sonajkniz hozzászólására (») Máj 7, 2016 /
 
Idézet:
„Ez mi akar lenni? "Book of iButton Standards - Maxim" Mert ha ezt szántad az 1-Wire dokumentációjának, ez az általam megfogalmazott leírás igény kapcsán csupán 158 oldal tömény mellébeszélés.”

Érdekes módon a 4. fejezet részeinek címei: 1-Wire (TM) Interface - Timing, 1-Wire Interface - Electrical... Ez alapján készítettem el a ROM felderítő rutinomat, kíválóan működik...
Az I- button tulajdonképen egy 1-Wire memória egy kis tápellátással, rf adatátvitellel.
Idézet:
„Az I2C leírás már jóval többet mondó...Pedig a 4. oldal elején még úgy tűnt, hogy lesz egy szép kerek leírás, de végül nem lett.”

Ez maga a Philips által kiadott dokumentáció. Lapozz a 8. oldalra...
Idézet:
„Pedig azok is jól indítanak. Előszőr rajz a PIC-ről és a lábak kiosztásáról, azután táblázat a lábak funkcióiról, de utána vége.”

Az adatlapok szerkesztéséről:
Az információkat (sajnos) a gyakorlottabb felhasználók igényei szerinti sorrendban adják meg. Egy rutinos felhasználót általában a lábkiosztások (tokozás típusával változhat) és a lábak funkciója érdeklik. Aztán a jelszintek, áramok, időzítések, stb. Rengeteg adatlapban az elektromos adatok is elől vannak. MCP4922 Ezután jönnek a részletesebb leírások. Egyes gyártóknál az adatlap csak utal a család részletes elírására (ld. PIC32). Az utasításkészlet nekik már nem fontos, tudják... A PIC16F, 18F családban még minden típusnál az adatlap tartalmazza a teljes utasításkészlet részletes leírását, másoknál külön dokumentum...
A Microchip adatlapokban a tartalomjegyzék megjeleníthető, segítségével egyből a megfelelő fejezetre lehet ugrani (Regiszterek -> Memory Organization / Data Memory Organization)
Idézet:
„Amikor a PIC18F46K22-es D portjával szenvedtem...”

Nekem sem volt más forrásom, csak az adatlap 5-5 ábrája:
Idézet:
„Note 1: Addresses F38h through F5Fh are also used by SFRs, but are not part of the Access RAM. Users must always use the complete address or load the proper BSR value to access these registers.”

Magyarul: Az F38h -tól F5Fh -ig terjedő címeket is elfogllaják a speciális célú regiszterek, de ez a tartomány nem része az ACCESS BANK -nak. A felhasználónak mindig a teljes címet kell használnia vagy a BSR regisztert kell helye értékkel feltöltenie, hogy elérje ezeket a regisztereket.
Idézet:
„...valamint leállamvizsgáztak műszaki angolból....”

Nekem sincs érettségim sem nyelvvizsgám angolból. Sőt amikor suliba jártam még oroszt kellett tanulnom.
Az angol nyelvű dokumentációvan még csak-csak meg lehet bírkózni. Valaki érti a mellékelt Microchip PIC adatlapját? Eddig még olvashatók voltak az alkatrészek dokumentációi, de az újabbak között egyre gyakrabban fordulnak elő csak kínai, csak japán nyelűek....
A hozzászólás módosítva: Máj 7, 2016
(#) diablo válasza Hp41C hozzászólására (») Máj 7, 2016 /
 
Köszi, ezt majd megemésztem, de ettől még nem fordul le.
Hogy jön ide a kisbetű, nagybetű? Mindkét változatot nagybetűvel írtam a manuálban található példák alapján, de a 2. hozzászólásomban írt hiba miatt nem működik ha #define tagot használok. Márpedig #define nélkül nem fogom használni. Hi-Tech C-ben nem volt problémám az in-line asm-mel de ez az xc8 a manuálban ajánlott #asm #endasm direktívákat sem ismeri.

Most próbáltam, egyedül úgy működik ha így definiálok minden bemenetet:
  1. #define IN0 "BTFSC PORTB,2"
  2. asm(IN0);

Nem a legszebb megoldás, de ez van.
Illetve még így is lefordította:
  1. #define IN0 "PORTB,2"
  2. asm("BTFSC " IN0);

De, hogy működik-e azt még nem próbáltam.
Vagy tudsz jobb megoldást?
A hozzászólás módosítva: Máj 7, 2016
Következő: »»   787 / 1210
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