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   925 / 1207
(#) cross51 hozzászólása Ápr 12, 2017 /
 
Sziasztok!

Létezik a PIC lábainak excel fájlja, vagy nekem kell megírni?
(#) nagym6 válasza don_peter hozzászólására (») Ápr 12, 2017 /
 
A Q1, Q3, Q4 tranzisztorok bázisára ajánlatos lenne még 1K ellenállás, a biztos lezáráshoz.
(#) pajti2 válasza don_peter hozzászólására (») Ápr 12, 2017 /
 
Bocsi, hogy jelzem, de szerintem konkrétabban is fogalmazhatnánk. Dobok én is valamit, amit hirtelenjében express sch-val gányoltam.

Amúgy az emitterkörbe rakni ellenállást azért nem célszerű, mert azzal gyártottál egy emitter követőt, és tápfeszt loptál el a meghajtott led-től. Miért jó az? A pic kimenetet nyugodtan meg lehet húzni egy jó 2 mA-rel, ha már úgyis wattok fognak elmenni a ledekre, az a kevéske plussz áram igazán nem árt majd annyit, mint amennyi bizonytalanságot gyárt az emitterkövető a pontos feszültség értékek végett. Valamint nem árt az npn-ek bázisát külön is földre húzni arra az esetre, ha valami weak pull up funkciója lenne a pic-nek, amihez oda kerül. Biztos, ami biztos. A pnp-ket pedig nem igazán tudja meghajtani a pic, mert gnd felé kihúz full-ra, de +táp felé nem. Egyik sem húz ki rendesen. Én jártam már úgy, hogy pnp tranzisztort nem tudtam kikapcsolni. Jobb azt is npn-en keresztül darlingtonnal, és az biztosan működik. Kóbor áramokra meg figyelni ott is.

A kapcsrajzon felraktam még pár kóbor ledet az egyszem ténylegesen bekötött mellé, arra a sor vezérlésre mehetnek rá ugyan úgy ledek az oszlop vezérléssel, de azt már nem rajzoltam ki külön. Értékeket sehova sem írtam, de kategóriában kb adják magukat. Majd ami éppen van tartalékban, az kerül oda úgyis.
(#) pajti2 válasza kriszrap hozzászólására (») Ápr 12, 2017 /
 
A +táphoz a pnp azért kell, mert ha npn-el akarnád meghajtani, tápfesz fölé kellene húznod a bázisát ahhoz, hogy a bázis-emitter diódája ne lopjon tápfeszt a ledtől. Open kollektorral meghajtani gnd felé npn-el hajtunk meg, +táp felé pedig pnp-vel.
(#) Bakman válasza cross51 hozzászólására (») Ápr 12, 2017 /
 
Excel fájl a lábakról? Tulajdonképpen mire gondolsz?
(#) kriszrap válasza pajti2 hozzászólására (») Ápr 12, 2017 /
 
Én hiszek nektek
bc640nál mekkora ellenállás kell??
A hozzászólás módosítva: Ápr 12, 2017
(#) Pali79 válasza Bakman hozzászólására (») Ápr 12, 2017 /
 
Szerintem csak szívat...
(#) don_peter válasza pajti2 hozzászólására (») Ápr 12, 2017 /
 
Igen ezért is írtam, hogy egy lehetséges megoldás.
Persze szerintem még mindig jobban jár, ha ULN2003-at használna meghajtásnak.
Olcsó és nem bonyolítja túl a dolgot..
(#) pajti2 válasza kriszrap hozzászólására (») Ápr 12, 2017 /
 
Igazából még tisztázatlan az a kérdés, hogy milyen teljesítményű ledeket használnál - azt a részét nem követtem a projectednek. A pic kimenetet nem illik 2-3 mA fölé terhelni még akkor sem, ha elbír 10-et is simán. Annak alapján számold az ellenállásokat. Ha nagyobb áram kell, mert teljesítmény ledeket használnál, lehet, darlingtont kellene inkább használni a sima tranzisztor helyett, és valami teljesítmény meghajtót rakni másodiknak. Vagy éppen kapcsoló fetet, bár azok szerintem cefet drágák a tranzisztorokhoz képest.
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 12, 2017 /
 
Közben átrágtam három videót, és lett egy ilyen terjedelmes kódocska, amiben már [enter] sort vált, [esc] törli a kijelzőt és [backspace] egy karaktert visszatöröl.
  1. // LCD BEKÖTÉS >>
  2. sbit LCD_RS at RA0_Bit;
  3. sbit LCD_EN at RA1_Bit;
  4. sbit LCD_D4 at RB4_bit;
  5. sbit LCD_D5 at RB5_bit;
  6. sbit LCD_D6 at RB6_bit;
  7. sbit LCD_D7 at RB7 bit;
  8.  
  9. sbit LCD_RS_Direction at TRISA0_Bit;
  10. sbit LCD_EN_Direction at TRISA1_Bit;
  11. sbit LCD_D4_Direction at TRISRB4_Bit;
  12. sbit LCD_D5_Direction at TRISRB5_Bit;
  13. sbit LCD_D6_Direction at TRISRB6_Bit;
  14. sbit LCD_D7_Direction at TRISRB7_Bit;
  15. // LCD BEKÖTÉS <<
  16.  
  17. //Billentyűzet bekötés >>
  18. sbit PS2_Data at RA2_Bit;
  19. sbit PS2_Clock at RA3_Bit;
  20.  
  21. sbit PS2_Data_Direction at TRISRA2_Bit;
  22. sbit PS2_Data_Direction at TRISRA3_Bit;
  23.  
  24. //Billentyűzet bekötés <<
  25.  
  26. char lcdsor = 1, lcdoszlop = 1;
  27. bit lcdtele
  28.  
  29. char keydata = 0, special = 0, down = 0;
  30.  
  31. void main()
  32. {
  33. TRISRA0 = 0;
  34. TRISRA1 = 0;
  35. TRISRA2 = 1;
  36. PORTRA2 = 255;
  37. TRISRA3 = 1;
  38. PORTRA3 = 255;
  39. TRISRA4 = 0;
  40. TRISRA5 = 0;
  41. TRISRA6 = 0;
  42. TRISRB0 = 0;
  43. TRISRB1 = 0;
  44. TRISRB2 = 0;
  45. TRISRB3 = 0;
  46. TRISRB4 = 0;
  47. TRISRB5 = 0;
  48. TRISRB6 = 0;
  49. TRISRB7 = 0;
  50.  
  51. C1ON_Bit = 0;
  52. C2ON_Bit = 0;
  53. ANSEL = 0;
  54. ANSELH = 0;
  55.  
  56. LCD_Init();
  57. PS2_Config();
  58. Delay_ms(100);
  59. LCD_CMD(_LCD_CLEAR);
  60. LCD_CMD(_LCD_CURSOR_OFF);
  61. lcdtele = 0;
  62.  
  63. while(1)
  64. {
  65. if(PS2_Key_Read(&keydata, &special, &down)) // megnyomtunk egy gombot
  66. {
  67.  
  68. if(down && (keydata >=32)) // nem funkció billentyűt nyomtam meg (ALT, CTRL, F12 stb)
  69. LCD_CHR(1,1,keydata)
  70. }
  71.  
  72. if (lcdtele = 1)
  73. {
  74. lcdtele = 0;
  75. lcdoszlop = 1;
  76. lcdsor = 1;
  77. LCD_CMD((_LCD_CLEAR);
  78. Delay_ms(5);
  79. }
  80.  
  81. LCD_CHR(lcdsor,lcdoszlop,keydata);
  82. lcdoszlop++;
  83.  
  84. if(lcdoszlop >=17)
  85. {
  86. lcdoszlop = 1;
  87. lcdsor++;
  88. }
  89.  
  90. if(lcdsor >= 3)
  91. {
  92. lcdtele = 1;
  93. }
  94. } // funkciógombot nyomtunk e? vége
  95. if(down && (keydata = 16)) //BACKSPACE
  96. {
  97. if(lcdoszlop! = 1)
  98. {
  99. lcdoszlop--;
  100. LCD_Chr(lcdsor,lcdoszlop,32);
  101. }
  102. if(lcdoszlop = 1 && lcdsor = 2)
  103. {
  104. LCD_Chr(1,16,32);
  105. lcdsor = 1;
  106. lcdoszlop = 16;
  107. }
  108. }
  109. if(down && (keydata = 34)) // ESC
  110. {
  111. lcdtele = 0;
  112. lcdoszlop = 1;
  113. lcdsor = 1;
  114. LCD_CMD((_LCD_CLEAR);
  115. Delay_ms(5);
  116. }
  117. if(down && (keydata = 13)) // Enter
  118. {
  119. if(lcdsor = 1)
  120. {
  121. lcdsor = 2;
  122. lcdoszlop = 1;
  123. }
  124. lcdtele = 0;
  125. lcdoszlop = 1;
  126. lcdsor = 1;
  127. LCD_CMD((_LCD_CLEAR);
  128. Delay_ms(5);
  129. }
  130. } // megnyomtuk a gombot feltétel vége
  131. } // while ciklus vége
  132.  
  133. } // program vége
A videóban is benne maradt egy kellemetlen bug, amikor a második sor egyes oszlopába már írt és azt akarná visszatörölni, akkor egyszerre törlődik az egyes sor utolsó karaktere is! Ti látjátok-e, hogy mi nem stimmel?
Kérdéseim:
-> Most minden ágat lezártam-e?
-> Jók-e a kód legelején a portok? Mert ti mindig úgy írtátok, hogy "Trisa" és "Trisb"!
-> Az probléma-e, hogy nálam a nem használt portok is kimenetek?
-- Ha minden jó, akkor holnap bekötöm a billentyűzetet meg a tápegységet és megpróbálok hex fordítani meg kiírni PICre, hogy jöhessen végre az éles teszt!!
(#) pajti2 válasza don_peter hozzászólására (») Ápr 12, 2017 /
 
Háát elektronikai alapismeretek nélkül nekiállni építkezni tényleg egy kicsit necces. Lehet benne valami, hogy akkor már tényleg jobb, ha meghajtó ic-t tukmálunk rá.
(#) kriszrap válasza pajti2 hozzászólására (») Ápr 12, 2017 /
 
hát nem valami nagy tejesítményű szerintem. Led zöld-piros színben:Bővebben: Link
Össze van rakva müködik csak a ledfényerő nem volt számora megfelelő
A hozzászólás módosítva: Ápr 12, 2017
(#) don_peter válasza Udvari Zsombor hozzászólására (») Ápr 12, 2017 /
 
Basszus kulcs, te vagy direkt nem figyelsz, vagy már élből le..arod amit itt páran írtunk neked.
Biz bennem, ha azt mondom, hogy olvasd vissza ezt a pár lapot.
Pár elolvasás után már kevesebb lesz a fekete folt..

"PORTRA2 = 255;" ??????????????????????????????????????
Függvények, függvénykönyvtárak hiányoznak.... ez nem lesz így jó és nem figyelsz....
A hozzászólás módosítva: Ápr 12, 2017
(#) nedudgi válasza cross51 hozzászólására (») Ápr 12, 2017 /
 
Neked kell megírni.
(#) slimcolt válasza pajti2 hozzászólására (») Ápr 12, 2017 /
 
Ide tipikusan lehetne Pre-biased tranyókat is használni, és akkor nem kellene az a rengeteg ellenállás sem. Vagy esetleg FET...? Vannak tipikusan logic levels FET-ek is. 2.5V-on csak néhány mR az Rds.
akkor is csak gate ellenállás kellene az MCU védelme érdekében.
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 12, 2017 /
 
Erre javítsd 255 helyett: "PORTRA2 = 1", " PORTRA3 = 1", gondolom ez akart lenni, de értelme semmi, mivel bemenetek.
1 és 2 sor jó. Elvileg nem probléma ha a nem használt portok kimenetek. Csak ha véletlenül valamihez hozzáér zárlat lehet, tönkremegy.
Fordításkor majd kiírja a fordító a problémákat, illetve amiket ő hibának talál.
A konfigurálást tudod? Az is fontos.
A hozzászólás módosítva: Ápr 12, 2017
(#) Udvari Zsombor válasza don_peter hozzászólására (») Ápr 12, 2017 /
 
Ide nem másolom be még egyszer, de köszönöm, az a kettő 255 tényleg nem jó, így javítottam 1-re. A visszatörlés problémájára tudtok valamit?
Idézet:
„A videóban is benne maradt egy kellemetlen bug, amikor a második sor egyes oszlopába már írt és azt akarná visszatörölni, akkor egyszerre törlődik az egyes sor utolsó karaktere is! Ti látjátok-e, hogy mi nem stimmel?”
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 12, 2017 /
 
Idézet:
„Ti látjátok-e, hogy mi nem stimmel?”
Mint előbb írtam, minden stimmel az 1 és 2 sorban.
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 12, 2017 /
 
Akkor itt van külön a //backspace rész. Pontosan itt hányadik sor nem jó?
  1. if(down && (keydata = 16)) //BACKSPACE
  2. {
  3. if(lcdoszlop! = 1)
  4. {
  5. lcdoszlop--;
  6. LCD_Chr(lcdsor,lcdoszlop,32);
  7. }
  8. }
  9. if(lcdoszlop = 1 && lcdsor = 2)
  10. {
  11. LCD_Chr(1,16,32);
  12. lcdsor = 1;
  13. lcdoszlop = 16;
  14. }
  15. }
  16. if(down && (keydata = 27)) // ESC
  17. {
  18. lcdtele = 0;
  19. lcdoszlop = 1;
  20. lcdsor = 1;
  21. LCD_CMD((_LCD_CLEAR);
  22. Delay_ms(5);
  23. }
És a csatolt kép alapján kérdezem, hogy hányas a [home] gomb?

Itt kommentbe ezt írja:
Idézet:
„"azért teljesül a másik if mert amikor levonod az lcdoszlopot akkor az 0 lesz és a másik if így szól "if(ledoszlop !=1)" vagy is 0 2 3 .... érvényesül. sztem így if(ledoszlop > 1)" Pontosan Örülök, hogy megtaláltad a hibát.”
Ezt most akkor hogy értsem?
A hozzászólás módosítva: Ápr 12, 2017
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 12, 2017 /
 
Nem tudom, nincs MikroC programom, súgója sem. A fordításkori hibaüzenetek sokat segítenek a súgóval együtt annak, aki előtt ott a program. Ilyen programrészbe általában nagyon bele kell mélyedni. Sok minden lehet egymásra hatással programon belül, egy kiragadott részlet kevés. Ha valaki nem ismeri a program minden porcikáját, annak működését, akkor a hibakeresés nagyon keserves.
(#) cross51 válasza Bakman hozzászólására (») Ápr 12, 2017 /
 
Csak annyi kéne
PIN NAME
1 RA0/....
2 ....
És én csinálnék több oszlopot még(Pin type stb..), mert az Altiumban van component wizzard és abban így be lehetne húzni az excel fájlt, de már megírtam Visual Studio-ban egy Ctrl+C, Ctrl+V alapon működő programot ami rendezi portok szerint és ment excelbe, még apró részletek hiányoznak belőle.
A hozzászólás módosítva: Ápr 12, 2017
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 12, 2017 /
 
És a mellékelt képem alapján hányas a [home] gomb?
(#) Bakman válasza cross51 hozzászólására (») Ápr 12, 2017 /
 
Lévén aháhy PIC, annyi típusú kivezetés, nagy valószínűséggel nincs ilyen. Sok kontrollernél az adott periféria áthelyezhető másik lábra is. Szinte az összes kontrollernél egy-egy láb több funkcióval is bír...
(#) icserny válasza cross51 hozzászólására (») Ápr 13, 2017 /
 
Excel fájlok tudtommal nincsenek. Adatlap van, meg Microchip CAD/CAE könyvtár. Az utóbbi bővebben itt: Link

Ezeket támogatja:
Altium Protel
Altium PCAD
Altium Designer
Cadence Allegro DE HDL ( Concept )
Cadence Orcad Capture
Cadsoft Eagle
Mentor DxDesigner
Mentor Design Capture
Mentor Design Architect
Mentor PowerLogic
(#) don_peter válasza Udvari Zsombor hozzászólására (») Ápr 13, 2017 / 1
 
Ezen a táblán nincs HOME gomb, de konfigurálhatsz magadnak az egyik nem használt karakterre.
Érdemes a kódot mindig tagolni mert nem látod rendesen, hogy mi mi alatt van.
  1. // ez a feltétel akkor fut le, ha történik billentyű lenyomás és ha a lenyomott billentyű a 16-os karakter lesz. Vagy is a Visszatörlés.
  2. if(down && (keydata = 16)) //BACKSPACE
  3. {
  4.     if(lcdoszlop! = 1) // Ez a sor csak akkor fut le, ha lcdoszlop nem egyelő 1-el.
  5.     {
  6.         lcdoszlop--; // ledoszlop-ból kivon egyet (így is lehetne írni: ledoszlop = ledoszlop - 1; )
  7.         LCD_Chr(lcdsor,lcdoszlop,32);  // LCD-t, illetve a kurzort pozicionálja vagy kiír
  8.     }
  9. }
  10.  
  11. if(lcdoszlop = 1 && lcdsor = 2) // akkor fut le, ha lcdoszlop egyelő 1-el és lcdsor egyelő 2-vel.
  12. {
  13.     LCD_Chr(1,16,32);   // LCD-t, illetve a kurzort pozicionálja vagy kiír
  14.     lcdsor = 1; // ezt gondolom nem kell magyarázni, de ha még is akkor lcdsor és lcdoszlop változókat állítja be (őszintén így elsőnek nem is értem miért kell ez a feltétel)
  15.     lcdoszlop = 16;
  16. }
  17.  
  18. // } <-- ez nem tudom minek a része (nincs gazdája), de gyanítom, hogy van még egy feltétel feljebb, ez a gond, ha csak kimásol valaki valamit. Ez már is egy hiba...
  19.  
  20. // Mint a BACKSPACE-nél, értelemszerűen a leütött karakter itt más, gyakorlatilag törli a képernyőt
  21. if(down && (keydata = 27)) // ESC
  22. {
  23.     lcdtele = 0; // alaphelyzetbe állítja a változókat
  24.     lcdoszlop = 1;
  25.     lcdsor = 1;
  26.     LCD_CMD((_LCD_CLEAR); // törli az LCD-t
  27.     Delay_ms(5); // vár 5 milisec-et
  28. }

Egyszóval, működő fordító nélkül nem fogsz előre haladni, mert minden baromságra amit megkérdezel nem fogsz választ kapni.
Kicsi önállóság azért nem árt ehhez.
Amúgy mennyi idős vagy, hogy ennyire nehezen megy a szövegértelmezés?
Nem sértésnek szánom, ezt azért leszögezem...
A hozzászólás módosítva: Ápr 13, 2017
(#) kriszrap válasza don_peter hozzászólására (») Ápr 13, 2017 /
 
annyit még mekkora baj ha kollektorhoz rakom a korlátozó ellenálást??
(#) don_peter válasza kriszrap hozzászólására (») Ápr 13, 2017 / 1
 
Szerintem nem gond..
Tedd oda.
(#) Udvari Zsombor válasza don_peter hozzászólására (») Ápr 13, 2017 /
 
Jó, akkor jó lesz az [esc] is resethez... :/ És az az ötletem támadt, hogy ha így megfordítom, akkor már jó lesz a törlés a 2sor 1oszlop törlése esetén?
  1. if(down && (keydata = 16)) //BACKSPACE
  2. }
  3. if(lcdoszlop = 1 && lcdsor = 2)
  4. {
  5. LCD_Chr(1,16,32);
  6. lcdsor = 1;
  7. lcdoszlop = 16;
  8. }
  9. {
  10. if(lcdoszlop! = 1)
  11. {
  12. lcdoszlop--;
  13. LCD_Chr(lcdsor,lcdoszlop,32);
  14. }
  15. }
Délután pedig megpróbálhatok fordítani...
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 13, 2017 /
 
  1. if(down && (keydata = 16)) //BACKSPACE

A táblából a BACKSPACE decimális 8, nem 16.
A hozzászólás módosítva: Ápr 13, 2017
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 13, 2017 /
 
Köszike! Amúgy most már nem fog duplán törölni, ha a 2sor 1oszlop törlése kell?
Következő: »»   925 / 1207
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