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   398 / 1210
(#) korni.papp válasza korni.papp hozzászólására (») Ápr 9, 2013 /
 
Még annyit hogy az ilyen eszközökben/vezetékekben tthonvagyunk stb. mert az Édesapám műszerész. Csak a PIC sajnos egy külön tészta.
(#) Poostmaster válasza Llajti hozzászólására (») Ápr 10, 2013 /
 
Az adatlapján ez van:
step angle (1-2 phase): 5,625°/64
Ez egy impulzust jelent, vagy azt, amikor minden tekercsen végigment egyszer az áram. Ja, és úgy értelmezendő, hogy 64 lépés = 5,625°?

Egyébként meg ez nem oldja meg a programozásbeli gondomat. Arra valami magyarázat?
(#) bbalazs_ válasza korni.papp hozzászólására (») Ápr 10, 2013 /
 
OK. Programozni tudsz? (alapelvekkel tisztaban vagy?)
(#) Llajti válasza Poostmaster hozzászólására (») Ápr 10, 2013 /
 
Ez azt jelenti, hogy 64 lépés egy körülfordulás, egy lépés 5,625° (360/64=5,625). Mondjuk úgy, hogy ha pl. 5 kivezetéses a motor (1 közös, 4 tekercs) és egyszerre egy tekercset hajtasz meg, akkor az egy lépés. A rendes meghajtás persze bonyolultabb (és erősebb), H híddal szokták csinálni.
A programmmal kapcsolatban sajnos valaki másnak kell segíteni, ha nem életbevágó, akkor már nem használok assemblyt, és a tudásom is kopott.
(#) djadji válasza Llajti hozzászólására (») Ápr 10, 2013 /
 
A hbám nem fog kiderülni. Hazaérve szészedtem megint 4szer és összeraktam 4szer, aztán egyszercsak működött. A lényeg hogy működik.
Viszont fölsöleges volt azt hiszem az egész.
Amikor a PICbe vezettem a 11-szeresére csökkentett jelet, akkor ha ezt elkezdte mérni, akkor a PIC (eddig jól működő) másik két ADC bemenete megbolondult. Elkezdte ki-be kapcsolgatni a páka fűtését. De csak akkor ha ez a bizonyos táp ADC működött (egy IF-fel elválasztottam, hogy ne figyelje folyton, csak ha kérem). Az ilyen "egyik hat a másikra" hibákat utálom, így ennek a TÁPnak nem lesz digitális kijelzése és kész! Azért köszönöm a segítséget!

Más: Viszont az LCD kijelző (16x2) valamiért nem egyenletes képet mutat. Ha a potival beállítom, úgy, hogy nekem jól olvasható legyen, akkor az első sor szép, de a második sor vége már nehezen olvasható. Olyan a második sor vége, mintha az első sor eleje akkor, ha a potit visszább tekerném. Ez mitől lehet?
(#) kissi válasza djadji hozzászólására (») Ápr 10, 2013 /
 
Idézet:
„Az ilyen "egyik hat a másikra" hibákat utálom, így ennek a TÁPnak nem lesz digitális kijelzése és kész!”
Azért remélem nem gondolod, hogy több millió eladott PIC belső felépítése okozza ezt és nem a Te hibádból ered ?! ( Az, hogy nem akarsz vele küzdeni/megoldani, az már a Te dolgod!)
A hozzászólás módosítva: Ápr 10, 2013
(#) Llajti válasza djadji hozzászólására (») Ápr 10, 2013 /
 
Az LCD-hez nem tudok hozzászólni. Ahogy mondtam, gyanús, hogy az ADC bemenete valójában kimenet, magas szintre állítva. Ha ezt elkezdjük másfele húzni, simán megbolondulhat a többi bemenet. Ezt okozhatja programhiba, megszakításban rossz címre ugrás, MOVLB hiba (nagyon csúnya dolgokat szokott csinálni, ha valahol kifelejtjük). Valamikor én egy nagyot szívtam egy atmelen azzal, hogy ha az összes adresult regiszter nem olvastam ki, a második mérésre már rosszul működött. Nem tudom, itt ilyen lehet-e, a PIC AD-jére már nem emlékszem.
(#) Llajti válasza benjami hozzászólására (») Ápr 10, 2013 /
 
Köszi!
(#) korni.papp válasza bbalazs_ hozzászólására (») Ápr 10, 2013 /
 
Na igen itt jönnek a gondok. Nem, programozni nem tudok és az alapelvekkel sem vagyok tisztában.
(#) bbalazs_ válasza korni.papp hozzászólására (») Ápr 10, 2013 /
 
OK, akkor a BASIC-et ajanlom kezdetnek.
Azzal viszonylag konnyen elsajatithatod a programozas alapjait, egyszeru, gyorsan sikerelmenyt ad.
A tobbi programnyelv is hasonlo, csak mashogy hivjak az egyes utasitasokat.
Szinten nagyon sokat lehet tanulni a kommentelt peldaprogramokbol.

A PIC-nel szerintem akkor nem lesz neked nehez az aramkorbe valo beillesztese. Ha szabad javasolni, akkor a 18F-es sorozattal kezdd majd.
A PIC-nel az a nehez, hogy :
- jol kell az aramkorbe illeszteni
- helyesen kell megadni a konfigbiteket
- a programnak is mukodnie kell benne
(#) korni.papp válasza bbalazs_ hozzászólására (») Ápr 10, 2013 /
 
Értem.Köszönöm a választ.
(#) djadji válasza kissi hozzászólására (») Ápr 10, 2013 /
 

Nem, nem erre gondoltam. Volt itt korábban egy 2 hónapig tartó problémám a motorok működtetésével és nem lett meg az igazi oka. Ebbe nem akartam belemenni újra. Erre gondoltam, hogy ez egyik dolog hat a másikra (amikor bekapcsolom össze-vissza hibás, amikor nem kapcsolom be minden klafa), miközben elvileg nem kellene neki. Meg van a megoldása biztos és az oka is, de igy nem könnyű megtalálni (mint a kontakt hiba a PCben )


Llajti: Köszi az ötéetet, megnézem, hátha ilyesmi hiba van, de nem gondolnám.
Valakinek van ötelete miért más az LCD két sora? Mintha külön poti állás tartozna hozzá...
(#) vicsys válasza djadji hozzászólására (») Ápr 10, 2013 /
 
Nem akarom szétoffolni a témát, de ilyen LCD hibáról még nem hallottam soha sem. Szerintem nem is LCD hiba lesz, hanem valami szoftver téma. Az is lehet, hogy folyamatosan írod/törlöd a második sort és csak "csupán" gyorsan villog, vagy valami. Le kell ellenőrizni valamilyen statikus szöveggel, amit csak egyszer íratsz ki, ol. induláskor.
(#) Dokikaa hozzászólása Ápr 10, 2013 /
 
Üdv.

Most kezdtem el a PIC programozást, és 2 számot szeretnék összeadni. AVR-t programoztam assemblybe, viszont ott csak leírom h ldi r16,0x01 akkor az 1 et betölti az r16ba. Picnél hogy tudok ilyen változót létrehozni? Azt tudom hogy a létrehozott változó értékét bemozgatom a workbe, majd összeadom a workot egy konstansal, az eredmény a workbe képződik,vagy a regiszterbe.
Segítséget előre is köszönöm.
(#) bbalazs_ válasza Dokikaa hozzászólására (») Ápr 10, 2013 /
 
Minden PIC adatlapban megtalalhato az Instruction set summary. Ott le van reszletesen irva.
Egyebkent:

movlw konstans
movwf tar1
(ilyenkor a W erteke modosul, ertelemszeruen)
Elofordulhat, hogy ker egy .ACCESS-t vagy ,BANK-ot is a tar1 utan, attol fuggoen, hogy a gyorsram vagy a bank altal cimzett felso 4 bitu tarhelyre akarod tenni.
Ez is le van irva az adatlapban.

Ha csak a valtozora van szukseged, ertekadas nelkul, akkor vagy a cblock-ba teszed a tobbi koze, vagy direktben megadod, hogy pl.
tar1 equ 0x12 - ekkor a hex12-es cimre kerul majd, illeve igy hivatkozik majd ra.
(#) Dokikaa válasza bbalazs_ hozzászólására (») Ápr 10, 2013 /
 
Értem,köszönöm. Akkor ki kell választanom a memória címet, ahová létreakarom hozni a változót. És akkor ezt a memory organization-nél tudom megnézni hogy melyik címre kerülhet a változó? Vagy hová kell definiálni?
(#) bbalazs_ válasza Dokikaa hozzászólására (») Ápr 10, 2013 / 1
 
Igy van.
Az access ram-ban kb 5f-tol visszafele (a regisztereknel meg tudod nezni, melyik az utolso, azokat FF-tol visszafele szamozzak)
Ha bankolt, akkor meg szinte barhova (persze, ha fizikailag letezik az a memoriacim).
Arra vigyazz, hogy ez PIC-fuggo, tehat mindig az adott tipus adatlapja a mervado.
(#) djadji válasza kissi hozzászólására (») Ápr 11, 2013 /
 
Hello!

Na csak felhúztam magam azon amit írtál (úgy értem felszívtam magam, hogy "na azért is megnézem"; nem sértődés, vagy ilyesmi...), és nem adom fel, legalább is utána nézek a dolognak. Ennek kapcsán pár gyors teszt kapcsán egy PIC-et meg is sütöttem, mert a fesz osztót elfelejtettem, így a PIC kapott 23Vot, amit nem tudott megmérni a szegény -1 db PIC

De a következő érdekességre jöttem rá. Van 2 aktív ADC. Az egyik a kívánt hőfokot érzékeli, a másik a valós hőfokot a pákáról. Mindkettő a kapott feszültséget integerben olvassa be, amit aztán beszorzok, hogy megkapjam a hőfokot. Ezek hasonlítja össze és be-vagy éppen ki kapcsolja a páka fűtését. ez eddig kiválóan működik is.
Ha berakok egy harmadik ADC-t is ami integerben olvassa be az értéket, működik minden. (nem is kötök rá semmit, csak a programban kapcsolom be!!!) Viszont, ha azt állítom be, hogy feszültségként és lebegőpontosban kapjam meg az értéket a harmadiktól, akkor megbolondítja a másik ADC-t. Az eddig jól működő integeres ADC értéke úgy 1-2 másodpercenként leesik nullára, majd visszajön. Mindezt elég rendszertelenül teszi.
Ötlet esetleg, hogy miért van ez? Hallott már valaki ilyesmiről?

korni.papp: Én javaslom neked a Flowcode-ot. Ha dobsz rám egy üzit segítek némi leírással az induláshoz. Én is ezt használom (szégyen, nem szégyen... pedig tudok programozni is)
A hozzászólás módosítva: Ápr 11, 2013
(#) sherlock válasza djadji hozzászólására (») Ápr 11, 2013 /
 
Lehet későn szólok hozzá de szoktak tenni időzítést két AD olvasás közé. Nekem is volt olyan esetem, hogy két potenciométert vittem be, és, mivel túl hamar átváltottam az egyik AD csatornáról a másikra, úgy viselkedett, mintha valamilyen összefüggésben lenne az azelőttivel.
tegyél be egy időzítést (10us) a két mérés közé.
(#) aroxol hozzászólása Ápr 11, 2013 /
 
Sziasztok!

Kis segítséget szeretnék kérni. Az alábbi kódot használom, nyomógombbal tejesen jól működik. Viszont egy rezgésérzékelőt szeretnék indításként rákötni. Megoldható lenne hogy az alvó állapotból csak bizonyos számú impulzus után ébredjen a bemenet? Tulajdonképpen az érzékenységet szeretném állítani.
  1. /*******************************************************************************
  2.     12F683
  3.     CONFIG: 0x0FD4
  4.     *******************************************************************************/
  5.     const char key[] = "Szezam_tarulj!"; // kulcs
  6.     char key_cnt = 0;                    // kulcs elemeinek számlálója
  7.     char button_pressed = 0;
  8.     char i = 0;
  9.      
  10.     void interrupt (){
  11.       if (INTCON.INTF){
  12.         button_pressed = 1;
  13.         INTCON.INTF = 0;
  14.       }
  15.     }
  16.      
  17.     void main (){
  18.       OSCCON = 0b01110001;     // pdf 22.
  19.       ANSEL = 0;               // pdf 35.
  20.       CMCON0 = 0b00000111;     // pdf 58.
  21.       ADCON0 = 0;              // pdf 67.
  22.       INTCON = 0b11010000;     // pdf 15.
  23.       TRISIO = 0b00011100;     // pdf 34., gomb GP2-n, GP3 csak bemenet, Rx
  24.       GPIO = 0;
  25.       OPTION_REG = 0b00000000; // pdf 45.
  26.       WPU = 0b00000100;        // pdf 36. felhúzó-ellenállás GP2-n
  27.      
  28.       Soft_UART_Init(&GPIO, 4, 5, 2400, 0); // fmax=4.8 kb/s
  29.       delay_ms(100);
  30.      
  31.       while (1){
  32.         if (button_pressed){
  33.           GPIO.F1 = 1;         // táp az adónak
  34.           delay_ms(200);
  35.           for (i=0; i<3; i++){ // 3x küldi el a kulcsot
  36.             for (key_cnt=0; key_cnt<(sizeof(key)-1); key_cnt++){
  37.               Soft_UART_Write(key[key_cnt]);
  38.               // delay_us(90); // teszt időtúllépés (a vevőnél)
  39.             }
  40.           }
  41.           GPIO.F1 = 0;         // adó táp kikapcsolása
  42.           delay_ms(1000);      // ha lenyomva maradna a gomb
  43.           button_pressed = 0;
  44.           }
  45.         asm sleep;             // hogy tovább bírja az elem
  46.         asm nop;               // pdf 94., "user should have a NOP
  47.                                // after the SLEEP instruction"
  48.       }
  49.     }
(#) Poostmaster válasza Llajti hozzászólására (») Ápr 11, 2013 /
 
Akkor ez megint nem stimmel.
Nekem a 64 lépés kb. 12 fok. Ez egyébként unipoláris motor. Ehhez nem kell H híd. Viszont az lehet, hogy a fél lépes móddal lesz 64 lépésből 5,625 fok, és akkor annak a felbontását adták meg. Ezt még kipróbálom.
(#) Llajti válasza aroxol hozzászólására (») Ápr 11, 2013 /
 
Volt egy hasonló projektem. Mivel az interruptra azonnal ébred, úgy tudtam megoldani a dolgot, hogy sleep előtt a legkisebb belső órajelre állítottam, ébredéskor fut egy kis rutin, ami számolta az impulzusokat megadott ideg, ha a küszöbértéknél kisebb volt -> visszaalvás, ha nagyobb ->kvarc-ra váltás és a rendes program indítása. A PIC-ek között vannak kifejezetten low power-esek is, ezeknek az áramfelvétele uA-es nagyságrendbe esik sleep és alacsonr rc órajel esetén, így simán lehet elemről is használni, de a normál, nem low poweresek is nagyon keveset fogyasztanak.
(#) Llajti válasza Poostmaster hozzászólására (») Ápr 11, 2013 /
 
Megadod a motor pontos típusát?
Valami nagyon nem stimmel, 12 fok nagyon kevésnek tűnik, azt jelentené, hogy 1920 lépéses, illetve = 0,1875°/lépéses a motor, márpedig ilyen állat nincs!
(#) Poostmaster válasza Llajti hozzászólására (») Ápr 11, 2013 /
 
Kipróbáltam a fél lépéses üzemmódban. Valóban az jött ki, hogy a 4088-adik impulzusra ért körbe. Teljes lépésben ez 2044.
28BYJ-48 a motor.
(#) Llajti válasza Poostmaster hozzászólására (») Ápr 11, 2013 /
 
Óóó, értem már.
Stride Angle 5.625° /64
Speed Variation Ratio 1/64
Tehát a motor 1 lépése 5,625°, de van benne egy 1/64-es áttétel
(#) proba válasza djadji hozzászólására (») Ápr 11, 2013 /
 
Hogy biztos legyek benne ,a PIC még a környéken sincs? Nem egy kimeneti magasra programozott pic láb van az osztó kimenetén? Ezt méred szorgalmasan..
A hozzászólás módosítva: Ápr 11, 2013
(#) mrobi válasza proba hozzászólására (») Ápr 11, 2013 /
 
Biztos hogy az a hiba. Ha az osztó bemenetén 1,5V van akkor nem lehet az osztó kimenetén 4,5V.
(#) Llajti válasza djadji hozzászólására (») Ápr 11, 2013 /
 
Akkor itt még a Flowcode is eltolhatja. Érdemes lenne megnézni a legenerált kódot.
(#) djadji válasza sherlock hozzászólására (») Ápr 11, 2013 /
 
Ez egy jó ötlet, sok mindent megmagyarázna, ha ez lenne a hiba. Közvetlenül egymás után van a 3 ADC mérés, és lehet hogy nem tudja kezelni ha nincs szünet.
Kösz, ezt azonnal kipróbálom, amint lesz lehetőségem! Erre gondolhattam volna magamtól is!

Llajti: kösz, ezt néztem már, sztem rendben van. Összhasonlítva azzal a 2 ADC résszel ami működik és azzal ami nem, nem találok különbséget.

proba: Az osztó hibát megtaláltam találtam egy lógó GND kábelt, amit visszatettem a helyére és működik is. A hibát nem tudom mi okozta, de most működik. SZét is szedtem, össze is raktam, és jó. Most azt csinálom, hogy a PICre nincs semmi rákötve, csak a programba írom be a 3dik ADC-t és már ott elkezd hülyén működni. Szóval nem is kell bekötni a mérendő forrást.
(#) mrobi válasza djadji hozzászólására (») Ápr 11, 2013 /
 
Ha nem kötöd be a mérendő forrás akkor az adc ugrálni fog. Kapsz egy véletlen szám generátort. Próbáld ki hogy egy ellenállással a földre húzod. Nézd meg hogy nullát mér-e. Utána pedig a pic tápjára kösd és nézd meg hogy ott mit mér!
Következő: »»   398 / 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