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   689 / 1210
(#) cross51 válasza Pali79 hozzászólására (») Júl 5, 2015 /
 
Ja én azt hittem most PIC18-ra írogatsz, ha tudom, hogy PIC16-al akkor az első a bankváltás lett volna amire gondolok... De a lényeg az, hogy működik.
Én 18f14k22 doksiát néztem az SSPSTAT-ra ott azt írják róla, hogy:
Idézet:
„BF: Buffer Full Status bit (Receive mode only)
1 = Receive complete, SSPBUF is full
0 = Receive not complete, SSPBUF is empty”


Lehet a te PIC-edben használható küldésre is, de eddig nem találkoztam ilyennel te milyen PIC-et használsz ?
(#) Pali79 válasza cross51 hozzászólására (») Júl 5, 2015 /
 
Pedig azzal kezdtem a mondókámat.
Ennek is azt írja, meg azt, hogy:
Idézet:
„SSPSTAT: MSSP STATUS REGISTER (SPI MODE)”


MCP42100-as digipotit használok, így találtam ezt: Bővebben: Link
Ebben vannak példák 16F876-ra, így jöttem rá a hibára.
(#) Zsora válasza cross51 hozzászólására (») Júl 6, 2015 /
 
Pl. a PIC24-nél egyaránt van adó és vevő buffer, és ezekhez külön "Buffer Full" bit is. Azoknál a modelleknél ahol a bufferek többszintűek - 8-elemű FIFO tárak - ez elengedhetetlen.
(#) patrik81 hozzászólása Júl 7, 2015 /
 
Csináltam egy ilyet,a pergésmentesítésre.Minden 3. de néha második gomblenyomásra ír ki a kijelzőre egy nullát.Ha már kiírta,akkor utána jól működik.Miért csinálja ezt?
  1. #include "config.h" //belsõ órajel 4 MHz
  2. #include "LCD.h"
  3. volatile unsigned char kiir;
  4. int main()
  5. {
  6.     megszakitasInit();
  7.     lcdInit();
  8.     while(1)
  9.         if (kiir)
  10.         {
  11.             lcdAdat(48);
  12.             kiir = 0;
  13.         }
  14. }
  15. void interrupt gomb()
  16. {
  17.     if(RABIE && RABIF)
  18.     {
  19.         if (RB6)
  20.         {
  21.             while(RB6);
  22.             delay(4000);
  23.             RC2 = !RC2;
  24.             kiir = 1;
  25.         }
  26.         RABIF = 0;
  27.     }
  28. }
(#) don_peter válasza patrik81 hozzászólására (») Júl 7, 2015 /
 
Szerintem a megszakításba ne tegyél pergésmentesítést.
A megszakítást úgy írd meg, hogy rögtön le tudjon akadály nélkül futni és ki tudjon lépni.
A megszakíts mindig probléma és akadály mentesen fusson le a while() ciklusba kezeld a gombnyomást és az összes többit.
RABIF regisztert meg a rutin végén független a megszakítás kiváltó feltételtől töröld.

Ehhez a feladathoz nem is kell megszakítást használni.

De a gond biztosan a megszakításban van mivel a while(RB6) paranccsal beragasztod az egészet..
Ráadásul a megszakítást elég lenne figyelned nem muszáj még a gombot is..
A hozzászólás módosítva: Júl 7, 2015
(#) Pali79 válasza patrik81 hozzászólására (») Júl 7, 2015 /
 
Bár a C nyelvet nem ismerem, de én fordítva gondolkodnék! Gombfigyelés > pergésmentesítés > megszakítás.
(#) patrik81 válasza don_peter hozzászólására (») Júl 8, 2015 /
 
Átírtam,de nem pergésmentesít.
  1. #include "config.h" //belsõ órajel 4 MHz
  2. #include "LCD.h"
  3. volatile unsigned char kiir;
  4. int main()
  5. {
  6.     megszakitasInit();
  7.     lcdInit();
  8.     while(1)
  9.         if (kiir)
  10.         {
  11.             delay(4000);
  12.             RC2 = !RC2;
  13.             RABIE = 1;
  14.             lcdAdat(48);
  15.             kiir = 0;
  16.         }
  17. }
  18. void interrupt gomb()
  19. {
  20.     if(RABIE && RABIF)
  21.     {
  22.         if (RB6==0)
  23.         {
  24.             RABIE = 0;
  25.             kiir = 1;
  26.         }
  27.         RABIF = 0;
  28.     }
  29. }
(#) Buvarruha válasza patrik81 hozzászólására (») Júl 8, 2015 /
 
Nem lehet, hogy nem a pergéssel van gond, hanem mindíg ismétlődik? Úgy csináld meg, hogy amíg nem engeded el a gombot, addig ne léphessen be újra a gombnyomásra ez amúgy is kéne..
(#) patrik81 válasza Buvarruha hozzászólására (») Júl 8, 2015 /
 
Csak néhányszor pergett,ezért megnöveltem a delay-t,így már nem prellez.
(#) Bell válasza patrik81 hozzászólására (») Júl 8, 2015 / 1
 
Már a 4 másodperc is nagyon sok. Az a baj, hogy ha már megnyomtad a gombot, nincs letiltva a megszakítás. Én ilyesmivel próbálkoznék:
  1. while(1)
  2. {
  3.         if (kiir)
  4.         {
  5.             RABIE = 0;
  6.             lcdAdat(48);
  7.             RC2 = !RC2;
  8.             while(RB6==0);
  9.             delay(100);
  10.             kiir = 0;
  11.             RABIE = 1;
  12.         }
  13. }
  14.  
  15. void interrupt gomb()
  16. {
  17.     if(RABIE && RABIF && kiir==0)
  18.     {
  19.         if (RB6==0)
  20.         {
  21.             kiir = 1;
  22.         }
  23.         RABIF = 0;
  24.     }
  25. }
(#) sonajkniz válasza Bell hozzászólására (») Júl 8, 2015 /
 
4 másodperc prellezés???
Dobverővel kapcsolod?
Ha ennyire szar a gomb, amit használsz, akassz a lábaira egy 0,47qF kondit!
Amúgy fix idejű időzitővel pergésmentesíteni elég rossz megoldás.
A C-hez ugyan nem értek, de asm.-ben én ezt így oldom meg:

NEM_PEREG
BTFSC PORTB,6 ;Amíg nyomva van rálép a következő sorra.
CLRF szamlalo
INCFSZ szamlalo
GOTO NEM_PEREG

Ha el tudott számolni 256-ig, tovább megy. amíg a gomb nyomva van, vagy pereg, folyton nullázza szamlalo-t.
(#) benjami válasza patrik81 hozzászólására (») Júl 8, 2015 /
 
Sosem értettem, hogy miért is szívatják magukat olyan sokan azzal, hogy a sima nyomógombokat portlábváltozás megszakítással dolgozzák fel. Ez arra van kitalálva, ha valami bemeneti jelváltozásra nagyon gyorsan kellene reagálni. A nyomógomb az nem ilyen, ráadásul a pergés nemkívánatos mellékhatásai miatt még jól el is szokták bonyolítani. Sokkal egyszerűbb időzítő megszakításból másodpercenként 30-50-szer lekérdezni a gombokat, és egy globális változóba berakni a lenyomott gomb kódját (mellékesen én még ugyanazzal az időzítővel szoktam a stoppert is megcsinálni). Így nem kell foglalkozni a pergésmentesítéssel, ráadásul nem túl bonyolult megoldani, hogy a rövid/hosszú gombnyomás is megkülönböztethető legyen.
(#) matheattila válasza benjami hozzászólására (») Júl 8, 2015 /
 
Egyetértek, ez főleg akkor nagyon hasznos ha sok gombot kell viszonylag gyors reagálással lekezelni egymástól függetlenül (pl. mikor egyszerre több gomb lenyomása/nyomva tartása/egyik-másik felengedése szükséges valamilyen menürendszerben), várakozó ciklusokkal igen csak elbonyolítaná a feladatot vagy éppen hogy megoldhatatlanná tenné
(#) patrik81 válasza Bell hozzászólására (») Júl 8, 2015 /
 
Tökéletesen működik,és még a delay is nagyon kicsi.Köszönöm.
(#) Birs Alma hozzászólása Júl 8, 2015 /
 
Sziasztok!

MPLABX nem látja pickit2-met. Attól tartok tönkrement. Nincs valakinek véletlenül egy eladó darab? Vagy hol tudnék beszerezni egyet? 3-as is jó, ha az van.

Köszönöm
(#) matheattila válasza Birs Alma hozzászólására (») Júl 8, 2015 /
 
Probald inkabb a pickit2 saját programjával ne az MPLAB-al (pláne az X-el).
Lehet csak egy tranzisztor ment ki benne...
(#) kissi válasza Birs Alma hozzászólására (») Júl 8, 2015 /
 
Ne add fel. lehet, hogy csak firmware-t kell benne frissíteni ... !
(#) Birs Alma válasza matheattila hozzászólására (») Júl 8, 2015 /
 
Sajnos úgy tűnik rövidre zártam. Valami valóban tönkrement benne, mert az MPLABX, amivel eddig tökéletesen működött, már nem iseri fel.

Vaterán találtam egy klónt. Remélem az jó lesz.

Azért kösz.

ML.
(#) Bell hozzászólása Júl 9, 2015 / 1
 
Érdekes lehet, hogy ki hogyan szokott kezelni egy nyomógombot, de ha visszaolvastok, itt egy konkrét, tanulás céljából készített kis program kijavításáról van szó.
(#) usane válasza Bell hozzászólására (») Júl 9, 2015 /
 
Így igaz, mellesleg a legegyszerűbb egy középérték eltolásos kód lehet. Nem kell hozzá timer sem.
(#) Birs Alma hozzászólása Júl 12, 2015 /
 
Sziasztok,

LED szalag fényerejét szeretném szabályozni a ledszalagra adott négyszögjel kitöltési tényezőjének módosításával.

Odáig eljutottam, hogy a PIC egy lábára kötött egyetlen led fényerejét a PIC egy másik lábára kötött potméterrel tudom szabályozni.

Abban szeretnék segítséget kérni, hogy a PIC egy lábán lévő 5 voltos 200Hz-s négyszögjelet szeretném 12 voltosra módosítani. (A PIC már most is a LED szalag 12 voltos tápjára kapcsolt 7805-ről kapja az áramot.)

Gondolom valamilyen tranzisztor bázisára kellene a PIC lábát kapcsolnom, a kollektorára a 12v-ot, az emitterre meg a LED szalagot. De milyen tranzisztort kéne használni, milyen ellenállások kellenek és hova, ha kellenek...stb.

Köszönöm.
(#) Pali79 válasza Birs Alma hozzászólására (») Júl 12, 2015 / 1
 
Szia!
Nézd meg Topi nulláról a robotokig című cikkének a FET-ekkel foglalkozó részét! Teljesen érthetően le van írva minden.
Bővebben: Link
A hozzászólás módosítva: Júl 12, 2015
(#) fsub válasza Birs Alma hozzászólására (») Júl 12, 2015 /
 
Segítségként ajánlom még tavir oldalán az Egyszerű elektronika c. cikksorozat tranzisztorokkal és MOSFET-ekkel foglalkozó részeit: >> Bővebben: Link <<
A hozzászólás módosítva: Júl 12, 2015
(#) Pali79 hozzászólása Júl 12, 2015 /
 
Az alábbi kódrészlettel szeretnék nyomógombos ki-be kapcsolást megvalósítani. Picit finomítani kellene rajta, mert ha nem elég határozottan nyomom a gombot, nem mindig kapcsol. Van valakinek ötlete esetleg?
  1. Start
  2.         btfsc   PORTA,0
  3.         goto    Start
  4.         btfss   PORTA,0
  5.         goto    $-1
  6.         btfsc   PORTA,1
  7.         goto    OFF
  8.         bsf             PORTA,1
  9.         goto    Start
  10. OFF
  11.         bcf             PORTA,1
  12.         goto    Start
(#) zenetom válasza Pali79 hozzászólására (») Júl 12, 2015 /
 
Hardveres pergésmentesítést használsz?
Én ettől függetlenül azért bizotsan beraknék egy pár ms-os (pl. 100) késletetést.
Továbbá, véleményem szerint a "goto $-1" használata kerülendő.
Szerk.: amugy valószínűleg kapcsol az, csak párosra jön ki a pergés miatt.
A hozzászólás módosítva: Júl 12, 2015
(#) Pali79 válasza zenetom hozzászólására (») Júl 12, 2015 /
 
A késleltetésre én is gondoltam. Hova tegyem Szerinted?
Mi baj van a goto $-1 -el? Ezt a páros dolgot sem igazán értem.
(#) fsub válasza Pali79 hozzászólására (») Júl 12, 2015 /
 
Idézet:
„Mi baj van a goto $-1 -el? Ezt a páros dolgot sem igazán értem.”

Attól függ milyen kontrollert használsz. Baseline és Mid-Range családnál nem okoz gondot szerintem.
(#) Pali79 válasza fsub hozzászólására (») Júl 12, 2015 /
 
Ez most épp egy PIC16F877A.
A hozzászólás módosítva: Júl 12, 2015
(#) Bell válasza Pali79 hozzászólására (») Júl 12, 2015 /
 
Az egymás utáni lekérdezéseknél adott számú igaz eredményt vizsgálj meg.
Ennek az az előnye, hogy nem fix késleltetés, hanem adaptív. Remélem nem rontottam el...
  1. Start
  2.             movlw 20
  3.             movwf szamlalo
  4. start1
  5.             btfsc   PORTA,0
  6.             goto    start1
  7. start2
  8.             btfss   PORTA,0
  9.             goto Start
  10.             decfsz szamlalo
  11.             goto start2
(#) proline hozzászólása Júl 13, 2015 /
 
Sziasztok!
Remélem jó helyre írok. Talán ismeritek a John Becker féle LCD Scope projektet. Ezzel küzdök már egy ideje. Innen is letölthető Bővebben: Link , az LCD szkóp alatt. Az a gond, hogy nem égethető a program a PIC-be, a programozó hibát jelez, az MPLAB nem tudja lefordítani az OBJ és ASM fileokat sem, rengeteg hibát jelez. Valakinek van ötlete?
Következő: »»   689 / 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