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   568 / 1210
(#) kissi válasza Hp41C hozzászólására (») Szept 16, 2014 /
 
(#) icserny válasza Schliemann hozzászólására (») Szept 16, 2014 /
 
Idézet:
„Szeretnék egy próbapanelt építeni PicKit2-höz, lenne rajta karakteres LCD, GLCD, nyomógombok, LED-ek, stb.”

Nézz körül a kereskedelemben kapható panelok között, s azok alapján döntsd el, hogy mi tetszik belőlük!

Waveshare Electronics
Mikroelektronika
Olimex
100MHz.com

- Túl bonyolult kártyával nehéz dolgozni, túl sok idő megy el a "mi hol van" silabizálásával.
- Olyan grafikus kártyát nem érdemes a PIC-re kötni, amelyikhez nincs elég RAM egy kép összeállítására.
- Érdemes az USB kapcsolat lehetőségére gondolni (pl. PIC18F4550), akkor is, ha a kezdéshez nincs tervbevéve.
- Kezdésre/nyúzásra érdemesebb cserélhető kivitelben (DIP 40 tokozás) gondolkodni, ha csak nem vagy profi a felületszerelt IC-k cseréjében.
(#) usane válasza kissi hozzászólására (») Szept 16, 2014 /
 
Hát igen, a csak az nem elég. Assembly is kell, és nem árt azzal kezdeni. Viszont kelleni kell a c, főleg ha MC-s könyvtárat használsz valamihez. Azok meg XC8-ban vanak 8 bitesre, na az aztán tud kódot generálni ingyenes verzióban. 120k+fa meg nem kevés a regisztrációért.
A hozzászólás módosítva: Szept 16, 2014
(#) Hp41C válasza usane hozzászólására (») Szept 16, 2014 /
 
60 napig az ingyenes is optimalizás. Az XCLM lecserélhető...
(#) patrik81 hozzászólása Szept 16, 2014 /
 
Sziasztok!
Hogy működik az MCLR? Folyamatosan 5V-ot ad ki? Csak annyit tudok, hogy az ICSP1-es lábára van kötve.Mi van ha a PIC egy portjának egyik lábára közvetlen rákötöm, akkor rövidzárat csinálhatok?
(#) Hp41C válasza patrik81 hozzászólására (») Szept 16, 2014 /
 
1. Némely típusoknál letiltható a MCLR funkció és digitális bemenetnek használható. Ha alacsony feszültségű programozást is használnak, akkor csak MCLR funkciójú lehet.
2. Felhúzó ellenállással a Vdd lábra. A legjobb megoldás.
3. Egy másik bemenettel kötöd össze és a MCLR funkció engedélyezett, akkor míg a bemenet magas szinten van, fut a program, amikor alacsony szintre vált, jön a reset.
4. Egy kimeneti lábbal kötöd össze, míg a kimenet magasszinten van, fut a program, amikor alacsony szintre vált, jön a reset. De erre van reset utasítás is....

A kontroller MCLR lába nem lehet kimenet.
Az utóbbival küzdőttem jó pár órát, pedig az összekötés nem volt szándékos....
A hozzászólás módosítva: Szept 16, 2014
(#) patrik81 válasza Hp41C hozzászólására (») Szept 16, 2014 /
 
Köszi, azt találtam ki, hogy a gyárilag összekötött MCLR(ICSP1)-t,a PIC RA3 lábával és az LCD csatlakozóját elvágom, és átkötöm egy másik lábra, mondjuk az RC6-ra.
(#) matheattila válasza patrik81 hozzászólására (») Szept 16, 2014 /
 
Ha az ICSP csatlakozó MCLR vezetékét elvágod a PIC MCLR lábától akkor azt a PIC-et többet nem tudot programozni, csak ha kiveszed és másképp programozod...
Az ICSP1(MCLR)-et hagyd rajta a PIC lábán, viszont az LCD-től jövő vezetéket kösd máshová!
(#) ludaslajos hozzászólása Szept 17, 2014 /
 
Sziasztok!
Segítségre lenne szükségem, kérem aki tud segítsen!
Pár éve hozzájutottam bontott Sagem GSM terminálokhoz (GSM- ből csinált vonalas telefont és internetet) kipróbálásukkor jöttem rá, hogy a készülékekben „auto pin” funkció van ezért nem lehet őket használni csak az „eredeti” SIM kártyával. Későbbiekben a bolhapiacon hozzájutottam egy ugyanilyen készülékhez de abban nincs bekapcsolva az „auto PIN” funkció ezért az hibátlanul működik. Akkoriban egy elektromérnök barátom ígérte, hogy megoldja a problémámat úgy, hogy a működő készülék epromját (azt hiszem epromot mondott de én ebben már nem vagyok teljesen biztos) kiforrasztja a készülékből, egy olvasóval kiolvassa a tartalmát majd a kinyert adatokat beírja a nem működő készülékek epromjába ezzel azok is működőképesek lesznek. De a kivitelezésig már nem jutottunk mert közben tragédia történt és a barátom elhunyt. Azóta a terminálok is a műhelyemben porosodtak…. Viszont nemrég lakásriasztót szereltem a lakásomba és most a távfelügyelethez szükségem lenne egy ilyen működő terminálra így azok ismét előkerültek a műhelyből. Most arra gondoltam megpróbálom itt a fórumon, hátha tud valaki segíteni abban, hogy ismét használhatók legyenek. Vagy az „auto pin” funkciót kellene kikapcsolni (ha jól tudom valamilyen kód kellene hozzá) vagy a barátom által javasolt eprom égetést kellene kivitelezni. Eprom égető és az ehhez szükséges tudás híján én ezt nem tudom kivitelezni ezért nem tanácsra lenne szükségem hanem olyas valakit szeretnék találni a fórumtársak közt aki rendelkezik megfelelő eszközzel és tudással és kivitelezné nekem a dolgot. Természetesen nem ingyen gondoltam, ha valakinek volna kedve kísérletezni egy ilyen terminállal vagy szüksége lenne egy ilyen eszközre (vonalas telefon, fax, internet, riasztó távfelügyelet) akkor a melóért cserébe egyet nekiadnék.
(#) patrik81 válasza matheattila hozzászólására (») Szept 17, 2014 /
 
Igen, értem, hogy kell a PIC-nek az MCLR.Van egy 14 pólusú csatlakozó a panelen.Azt hittem ezt azért csinálta a gyártó, mert egy LCD-nek pont jó.Azért vágtam el két vezetéket is, mert először az ICSP1(MCLR)-ről annak a csatlakozóknak a 12. lábára kötötték - ami megfelel az LCD DB5-jének -, majd onnan a PIC RA3-as lábára.Hogy ezt miért csinálták? Hogy könnyebben lehessen mérni az MCLR-t? Az a 14 pólusú csatlakozó nem is egy LCD-nek lett kitalálva?A franc sem gondolta volna, hogy 14-ből 13-mat jól kötnek be, egyet viszont nem.Ezzel egy csomó fejtörést okoztak.
(#) Hp41C válasza patrik81 hozzászólására (») Szept 17, 2014 /
 
Állíts vissza minden összeköttetést, az LCD -t használd 4 bites módban, a azokkal a mostani potbitekkel, amik at LCD DB3 ..DB0 -ra vannak kötve - persze át kell őket kötni az LCD DB7 .. 4 -re. A programban két E pulzussal kell kiadni a kétszer 4 bitet, előbb a felső 4 bitet, aztán az alsó 4 bitet...
(#) don_peter hozzászólása Szept 18, 2014 /
 
Uraim...
Van egy kis problémám.
Van egy programmemóriába létrehozott tömböm és ebből szeretnék kiíratni.
A következő képen néz ki:
  1. rom static unsigned char szovegek[14][19] = {
  2. {'V','a','l','a','m','i'} //, ...stb sorok
  3. };
  4. //A kiíratást meg így
  5. printf("%s", szovegek[i]);

Az i természetesen növekszik.
Ha nem a rom-ba teszem hanem simán a memóriába akkor működik, de akkor meg ügye a hely kevés a nagy tömb méret miatt.
Azért van szükség erre a tömbre mert szeretnék helyet spórolni...
Előtte switch() elágazással csináltam a szöveg kiíratást, de az zabálja a memóriát.
Előre is köszi...
(#) Hp41C válasza don_peter hozzászólására (») Szept 18, 2014 /
 
Microchip fórum topikjában dawekw7x hozzászólását nézd meg.
(#) vilmosd válasza don_peter hozzászólására (») Szept 18, 2014 /
 
Talan tedd at egy valtozoba a kiirando karaktert, es hivd meg azzal a printf-et.
(#) don_peter válasza vilmosd hozzászólására (») Szept 18, 2014 /
 
Igen ez járható út lenne csak az a baj, hogy program memóriában nem spórolnék sokat vagy lehet semmit és ez lenne a lényeg..

Hp41C: köszönöm. Mplab és C18-ban nem hozott eredményt...sajnos.
(#) vilmosd válasza don_peter hozzászólására (») Szept 18, 2014 /
 
Maga a printf nem egy memoriakimelo fveny. Talan mas megoldassal kellene memoriakimelo kiiratast csinalni.
(#) don_peter válasza vilmosd hozzászólására (») Szept 18, 2014 /
 
Jaja ezt sajnos én is észre vettem
Mindegy most maradok switch()-es elágazásnál mert csak kevéssel több mint az if-es szerkezet. (Néhány byte-tal csak..)
Majd ha lesz időm tovább molyolok vele, meg persze akkor, amikor nem lesz elengedő a most felszabadított memória terület.. ez utóbbi lehet hamarabb be fog következni..
Ti mit szoktatok használni szövegek tárolására mondjuk a menürendszerekhez kijelzőre kiküldött szövegekre gondolok.
A hozzászólás módosítva: Szept 18, 2014
(#) Hp41C válasza don_peter hozzászólására (») Szept 18, 2014 / 1
 
Gooooogle beír: "microchip c18 printf rom string"
Az első találat...
(#) Hp41C válasza Hp41C hozzászólására (») Szept 18, 2014 /
 
Meg a C18 könyvtár leírásában is benne van: DS51297F-page 150.
(#) don_peter válasza Hp41C hozzászólására (») Szept 18, 2014 /
 
Köszi ez segített.
Minden jó volt amit csináltam kivéve ez a szemérmetlen: "%S"
Kicsi s-el adtam meg és ezért nem működött.
Köszi nálad a pont.
(#) zenetom hozzászólása Szept 18, 2014 /
 
PIC18F2550 5VDC helyett 10VAC-ot kapott. Semmi baja.
(#) vilmosd válasza don_peter hozzászólására (») Szept 18, 2014 / 1
 
Na egy egyszeru string kiiratas:
  1. const char char_temp[]={"Temp:"};
  2. void Temp_write(void)                                   // " Temp: " Write to LCD
  3. {
  4.         int i=0;
  5.         char c_h;
  6.         do
  7.         {
  8.                 c_h= char_temp[i];
  9.                 if (c_h) lcd_putc(c_h);
  10.                 i++;
  11.         }while (c_h!=0);
  12. }
Persze meg lehet varialni, hogy a stringre mutato pointerrel hivod meg a fvenyt. Ossze lehet hasonlitani a kapott kodot a printf-es koddal es lass csodat.
(#) don_peter válasza vilmosd hozzászólására (») Szept 18, 2014 /
 
Na ezt holnap ellenőrzöm.
Ha ez hatékonyabb és kevésbé memória zabáló akkor írom is át az összes kódomat
Köszi addig is...
(#) icserny válasza don_peter hozzászólására (») Szept 19, 2014 / 1
 
A PICCOLO projektben is találkozhattál már az outString() függvénnyel, ami hasonló célt szolgál, s a stingre mutató pointerrel kell meghívni (lásd a piccolo_usb.c állományban). A meghívott putc() függvény dönti el, hogy hova írjon. Nálam ez az USB CDC kimenet, de más függvényre lecserélve a soros portra vagy az LCD-re is írhatsz vele.

  1. void outString(const rom char* psz_s)
  2. {
  3.   char c;
  4.   while ((c=*psz_s))
  5.     {
  6.       if (c == 0x0A)          //Not for LCD
  7.         {
  8.           _user_putc(0x0D);   //Not for LCD
  9.         }
  10.       _user_putc(c);          //Not for LCD
  11.       psz_s++;
  12.     }
  13. }


LCD esetén természetesen nincs értelme az "új sor" és a "kocsivissza" karakterek kiírásának, és így elhagyhatók a megjelölt sorok.
(#) Hp41C válasza icserny hozzászólására (») Szept 19, 2014 /
 
Idézet:
„LCD esetén természetesen nincs értelme az "új sor" és a "kocsivissza" karakterek kiírásának, és így elhagyhatók a megjelölt sorok.”

Már hogyne lenne értelme egy többsoros kijelzőnél. A sorok helyett a megfelelő parancskód kiküldését kell megoldani.
(#) icserny válasza Hp41C hozzászólására (») Szept 19, 2014 /
 
A Péter által megvalósítani kívánt menüvezérlésnél föltehetőleg nincsenek többsoros szövegek letárolva (bonyolítaná is a menü adminisztrálását). Egy szöveges terminálként használt többsoros kijelzőnél nyilván más volna a helyzet...
(#) don_peter válasza icserny hozzászólására (») Szept 19, 2014 /
 
Köszönöm srácok..
Több soros kijelzőt használok így érdekesek a sortörések.
Végül kombinálva ezt a kódot használom most és szépen kiváltogatom az összes printf()-et.
Már most spóroltam 200bájt-ot.
  1. void RomStringWrite(rom static unsigned char * pszovegek){
  2.         char c_h;
  3.         do{
  4.                 c_h =  *pszovegek;
  5.                 if (c_h) _user_putc(c_h);
  6.                 *pszovegek++;
  7.         }while (c_h!=0);
  8. }
A hozzászólás módosítva: Szept 19, 2014
(#) don_peter hozzászólása Szept 19, 2014 /
 
Srácok szeretném kiszámolni a 18F4550 periódus idejét. (20MHz kristály)
Ezen elven haladok:
1(/Fosc/4)
Csak azt nem tudom, hogy ilyenkor a kristály méretét vagy a PLL miatt a már felszorzott értéket kell néznem.
Tehát: 1/(20000000/4) = 2ms
vagy 1/(48000000/4) = 83ns

És még egy kérdés:
Befolyásolhatja a timer0 megszakítás vagy általánosban a megszakítások befolyásolhatják a fő program ciklusidejét? (negatív irányba)

ui: ja és a feljebbi kódommal már majd nem 1kb-ot spóroltam
A hozzászólás módosítva: Szept 19, 2014
(#) Hp41C válasza don_peter hozzászólására (») Szept 19, 2014 / 1
 
Azzal a frekvenciával kell számolni, amit az adatlap Figure 2-1 ábráján a CPU kimenetre jutatt a beállított konfiguráció.
(#) don_peter válasza Hp41C hozzászólására (») Szept 19, 2014 /
 
Akkor esetemben a 48MHz-vel..
Köszi..
Következő: »»   568 / 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