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   357 / 1210
(#) tomat5 válasza Johnny0004 hozzászólására (») Jan 24, 2013 /
 
Megszakításból működik. Én is úgy loptam a netről, de most nem találom a forrást.
a cha és chb a rb4 és 5 a gomb pedig rb0. A bemeneteken 47k van vss fele.

  1. /////////////encoder variables/////////////////
  2. int16 counter=0;
  3. int pata=0b00000000;
  4. int patb=0b00000000;  
  5. int1 ina=0;
  6. int1 inb=0;

  1. #int_ext       //Encoder button on pin RB0
  2. void isr()
  3. {
  4.         encchg=1;
  5.         submenulevel++;
  6. }
  7.  
  8. #int_rb                 //Encoder chA on RB4, chB on RB5
  9. void rb_isr(void)
  10. {
  11.         encchg=1;
  12.         ina=input(pin_b4);
  13.         inb=input(pin_b5);
  14.  
  15.    pata=pata<<1;
  16.    bit_clear(pata,4);
  17.    if(ina==1)
  18.    {   bit_set(pata,0);
  19.    }
  20.    else
  21.    {   bit_clear(pata,0);
  22.    }    
  23.  
  24.    patb=patb<<1;
  25.    bit_clear(patb,4);
  26.    if(inb==1)
  27.    {   bit_set(patb,0);
  28.    }
  29.    else
  30.    {   bit_clear(patb,0);
  31.    }
  32.  
  33.    if(pata==6&&patb==12)
  34.    {   counter--;
  35.    }
  36.    else if(pata==12&&patb==6)
  37.    {   counter++;
  38.  
  39.    }
  40. }


Nálam működik, volt egy kis prell, de vdd fele tettem 100nF-os kondikat az megoldotta.
Üdv.
(#) Johnny0004 válasza tomat5 hozzászólására (») Jan 24, 2013 /
 
Köszönjük!
(#) Bakman hozzászólása Jan 25, 2013 /
 
Sziasztok!

Flowcode segítségével állítom elő a .hex fájlt, amit PICKit 2 Programmer-rel töltök az IC-be. Eddig szép és jó, de az EEPROM-ot hogyan tudom adatokkal feltölteni? A mellékletben egy táblázat (neten találtam), amit szeretnék tárolni többszöri felhasználáshoz. A programozóból csak kimásolni lehet adatokat, beillesztést nem enged.

PIC16F690 (igen, újonc vagyok a témában )

Előre is!
(#) Hp41C válasza Bakman hozzászólására (») Jan 25, 2013 /
 
Szia!
1. A táblázatod jobb oldalán levő Intel hex (: -tal kezdődő szövegek) sorokat másold be egy szöveges állományba - data.hex. Indítsd el a PICkit2 programját, töltsd be a programodat (a FC -ből fordítottat). Vedd ki a pipát az EEProm data elől, programozd be. Tedd vissza a pipát a EEProm data elé, töltsd be a táblázatból kimentett állományt - ne törődj a No config... hibával. Vedd ki a pipát a Program memory elől. Programozd be az adat memóriát.
Ha ezekután programot szeretnél változtatni, akkor csak a program memóriát írd, vedd ki a pipát írás előtt a EEProm data elől.
2. Nyisd meg a FC által fordított hex állományt egy szövegszerkesztővel és az utolsó Intel hex (:00000001FF) sor elé másold be a táblázatból kimentett Intel hex sorokat.

Mennyire hiányzik a PICKIt2 programjából, hogy egy már betöltött programra egy másik állomány rá lehessen tölteni? Nálam már működik...
(#) WaRL0 hozzászólása Jan 25, 2013 / 1
 
Sziasztok. Pic-el szeretnék hangvezérelt "diskó fényeket" készíteni. Annyi lenne az egész lényege, hogy 1bemenet és 3kimenet legyen, bemenetre a keverőpult kapcsolódna, és ritmusra kellene váltani a kimenetek közt. En úgy gondoltam, hogy 1kimenet mindig aktív és ha megfelelő jelet kap a bemenet, akkor vált a 3kimenet között (random). Ehhez szerintettek szükséges pic, vagy megoldható mással is? PIC-ekhez jelenleg egyán talán nem értek sajna.
A hozzászólás módosítva: Jan 25, 2013
(#) Bakman válasza Hp41C hozzászólására (») Jan 25, 2013 /
 
Köszönöm, tökéletesen működik a dolog. Észer sem vettem, hogy az EEPROM részt lehet külön programozni.
(#) n_yálastrubadúr válasza WaRL0 hozzászólására (») Jan 25, 2013 /
 
Ezt ahogy értem igazábó futtatod a fényt? Mindig csak egy megy, de az mindenképp? Nem muszáj a pic, ha ne értesz hozzá. Van a klasszikus fényorgona, a 3 színű, az nem azt csinálja mit leírtál, de szerintemk szebb is. Ha mindenképpen ez kell pic nélkül akkor egy 4017 órajelét lépteteted a hanggal. És mondjuk a "randomitását" úgy oldod meg, hogy a különböző kimenetkhez különböző igazságokat rendelsz. De ezt ötvözheted a klasszikus meghajtással (mély magas közép) úgy érdekesebb. Ezekről számtalan leírás van a neten. Írd ezt a google-ba: fényorgona
(#) WaRL0 válasza n_yálastrubadúr hozzászólására (») Jan 25, 2013 /
 
Köszönöm a válaszod, ennek 4017-nek még utánna nézek. Es ha PIC-el szeretném megoldani, hogy aztán idővel fejleszthető legyen ? Nem tudsz egy olyan kiindulási programot mutatni amiből kilehetne indulni ?
(#) n_yálastrubadúr válasza WaRL0 hozzászólására (») Jan 25, 2013 /
 
(#) WaRL0 válasza n_yálastrubadúr hozzászólására (») Jan 25, 2013 /
 
Ez magas nekem. Ezt
Idézet:
„egy 4017 órajelét lépteteted a hanggal”
tudnád egy picit pontosíttani? Esetleg átmehetnénk más topikba, hogy ne off-oljunk.
(#) n_yálastrubadúr válasza WaRL0 hozzászólására (») Jan 25, 2013 /
 
Küldtem üzenetet.
(#) n_yálastrubadúr hozzászólása Jan 25, 2013 /
 
Ha valaki küldene az emil címemre egy jobban optimalizált fordítót, nagyon megköszönném. Egyszerűen, akkor is idegesít ha futja a tárhelyből, hogy ilyen oktalan módón kell ezt megoldania. A jobb oldalon az általam írt asm ugyanazt csinálja. Nem várom ezt el, hogy ennyire rövid legyen, de azért a bal oldal a hi-tech.c azért az elég durva.
A hozzászólás módosítva: Jan 25, 2013

size.JPG
    
(#) p_istvan válasza n_yálastrubadúr hozzászólására (») Jan 25, 2013 /
 
Ez így nem túl sportszerű a C-vel szemben!
Lehet hogy ugyanazt csinálja, de nem úgyanúgy:
A függvényhíváskor a C-ben két paramétert is átadsz, a vezérlési szerkezet és feltételvizsgálat is más.

paraméterátadás helyett használj globális váltózókat (lcd_data, rw) így lcd_write() is kisebb lesz.
Ekkor kb ez fog megfelelni az asm kódodnak (nézd meg mire fordítja):

lcd_data = 49;
if ( command_out && 0b10000000 ) lcd_data = 48;
lcd_write();

Ha csak egyszer történik a programban az lcd_write() hívása akkor a fordító a fügvényhívás helyett belefordíthatja a hívás helyére magát a függvényt, hogy sporoljon a hívással és visszatéréssel.

C-ben először a programozónak kell optimalizálni, majd csak utána jön a fordító és akkor nem olyan lehangoló a helyzet, mint ahogy azt korábban lefestették!
(#) n_yálastrubadúr válasza p_istvan hozzászólására (») Jan 25, 2013 /
 
Ajjaj. Nemtudok globális változót deklarálni. :S Annyira jöttem rá hogy a volatile char látszik megszakításon kívül is...

Ha jól gondolom a static kulcsszó lesz az.. de ha alkalmazom nem jó a program , lehet más a rossz. De egyébként hogyan kell?
A hozzászólás módosítva: Jan 25, 2013
(#) kissi válasza n_yálastrubadúr hozzászólására (») Jan 25, 2013 /
 
A függvényeken kívül deklarálod ( a main előtt ) !
Steve
(#) n_yálastrubadúr hozzászólása Jan 25, 2013 /
 
Most éppen megoldódott. A probléma az volt, hogy még a függvényben is benne volt u.a. a változó, gondolom azzal foglalkozott. De a volatile pontosan mit jelent??
(#) benjami válasza n_yálastrubadúr hozzászólására (») Jan 25, 2013 /
 
Nem kellene először egy általános C nyelvről szóló könyvet forgatnod?
Globális változót úgy hozunk létre hogy függvényen kívül definiáljuk a változót. Ezt általában az elején szokták megtenni (nem kötelező de ajánlott, mert csak a definiálás után fog látszani). A volatile annyit jelent csak, hogy a fordító ne próbálja meg optimalizálni. Ezt akkor kell használni, ha ugyanazt a változót megszakításból és azon kívülről is fel akarod használni. Ha a függvényen belül hozol létre változót, az lokális lesz, azaz csak a függvényen belül lesz látható. Ha static a változó, akkor nem a veremben hozza létre. Ez akkor kell ha meg akarod őrizni a tartalmát a függvényből történő kilépés után is. Static nélkül a veremben lesz a változód és csak addig él amíg a függvényből vissza nem tér, a következő alkalommal az értéke definiálatlan lesz.
A hozzászólás módosítva: Jan 25, 2013
(#) Hp41C válasza benjami hozzászólására (») Jan 25, 2013 /
 
Idézet:
„....Ha static a változó, akkor nem a veremben hozza létre. ... Static nélkül a veremben lesz a változód és csak addig él amíg a függvényből vissza nem tér, a következő alkalommal az értéke definiálatlan lesz. ...”

Így csak akkor igaz, ha a kontroller stack -et használ, a 16F családnál nem ez a bevett megoldás, a HW stack csak visszatérési értékeket tartalmazhat, a stack indexelése rendkívül körülményes. A lokális változók használatát úgy optimalizálják, hogy azon függvényekben használtakat azonos helyre teszik, amik nem hívják egymást.
A hozzászólás módosítva: Jan 25, 2013
(#) benjami válasza Hp41C hozzászólására (») Jan 25, 2013 /
 
Igazad van, a hitech-C -ben minden lokális változó static-ként működik. Azzal az egy szem indirekt regiszterrel tényleg elég macerás lenne veremben megcsinálni.
(#) kistee hozzászólása Jan 26, 2013 /
 
Sziasztok,

Nem tudtam, hová tegyem, arra gondoltam, talán a kezdőknek (magamat is beleértve) lesz rá a legnagyobb szüksége.

Összedobtam egy univerzális programozó adaptert, ami a 8, 14, 18, 20, 28 és 40 lábú PIC-ekhez való. ICSP felülete van, tehát elvileg bármelyik ICSP programozóval (PICkit2, PK3, ICD, LPT portos) használható. Elsősorban a régebbi base és mid range szériákat (12F, 16F, 18F) tartottam szem előtt, noha tudom, ezzel most kivívtam Hp41C kolléga haragját, mert a korszerűbb vezérlőkkel nem törődtem.

Szándékosan hagytam benne ennyi átkötést: így jobban átlátható, szerintem.

Üdv: t

(#) buruzstomi válasza vicsys hozzászólására (») Jan 26, 2013 /
 
Köszönöm, hogy válaszoltál. Időközben sikerült megoldanom.
(#) potyo válasza kistee hozzászólására (») Jan 26, 2013 /
 
A tápszűrő kondenzátorok hol vannak?
(#) kistee válasza potyo hozzászólására (») Jan 26, 2013 /
 
Nincsenek. Ezelőtt ugyanezt 3 külön kis panelre építettem meg, azokra sem tettem és eddig nem volt gondom.
(#) potyo válasza kistee hozzászólására (») Jan 26, 2013 /
 
Azért nem lenne rossz, ha nem spórolnád le. Valamiért csak bekerültek a téma fejlécébe is...
(#) kistee válasza potyo hozzászólására (») Jan 26, 2013 /
 
Oké, akkor teszek bele.
(#) kistee válasza potyo hozzászólására (») Jan 26, 2013 /
 
Az eredeti postot már nem tudom módosítani, így itt a korrekció.
(#) mrobi válasza kistee hozzászólására (») Jan 26, 2013 /
 
Ha így van közvetlenül a panelon akkor nekem se kellett. De breadboard-on ahol 10-15 cm hosszú a kábel ott már bajt okoz!
(#) zolek hozzászólása Jan 26, 2013 /
 
Sziasztok! Segítség kellene PICKIT2-vel akarok felprogramozni 16F628-at , de mikor végez csak ennyit ír ki.(Program Memory...EE...UserIDs...Config...Done) . Ez miért van? Rossz lenne a HEX fájl.
(#) kissi válasza zolek hozzászólására (») Jan 26, 2013 /
 
A "DONE" azt jelenti, hogy kész! Ha nem írt hibát, akkor valószínűleg rendben is van a programozás, de ez nem jelenti azt automatikusan, hogy a program rendben is fog futni!! Az asm helyett inkább az üzenetről kellett volna egy fényképet csatolnod és leírni, hogy milyen programmal csinálod, Te írtad-e a programot vagy "tuti", stb. !
Steve
(#) zolek válasza kissi hozzászólására (») Jan 26, 2013 /
 
A programot nem én írtam, nem megy a programozás .

DSC00405.JPG
    
Következő: »»   357 / 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