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   457 / 1211
(#) ebedlike válasza usane hozzászólására (») Nov 1, 2013 /
 
Minkét verziót próbáltam, mindkét esetben 5V-ot mértem a PIC lábain, a hibajelenség ugyanaz volt.
(#) usane válasza ebedlike hozzászólására (») Nov 1, 2013 /
 
Ha elindul pár másodpercre akkor nem hiszem, hogy a PIC hibája. Vagy az összeállításban van a hiba, vagy a program. Én a programra tippelnék.
Feldobhatnád a kódot, valaki biztos ért a micropascalhoz, bár egy LED villogtatás nem hisze, hogy nagyon eltér a C-től.
A hozzászólás módosítva: Nov 1, 2013
(#) ebedlike válasza usane hozzászólására (») Nov 1, 2013 /
 
A program végtelenül egyszerű:

  1. program LED;
  2.  
  3. begin
  4. TRISB := 0;
  5. PORTB:= 255;
  6.  
  7. While (true) do
  8.       Begin
  9.             Delay_ms(500);
  10.             PORTB:= %00000000;
  11.             Delay_ms(500);
  12.             PORTB:= %11111111;
  13.       End;
  14. end.


Az összeállítás, pedig a B portra vannak kötve a ledek 220 ohm-os ellenállásal.
(#) Pali79 válasza Hp41C hozzászólására (») Nov 1, 2013 /
 
Hát fél siker:
  1. MAIN:
  2.                 bsf     ADCON0, GO
  3.                 btfsc   ADCON0, GO
  4.                 goto    $-1
  5.                 MOVLW   d'50'
  6.                 SUBWF   ADRESH,W
  7.                 BTFSS   STATUS,C
  8.                 GOTO    MAIN
  9.                 MOVF    ADRESH,W
  10.                 MOVWF   CCPR1L
  11.                 GOTO    MAIN

A helyzet az, hogy a PWM így tényleg jókor indul és el is éri a 100%-ot, de ha egyszer elindult akkor nem áll le többé, tehát hiába húzom le földre az a/D bemenetet akkor sem lesz 0% a kitöltés.
A hozzászólás módosítva: Nov 1, 2013
(#) foxi63 válasza Pali79 hozzászólására (») Nov 1, 2013 /
 
Szia!
Ha az AD értéke kisebb mint 50, akkor mégis mi venné le a pwm kitölés értékét, ha visszaküldöd a main címkére?
(#) Pali79 válasza foxi63 hozzászólására (») Nov 1, 2013 /
 
Aham, kapisgálom, de a megoldást még nem tudom...
(#) usane válasza ebedlike hozzászólására (») Nov 2, 2013 /
 
Ránézésre jó.
PortB elvileg nem osztozik semmivel ami alapbeállítással bekapcsolva lenne.
Próbáld ki a kimeneteket egyenként. Egyszerre csak 1 LED-et villogtass.
A hozzászólás módosítva: Nov 2, 2013
(#) Pali79 válasza foxi63 hozzászólására (») Nov 2, 2013 /
 
Így oldottam meg:
  1. MAIN:
  2.                 bsf     ADCON0, GO
  3.                 btfsc   ADCON0, GO
  4.                 goto    $-1
  5.                 MOVLW   d'50'
  6.                 SUBWF   ADRESH,W
  7.                 BTFSS   STATUS,C
  8.                 GOTO    PWM_KI
  9.                 MOVF    ADRESH,W
  10.                 MOVWF   CCPR1L
  11.                 GOTO    MAIN
  12. PWM_KI:
  13.                 CLRF    CCPR1L
  14.                 GOTO    MAIN
  15.  
  16.         END

Működni működik, de nem tudom "szakmai" szempontból jó-e?
A hozzászólás módosítva: Nov 2, 2013
(#) cross51 hozzászólása Nov 2, 2013 /
 
Sziasztok!
Szeretnék segítséget kérni abban, hogy amit ebben a cikkben látunk spektrum analizátor(nem tudom milyen nevei vannak még), hogyan valósítható meg PIC-ben. A probléma az, hogy se ezt az MSGEQ7 nem szeretném használni(nincs lehetőségem beszerezni) meg sávszűrő komparátorokat sem szeretnék(hely igény miatt). Mint, ahogy Fizikus is említi lehetne FFT-vel is megvalósítani. A PIC-ben a sávszűrést csak FFT-vel tudom megvalósítani vagy van lehetőség másra is(az FFT nem igazán értem azért szeretném mással megoldani).
Üdv Gábor!
(#) ebedlike válasza usane hozzászólására (») Nov 2, 2013 /
 
ezt a variációt is próbáltam, de sehogy sem működik, pobáltam az PortA-ra átírni, de semmi.
Esetleg egy külső oscillator segíthet?
Ez a PIC elég régi, még a sulis korszakomból maradt rajtam(kb 3éve, és azóta nem is volt bántva, csak volt a szekrényembe), kérdéses az előélete, sajnos a többit amit használhatnék nem találom...
Tegnap este rendeltem új PIC-eket, de még ma újra megpróbálom, hátha benéztem valmait...
(#) usane válasza ebedlike hozzászólására (») Nov 2, 2013 /
 
MCLR-t felhúztad tápra? Nem jó ha lebeg.
Olvasd vissza a PIC-ből a hexet és hasonlitsd össze, hogy jól írta e be.
(#) ebedlike válasza usane hozzászólására (») Nov 2, 2013 /
 
működik
Valami érintkezési gond lehet, mert ha teljesen lenyomom a PIC-et a próbapanelba, akkor nem működik, ha viszont, csak félig, akkor teljesen jól működik, nem értem a miért, a próbapanelt is csak párszor használtam.

Köszönöm a hozzászólásokat.

Üdv.
(#) Frankye válasza ebedlike hozzászólására (») Nov 2, 2013 /
 
Ez a baja ezeknek a próbapaneleknek...
(#) zenetom válasza ebedlike hozzászólására (») Nov 2, 2013 /
 
Így már én is jártam elég sokszor. Ráment összesen már egy jó pár napom ilyen hibák miatt.
(#) foxi63 válasza Pali79 hozzászólására (») Nov 2, 2013 /
 
Szia!
Az első kivonás után a maradékot viszont fel kell szorozni akkora számmal. hogy megkapd a PR2 regiszterbe írt számot. Ez a PIC18-as sorozatnál 2 utasítás a beépített szorzóáramkör miatt, de írhatsz saját függvényt is.
(#) Pali79 válasza foxi63 hozzászólására (») Nov 2, 2013 /
 
Szia! Köszi, közben megoldódott. Hp41C megadta az irányt, csak kicsit nehezen jöttem rá, hogy miként is kell alkalmazni.
(#) dkarcsi73 hozzászólása Nov 2, 2013 /
 
Sziasztok !
Jelenleg a soros porton való kommunikációt próbálgatom rs232 segítségével Hyper Terminálra.
A parancssor a következő :
a=2
loop:
serout2 pinout, 396, [dec3 a," " bin8 a, 13,10]
pause 500
a=a+1
goto loop
Ami eredményezi, hogy a definiált kimenetre 2400 baud-al először decimális formában három digittel, majd bináris formában nyolc digittel kiírja "a" változó értékét.
Majd a változóhoz hozzáad 1-et és fél mp. szünet után a következő sorba ismét kiírja.
Ebből annyi valósul meg hogy indításkor :
002 00000010
és innentől értelmezhetetlen karakterek. Ha újraindítom akkor ismét egy sor helyesen és aztán mindenféle karaktersorozat.
Próbáltam az adatbitekkel és a stopbitek számával játszani de nem vezetett eredményre.
A parancssor végen szerepelő a "13,10" ez mit jelent? sok próbálgatás után van egy olyan sejtésem hogy a 13-as szám az sort vált mert mikor ezt próbáltam változtatni akkor a képernyő különböző részeire írta, sajnos a rossz karaktereket.
Üdv.
(#) Pali79 hozzászólása Nov 3, 2013 /
 
Az lenne a kérdésem, hogy hogyan lehet megoldani (ha meglehet egyáltalán), hogy két különböző portra kötött (PortB és PortC) ledsort futófényként működtessen a pic (16F877A), de eltérő sebességgel?
(#) Hp41C válasza Pali79 hozzászólására (») Nov 4, 2013 /
 
Igen: Kell hozzá egy periódikus megszakítás (timer), aminek az időzítéséből egész számú többszörösként kijön mindkét futófény lépési ideje. Továbbá két számláló, ami a megszakításokat számolja az egyik ill. a másik futófénynek és egy állapot regiszter. Kezdetben a számlálókat a sebesség szerinti értékre kell állítani, az állapotregisztert pedig 0 -ra. Fel kell programozni a timer megszakítást. A megszakítási rutin csökkenti a számlálók értékét, ha valamelyik elérte a 0 -t, az állapot regiszter egy bitjén jelzi (1 -re állítja) és újratölti a számlálót, majd visszatér. A főprogram pedig vár a jelzőbitekre. Ha valamelyik futófény jelzőbitjét 1 -nek olvassa, végrehajtja a lépését és törli a jelzőbitet.
(#) Beles hozzászólása Nov 4, 2013 /
 
Sziasztok!
Ha van egy struktúrám, hogyan tudnék pointerrel az első elemére mutatni? Azért kellene, hogy utána csak növelem a pointert, és a struktúra következő elemére kellene hogy mutasson. Megoldható ez? Így néz ki a struktúra:
  1. typedef union{                    
  2.       unsigned char ALL;
  3.                      struct{
  4.           unsigned BIT0:1;
  5.           unsigned BIT1:1;
  6.           unsigned BIT2:1;
  7.           unsigned BIT3:1;
  8.           unsigned BIT4:1;
  9.           unsigned BIT5:1;
  10.           unsigned BIT6:1;
  11.           unsigned BIT7:1;
  12.         };
  13.     } Variable;
(#) icserny válasza Beles hozzászólására (») Nov 4, 2013 /
 
A mutató valamilyen memóriacímre mutat, ennek legkisebb címezhető egysége a bájt. Biteket nem lehet mutatóval címezni.
(#) Beles válasza icserny hozzászólására (») Nov 4, 2013 /
 
Akkor sehogy nem megoldható, hogy hivatkozzak valameik elemére azon kívűl, hogy Variablebits.BIT0? pl számmal?
(#) Hp41C válasza Beles hozzászólására (») Nov 4, 2013 /
 
if ((Variables & Mask) == 0) ; ((Variables >> n) & 1)... formában, ahol a Mask csak 1biten tartalmaz 1 -et, n pedig a kezelni kívánt bit sorszáma.
A hozzászólás módosítva: Nov 4, 2013
(#) Pali79 válasza Hp41C hozzászólására (») Nov 4, 2013 /
 
Köszönöm! Hát ezen még elrágódok egy darabig az biztos...
(#) Zsora hozzászólása Nov 7, 2013 /
 
Üdv!
Feltettem a gépemre az MPLAB X IDE v1.95-öt, és meglepve tapasztaltam hogy nem tartalmazza az ASM30 asszemblert. Én még az 1.2-es verziót használtam régen, abban benne volt alapból. Kicsit utánaolvastam, és azt írják hogy már az XC16 csomag tartalmazza ezt is. Hát én letöltöttem és feltelepítettem, de a fordítók között csak az XC16 látható, és az ASM30-at továbbra sem találja. Így még a régi cuccaimat sem tudom lefordítani, mert nem találja a hozzávalókat.
Valaki tudna segíteni?
(#) brenato hozzászólása Nov 8, 2013 /
 
Üdv!

Megépitettem ezt:
http://www.dextrel.net/diyzerocrosser.htm

A kimenetet PIC lábra kötöttem, de nem működik a dolog.
Sajnos oszcilloszkópom nincs, de tekintettel arra, hogy az opto kimenetét földelve a megszakítás lefut biztos vagyok benne, hogy az áramkör erősáramú oldalán van a probléma.
Minden alkatrész a megadottak szerinti és jól is lett bekötve. Egyetlen dolog amire gyanakszom a C1 kondenzátor, amelyiknek nem teljesen értem a funkcióját.
A 2db 220K ellenállás AC bemenet felöli oldalán 240 voltot mérek. A "kimeneteken" pedig nullát. Az egyik "bemenet" és a másik "kimenetén" 120Voltot. Tehát valami leterheli. A kondenzátorom nem új, sőt lehet vagy 30 éves, de nem merem nélküle kipróbálni az egészet, nehogy eldurranjanak a diódák, mert abból sajnos nincs több.
Segitsetek hol lehet az áramkör buktatója?
(#) Beles hozzászólása Nov 8, 2013 /
 
Sziasztok!

Pointerekkel bajlódom. Egy függvénynek szeretnék átadni memóriacímeket, de valamiért nem működik. Mit csinálok rosszúl?? C30 fordítót használok. Az átadott változók értékét szeretném növelni egyel az alábbi módon. Próbáltam úgy is, hogy novel(&rl, &gl, &bl);
  1. void novel(unsigned char* r,unsigned char* g,unsigned char* b)
  2. {
  3.         *r++;
  4.         if(*r == 255)
  5.         {
  6.                 *r = 0;
  7.                 *g++;
  8.         }
  9.         if (*g == 255)
  10.         {
  11.                 *g = 0;
  12.                 *b++;
  13.         }
  14.         if (*b == 255)
  15.         {
  16.                 *b = 0;
  17.         }
  18.        
  19.  
  20. }
  21.  
  22.  
  23.  
  24.  
  25. int main()
  26. {      
  27.  
  28.         unsigned char rl;
  29.         unsigned char gl;
  30.         unsigned char bl;
  31.         unsigned char i;
  32.     while(1)
  33.     {
  34.                 rl = 0;
  35.                 gl = 0;
  36.                 bl = 0;
  37.                 for (i = 0; i< 100; i++)
  38.                 {
  39.                         novel(rl, gl, bl);
  40.                 }
  41.  
  42.     }
  43.     return 1;
  44. }
(#) icserny válasza Beles hozzászólására (») Nov 8, 2013 /
 
nem tudom, hogy mit akarsz, de szerintem r++, g++, b++ kellene (tehát csillag nélkül).
A hozzászólás módosítva: Nov 8, 2013
(#) brenato válasza Beles hozzászólására (») Nov 8, 2013 /
 
A csillagokat hagyd ki. Továbbá találkoztam olyan forditóval amelyik a i++ nem ette meg scak az i=i+1et
(#) Beles válasza icserny hozzászólására (») Nov 8, 2013 /
 
Azt szeretném, hogy amit átadok értéket, az egyel növelve legyen, amikor meghívom a függvényt. (nem a címet szeretném növelni)
Következő: »»   457 / 1211
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