Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   490 / 1319
(#) trudnai válasza NoMen hozzászólására (») Máj 22, 2009 /
 
Par hozzaszolassal elobb (#439932) icserny valakinek oda irta egy magyar site linkjet, azt olvasgad at. Azonkivul talan a Topi ckket is erdemes itt a HE-n elolvasni, az a cime, hogy "Nullarol a robotokig". Ezekkel egy olyan alapot tudsz felszedni amivel talan el tudsz kezdeni a temaval foglalkozni -- mar ha erdekel egyaltalan. Ha nem akkor a hirdetes rovatban meg mindig fel tudsz adni egy hirdetest, hogy PIC fejlesztot keresel egy egyszeru feladathoz...
(#) szilva hozzászólása Máj 23, 2009 /
 
Nemrég volt itt téma az egyszerű nyomógomb pergésmentesítése. Nos, én nemrég vettem egy breadboardot, és jelenleg azzal élvezkődök ( ), egy 16F882 van az áramkörömben. Ennek a PIC-nek az RB0/INT lába Shmitt-triggeres (tényleg: Schmitt vagy Schmidt? mert én mindkét írásmóddal látom emlegetni...), így egy RC taggal is lehet kielégítő eredményt elérni. Én úgy használom jelenleg, hogy a nyomógomb a földre zár egy 680ohm-os ellenállással, az RB0/INT lábon pedig van egy 470nF a föld felé. Az RB0/INT lábra a belső felhúzó ellenállás be van kapcsolva.
(#) kisszee válasza szilva hozzászólására (») Máj 23, 2009 /
 


The Schmitt trigger was invented by US scientist Otto H. Schmitt in 1934 while he was still a graduate student[1]

Amúgy én is sokféleképpen láttam már.

(#) trudnai válasza szilva hozzászólására (») Máj 23, 2009 /
 
Idézet:
„egy 16F882 van az áramkörömben. Ennek a PIC-nek az RB0/INT lába Shmitt-triggeres (tényleg: Schmitt vagy Schmidt? mert én mindkét írásmóddal látom emlegetni...), így egy RC taggal is lehet kielégítő eredményt elérni. Én úgy használom jelenleg, hogy a nyomógomb a földre zár egy 680ohm-os ellenállással, az RB0/INT lábon pedig van egy 470nF a föld felé. Az RB0/INT lábra a belső felhúzó ellenállás be van kapcsolva.”


En ugy tudom Schmitt trigger

Amugy ez tenyleg egy jo modszer amit mondasz, ha megnezed a PICdem2-ben is alkalmazzak ezt...
(#) szilva válasza trudnai hozzászólására (») Máj 23, 2009 /
 
Ez nem teljesen ugyanaz az elrendezés. Lerajzoltam azt, amit én emlegettem. A soros ellenállás a lenyomott állapotbeli, a nem látható, belső felhúzó ellenállás a felengedett állapotbeli áramot, ezzel a jelváltozási sebességet korlátozza a kondenzátoron.
(#) skeletornb válasza szilva hozzászólására (») Máj 23, 2009 /
 
A kondenzátor méretével és további töltést/kisütést korlátozó ellenállásokkal, akár különböző késleltetéseket és gomb tiltásokat lehet elérni. Jelenleg nincs breadboardom, mert ami volt csak kölcsönbe volt, de veszek én is egyet és kipróbálom.
(#) mate_x hozzászólása Máj 23, 2009 /
 
Hello!
A számítógépemen a soros porton megmértem a feszültséget, hogy alkalmas-e hozzá külsőtáp nélküli égető.
Csak azt nem értem hogy az 5 láb(GND) és a 3 láb között(TXD) kb 11-12 V van, de a multiméter földjét a 5 lábra (gnd)-re teszem a multiméter piros vezetékét pedig a 3as lábra, akkor a feszültséget mínuszba mutatja, tehát olyan mintha a 3as lenne a GND.
Ja, és ha mondjuk egy elem feszültségét mérem akkor jól mutatja(tehát fekete vezeték -on piros +on és normálisan pozitív értékben mutatja a feszültséget).
Akkor ez most hogyan van?? Mert az égetőben a dióda nem mindegy hogy van elhelyezve...

üdv:
mate_x
(#) trudnai válasza mate_x hozzászólására (») Máj 23, 2009 /
 
Idézet:
„Csak azt nem értem hogy az 5 láb(GND) és a 3 láb között(TXD) kb 11-12 V van, de a multiméter földjét a 5 lábra (gnd)-re teszem a multiméter piros vezetékét pedig a 3as lábra, akkor a feszültséget mínuszba mutatja, tehát olyan mintha a 3as lenne a GND.”


Nezd meg az RS232 szabvanyt... +12V es -12V a ket logikai szint...
(#) watt válasza mate_x hozzászólására (») Máj 23, 2009 /
 
Idézet:
„A számítógépemen a soros porton megmértem a feszültséget, hogy alkalmas-e hozzá külsőtáp nélküli égető.”

Ettől csak kis mértékben függ. Nézz fel az oldalamra, ott le vannak írva a okok.
(#) mate_x válasza watt hozzászólására (») Máj 23, 2009 /
 
Kössz watt!
Tök jó az oldalad !
(#) bankimajki válasza watt hozzászólására (») Máj 23, 2009 /
 
Nálam az AVAST vírust észlel, ezért nem néztem meg az oldalad. Valóban vírusos?
(#) watt válasza bankimajki hozzászólására (») Máj 24, 2009 /
 
Nem értem mi lehet, mert nálam is jelez! Utána járok!
(#) watt hozzászólása Máj 24, 2009 /
 
Mindenkinek köszönöm a jelzést és a segítséget is(privátban is)!

A dolgot megoldottam az index.html törlésével és az eredeti fájl újbóli felmásolásával.

Nem tudom hogyan lehetett vírusos egy TVN szerveren futtatott fájl, remélem nem fog visszatérni. Próbálom jelezni a szolgáltatónak a dolgot.

Egyébként egy JS:Cruzer-C [Trj] vírus fertőzött. Ha van lehetősége annak aki felnézett az oldalamra a napokban, az nézze át a gépét egy keresővel.

Mégegyszer köszönöm!
(#) mammut hozzászólása Máj 24, 2009 /
 
HM.. Az nyílván egy JavaScript nyelvű féreg.

Érdeklődni szeretnék, hogy valaki foglalkozott-e már evvel a PSP-vel?
Én igazából arra szeretném használni, hogy 2 vagy több (ha lehet) 16F877-est összekötök a buszon, hogy ezáltal több portom és bitem legyen! Ez kivitelezhető-e szerintetek? Sajnos hardveres alkalmazást nem találtam a neten ehhez a témához.
(#) watt válasza mammut hozzászólására (») Máj 24, 2009 /
 
Vannak port bővítő IC-k a microchiptől. Keresd a port expander kifejezést az oldalukon, van sok.
(#) mammut válasza watt hozzászólására (») Máj 24, 2009 /
 
Köszönöm! Nem is rosszak! Csak nem hiszem, hogy magyarországon léteznének ezek a perifériák forgalomban.
Egyelőre még nem akarok átváltani 18F szériára, pedig azokban van elég port, és bit.
(#) watt válasza mammut hozzászólására (») Máj 24, 2009 /
 
Már hogy ne léteznének? ChipCad
(#) MPi-c válasza mammut hozzászólására (») Máj 24, 2009 /
 
Pl: MCP23017 párszáz forint darabja és mindjárt két 8 bites portot kapsz. I2C és SPI buszos változat is van...
(#) mammut válasza MPi-c hozzászólására (») Máj 24, 2009 /
 
Már hallottam régen a ChipCad-ről, de még nem látogattam el hozzájuk idáig.
Nem semmi milyen választék van náluk, még típuson belül is! Na itt biztos találok kedvemre valót!
Köszöm nektek a segítségeket!
(#) mammut válasza mammut hozzászólására (») Máj 24, 2009 /
 
Nah igen! Ez már döfi: PIC18F8722.
Lehet, hogy jövő hónapban be is rendelem és neki látok fejleszteni.
(#) watt válasza mammut hozzászólására (») Máj 24, 2009 /
 
Olyan típust nézz, ami mellett ott van egy jel. A többit is meg lehet rendelni, csak várni kell rá(vagy többet kell rendelni) Én a 8720-at használom, jó.
(#) icserny hozzászólása Máj 24, 2009 /
 
Egy LEDvillogtató program tanulságai

PIC24HJ128GP502-höz írt programot próbálgatok Microchip C30 fordítóval. A feladat: PORTB 15. bitjének billegtetése. A bit állapotát természetesen sokféle módon át lehet billenteni ellenkező állapotba. Először a _LATB15 = !_LATB15; utasítással próbálkoztam, azután eszembe jutott, hogy van egy __builtin_btg() függvény, majd más lehetőségeket is kipróbáltam, s megnéztem, hogy milyen kódot generál belőlük a fordító. Meglepetés ért, íme az eredményhirdetés (és egy lecsupaszított tesztprogram):

  1. #include <p24hxxxx.h>
  2. void main(void) {
  3.   AD1PCFGL=0x1fff;   //Analóg bemenetek tiltása
  4.   LATB=0x0000;
  5.   TRISB=0x0000;
  6.   asm("btg LATB,#15");     // 1 utasítás
  7.   __builtin_btg(&LATB,15); // 2 utasítás
  8.   _LATB15 = !_LATB15;      // 9 utasítás
  9.   _LATB15 = ~_LATB15;      //11 utasítás
  10. }


Nem tudom, hogy van-e valakinek full verziója, de érdekelne, hogy a fenti programot hajlandó-e tovább optimalizálni a fordító?

Utóirat: az egy dolog, hogy a _LATB15 = !_LATB15; sor 9 gépi utasításra fordul, nagyobb baj, hogy az eredetileg "atomi" btg LATB,#15 utasítás helyett egy nem "atomi" műveletsort generál, ami konkurrens környezetben (pl. RTOS vagy más többfeladatos rendszer) csúnya dolgokat produkál,ha a port különböző bitjeit konkurrens programszálak matatják.
(#) trudnai válasza icserny hozzászólására (») Máj 24, 2009 /
 
Letoltottem az evaluation valtozatot, az 60 napig fullos. Ime az eredmeny -Os optimalizacioval:

  1. ---  X:\PicDev\test\test24H\test_24HJ128GP502.c  -------------------------------------------------
  2. 1:                 #include <p24hxxxx.h>
  3. 2:                 void main(void) {
  4. 3:                     AD1PCFGL=0x1fff;   //Analóg bemenetek tiltása
  5.  00288  21FFF0     mov.w #0x1fff,0x0000
  6.  0028A  881960     mov.w 0x0000,0x032c
  7. 4:                     LATB=0x0000;
  8.  0028C  EF22CC     clr.w 0x02cc
  9. 5:                     TRISB=0x0000;
  10.  0028E  EF22C8     clr.w 0x02c8
  11. 6:                     asm("btg LATB,#15");     // 1 utasítás
  12.  00290  AAE2CD     btg.b 0x02cd,#7
  13. 7:                     __builtin_btg(&LATB,15); // 2 utasítás
  14.  00292  AAE2CD     btg.b 0x02cd,#7
  15. 8:                     _LATB15 = !_LATB15;      // 9 utasítás
  16.  00294  BFC2CD     mov.b 0x02cd,0x0000
  17.  00296  EAC000     com.b 0x0000,0x0000
  18.  00298  FB8000     ze 0x0000,0x0000
  19.  0029A  DE0047     lsr 0x0000,#7,0x0000
  20.  0029C  DD0047     sl 0x0000,#7,0x0000
  21.  0029E  202CD1     mov.w #0x2cd,0x0002
  22.  002A0  784091     mov.b [0x0002],0x0002
  23.  002A2  A17401     bclr 0x0002,#7
  24.  002A4  70C080     ior.b 0x0002,0x0000,0x0002
  25.  002A6  780001     mov.w 0x0002,0x0000
  26.  002A8  B7E2CD     mov.b 0x0000,0x02cd
  27. 9:                     _LATB15 = ~_LATB15;      //11 utasítás
  28.  002AA  BFC2CD     mov.b 0x02cd,0x0000
  29.  002AC  FB8000     ze 0x0000,0x0000
  30.  002AE  DE0047     lsr 0x0000,#7,0x0000
  31.  002B0  A20400     btg 0x0000,#0
  32.  002B2  DD0047     sl 0x0000,#7,0x0000
  33.  002B4  202CD1     mov.w #0x2cd,0x0002
  34.  002B6  784091     mov.b [0x0002],0x0002
  35.  002B8  A17401     bclr 0x0002,#7
  36.  002BA  70C080     ior.b 0x0002,0x0000,0x0002
  37.  002BC  780001     mov.w 0x0002,0x0000
  38.  002BE  B7E2CD     mov.b 0x0000,0x02cd
  39. 10:                }
  40.  002C0  060000     return
(#) icserny válasza trudnai hozzászólására (») Máj 24, 2009 /
 
Köszönöm a segítséget! Úgy látom, hogy csak a __builtin_btg() és a _LATB15 = !_LATB15 vonatkozásában van változás (a kód többi része nekem is ugyanígy fordult). A __builtin_btg() optimális lett, a másik kód hosszabb lett. Nekem ilyen kódot produkált a ferdítő:

  1. ; __builtin_btg(&LATB,15);
  2.     mov.w #0x2cc,0x0000
  3.     btg [0x0000],#15
  4. ; _LATB15 = !_LATB15;
  5.     mov.b 0x0002,0x0000
  6.     cp0.b 0x02cd
  7.     bra lts, 0x0002a4
  8.     mov.b #0x1,0x0000
  9.     sl 0x0000,#7,0x0002
  10.     mov.b 0x02cd,0x0000
  11.     bclr 0x0000,#7
  12.     ior.b 0x0000,0x0002,0x0000
  13.     mov.b 0x0000,0x02cd
(#) Hp41C válasza icserny hozzászólására (») Máj 24, 2009 /
 
Szia!

Egy ötlet C -ben (16-os családban használom, ahol nincs btg):

_LATB^=0x8000;

Vajon ezt mire fordítja?
(#) icserny válasza Hp41C hozzászólására (») Máj 24, 2009 /
 
Idézet:
„_LATB^=0x8000; Vajon ezt mire fordítja?”

Furcsa dolgokra:

Pontosítás: nem _LATB csak LATB.

Optimalizálás nélkül:
  1. ;                 LATB ^= 0x8000;
  2.  0029E  801661     mov.w 0x02cc,0x0002
  3.  002A0  280000     mov.w #0x8000,0x0000
  4.  002A2  688000     xor.w 0x0002,0x0000,0x0000
  5.  002A4  881660     mov.w 0x0000,0x02cc

Vagyis W0-ban kiszámolja 0x8000 és LATB XOR kapcsolatát, majd az eredményt visszaírja LATB-be.

Optimalizálással (-O1):
  1. ;                 LATB ^= 0x8000;
  2.  00296  280000     mov.w #0x8000,0x0000
  3.  00298  B422CC     add.w 0x02cc

Vagyis hozzáad 0x8000-et.


Utóirat:
  1. LATB ^= 0x0800 ;

bezzeg egyetlen btg LATB,#11 utasításra fordul.
(#) Hp41C válasza icserny hozzászólására (») Máj 25, 2009 /
 
Szia!

Talán azért kezeli másként, mert a 15. bit egyben az előjel is...
(#) icserny válasza Hp41C hozzászólására (») Máj 25, 2009 /
 
Idézet:
„Talán azért kezeli másként, mert a 15. bit egyben az előjel is...”

Nem gondolom, mert előjel nélkülinek van definiálva.
  1. extern volatile unsigned int  LATA __attribute__((__sfr__));


Szerintem egyszerűen csak "így jött ki neki a lépés"...
(#) trudnai válasza icserny hozzászólására (») Máj 25, 2009 /
 
Idézet:
„„Talán azért kezeli másként, mert a 15. bit egyben az előjel is...”
Nem gondolom, mert előjel nélkülinek van definiálva.”


Nem is a LATB-vel van a problema, hanem a 0x8000 -el. ANSI C-ben integer promotion van. Meg kellene probelni:

  1. LATB ^= (unsigned)0x8000;
(#) icserny válasza trudnai hozzászólására (») Máj 25, 2009 /
 
Idézet:
„LATB ^= (unsigned)0x8000;”

Nálam ez is összeadásnak fordul:
  1. mov #0x8000,W0
  2.    add LATA


A maga módján egyébként igaza van, csak nekem nem tetszik.
Következő: »»   490 / 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