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   575 / 1210
(#) Zsolt2 hozzászólása Okt 4, 2014 /
 
Sziasztok. A napokban keztem el foglalkozni PIC-el, eddig AVR-t hasznaltam. Egy furcsasagban utkoztem es sehogy sem kapok jo megoldast, ezert a segitsegeteket kernem. Egy 7 szegmenses kijelzot szeretnek multiplexelni. Az idozito megszakitasa mukodi, viszont a szegmens-kivalaszto biteteket nem tudom egyenkent modositan, csak ha a teljes portot irom. Itt van a kodreszlet, amelyet most mukodit:
  1. #define S_mask 0b0b11001111;
  2. ......
  3. switch (segm)
  4.                 {
  5.                         case 0: //1st segment
  6.                                 PORTA |= S_mask;
  7.                                 PORTB = decoder (8);
  8.                                 PORTA = 0b11111110;
  9.                                 //PORTAbits.RA0 = 0;
  10.                                 segm++;
  11.                                 break;
  12.                         case 1: //2nd segment
  13.                                 PORTA |= S_mask;
  14.                                 PORTB = decoder (2);
  15.                                 PORTA = 0b11111101;
  16.                                 segm++;
  17.                                 break;
  18. .....

Ez igy mukodik. A vagy muvelet 1-re allitja az osszes szegmens kivalaszto bitjet, ezutan kikuldom az adatot, es kigyujtom a megfelelo szegmenset (csakhogy igy azt is felul irja amit nem kene). Probaltam mar az alabbi ket fele modszerrel is, de mindkettore lenullazta az osszej kivalaszto bitet es kigyult minden szegmnes:
  1. PORTA &= 0b11111110;
  2. PORTAbits.RA0 = 0;

Van valakinek otlete, hogy miert nem megy a fenti ket sor, vagy milyen mas megoldast lehet alkamazni?
UI: Mplab 8.7-et hasznalot XC8-as forditoval
A hozzászólás módosítva: Okt 4, 2014
(#) icserny válasza Zsolt2 hozzászólására (») Okt 4, 2014 / 1
 
Kár, hogy a kérdezők mindig elfelejtik megmondani, hogy milyen típuscsaládról van szó!

PIC18 esetén PORTA helyett a LATA regisztert kell írni. Sima PORTA = valami; írásnál nincs gond, de a PORTAbits.RA0 = 0; Read-modify-write ciklusban dolgozva esetleg rossz értéket olvas be (mert az előző utasítás hatása még nem érvényesült a kimeneten). A LATAbits.RA0 (vagy mit hell a végére írni CX8-ban, nem tudom?) esetén nincs ilyen probléma.

PIC16 esetén pedig szoftveresen kell megoldani kettős bufferelést. A bitműveleteket egy belső változón (legyen mondjuk LATA a neve...) kell elvégezni, majd az eredményt egy PORTA = LATA; paranccsal lehet ténylegesen kiküldeni.
(#) Zsolt2 válasza icserny hozzászólására (») Okt 4, 2014 /
 
Koszonom a segitseget, meglodotta a prblemat. A PIC tipusat valoban elfeljetettem emliteni, 18F242-rol van szo.
(#) petike199600 hozzászólása Okt 4, 2014 /
 
Sziasztok!
Foxi készített nekem egy programot.
  1. ;ledflash
  2. ERRORLEVEL 2
  3. #include"p18f14k22.inc"
  4. RADIX DEC
  5. #DEFINE LED PORTB,4
  6. #DEFINE ON      PORTB,6
  7. #DEFINE OFF PORTB,7
  8. ;NEM FOGLALKOZOK BEÁLLÍTÁSOKKAL, CSAK A LÉNYEGGEL
  9. ;31 kHz (kb óra kvarc)
  10. ;Ha ekkora az oszcillátor frekije akkor 129uS egy
  11. ;utasítás ideje. A nyomógombok prelleznek, ezért
  12. ;nem egyértelmű a lekérdezése tehÁT TRÜKKÖSEN kell ;lekérdezni
  13. ;Mivel a gombok lekérdezése is igen gyors,ezért kell
  14. ;várakozási időket is beépíteni, hiszen ha 1mp alatt
  15. ;le tudja kérdezni a gombot 1000x akkor 1000x nővelné
  16. ;a számláló értékét is ezért úgy írom meg a progit, hogy
  17. ;amíg a gomb nyomva van "áll" a progi és gomb ;felengedéskor megy tovább
  18.  
  19. CBLOCK
  20. GOMBCNT
  21. ENDC
  22. org 0
  23. CALL INIT
  24. GOTO PRG
  25. ;
  26. ;
  27. INIT:
  28. MOVLW   B'11101111'
  29. MOVWF   TRISB
  30. CLRF    GOMBCNT     ;ON SZÁMLÁLÓ=0
  31. RETURN
  32. ;*** 100mS KÉSLELTETÉS W REGISZTERBEN, HOGY HÁNYSZOR ****
  33. CBLOCK
  34. DL
  35. DH
  36. WT
  37. ENDC
  38. DELAY_100mS     ;775 CIKLUS
  39. MOVWF   WT ;W REG MENTÉSE
  40. MOVLW   0XFF
  41. MOVWF   DL
  42. MOVLW   0X01
  43. MOVWF   DH
  44. DECFSZ  DL
  45. BRA     $-2
  46. DECFSZ  DH
  47. BRA     $-6
  48. DECFSZ  WT
  49. BRA     $-18
  50. NOP
  51. RETURN
  52. ;***************************************
  53. GET_GOMB
  54. CBLOCK
  55. KEY
  56. ENDC
  57. MOVF    PORTB,W
  58. ANDLW   B'11000000'        ;TÖBBI BIT KIZÁRÁSA
  59. BNZ     $+4  ;MEGNYOMVA
  60. RETURN  ;NINCS MEGNYOMVA
  61. MOVWF   KEY        ;A MEGNYOMOTT BILLENTYŰ(K) ELMENTÉSE
  62. MOVF    PORTB,W
  63. CPFSEQ  KEY
  64. BRA     $+4  ;VÁLTOZOTT
  65. BRA     $-6  ;AZONOS VISSZA
  66. MOVLW   0XC0
  67. XORWF   KEY,W      ;MINDKÉT BILLENTYŰ KIZÁRÁSA
  68. BNZ     $+6
  69. CLRF    WREG
  70. RETURN
  71. MOVF    KEY,W       ;ON = 0X40
  72. RETURN  ;OFF= 0X80
  73. ;*************************************************************
  74. PRG:
  75. MOVLW   0X01
  76. CALL    DELAY_100mS ;HOGY LASSABB LEGYEN A PROGI
  77. MOVF    GOMBCNT,F   ;HA ON SZÁMLÁLÓ NULL KIKAPCSOLNI
  78. BNZ     $+6
  79. BCF     LED
  80. BRA     P00
  81. BSF     LED  ;HA NEM NULLA BEKAPCSOLNI
  82. P00     CALL GET_GOMB ;EREDMÉNY-> WREG
  83. BTFSS   WREG,6     ;ON
  84. GOTO    P01
  85. MOVLW   0XFF
  86. XORWF   GOMBCNT
  87. BZ      PRG   ;255 NÉL MÁR NEM NÖVELÜNK
  88. INCF    GOMBCNT,F
  89. GOTO    PRG
  90. P01 BTFSS       WREG,7 ;OFF
  91. BRA     PRG
  92. MOVF    GOMBCNT,F   ;MÁR NULLA?
  93. BZ      PRG
  94. DECF    GOMBCNT,F  
  95. GOTO    PRG
  96. END


Ezt csak be kellett másoljam, átírtam a bemeneteket és a kimeneteket arra amire nekem szükségem van, de nem működik a program, rátölti, de aztán semmit nem csinál ha nyomogatom a gombokat.
Szerintetek mi a baj?
(#) Hp41C válasza icserny hozzászólására (») Okt 4, 2014 /
 
PIC12F1xxx, PIC16F161xxx esetén is használható a LATx.
(#) vilmosd válasza petike199600 hozzászólására (») Okt 4, 2014 /
 
Talan probald meg MPLAB alatt leforditani, majd a SIM segitsegevel szimulalni. Sok minden kiderulhet.
(#) nagym6 hozzászólása Okt 5, 2014 /
 
Üdv. A PIC18F46K22 programmemória hányszor írható újra? Pickit2-vel csinálom. Nem találom a leírásában. Olyat tapasztaltam, hogy kb. 50 újraírás után fura jelenséget produkált. Minden esetben csak írás volt. Ezután "Erase", és utána írás, jó lett. Esetleg mindig "Erase" is kell, vagy ilyen gond nincs, csak én valami mást rosszul csináltam?
Köszönöm.
(#) kissi válasza nagym6 hozzászólására (») Okt 5, 2014 / 1
 
337.oldal "endurance" alatt keresd !
Sokkal több, mint 50 !
A hozzászólás módosítva: Okt 5, 2014
(#) nagym6 válasza kissi hozzászólására (») Okt 5, 2014 /
 
Köszönöm megvan, 10K erase/write cycles a program memória. Akkor én hibáztam valami mást.
A leírás "erase/write" ciklust ír, ezek szerint erase mindig kellhet.
Illetve erase esetén nem törli végig a memóriát, mert egy pillanat alatt megvan, lehet mégsem kell erase. Majd meglátom újra, mit tesz erase nélkül.
A hozzászólás módosítva: Okt 5, 2014
(#) don_peter válasza nagym6 hozzászólására (») Okt 5, 2014 /
 
A PicKit2 azt hiszem minden írás előtt töröl is szóval ez együtt jár.
(#) nagym6 válasza don_peter hozzászólására (») Okt 5, 2014 /
 
A grafikus kijelzőnél volt ez a gond, amivel együtt szórakoztunk. Helyenként kihagyott 3-4 pixelnyi vonalszakaszokat, sokat. Másik kijelzővel ugyanez a jelenség. Minden forrasztás csatlakozás jó, és erase, majd újraírás után (semmi más nem változtatva) jó lett. De persze lehet más ok is amire nem jöttem rá, majd kiderül.
(#) don_peter válasza nagym6 hozzászólására (») Okt 5, 2014 /
 
Nekem is van néha benne zaj.
Szerintem itt inkább a vezetékezésből jön valami zavar.
Pár pixel hiba néha becsúszik nálam is..
Illetve ahogy olvasom nagyon fontosak az időzítések, hogy minden flottul működjön.
Nem hiszem, hogy a PicKit2 törlés/írással lenne gond.
(#) zenetom válasza petike199600 hozzászólására (») Okt 5, 2014 /
 
Szia!
Hiányoznak a konfig bitek. Ez okozhat némi problémát...
(#) petike199600 válasza zenetom hozzászólására (») Okt 5, 2014 /
 
Köszönöm a válaszod!
Mit kéne és hova beírnom ahhoz hogy működjön végre?
(#) zenetom válasza petike199600 hozzászólására (») Okt 5, 2014 /
 
Most sajnos nincs időm, de ha MPLAB-ból programozod, akkor a "Configure->Configuration Bits" menüből is be lehet állítani. A jelölőnégyzetben ne legyen pipa, és a beállításokat menüből be tudod állítani. De lehet be is van.. Viszont így látatlanba nem tudom Neked miket kellene beállítani. Ha feltöltenéd a projektet akkor meg tudnánk nézni.
(#) petike199600 válasza zenetom hozzászólására (») Okt 5, 2014 /
 
Oké.
(#) vilmosd válasza petike199600 hozzászólására (») Okt 5, 2014 /
 
A Te szamitogepeden talalsz a program alkonyvtarban, a MPASM peldak kozott minden letezo procira template ASM mintafileket. Abbol lathatod hogyan is nez ki a config resz. Ezt mindig be kell irni, hogy a uC megfelelo konfiguracioban mukodjon. Itt beallitasra kerul az oszci tipusa, PLL, kodvedelem.... Ezek nelkul nem szeret elindulni a PIC.
(#) petike199600 hozzászólása Okt 5, 2014 /
 
Bemásoltam ezeket a beállításokat de ugyanúgy nem csinál semmit
(#) Pali79 válasza petike199600 hozzászólására (») Okt 5, 2014 / 1
 
Nem feltétlenül csak bemásolni kell! Olvasd el a pic-ed adatlapját, 258-tól kezdődően vannak leírva, hogy config bit mit állít.
Egyébként is jó lenne egy kapcsirajz is, hogy lássuk miről van szó.
A hozzászólás módosítva: Okt 5, 2014
(#) vilmosd válasza petike199600 hozzászólására (») Okt 5, 2014 / 1
 
Szoval esetleg bovebben mi az amit nem csinal. Mert pl gondolom vegigleptetted a SIM--ben es ott nem talaltal semmi erdekeset. Mert ott kell kezdeni a hibakeresest. Pl nekem szurja a szemem egy-ket sor.
  1. #DEFINE LED PORTA,5
  2. .
  3. .
  4. INIT:
  5. MOVLW   B'11101111'
  6. MOVWF   TRISB

Namost ez igy nem mukodhet, mert Te kimenetnek allitod a PORTB 4. bitet, viszont a defben a PORTB.5 a LED kimenet. Na akkor a ketto uti egymast. Hiaba valtod a LED allapotat, mert egy bemenetnek allitot port labon probalsz kicsikarni aramot, ami fizikailag lehetetlen. Ja meg masik problema is agodik, mert a 18Fxxx sorozatnal nem PORTx.x bitet irunk hanem LATx.x bitet. Igy roviden 1-2 hiba elso ranezesre, de lehet hogy van meg egy par benne.
Megyegyszer: szimulald le SIM alatt a programot, es ugy kiderulhet a nem mukodes oka.
(#) don_peter hozzászólása Okt 5, 2014 /
 
Uraim, adott egy 16F690 QFN tokozású PIC-em. (MPLAB, Hi-Tech C)
Mivel csak 20 kivezetése van és legtöbbjére alapból szükségem lenne (gombok, ledek...stb) nem marad egy kijelző meghajtására is elegendő láb.
Arra gondoltam, hogy egy 74HC595-ős shift regiszter közbe iktatásával már megoldódna a lábhiány.
Sima HD44780-as kijelzőről lenne szó és csak kiírásra.
7láb, RS, RW, E, D4-D7-ig.
Abban szeretném kérni a segítségeteket, hogy ezt miképpen tudnám megoldani.
A projekttel addig nem mozdulnék előrébb ameddig a kijelző meghajtása nem oldódik meg minimális láb használatból ami véleményem szerint 3.

Láttam a neten ilyen megvalósításokat szóval talán megoldható ez a kis probléma.
Egy elmélet is sokat segítene..
Előre is köszi..
(#) matheattila válasza don_peter hozzászólására (») Okt 5, 2014 /
 
Szerintem meg lehet oldani soros-be párhuzamos-kimenettel rendelkező léptető regiszterrel, de csak azzal aminek van Output Enable (vagy Output Latch) engedélyező lába, mert annak aktiválásával egyszerre kerülnek ki az adatok a lábakra. Ha nincs az OE akkor minden órajelnél változnak a kimeneten az értékek (ami egy egyszerű LED-es kijelzőnél nem gond, de az LCD-nél igen).
Az általad említett regiszter megfelelő így első ránézésre, de nem árt ellenőrizni a feszültség szinteket is (PIC-SR és SR-LCD).
Lehet, hogy egyszerűbb lenne lecserélni a LED-eket az LCD-vel, ha olyan sok led van akkor könnyebb azokat vezérelni a léptető regiszterrel
(#) valaki2233 hozzászólása Okt 5, 2014 /
 
Jóestét mindenkinek!

Az lenne a kérdésem hogyha van egy hex fáljlom PIC16F84 picre, de nekem csak PIC16F628 van akkor meg lehet azt csinálni hogy a hex fáljt lefordíttatom C nyelvre és akkor csak a forráskódot másolom és új projektet kezdek de más PIC típushoz? ugyan az a forráskód nem a hex fájl!
(#) matheattila válasza valaki2233 hozzászólására (») Okt 5, 2014 /
 
Szia, ha találsz olyan programot ami neked hex-ből C-be fordít akkor kérlek szólj, mert tudtommal olyan még nem létezik
Hex-ből esetleg ASM-be lehet alakítani de az se lesz egy lenyűgöző látvány, nem hogy még abból C-t...
Ezt nevezik reverse-engineering-nek...
Ha csak a hex állományod van akkor abban kellene valamiket átírni szerintem, ha nem akkor esetleg asm-be és azt módosítani, de lehet, hogy úgy is működik, ha csak egyszerűen azt a hex-et írod be, mert tudtommal a 628 a 84-es nagyobb testvére, lábszám megegyezik, csak újabb perifériák vannak benne.
(#) Pali79 válasza valaki2233 hozzászólására (») Okt 5, 2014 /
 
Ha asm-re visszafordítod és az include fájlt és config biteket átírod a megfelelőre, nagy valószínűséggel működni fog. Persze nem 100%...
(#) ktamas66 válasza don_peter hozzászólására (») Okt 5, 2014 /
 
LCD-re is működik, de LED-re egyszerűbb: Shift1 System
(#) don_peter válasza matheattila hozzászólására (») Okt 5, 2014 /
 
Sajna, nem a LED-ek eszik meg a lábakat.
Amire szükségem van és a lábakat lefoglalja:
SPI (4láb),
Gombok: Min. 3láb,
2 láb alapból csak inputnak használható,
1 láb VSS
1 láb VDD
2 láb a kristály
1 láb MCLR

Ez eddig 14láb és még jó lenne egy állapot jelző LED is.
Szóval marad 5 de maximálisan csak 6láb.
74HC595 meghajtásához elegendő 3 láb.
Kell 1 órajel, 1 adat, és 1 chip enable.
Tehát akkor maradna még 2, legfeljebb 3 szabadon felhasználható láb.
Azt még nem tudom, hogy a 2 csak bemenetnek használható lábra köthetek e gombot mert ha igen akkor nyilván azokkal +2-vel nőne a lehetőség. (RC2, RC6)

Szóval mivel van ChipEnable láb így egyszerre ki lehet küldeni a szükséges 7Bit-et, de ennek elméletét még nem tudom.
Szóval kérném segítségeteket...
(#) matheattila válasza don_peter hozzászólására (») Okt 5, 2014 /
 
Szerintem azt a két bemeneti lábat használhatod nyugodtan bemenetnek (gomb + felhúzó ellenállás), sőt ha kikapcsolod a MCLR-t akkor azt is használhatod bemenetnek, ha nem annyira fontos a pontos időzítés akkor használhatsz belső órajelet és így a két clk lábat is használhatod IO-ként.
Röviden a ShiftRegiszter (SR) annyit csinál, hogy a bemenetén lévő értéket továbblépteti az úrajel felfutó élénél, így sorra kihelyezed az adott bit-et majd küldesz egy-egy impulzust az CLK bemenetére, ha megvagy minddel akkor megvezérled a latch-et is, melynek hatására kikerülnek az adatok a SR lábaira.
Bővebben: Link
Bővebben: Link
(#) don_peter válasza matheattila hozzászólására (») Okt 5, 2014 /
 
Ohh elfelejtettem említeni, hogy a shift regiszter működését már valamelyest ismerem és meg is írtam rá a szükséges rutint ami egy Makró és egy kis függvényből áll.

Arra gondolok itt, hogy előbb létre kellene hoznom egy 8bites, bitenként különálló struktúrát amelyben az LCD vezérlő bitjeit tárolnám és amelyet majd a későbbiek során töltök fel.

Aztán valahogy ezzel haladni illetve ... szóval ez a része érdekes a dolognak
(#) nagym6 válasza don_peter hozzászólására (») Okt 6, 2014 /
 
HD44780 ha csak írásra használod, az írás-olvasás lábat fixre kötheted, így 7 helyett 6 lábat kell megoldani.
Következő: »»   575 / 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