Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   199 / 1320
(#) Csaplar hozzászólása Máj 1, 2008 /
 
Hali!

Arra a kérdésem tudnátok még válaszolni, hogy ha RFID-hez az MTP-K4-est választom, akkor ahhoz kell-e külön antenna, mint a CWL-1 -hez, vagy nem?

Valamint látom, hogy van neki kettő Data lába is, az egyik invertált, a másik pedig nem. Ha közvetlen a pic lábához akarom kötni, akkor a nem invertált lábat kell használnom?

Köszi a válaszokat!
Üdv és jó majálist mindenkinek!
(#) NeoCool hozzászólása Máj 1, 2008 /
 
Valaki nem tudna megmondani, h mi ez amit csatoltam? Es nem lehet egy szimpla kvarckristalyt hasznalni helyette? Elso projekt nem ertek hozza

osc.JPG
    
(#) kobold válasza NeoCool hozzászólására (») Máj 1, 2008 /
 
Simán lehet, egy 4 MHz-es kvarc, az OSC1 és OSC2 lábakra kötve, egy-egy 18 pF-os kondival a test felé szerintem még stabilabb is lenne.
(#) trudnai válasza NeoCool hozzászólására (») Máj 1, 2008 /
 
Koboldot kiegeszitve, ha ez elso project, akkor lehet erdemesebb olyan PIC-et valasztani, amelyiknek van belso osziccaltora es akkor semmi sem kell... Nyilvan projecttol is fugg, mert ha nagyon nagy pontossagu orajel kell akkor inkabb kristaly, de esetek tobbsegeben nem kellenek ilyen varazslasok.
(#) NeoCool válasza trudnai hozzászólására (») Máj 1, 2008 /
 
Kossz szepen mindkettotoknek, memoriakartyat kell hasznaljak h elferjenek az adatok, s a talalt kapcsolasi utmutatoban igy volt. De akkor kristalyt teszek. :yes:
(#) Thowra hozzászólása Máj 1, 2008 /
 
Üdv mindenkinek!
ma sikerült végre összehozni egy kis tesztáramkört amire szeretnék saját progikat írni.
Elkezdtem keresgélni de jött a csalódás. Sajnos az összes eddig találta oldal feltételezi, hogy már írtam ilyen progikat és nem nulláról kezdi a magyarázást. Nyelvtudás hiányosságaim miatt nagyon nem tudtam belemélyedni külföldi lapokba
Megnéztem jópár .ASM fájlt de nem lettem okosabb
Lehetséges valami érthetőbb nyelven kivitelezni a programot és azt lefordítani asm be? A pascal lenne ideális mert az assembly elég barátságtalan (nekem). Tud esetleg valaki olyan oldalt ahol a legelejétől elmagyarázzák (szájbarágósan) a programozásukat?
Előre is köszönöm!
(#) trudnai válasza Thowra hozzászólására (») Máj 1, 2008 /
 
Thowra,

Egyszer mar leirtam itt, hogy hol van egy kezdoknek szolo cikk, sot ez cikk sorozat...

ASM-ben erdemes az alapokat elsajatitani, mert ha megnezed abban a cikkben a peldakat, a C ill Pascal, de akar a Basic nyelven irodott firmware-ek is ugyanazt csinaljak. A kivetel talan, hogy nehany dolog, mint pl ket szam osszeadasa, vagy bankok kivalasztasa el van rejtve eloled, de ez mar hidd el reszlet kerdes. Azt, hogy hogy mukodik egy mikrovezerlo azt az ASM-en keresztul fogod legjobban megerteni. Mikor megvannak az alapok akkor mar nem lesz problema Pascalt vagy mast hasznalni (JAL pl Pascal ill ahhoz nagyon hasonlo nyelv, de vannak mas Pascal implementaciok is a PIC-re ahogy a cikkben olvashatod).

Masik, hogy az angolra fekudj ra, ha elektronikaval ill mikrovezerlokkel szeretnel foglalkozni. Magyar nyelvu anyagok is vannak, magyar nyelvu forumok is vannak, de sajnos az osszes informacio azt kell mondjam masodkezbol jon ha a leforditott anyagokat olvasgatod. Sajnos felreforditasok es hibak is fellephetnek mint ahogy arra nemregiben itt valaki ramutatott mikor batar modon belinkeltem egy magyarra forditott adatlapot.
(#) lidi válasza potyo hozzászólására (») Máj 1, 2008 /
 
Pár oldallal ezelőtt volt szó pontos timer0 időzítésről.
Próbáltam potyo modszerét, lehet hogy jó, csak mégsem +6 rol kell inditani a számlálót, mert nagyon nem volt pontos. Fél óra alatt kb 10 másodpercel elmászott.

Én arra jutottam, hogy nemjó bántani ezeket a számlálókat, hagyjuk csak pörögni. Kipróbáltam a float -os ötletemet, az működött pontosan. De azután továbbfejlesztettem úgy, hogy ne kelljen lebegőpontos szám, csak long int.
Közzéteszem, hátha hasznos másnak is.
Ha nem lenne pontos a 20Mhz-es quartzunk, akkor van 2 tizedesnyi helyünk még pontosítani. (a 2db 0 a secoszto2 végén)
Ezzel 2mp/év pontosságal be lehet lőni, ha jól számolom. (Lehetne még 4x es pontosságra átírni, mert a long int be 4294967296-ig számolhatnánk.)


  1. unsigned long int secoszto2             =13107200;
  2. unsigned long int seccounter2   =0;
  3. unsigned long int egysec                =1000000000;
  4.  
  5. void timer0_init()
  6. {
  7. T0IF=0;
  8. T0CS=0; // Internal instruction cycle clock
  9. PSA=0// Prescaler is assigned to the Timer0/wdt module
  10.  
  11. PS0=1;
  12. PS1=1;
  13. PS2=1// Prescaler Rate Select 1:256
  14.  
  15.  
  16. TMR0=0; // Clear Timer0 register
  17.  
  18. T0IE=1; // enable irq
  19.  
  20. }
  21.  
  22.  
  23. void interrupt tc_int(void)
  24. {
  25.         if (T0IE && T0IF)
  26.         {
  27.         T0IF=0;
  28.  
  29.         seccounter2=seccounter2+secoszto2;
  30.         if (seccounter2>=egysec)
  31.                 {
  32.                 seccounter2=seccounter2-egysec;        
  33.                 sec++;
  34.                
  35.  
  36.                 if (sec==60)
  37.                         {
  38.                         sec=0;
  39.                         min++;
  40.                         }
  41.  
  42.                 if (min==60)
  43.                         {
  44.                         min=0;
  45.                         hour++;
  46.                         }
  47.  
  48.                 if (hour==24)
  49.                         {
  50.                         hour=0;
  51.                         }
  52.  
  53.                 }
  54. ........
(#) trudnai válasza lidi hozzászólására (») Máj 1, 2008 /
 
Jopofa megoldas!

A timer regisztereit amugy azert nem jo bantalmazni, mert mikor megteszed a prescaler is torlodik es igy a precizitasa erosen torzul ennek a fajta megoldasnak. Meg lehet amugy oldani ezt, szilva nemregiben kozolt egy modszert ha jol emlekszem, hogy egeszen addig ameddig a timer regiszter nem valt erteket varakozni kell, es mikor ez megtortenik biztosak lehetunk abban, hogy a prescaler eppen nulla - vagy legalabbis sokkal kisebb lesz az elteres, mivel 1 ciklusido alatt a varakozo ciklus nem megoldhato foleg az ellenorzessel egybekotve...

Esszeru lenne szerintem egy #define-t letenni a secoszto2 ill egysec helyett ha azok dinamikusan nem valtoztathatoak a firmware futasa soran. Es lehet az sem lenne nagy butasag, ha lenne egy SYSCLK vagy hasonlo nevu #define is, es ezeket a szmaokat ebbol szarmaztatnad, mivel akkor kesobb egyszerubb lenne a firmware-t atirni masik orajelre, vagy PIC-re stb.

T0IE-t amugy azert figyeled, mert van mikor a timer megszakitas ki van kapcsolva ugyanakkor mas megszakitas engedelyezett?
(#) lidi válasza trudnai hozzászólására (») Máj 1, 2008 /
 
igen, a funkcioban tovabb van mas megszakitas is a soros porthoz. Próbáltam define -al is, de ugy nem volt pontos megint. Van egy pár furcsasága ennek a HiTech compilernek... pl printf ben a long intet nem tudja kiirni, meg a floatot se.
Amugy irq feldolgozás közben nem kéne lekapcsolni a megszakítást ? Ja meg egy másik kérdés: ha az irq rutinba raktam printf -et, akkor panaszkodott hogy máshonnan is van hívva printf. Ez ellen mit lehetne csinálni ?
(#) NeoCool hozzászólása Máj 1, 2008 /
 
Gondolom valakinek van a gepen valami katalogus, ugyhogy megkerdem mivel lehet helyettesiteni az LD1086V33-as feszutseg referenciat, ha igy hivjak.
(#) kobold válasza NeoCool hozzászólására (») Máj 1, 2008 /
 
Stabilizátor az; ha kell a low-drop, akkor pl. LT1083 jó drágán, ha nem, akkor LM350 is lehet.
(#) NeoCool válasza kobold hozzászólására (») Máj 1, 2008 /
 
De ezek biztos, h 3.3V-ot adnak le, mert nekem az nagyon fontos lenne, memoriakartyanak kell a 3.3V, 12V-rol kellene atalakitani. Megneztem az LT1083-at, s neki 5V-ot ir, s a masik adatlapjan nem tudtam eligazodni.
(#) kobold válasza NeoCool hozzászólására (») Máj 1, 2008 /
 
Ja, én hülye csak a katalóguslap elejét néztem, neked meg fix kimenetű kell...
Ez itt pl. 3.3 V-os, 500 mA-ig terhelhető, nem tudom, az elég lenne-e a kártyádhoz.
(#) trudnai válasza lidi hozzászólására (») Máj 1, 2008 /
 
Valoszinuleg a define ele kellene egy castolas is longintre. Sajnos ezek a mikros C comilerek eleg furan viselkednek, direktben megadott szamot byte-nak, jobb esetben int-nek veszik, es kulon castolgatni kell, hogy ne felejtse el a nagyobb helyiertekeket...

A long es float, nem tudom ezek hogy mukodnek, lehet ki van direkt hagyva, nehogy foglalja a helyet a konyvtarban.

A T0IE-t direkt kerdeztem, mert ha nem kapcsolgatod a timer megszakitasat ki-be, akkor felesleges kulon ennek engedelyezettseget vizsgalni, elegendo a T0IF is.

Asszem van valami, hogy ha fuggvenyt akarsz hivni interruptbol, akkor meg kell adni egy pragmaval, hogy mindent mentsen el a kontextusbol. HiTech-et nem ismerem, de lehet, hogy meg sem lehet adni es akkor maskepp kell megoldani a kerdest (pl beallitani egy flaget amit inten kivuli foprogram figyelget es ennek megfeleloen cselekszik). Majd utana nezek pontsan mi is volt ez, hacsak addig valaki meg nem valaszolja...
(#) szilva válasza trudnai hozzászólására (») Máj 1, 2008 /
 
Jól emlékszel, a 16F946-os órámban kellett nekem is kicsit hekkelgetni a timer újratöltését.

Bár ott egy kicsit más a felállás, mert a proci internal 8MHz-ről ketyeg, az időalap, ami a timer1-et lépteti, az pedig egy 32768Hz-es órakvarcról jár.

Egyébként szerintem elég nagy butaság a MC részéről, hogy deklaráltan a 32768Hz-es órakvarchoz tervezik a timer1 oszcillátort, ennek ellenére nem lehet 32768-as osztást beállítani hardveresen.

Ha csak hagyom pörögni szabadon a számlálót, akkor a 16 bites számláló miatt csak 2 másodpercenként lépkedő órát lehet csinálni, ami elég vicces, ha van másodperckijelzés is. Ergo újra kell tölteni az interruptban a timer regisztereit, hogy a számlálás ne nulláról folytatódjon. Ha az újratöltésnél nem csinálom meg azt, hogy megvárom a timer1 értékváltozását, és közvetlenül a változás után töltöm fel a regisztereket, akkor ugyanaz az elcsúszás volt tapasztalható, mint lidinél (10-15 perc után már látható volt az 1-2 másodperc eltérés, és mindig késett az óra).

A múltkor beidézett kódrészlettel már valami 6 hete jár itt az asztalomon az óra, és most látok 11 másodperc sietést az internetszinkronizált időhöz képest.
(#) szilva válasza NeoCool hozzászólására (») Máj 1, 2008 /
 
Esetleg nézd meg az MCP1702-3300 típust (Microchip), ez TO-92 tokban is kapható, 250mA kimeneti áramot képes leadni. Az SMD változatás használtam már, én nagyon meg voltam elégedve vele.
(#) Akiss hozzászólása Máj 1, 2008 /
 
Sziasztok lehet hülyeséget vagy alap dolgot kérdezek. Az volna a problémám hogy a programot úgy írom hogy cfájlokra van bontva. de most az egyik c fájlban lévő változót szeretném használni a másik c fájlban
(#) trudnai válasza Akiss hozzászólására (») Máj 1, 2008 /
 
extern -nel definiald a masik C forrasban, vagy egy header file-ban amit a forrasba beinkludalsz.

pl foo.c -ben van egy:

int akarmi; /* globalis valtozo persze */

a bambo.c-ben pedig igy hivatkozol ra:

extern int akarmi; /* external valtozo, majd a linker tudni fogja hol van */

void bambaBamboo (void)
{
akarmi++; /* mar hozza lehet ferni */
}
(#) Akiss válasza trudnai hozzászólására (») Máj 2, 2008 /
 
köszönöm a gyors választ. Még lenne egy kérdésem, valakinek nincs egy magyar nyelvű doksija ahol le vannak írva hogy a pragma mit jelent meg ilyenek, ha nincs més jó az angol is előre is köszönöm
(#) potyo válasza lidi hozzászólására (») Máj 2, 2008 /
 
Idézet:
„Amugy irq feldolgozás közben nem kéne lekapcsolni a megszakítást ?”

Nem, mert az hardveresen megtörténik a GIE bit kikapcsolásával amikor a megszakítási vektorra ugrik a program, majd a megszakítás végi RETFIE utasítás visszakapcsolja. Ha kézzel macerálod, abból csak a gond van.

Idézet:
„Ja meg egy másik kérdés: ha az irq rutinba raktam printf -et, akkor panaszkodott hogy máshonnan is van hívva printf. Ez ellen mit lehetne csinálni ?”
Semmit, inkább ne hívj függvényt (főleg ha nemis tudod, hogy annak végrehajtása meddig fog tartani) megszakítási rutinból. Billents be egy jelzőbitet a megszakítási rutinban, és a főprogramból figyeld a bitet, és onnan hívd meg a függvényt.
(#) trudnai válasza lidi hozzászólására (») Máj 2, 2008 /
 
Hu, na most beugrott valami, gyorsan leirom mielott reggel lesz es elfelejtem:

Idézet:
„Ja meg egy másik kérdés: ha az irq rutinba raktam printf -et, akkor panaszkodott hogy
máshonnan is van hívva printf. Ez ellen mit lehetne csinálni ?”


Na ez valahogy teljesen elkerulte a figyelmem, szoval valoszinuleg a pintf nem reenrant a HiTech megvalositasaban, azaz ez ugye egy mikrokontroller limitalt eroforrasokkal, igy a printf-nek fix adatterulete van (es valoszinuleg sok mas konyvtari fuggvenynek is). Namost ha a foprogram epp a printf-et futtatja, akkor nem lenne egeszseges ha az interrupt is bele hivna mert elegge ossze zavarodnanak a dolgok, ezert panaszkodik valoszinuleg.
(#) Thowra hozzászólása Máj 2, 2008 /
 
Üdv mindenkinek!
Összeraktam a lentebb említett PICrajz szerint a kapcsolást és beírtam egy 16f627 be a potyo által írt progit de valami gond van. Eddig nem tűnt fel mert csak 7 ledem volt kéznél és a 10. lábra (B4) nem jutott. Most van azon is de ha ráakasztom akkor az egész leáll, ha viveszem megy tovább. Tegnap este a telefonom be volt dugva töltésra és ha mellé tettem a töltőt szintén leállt.
Az mrcl láb a rajz szerint van kötve.
Mi lehet a probléma?
Előre is köszönöm!
(#) trudnai válasza Thowra hozzászólására (») Máj 2, 2008 /
 
Elso korben probalj meg egy 100nF-et berakni a Vdd es a Vss koze. Amugy az MCLR-en az a 100ohm es a kondi teljesseggel felesleges, ezekben a PIC-ekben mar van sajat belso idozito ami bekapcsolaskor reseten tartja a pic-et igy nem kell kivulrol ezt bele ganyolni. A dioda is felesleges oda, ezek esetleg megzavarhatjak a programozo mukodeset.
(#) potyo válasza Thowra hozzászólására (») Máj 2, 2008 /
 
Elfelejtettem letiltani az alacsony feszültségű programozást a config sorban. Tedd még ezt is oda: _LVP_OFF


Tanulás az olvasással kezdődik, és te biztosan nem olvastad el ezt a témát az elejétől a végéig. Úgyhogy ezt tedd meg!
(#) Thowra válasza potyo hozzászólására (») Máj 2, 2008 /
 
Üdv!
Így már jó a led.
Végigolvastam többször a cikket, de mivel még nem csináltam hasonló dolgot így van pár dolog ami nem egyértelmű.
Megpróbálok beszerezni egy a cikkbe tárgyalt PIC et de a környéken nincs olyan bolt ahol beszerezhető lenne.
Addig marad a 627 és 628.
Még kersgélek leírást a programozás részére mert a cikkbe tárgyalt parancsok alapján nem jutottam nagyon előre.
Jól jönne egy olyan "tankönyv" ami valahogy úgy indul mint pl a pascal nyelv 1. feladata, hogy írassuk ki a nevünket....
(#) kobold válasza Thowra hozzászólására (») Máj 2, 2008 /
 
Keresd meg a Dr. Kónya László által írt, "PIC mikorvezérlők alkalmazástechnikája" c. könyveket (két kötet is van már), az alapján megértheted a hardvert és a program működését is, legalábbis általánosságban. Nagyon sok példa is van bennük, és meg lehet érteni a dolgokat annyira, hogy később már csak az adatlap kell a kiválasztott procihoz.
(#) trudnai válasza Thowra hozzászólására (») Máj 2, 2008 /
 
Idézet:
„ól jönne egy olyan "tankönyv" ami valahogy úgy indul mint pl a pascal nyelv 1. feladata, hogy írassuk ki a nevünket....”


A PIC-eknel a LED villogtatasa pontosan ez... Vagyis az irjuk ki a nevunket avagy a "Hello World" az egy LED kigyujtasanak felel meg, mig a led villogtatasa mar kicsit messzebb megy ennel, mivel idoziteni vagy varakozni is kell benne. Ezekent keresztul lehet csak az alapokat megerteni. LCD-re vagy RS232-re anevedet csak kesobb irasd ki mikor ilyen egyszerubb feladatok mar nem okoznak problemat.
(#) Thowra válasza kobold hozzászólására (») Máj 2, 2008 /
 
Üdv!
Megtaláltam a könyvet.
Kicsit más mint amire számítottam, nagyon általánosan fogalmaz. A cd mellékletet még töltöm, talán a kettő együtt segít valamit.
(#) kobold válasza Thowra hozzászólására (») Máj 2, 2008 /
 
Persze, hogy általánosan. Amennyi eszköz, meg periféria van, nem is lehet precízen elmagyarázni mindent, DVD-n se férne el...
Kell valamekkora alapismeret a továbblépéshez, az benne van; megismertet a lehetőségekkel, bemutatja a jellemzőbb perifériákat, ráadásul magyarul van, ami önmagában is nagy dolog. Ha a mintakódokat már kezded érteni, akkor úgyis ki kell választanod egy procit, letölteni az adatlapját, és pl. az MPLAB szimulátorának támogatásával elkezdhetsz játszadozni.
És aztán adatlap, angol nyelv, meg kitartás, többre nem nagyon lesz szükséged.
Következő: »»   199 / 1320
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