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   244 / 1209
(#) trudnai válasza szaffo555 hozzászólására (») Ápr 23, 2012 /
 
Igen, van ra esely, hogy oda kerul olyankor, de nem szabad ezzel szamolni. Egy fokkal magasabb az absztrakcio, mint az abszolute modnal mikor konstans blokkal adjuk meg a valtozok cimeit, ha lehet igy fogalmazni, es talan egy fokkal van a magas szintu nyelvek alatt. Ott is az mukodes szempontjabol mindegy, hogy hova kerulnek a valtozok, a lenyeg, hogy el legyenek tarolva valahol.
(#) steve69 válasza Hp41C hozzászólására (») Ápr 23, 2012 /
 
Üdv!
Köszönöm a segítséget csak annyit kérdeznék
még hogy a C4, R11, az alkatrészlistában szerepel
de *-al megvan jelölve hogy nem kell beültetni
na most akkor kell vagy nem?
(#) Pepebá hozzászólása Ápr 23, 2012 /
 
Üdv.
A Piccolo project keretében eddig az USB/PC adatmegjelenítéssel próbálkoztam (HID és CDC módban) I2C eszközök (LM75 hőszenzor, PCT8353 óra).
Szeretném az adatokat LCD- n megjeleníteni. A project LCD4x4 kodtabla-4550 programján próbálkozom, amikor próbálok a I2C buszról adatot beolvani, (pl. LM75_readTemp(uint8 addr) függvénnyel) az LCD leáll.
Hogyan közelítsem meg a problémát, induláshoz kérek némi segítséget.
(#) pjg válasza steve69 hozzászólására (») Ápr 23, 2012 /
 
A 7405 nem jó oda. Tegyél bele 7406-ot, vagy 7407-et. A kondi és az ellenállás pedig kell.
(#) Hp41C válasza steve69 hozzászólására (») Ápr 23, 2012 /
 
Szia!
R11 kell, ha hosszabb az LPT kábel, akkor 1k -ra lehet csökkenteni. C4 nélkül is működik.
(#) steve69 válasza Hp41C hozzászólására (») Ápr 23, 2012 /
 
Üdv!
Köszönöm a gyors segítségeteket.
Sok fórumban NEM ilyen segítőkészek!!!
Tisztelettel: István
(#) icserny válasza Pepebá hozzászólására (») Ápr 23, 2012 /
 
Idézet:
„Hogyan közelítsem meg a problémát?”

Kapcsolási rajzot mutass és csatold be a projektet, amivel próbálkoztál!

Mit jelent az, hogy az LCD leáll?
(#) szaffo555 válasza szaffo555 hozzászólására (») Ápr 23, 2012 /
 
Még mindig maradva a rellokálható fordítási módnál a következő problémám van az MPLAB beállításokkal. Van trudnainak egy nagyon jó anyaga a neten itt, de nem világos belőle, miért így kell az MPLAB nak megadni a paramétereket.
Eső körben a *.lkr filet adja hozzá a projethez. Eddig érteni vélem, habár nemtudom miért kézzel kell ezt megtenni, hiszen az MPLAB nak tudia kell milyen device -re fordít.
Ezután a Set Language Tool Lacations / Linker Sript Search Path -ban kell megadni a LKR -k folderét. Ezt megint miért? Nem tudná az MPLAB? Ráadásul az előbbiekben már csatoltuk a projekthez a linker filét
Ezután a Project / Set Language Toolsite ban ha jól értem ellenőrizni kell, hogy a linker folederünk a megfelelő helyre mutat -e. Ha ez csak tényleg ellenőrzés oké, de talán ez is kissé bonyolított a procedúrán.
(#) mhatalyak hozzászólása Ápr 23, 2012 /
 
Szép napot!

Infra vevőt szeretnék készíteni amelyhez jó az univerzális távirányítóm(tanítható). Csak 2 jel kellene, elektromos redőnyt szeretnék vele fel-le húzgálni. A legjobb az lenne, ha volna HEX kód is, rajz is egy adóról és egy vevőről az adó kódját pedig meg taníthatnám a távirányítómmal.
Meg oldható ez, vagy bonyolult nagyon?

Köszönöm szépen előre is!
mhatalyak
(#) Hp41C válasza steve69 hozzászólására (») Ápr 23, 2012 /
 
Szia!
Ha kész vagy a 7406 / 74LS06 -ra cserével, akkor a kettős Vpp kapcsolás nem fog tetszeni sok vezérő programnak. Rengeteg program esetén lehet állítani a portbiteket, de mindegyik csak egy Vpp kapcsoló bitet használ. Ebben az áramkörben a különböző méretű tokok miatt van kettő. Sajnos így típusfüggő lesz a beállítás...
(#) _vl_ válasza menyus hozzászólására (») Ápr 23, 2012 /
 
Idézet:
„Hogy kéne ezt "jól csinálni"..?”


Nem tudom, hogy hány méterre akarod elvinni, és nem tudom, hogy mennyire zajos elektromágnesesen a környéked.

5-10-15 méterre egy sima árnyékolt kábellel simán kell mennie a 4800bps-nek, ha nincs különös zavarforrás a közelben.

Ha sokkal többet szeretnél, nagyobb tempóra vágysz, esetleg bármi zavaró forrás van (nagyobb villanymotorok, ill. vezérléstől függően a fényerőszabályzós lámpák is gázosak lehetnek), akkor szóbajöhet egy szimmetrizáló "betét". Mindkét vonal (RX-TX) egyik végére teszel egy RS485 adót, a másik végére meg egy RS485 vevőt. Árnyékolt UTP kábelen ezzel 4800bps-t szerintem kilométeres távolságra simán el lehet vinni.
(#) mrobi hozzászólása Ápr 23, 2012 /
 
Sziasztok. Timer megszakításnál az INTCON GIE és az INTCON T0IF biteket mikor szokták kikapcsolni? A végén a megszakításnak vagy még az elején?
(#) vilmosd válasza mrobi hozzászólására (») Ápr 23, 2012 /
 
Az INTCON GIE soha. Ezt az IT kiszolgalas automatikusan kezeli. A masik bitet meg a RETFIE utasitas elott ki kell nullazni, de nem sok jelentosege van hol csinalod. Legfeljebb ha az IT rutinban figyeled a bitet, akkor a vizsgalat utan.
(#) mrobi hozzászólása Ápr 23, 2012 /
 
Köszi. Igazából nem akart működni a program. Arra gondoltam hogy biztos ezzel van a hiba. De rájöttem hogy már a option_reg-ben rontottam el a beállításokat. Most már működik.
(#) Pepebá válasza icserny hozzászólására (») Ápr 23, 2012 /
 
Üdv.
Köszi, sikerült megoldanom. Így nap végére legalább van egy kis siker élményem. (a hőszenzor és az óra adatait is sikerült elérni és kiíratni az LCD-re.
Persze nem teljes az örömöm mert rengeteg dolog van amit még nem tudok: pl. hogyan lehet 1 sorban folyamatosan több változó értéket egymás után kiírni. Keresgetek infót, biztos találok.
Viszont nem tudom a hőszenzor mért adatát megfelelő módon megjeleníteni. Bizonyára megint alapvető hiányosságaim egyike az oka, igyekszem pótolni.
while(1) {
Delay10KTCYx(100);
temp=LM75_readTemp(0x90);
tmp32=(temp*10L+128L)/256;
lcd_write(0x80,0,1,1);
printf("hőfok:%d",temp);
Delay10KTCYx(100);
lcd_write(0xC0,0,1,1);
printf("höfok:%f",tmp32);
}
a tmp32 értékével van gondom ez 0 érték, a temp értéke jó.
(#) trudnai válasza szaffo555 hozzászólására (») Ápr 23, 2012 /
 
Koszonom az eszrevetelt! Mar nagyon regen csinaltam azt a leirast, de ugy emlekszem, hogy valami nyugje volt a 8.10-es MPLAB-nak (s talan a korabbiaknak is?), tehat ha a linker path nem volt megadva a projectben, akkor hiaba adtuk hozza az LKR filet akkor sem tudta hogy hol keresse. Most kiprobaltam 8.30-assal, ott nem kell ezt a szornyuseget elkovetni. A toolsuitben a default path-t csak azert adom meg ott, hogy a kesobbiekben konnyu legyen a projecthez hozza adni ezeket az utvonalakat.

Ami az LKR file hozzaadasat illeti: Az nem art hozza szokni ahhoz, hogy magnk valasszuk ki a szkriptet szerintem meg akkor sem, ha amugy az MPLAB/MPLINK eleg okos hozza, hogy az elepertelmezettet kivalassza Mar csak azert is, mert nem csak egyetlen linker szript lehet egy eszkozhoz. A linker szkriptet is lehet konfiguralni, es kulonbozo projectekhez mas es mas linker szkriptre lehet szukseg, meg ha a PIC ugyanolyan tipus is. (Hozzateszem, hogy ugy emlekszem mikor azt a leirast csinaltam meg mintha nem hasznalta volna automatikusan a szkripteket az MPLINK).
(#) icserny válasza Pepebá hozzászólására (») Ápr 24, 2012 /
 
temp és LM75_readTemp() 16 bites előjeles egész (int vagy int16) típusú legyen.

temp32 pedig 32 bites előjeles egész (int32 vagy long) legyen.
(#) mhatalyak hozzászólása Ápr 24, 2012 /
 
Szaisztok!

Találtam a neten egy PIC-es távirányítót 8 csatornás, van hozzá adó és vevő, ott a progi is, de sajnos HEX ben nem találom. Esetleg valaki venné a fáradságot és át konvertálná nekem az adóhoz és a vevőhöz is? Esetleg egy progi név/link is jó lenne.

Köszönöm szépen előre is!
mhatalyak
(#) icserny válasza mhatalyak hozzászólására (») Ápr 24, 2012 /
 
Én is találtam egyet, és benne vannak a hex állományok is (adó/vevő).
(#) mhatalyak válasza icserny hozzászólására (») Ápr 24, 2012 /
 
Ezzel az a baj, hogy rádiós, én pedig univerzális távirányítóval szeretném használni. Építettem az előbb egyet, ami Sonyhoz való, 8 csatornás az is, de sajna nem működik vele.

Szerk: Elnézést, most látom, hogy át lehet állítani az oldalon Infrared-re!

Köszönöm szépen, meg próbálom összerakni!
mhatalyak
(#) Pepebá válasza icserny hozzászólására (») Ápr 24, 2012 /
 
Ilyen típusú változókat használok, hiszen a Piccolo projekt
LM75_i2c.c progiból vettem át.
A a bajom hogy a kiíratásnál a tmp32-re ha %d adok opcióként a printf-ben akkor 0-át, egyéb opciók esetén %f,%e pedik nem ír ki karaktert.
Kipróbáltam a tmp32 egyenlővé tettem:25,4-l és ezt sem irta ki. Azt gondolom hogy a kiíratás körül lehet valami probléma.
(#) icserny válasza Pepebá hozzászólására (») Ápr 24, 2012 /
 
A C18 library dokumentációját kellene tanulmányozni (lehet, hogy printf helyett fprinf kulcsszóra kell keresni).

%d vagy %i az tudtommal itt "int" típust konvertál.

%f és %e elvileg lebegőpontos volna, ami itt talán nincs is.

A %d-hez alighanem az "l" módosítót kellene használni, hogy long típust konvertáljon.

Idézet:
„Kipróbáltam a tmp32 egyenlővé tettem:25,4-l”
A fordító mit szólt hozzá? Ugyanis a tmp32 egész típusú, de a tizedesvessző egyébként sem stimmel (pont kellene)!

Egyébként tmp32-ben tizedfok egységekben egész számként tároljuk a hőmérséklet értékét. Tehát 23.5 fok esetén 235 lesz benne.
(#) c27 hozzászólása Ápr 24, 2012 /
 
Sziasztok.
A watchdog timert szeretném használni beállítottam amit kellett:
__CONFIG _HS_OSC&_CP_OFF&_WDT_ON&_LVP_OFF

BCF STATUS,0
CLRF TMR0
BSF STATUS,0
CLRDWT
MOVLWB'1000'
MOVWFOPTION_REG
BCFSTATUS,0

A konfignél bekapcsoltam a watchdogot beírtam az előosztást, de az MPlabba az option_reg értéke mindig 255 és hiába várom a resetet nem jön. Mi lehet a gond? (Persze az sem egyszerű, hogy 18msec idő szimuláció során nem kevés, talán csak keveset vártam?)
Már van egy alap programom ami működik az szépen fut direkt nem tettem be clrwdt-t hogy majd resetelődjön, de eddig semmi.
(#) k hozzászólása Ápr 24, 2012 /
 
Üdv Mindenkinek!

PIC programozást szeretnék tanulni C-nyelven.
Amiért új témát nyitok a következő:
A meglévő kezdő témák linkjei már nem jók, ha jó a link a letöltött fájl hibás - pl: a Microhip oldalán-
Ha jó a link és a fájl, akkor az új verzió miatt már nem azokat az útmutatásokat kell követnem, mint amit leírtatok.
Valamint a leírások többsége egyből belevág a programozásba, anélkül, hogy tisztázná mi a project include stb...

Oshon pic Basicban már programoztam, és assemblerben is csináltam led villogtatást, de komolyabb dolgokhoz C-kell.
Tehát jó lenne ha valaki végig tudna vezetni az alapoktól.
Nekem Jó lenne magánban is amiért fizetni is tudnék, de az nem szolgálná a többi kezdő érdekeit.
Várom segítségeket!
(#) trudnai válasza mhatalyak hozzászólására (») Ápr 25, 2012 /
 
Miert nem linked be amit talaltal? Nem biztos, hogy mi ugyanazt talaljuk meg amit Te...
(#) sirály12 válasza k hozzászólására (») Ápr 25, 2012 /
 
Szerintem nem kellett volna új téma!

A ccs pic topikban rengeteg segítséget találsz, és van pic kezdőknek téma is!

A ccs legalapabb dolgait pedig leírja a "PIC programozás C nyelven - CCS - I. lecke" c. cikk!
Projekt nyitása, beállítása, stb.

Bővebben: Link

Szerintem ez elég a kezdéshez! Anno nekem legílábbis elég volt, és ha ezek után nem tudsz valamit, akkor jöhetnek a kérdések!
(#) icserny válasza k hozzászólására (») Ápr 25, 2012 /
 
Juhász Róbert honlapján az MPLAB szekcióban találsz leírást az MPLAB 8.1 használatáról.

A C nyelv alapjaihoz a klasszikus szakirodalom (Kernighan-Ritchie: A C programozási nyelv) ajánlható.

Magántanárt az "Apróhirdetés" rovatban (jobb felső sarok) kereshetsz.
(#) Pepebá válasza icserny hozzászólására (») Ápr 25, 2012 /
 
A tizedes vessző csak tévedés volt, ahogy illik pontot használtam. A fordító lefordította, csak nem került kiírásra.
A tmp32 váltózót int16-ra módosítottam és így ki tudtam íratni az LCD-re printf %d opcióval.
Az LCD-n csak egész típusú változó értékeket lehet megjeleníteni? a float típusokat nem sikerült kiíratnom.
Vagy külön kell kiküldeni az egészet , a tizedes vesszőt és a törtrészt?
(#) vilmosd válasza k hozzászólására (») Ápr 25, 2012 /
 
Idézet:
„de komolyabb dolgokhoz C-kell.”
Mert mit akarsz programozni? Ursiklo vezerles PIC16F84-el? Szerintem siman a MPLAB + ASM a nyero kombinacio kezdoknek. Persze lehet C-vel is kezdeni, de altalaban az a cel a kezdoknel, hogy megismerje a PIC felepiteset, alapveto programozasi fogasokat, regiszterek tertalmat, hasznalatat. Na erre nagyon jo a MPLAB, az ASM, es a beepitett szimulator. Amikor mar megismerted ezeket, elo lehet venni a C nyelvet es abban meg lehet alkotni az atomeromu vezerlest. Azert hogy ne csak papoljak, toltsd le a doksikat, es a demo panel terveket. Talalsz mintapeldakat C es ASM nyelven, valamint leirasokat.
(#) icserny válasza Pepebá hozzászólására (») Ápr 25, 2012 / 1
 
Idézet:
„Az LCD-n csak egész típusú változó értékeket lehet megjeleníteni?”
Ennek semmi köze az LCD-hez. A C18 esetében a printf-ben tudtommal nem implementálták a float típus kezelését.

Legegyszerűbb, ha az outdec() függvényemnek elkészíted a párját, mondjuk outdec_LCD() néven, s csak a karakterkiíró függvény meghívását kell kicserélni benne, hogy ne az USB-re hanem az LCD-re írjon.
  1. /** Decimális kiíratás adott számú tizedesjegyre.
  2.  * \param data a kiírandó szám (előjelesen)
  3.  * \param ndigits a kiírandó tizedesek száma
  4.  */
  5. void outdec(long data, unsigned int ndigits) {
  6. static char sign, s[12];
  7. unsigned int i;
  8. i=0; sign='+';
  9. if(data<0) { sign='-'; data = -data;}
  10. do {
  11. s[i]=data%10 + '0';
  12. data=data/10;
  13. i++;
  14. if(i==ndigits) {s[i]='.'; i++;}
  15. } while(data>0);
  16. _user_putc(sign);
  17. //~~~~~~~~~~~~
  18. do{
  19. _user_putc(s[--i]);
  20. //~~~~~~~~~~~
  21. } while(i);
  22. }


Az aláhúzottakat kell lecserélni...
Következő: »»   244 / 1209
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