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   900 / 1203
(#) bugyi680 hozzászólása Feb 4, 2017 /
 
Üdv!
Tudna nekem valaki ajánlani Mac OSX 10.5.8-ra egy pic programozó szoftvert és egy pic égetőt ami kompatibilis vele.Az XCode nevű program jó szerintetek?
(#) Bakman válasza kriszrap hozzászólására (») Feb 4, 2017 /
 
Az adatlap szerint MHz-es tartományban vannak a határfrekvenciák, a 10 kHz bőven belefér.
(#) Bakman válasza bugyi680 hozzászólására (») Feb 4, 2017 /
 
PPC-s masina? Ma már nehéz eset. Gyorsan körbenéztem, a fórumok szerint felejtős. XCode pedig a Mac OS X fejlesztőkörnyezete. Lehet, hogy implementálni lehet PIC fejlesztőkörnyezetet, de nagy valószínűséggel azt is csak frissebb rendszer alatt.

Ha Intel alapú lenne a géped könnyebben bodogulnál, ha másként nem, egy virtuális Windows segítségével.
(#) bugyi680 válasza Bakman hozzászólására (») Feb 4, 2017 /
 
A gép egy 1GHz-es eMac PowerPC, ősküvölet.Akkor borítékoljam el úgy ,hogy nem tudok vele PIC-et égetni?
(#) kriszrap válasza ktamas66 hozzászólására (») Feb 4, 2017 /
 
Zöld fülűként "nagyobbra az akvizíciós időt" ez mit jelent???
(#) Bakman válasza bugyi680 hozzászólására (») Feb 4, 2017 /
 
Kb. igen. Nem szeretnék turkálni a zsebedben de ha megteheted, vegyél egy Mac mini-t, kb. a legolcsóbb Intel alapú gép.
(#) ktamas66 válasza kriszrap hozzászólására (») Feb 4, 2017 /
 
Az emlegetett fejezetben láthatod az analóg bemenet felépítését. A mérésnél egy kondit tölt, majd lekapcsolja és megállapítja a feszültséget. Amikor a kondit rákapcsolja a bemenetre időt kell hagyni, hogy megfelelően feltöltődjön. Ha nagyobb ellenálláson keresztül töltöd több időt kell hagyni (az adatlapon ott van hogyan kell kiszámolni). A lényeg: az AD bekapcsolás, csatornaváltás vagy új mérés indítás esetén el kell telnie az adott időnek mielőtt elindítod a mérést. Ez persze néhány us, de oda kell figyelni rá.
(#) pajti2 válasza bugyi680 hozzászólására (») Feb 4, 2017 /
 
Az alma 6 éve beszüntette a ppc supportot, tényleg nem mai darab az a gép. Én sem gondoltam a zsebedben turkálni, de egy bármilyen inteles őskövület gépre felpakolhatsz egy 32 bites win7-et, és elfutnak rajta a consol alapú fejlesztő eszközök. 32bites alapgép 20khuf + monitor 12khuf. Persze gondolom még billentyűzet + egér, valami füles / hangszóró újabb 5khuf. 40 alatt komplett gép tokkal vonóval.
(#) dani555 hozzászólása Feb 5, 2017 /
 
Sziasztok!

Megépítettem egy PIC-es kapcsolást, a lényeg, hogy 1 digiten gombnyomásra számol felfelé, majd másik gombnyomásra lefelé. Ez rendben működik is, de terveztem hozzá egy 3. gombot, ami az adott értéken pár másodpercig villogtatja az éppen aktuális kijelzett számot. A HW-t többször átnéztem, se kontakt hiba, se semmi más. 16f877a-t használok. Íme a SW, szeretném ha mondanátok róla valamit. Köszi.

  1. char i;
  2. char j;
  3.  
  4. unsigned int Hex(int a)
  5. {
  6.          switch(a)
  7.          {
  8.                   case 1: return 0x06;
  9.                   case 2: return 0x5B;
  10.                   case 3: return 0x4F;
  11.                   case 4: return 0x66;
  12.                   case 5: return 0x6D;
  13.                   case 6: return 0x7D;
  14.                   case 7: return 0x07;
  15.                   case 8: return 0x7F;
  16.                   case 9: return 0x6F;
  17.                   case 0: return 0x3F;
  18.          }
  19. }
  20.  
  21. void main()
  22. {
  23.      TRISD = 0b00000000;
  24.      //PORTD = 0b00000000;
  25.      TRISC.F2 = 1;
  26.      TRISC.F3 = 1;
  27.      TRISC.F1 = 1;
  28.      
  29.      i=0;
  30.      PORTD = Hex(i);
  31.      
  32.      do
  33.      {
  34.                 //for(i=0;i<10;i=i+1)
  35.                 //{
  36.  
  37.                           if(PORTC.F2 == 0)
  38.                           {
  39.                                       Delay_ms(100);
  40.                                       if(PORTC.F2 == 0)
  41.                                       {
  42.                                                 i=i+1;
  43.                                                 PORTD = Hex(i);
  44.                                                 Delay_ms(1000);
  45.                                       }
  46.                           }
  47.                           if(PORTC.F3 == 0)
  48.                           {
  49.                                       Delay_ms(100);
  50.                                       if(PORTC.F3 == 0)
  51.                                       {
  52.                                                 i=i-1;
  53.                                                 PORTD = Hex(i);
  54.                                                 Delay_ms(1000);
  55.                                       }
  56.                           }
  57.                           if(PORTC.F1 == 0)
  58.                           {
  59.                                       Delay_ms(100);
  60.                                       if(PORTC.F1 == 0)
  61.                                       {
  62.                                                 for(j=0;j<10;j++)
  63.                                                 {
  64.                                                         PORTD = Hex(i);
  65.                                                         Delay_ms(500);
  66.                                                 }
  67.  
  68.                                       }
  69.                           }
  70.                 //}
  71.  
  72.      }
  73.      while(1);
  74. }
(#) dani555 válasza dani555 hozzászólására (») Feb 5, 2017 /
 
Ja és még annyi, hogy MIKROC-ben van.
(#) kissi válasza dani555 hozzászólására (») Feb 5, 2017 /
 
Szia!
  1. if(PORTC.F1 == 0)
  2.                           {
  3.                                       Delay_ms(100);
  4.                                       if(PORTC.F1 == 0)
  5.                                       {
  6.                                                 for(j=0;j<10;j++)
  7.                                                 {
  8.                                                         PORTD = Hex(i);
  9.                                                         Delay_ms(500);
  10.                                                 }
  11.  
  12.                                       }
  13.                           }


Itt nincs villogtatás, ahhoz ki-be kellene kapcsolgatnod a számot, illetve a 60.sorban felesleges újra ellenőrizned, hogy nyomják-e még a gombot ( hacsak nem szempont, hogy rögtön kapcsoljon ki!) !
(#) dani555 válasza kissi hozzászólására (») Feb 5, 2017 /
 
Hajaj, igen most veszem észre, hogy kifelejtettem a PORTD=0b00000000; sort a delay alól.... köszönöm!
(#) dani555 válasza kissi hozzászólására (») Feb 5, 2017 /
 
Az az újraellenőrzés a 60.sorban a szokásos pergésmentesítés miatt tettem oda, igaz valószínűleg megszokásból, mert tényleg felesleges.
(#) jpocok hozzászólása Feb 5, 2017 /
 
Sziasztok!
Szükségem volna egy kis segítségre. Van egy ASM programom (16F628A-ra), ami tele van ilyen sorokkal:
Idézet:
„movlw 1<<PB.invert | 1<<PB.lamp.test | 1<<PB.blank | 1<< PB.A3 | 1<< PB.A2 | 1<< PB.A1 | 1<< PB.A0”

Gondolom ez előbb kiszámítja azt az értéket, amit utána bemozgat. De nem ismerem ezt a megoldást. Pontosan mit is csinál?
Előre is köszönöm!
(#) benjami válasza jpocok hozzászólására (») Feb 5, 2017 /
 
Valahol előtte definiálva vannak ezek az értékek, pl:
#define PB.invert 2
Egyszerűen az ott definiált értékeket fogja a fordító behelyettesíteni.
Két okból szokták így csinálni:
- Olvashatóbb a program.
- Ha egy lábat átteszünk máshova elég egy helyen megváltoztatni, nem kell végig keresni, hogy hol kell még megváltoztatni a programot.
(#) jpocok válasza benjami hozzászólására (») Feb 6, 2017 /
 
Köszönöm válaszodat, de még mindig nem értem! Ebben az utasításban több értéket is látok. Hogyan helyettesíti be azokat? Mindet egyszerre nem teheti bele.
Egyébként visszafordítottam ennek a programnak a HEX változatát és erre a sorra azt adta a fordító, hogy "MOVLW d'233'. Szerintem ez is azt erősíti meg, hogy számolja az értéket az előre megadottakból. De hogyan?
A hozzászólás módosítva: Feb 6, 2017
(#) Hp41C válasza jpocok hozzászólására (») Feb 6, 2017 /
 
Az utasítás egy kifejezés értékét tölti be a W regiszterbe. A kifejezés a példában:
  1. 1<<PB.invert | 1<<PB.lamp.test | 1<<PB.blank | 1<< PB.A3 | 1<< PB.A2 | 1<< PB.A1 | 1<< PB.A0

A kifejezésben kontansok és műveletek szerepelnek.
Konstansok: pl: 1, PB.invert, .., PB.A0
Műveletek:
<< ----- balra léptetés a << után írt értéknek megfelelő számú bittel.
| ----- logikai vagy kapcsolat képzése.

A fordító, amikor a fenti sorhoz ér kiszámol 7 értéket léptetésekkel és a 7 érték vagy kapcsolatás kódolja az utasítás adat részébe.

Inkább így használnám:
  1. (1<<PB.invert) | (1<<PB.lamp.test) | (1<<PB.blank) | (1<< PB.A3) | (1<< PB.A2) | (1<< PB.A1) | (1<< PB.A0)
A hozzászólás módosítva: Feb 6, 2017
(#) kissi válasza jpocok hozzászólására (») Feb 6, 2017 /
 
Szia!
Idézet:
„1<<PB.invert”
Ez azt jelenti, hogy a 8 bites adatban a PB.invert helyre tesz egy 1-est
Idézet:
„1<<PB.lamp.test”
Ez meg azt, hogy a 8 bites adatban a PB.lamp.test helyre tesz egy 1-est ( a függőleges vonal VAGY kapcsolatot jelent ) és így tovább ...majd az így kapott számot rakja a w-be !
(#) pajti2 válasza jpocok hozzászólására (») Feb 6, 2017 /
 
Lerövidítve azt az egy kérdést, amin elakadtál:
Idézet:
„Mindet egyszerre nem teheti bele.”
De bizony beleteheti, mert ott minden érték előre definiált konstans, az egész hóbelebanc egy szem végeredménye előre kiszámolható.
(#) jpocok válasza Hp41C hozzászólására (») Feb 6, 2017 /
 
Nagyon szépen köszönöm mindenkinek a válaszokat! Így már világos .
(#) jpocok válasza pajti2 hozzászólására (») Feb 6, 2017 /
 
Igen, én is ezt mondtam kezdettől fogva, hogy előbb számol és az eredményt teszi be. A "mindet nem teheti be egyszerre" arra vonatkozott, hogy egyszerre több érték nem kerülhet ugyanarra a helyre.
(#) benjami válasza jpocok hozzászólására (») Feb 6, 2017 /
 
Mivel W regiszter 8 bites, így 8db bitet fog beletenni. A példádban 7 bitbe fog 1 kerülni, egy pedig 0 lesz (feltéve, ha a definíciók között nincs egyforma és mindegyik 0..7 közé esik).
(#) Hp41C hozzászólása Feb 7, 2017 /
 
Adják a bankot.... Még több bank a 18F -ekben.
PIC18FxxK42 64 RAM Bankkal. Összesen 16384 byte adatmamória címezhető. Új 3 szavas utasítás, amiben a cél és a forrás teljes 14 bites címe megadható: movffl. PIC18F25K42
(#) pompidu hozzászólása Feb 7, 2017 /
 
Sziasztok,
PIC32-es családdal ismerkedek, van valakinek olyan leírása amiben kitérnek ennek a családnak a konfigurációs bitjeinek beállításaira és funkcióinak konfigurálásaira, mint például ANSEL, ANSELH, stb.
Köszönöm.
(#) pajti2 válasza pompidu hozzászólására (») Feb 7, 2017 /
 
Ha a pénztárcád engedi, érdemes venni egy ilyesmit: Bővebben: Link

Adatlapok a gyártó oldalán: Bővebben: Link (32mx795) Tekerd le az oldalt, alul "Documentation"-t lenyitod, a legelső egy felső szintű összefoglaló doksi, ha tekered lejjebb, lesz a "Reference Manual" alatt minden blokknak saját külön doksija is. Nem kevés az egész egyben, kicsit több, mint egy 8 bites cumónál lenni szokott

Van már a pic32-eseknek mz családja is, de kezdőknek még nem különösebben ajánlanám. Inkább csak gyakorlott idegzetűeknek és mc-tapasztalt népeknek való, vagy még nekik sem.
A hozzászólás módosítva: Feb 7, 2017
(#) pompidu válasza pajti2 hozzászólására (») Feb 7, 2017 /
 
Azt tudtam hogy több, sokkal több, na de ennyire Azt hiszem ma sem alszom
Én egy MX családdal kezdtem és csináltam már hozzá próbapanelt, minden földi jóval (I2C, GSM, GPS, stb) MZ családról már én is hallottam cifra dolgokat.
A tippet köszönöm nagyon hasznosnak bizonyul.
(#) aroxol hozzászólása Feb 8, 2017 /
 
Sziasztok!

Egy PIC18f24K22-vel lehetséges közvetlenül (persze egy ellenálláson keresztül) egy BD140-et vezérelni?
(#) gyoran válasza aroxol hozzászólására (») Feb 8, 2017 /
 
Szerintem igen. Emitter fel a tápfeszre. 330 Ohm a bázisra és 100-as hFE-vel tudod a max 1,5 Ampert kapcsolni. Persze a hFE szór, de ez kb átlag. Kollektor és föld között a terhelés.
A hozzászólás módosítva: Feb 8, 2017
(#) pajti2 válasza aroxol hozzászólására (») Feb 9, 2017 /
 
Az adatlap szerint nem fog menni (DS40001412G-page 429), Voh-ra azt írja Vdd - 0.7V korlátnál, hogy IOH = 3.5 mA, VDD = 5V / IOH = 3 mA, VDD = 3.3V / IOH = 1 mA, VDD = 1.8V. Amivel egy BD 140 nem fog jóllakni az adatlap szerinti 63..160-as (egyébként cefet nagy szórású) áramerősítésével. Jobb lenne darlingtonban valami másik kicsi tranzisztor, egy bc182, vagy tényleg bármi, ami rásegít a pic-nek. Gondolj rá, hogy 2x bázis-emitter feszültséget kell tudnia kiadnia a pic-nek, ami a Vdd -0.7V esetén már kvázi 3x Ube-t jelent Vdd-nek. 1.8V-on nem hajthatod majd a pic-et, mert még bázis ellenállás is kelleni fog, és annak is van szórása, amivel számolni kellene. Ha meg áram stab visszacsatolással hajtanád, akkor egy emitter köri ellenállásra is újabb 0.7V-ot hagynod kellene - legalább 3.3V Vdd lenne célszerű. Játszadozhatsz még olyannal is, hogy több kimeneti lábat összekötni, meg weak pullup áramot hozzáadni, de elég gány olyasmiket csinálni.

Vajon miért is nem mosfetet akarsz használni áram kapcsolásra?
A hozzászólás módosítva: Feb 9, 2017
(#) gazspe hozzászólása Feb 9, 2017 /
 
Sziasztok!
Két kérdésem lenne:
1. PIC kimenetéből szeretnék 3 külön frekvencián jeleket generálni 12V-os illesztéssel. Ezt meg tudom oldani lábanként egy tranzisztor-LC(/RC?) szűrővel, D osztályú erősítő kimenetének működéséhez hasonlóan (fix terhelés, 3 jelalak)?
2., delay fv hívásakor csak a hardwares modulok mennek? Szóval pl.: softwares PWM a delay esetén leáll?
Válaszokat előre is köszönöm.
Következő: »»   900 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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