Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Hogy tudom ellenőrizni hogy sikerült-e?
Szerinted az a Verify gomb vajom mire szolgálhat?
Arra azt írja ki hogy:
Verfy failed at adress 0000h! The value read form that adress is 3FFFh. The value expected is 0064h.
Ha lassabbra lehet venni a programozás sebességét, akkor azt meg lehetne próbálni, utána Erase All, majd Program All. Hasonló nyűg nálam is volt, míg ki nem tapasztaltam, mikor nem téveszt...
A stabil Vdd és Vpp feszültségek persze alapfeltételek, de gondolom, ezek megvannak.
Milyen LPT és milyen ICSP kábeleket használsz? (hossz, kábel anyaga?)
Háát... kapaszkodj meg. Nincs LPT kábelem úgyhogy ideiglenesen így oldottam meg, valamelyik nap veszem a fáradságot és elmegyek egy sz.gép boltba.
A képért bocsánatot kérek de 20 képből így ez lett a legélesebb (valszeg haldoklik a fényképező,vagy én).
Na hát ezután ne lepődj meg, ha nem tudsz programozni és instabil.
Örülhetsz hogy akik eddig segítettek, nem billentenek fenékbe.
Vásárolás előtt inkább olvasd el alaposan watt oldalán az égetőről szóló leírást.
Legalabb szereztel volna egy 1m-es CAT5-os UTP kabelt es azzal csinaltad volna Vagy akar a printer port csati lehetne a panelen is kozvetlenul beforrasztva, ha a panelt fizikailag ala tudod valamivel tamasztani valahogy, hogy ne a csati tartsa... (na jo, ez a mondat torlendo )
Úgy lessz, ez csak ideiglenes megoldás. (nem megoldás)
Idézet: „A képért bocsánatot kérek de 20 képből így ez lett a legélesebb” Vagy csak valaki összetaperolta az optikát, homályos...
Igen. Topi már felhívta rá a figyelmemet. Sajna nem csak én használom a gépet.
Sziasztok!
Tudna valaki mellékelni egy jól működő macro-t, amit fel tudnék használni az ASM fájlokban időzítésnek. Keresgéltem a neten, de működő példányt nem találtam. Jó lenne, ha lehetne állítani az órajelet, és tudna us-től szekundumig delay-ezni. Előre is köszi. Üdv Amarton.
Egyrészt nem hiszem, hogy makró kellene neked(szerintem nem tudod mi az, de ha még is akkor kérlek jelezd és nem magyarázom el...), hanem függvény, vagy ha jobban tetszik szubrutin.
Másrészt, az órajelet nem lehet állítani, csak ha cserélgeted a kristályt. De ez így még sem teljesen igaz, mert ha belső oszcit használsz, akkor lehet a frekit is változtatni(durva használhatatlan lépésekben), de ezt nem szokták így használni, mert eközben a programvégrehajtási sebességet is állandóan változtatnád, ami enyhén szólva is rossz megoldás. Harmadrészt, időzíteni, főleg másodperces időtartamokig nem várakozási ciklussal szoktunk, hanem valós időzítésekkel, azaz Timerek és a megszakítás felhasználásával. Beállítjuk a Timer osztóit, esetleg feltöltjük a Timer számlálóját egy kezdő értékkel, majd várjuk, hogy megszakítást generáljon a túlcsorduláskor. Ekkor lekezeljük azt, és kész az időzítés. Persze lehet több megszakítás után is beavatkozni, számlálva azt, ezzel kitágítani az egy megszakításnyi időtartamot a szükséges időre. Javaslom megérteni a megszakítás menetét, és a Timerek használatát.
Szia watt
Mielőtt elkezded magyarázni, mint a hülyegyereknek a timereket és a szubrutint. Nekem akkor is macro kell Nem ma kezdtem a PIC-ezést, de az egyszerű feladatokhoz nekem a macro lenne a legjobb. Ilyenre gondoltam, de ez nem műkszik:
Idézet: „Mielőtt elkezded magyarázni, mint a hülyegyereknek a timereket és a szubrutint.” Idézet: „Nem ma kezdtem a PIC-ezést” Akkor szégyeld magad, hogy egy ilyen egyszerű feladatot nem tudsz megoldani, és nem tudsz egy kérdést szakmailag korrekten feltenni! A belinkelt megoldás, még ha működne is, nem javasolt. Idézet: „Nekem akkor is macro kell” Akkor nem tudok segíteni, mert ennek szerintem nem ez a módja. Még annyit, hogy ha legközelebb idézel kódot, akkor használd a KÓD gombot!
És milyen programmal próbáltad fordítani ezt a kódot?
Te figyi, mivel nem hasznaltal code blokkot a kodod beidezesenel baromi nehezen latni mi cimke es mi nem. Egy csomo olyan dolgot latok benne ami nem PIC assembler utasitas. Lehetnek ezek persze mas makrok is, de igy nagyon nehez ezen kiigazodni.
A masik, hogy "neked makro kell" - nem tudom honnan jon ez a ragaszkodas, hogy ezt megalmodtad vagy Isteni sugallat, de en ugy erzem, hogy elsosorban nem a programozasi technikara kellene konventralni ebben az esetben, hanem a problema megoldasara. A problema, hogy varakozni szeretnel adott ideig egy hordozhato rutingyujtemenyt felhasznalva. Forditasi direktivakat pedig nem csak makroknal lehet alkalmazni. Pl egeszen kis idok athidalasara valami hasonlokat erdemes csinalni: wait10cycl call wait5cycl wait5cycl nop wait4cycl return #define wait1cycl nop #define wait2cycl goto $+1 Ennel kicsivel hosszabbakat mar erdemesebb ciklusba szervezni es akkor eldontheted, hogy hasznalsz-e RAM-ot ehhez vagy sem, pl:
Ennel sokkal hosszabb varakozasokat pedig a timerre kell bizni ahogy azt mar watt javasolta neked es akkor eldontheted, hogy pollozod a tulcsordulast, vagy interruptozol, vagy ha kulso orarol megy akkor kozben altatod a PIC-et stb. Idézet: „Egy csomo olyan dolgot latok benne ami nem PIC assembler utasitas.” Pont ez volt az, ami nekem is feltűnt, pedig direkt kihangsúlyozta, hogy ő pedig ASM fájlokat barkácsol... //az előbb pedig kóddá tettem a programrészletét, és a vicc az egészben, hogy köze nincs az assembly nyelvhez az első 8 sort kivéve//
A többiek már nagyjából elmondták a meglátásaikat, én ezekhez csak csatlakozni tudok.
Annyival egészíteném ki, hogy ilyen általános, bármilyen időzítést legeneráló makrót szerintem sincs túl sok értelme írni. Használok én is időzítéseket, pl. a HD kompatibilis LCD-t kezelő include fileomban a következő kódrészlet található:
Ezzel létrehozok egy elméletileg órajeltől függetlenül 100us-ot időzítő LCD_DELAY_100 nevű szubrutint. Más rutinokból ezt ciklusból meghívogatva tudok akár ms-okat is időzíteni. (A lent idézett kódodban olyan utasításokat látok, amik arra utalnak, hogy ez talán nem is PIC kód - engem MCS51 asm-re emlékeztet pl. a clrb és a bitcímzés írásmódja. Mynop-ot sem tudom hova tenni. Ha ezek viszont PIC-es makrók, akkor jó lenne látni azok kifejtését is, hogy egyáltalán lehessen érdemben nyilatkozni a kódról.)
Koszi Norberto, most mar latni valamelyest a kodot, szoval:
1. Nem ertem az expand es noexpand minek van ossze-vissza hasznalva? Ez csk a lista file generalasanal jatszik szerepet, a leforditott kodban nem - jelen esetben szerintem csak megneheziti a kod atlathatosagat. 2. "page $>>8" - mi a fene ez? PCLATH -ba toltoget egy page nevu makro vagy mi? Javasolnam a PAGESEL hasznalatat, valamint az UPPER, HIGH es LOW operandusok hasznalatat. 3. cyclefor macro 1 _cycles = \1 Ez igy nagyon csunya es atlathatatlan, szerencsesebb lenne a szamok helyett neveket hasznalni makro parametereknek, pl cyclefor macro cycl _cycles = cycl 4. decsz 1 ;dec w Ez a 'decsz' makro amugy miert nem 'decwsz' akkor mar? Na mindegy, idozitett ciklusokban nem celszeru makrokat hasznalni mert nehezebb atlatni hany ciklust ker (te csak egyetlen kulcsszot irsz, de lehet az 2 vagy 3 utasitasra bovul ki a makro kifejtesekor) 5. clrb 2.1 ;modify PC to jump back Ezt vegkepp nem ertem. 'clrb' ??? Clear Bit??? Ebbol a float szambol az egeszresz a regiszter cime es a tort resz a bit? Magyaran a PCL bitjeit birizgalod? 6. REPT..ENDR? A WHILE...ENDW mar nem volt jo? 7. "_temp = $//4" Hmm, nehany nyelvben a '**' a hatvanyozas, akkor a '//' a gyokvonas? Amugy ahogy latom a kod forditastol fuggoo elhelyezesetol fuggoen ugykodsz valamit de ez igy nagyon nem helyen valo!
Azt hiszem ezt nem ő írta, csak találta és beszúrta, hogy lássuk mire is lenne szüksége.
Azért az továbbra sem világos, hogy mi értelme van a makrónak. Ugyanis ahány helyen használja, annyi kódkifejtett "kígyó" kerül be a lefordított programba.
Általában szerintem az a jó megközelítés, ha egy IF-es szerkezettel egy ismert időzítést előállító alaprutint írunk és ezt hívogatjuk paraméterezhető ciklusokkal. Így a kódba csak a paraméterbetöltés és a runtinhívás kerül bele az időzítés helyén, és az egész programban csak egy helyen lesz a CPU órajeltől függően ilyen-olyan kódkígyó. Persze minden ilyen jellegű időzítésnél szem előtt kell tartani, hogy a CPU ilyenkor mást nemigen csinál. Mérlegelni kell, hogy ráérünk-e úgy időt húzni, hogy esetleg lekésünk valamilyen eseményről. Ennek ellenére én nem mondanám, hogy minden időzítési feladatot interrupvezérelve kell megoldani, mert ha az időzítés alatt úgysincs semmi tennivaló, akkor ez a módszer egyszerűbb megvalósítást ad.
Na mindegy, akkor legalabb leirtam miert nem mukodik (tobbek kozott)
Pont ez a lényeg, és ezért is gondoltam azt, hogy nem tudja mi az a makro.
Sziasztok!
A következő lenne a kérdésem! Van egy picem ami a soros vonalon küldki 5 külömböző üzenetet 5 külömböző gomb hatására. A gombok és a pic kb 1m re vannak egymástól, viszont a lehető legkevesebb lábbal és vezeték érrel szeretném megoldani. A konkrét kérdésem az lenne,hogy erre a megoldásra használható e a pic A/D átalakítoja. A konkrét elképzelés a mellékelt képen. Az ellenállások temészetesen megfelelően megválasztottak. Ez az elképzelés életképes?Ja és ezt a picet csak példaként dobtam oda más lesz helyette!
Ha elég nagy(pl. 10...40mA) áramot folyatsz az osztó körben, akkor jó lehet az 5méteres kábellel is. Azért némi 100nF-os szűrés még elfér a bemenet közelében.
Nem lesz több 1m -nél igazából csak arra irányult a kérdés,hogy a pic A/D átalakítóját tudom e erre a célra használni
Jó lesz. Majd azt kell figyelni, hogy az AD konverzió eredménye egy adott sávon belül van-e, illetve kell némi szoftveres debounce is hozzá, mert ha épp változik a feszültség, akkor akár másik gomb lenyomását is érzékelheti.
|
Bejelentkezés
Hirdetés |