Fórum témák
» Több friss téma |
Szia!
Elosztod a regisztered tartalmát 100-al, az egészrész adja a 100-asok számát, a maradékot 10-el, ez adja a 10-esek számát, a maradék az egyesek számát ( ha ASCII kód kell, akkor a kapott számokhoz hozzá kell adni a '0' ASCII kódját, azaz 30H=48-at!)! Ha az eszközöd nem tud osztani, akkor ugyanezt kell/lehet játszani kivonásokkal! Remélem tudtam segíteni!? Steve
Szia!
Köszönöm a válaszodat, megpróbálom megvalósítani. Közben készítettem egy lehetséges verziót, de ez a mód is érdekel! Köszönöm még egyszer !!!
Sziasztok!
Van egy régi tárcsás telefonom, amit szeretnék átalakítani. Találtam egy holland weboldalt, ahol valaki megoldotta. Ott a kapcsolási rajz is, de a pic programja nem publikus. Gondoltam az nem lehet olyan nehéz a többi infó alapján. Nagyjából készen is vagyok a programmal. Próbapanelen már működőnek tűnik. Most jönne az a lépés, hogy összekössem a telefonnal is. Eddig egyelőre csak egy fülhallgatóval hallgattam a DTMF hangokat. A kapcsolási rajz szerint egy 20MHz-es órajel generátort kell használni. Ennek a beállítása érdekelne. Hogyan kell ezt összekonfigurálnom egy PIC12F629-cel picbasicben? Elég annyi, hogy
Gondolom kevés. Milyen paranccsal kell beállítani, hogy a 2-es, 3-as lábra órajel generátort kötök? Mit kell beállítanom az option registerben és a timer regiszterekben? Honnan fogom tudni, hogy tényleg használja a külső órajel generátort? Bocsánat, ha nagy hülyeségeket kérdezek, de ez az első projektem. Ezelőtt még nem nagyon foglalkoztam elektronikával. Az eredeti projekt weboldala ITT található.
Sziasztok!
Az EEPROM-nak, hogy tudok kezdőértéket megadni? Értem: amikor beleégetem a programot, akkor kap egy alap értéket. Viszont, ha újraindítom, a PIC-et, akkor már ne ezzel az alapértékkel induljon, hanem azzal, amit legutóbb beállítottam neki.
Tudsz irni programbol is az eepromba. Az adatlapban pontosan le van irva, hogyan.
Igy indulas utan mar veheted az erteket onnan.
Nem értem mire gondolsz. Az meg van, hogy hogy tudok írni az EEPROM-ba és olvasni. Változók értékeit tároltam el benne, amiket a PIC indulásakor átadom másik változóknak, amiket aztán a progi felhasznál futás közben. Az is meg van, hogy futás közben, hogy módosítsam az értékét. A gondom az, hogy minden egyes égetéskor "FF" érték kerül az EEPROM-ba, amit aztán átállíthatok a futó környezetben.
Olyan megoldás kell, ami az égetésnél alapértéket ad az EEPROM-nak, amit aztán én kedvem szerint állíthatok és elmenthetem az EEPROM-ba, majd ha kikapcsolom/újraindítom a PIC-et, az általam utoljára beállított értékekkel induljon. Találtam rá megoldást, az égető programba minden egyes égetéskor manuálisan beírom, hogy melyik memória címen milyen érték legyen, de reménykedem, hogy van egyszerűbb megoldása is.
Csak egy ötlet: ha a beégetendő hex fájlt módosítanád?
Vagy ha a PIC programban az első dolog lenne, hogy a megfelelő helyekre a megfelelő értékeket beírja. A hozzászólás módosítva: Jan 22, 2013
En nem ertem, mire gondolsz.
A file-ban NEKED KELL megadni az eeprom ertekeit. Ha nem adod meg, nem eget oda semmit. Valtozatlanul hagyja a regieket. Ha esetleg ugy van, hogy te nem is irsz programot, hanem egy kesz .hex file-t egetsz be, akkor meg abban is megtalalhatoak az ertekek valahol. Altalaban vagy az elejen vagy a vegen. A PIC tipusatol fugg, hogy hol van az eeprom kezdocime, en ugy emlexem, hogy kb 0xf000-nal. Ha kitorlod, az egesz sort ki kell torolnod a vegeeig.
Na pont ez az amit mondasz. Nem égetek bele semmilyen konstans értéket, mert minek?? alapon, amikor épp arra van szükségem, hogy a legutóbb állított értékkel dolgozzon. Nekem azt az értéket kell tárolnom EEPROM-ban, amit a felhasználó állít be. Tehát: felhasználó beállítja: a = 220, akkor ha újraindítom/kikapcsolom/akármit csinálok a PIC-cel, a = 220 marad (persze amíg nem állítja át másik értékre). És egy alap feltöltött értéket csak azért akarok adni, hogy ne kelljen nekem manuálisan a nyomógombbal 255-ről 50-re lepörgetnem az értéket minden égetés után. De megpróbálom pszeudokód szerűséggel leírni:
Ami jó lenne:
Szoval az egyik egetesnel egessen eepromot is, a masiknal mar ne?
Az egetoprogidnal ezt nem lehet megadni? Vajar, vajar, elolvastam meg egyszer az elso hozzaszolast. Szoval nalad az eeprom TORLODIK minden irasnal? Azt nagyon nehez megcsinalni, hogy az altalad a PIC-ben atallitott ertekek belekeruljenek a forrasfile-ba. Ennel sokkal egyszerubb, ha at sem irod, mivel nem a programteruleten van. Szoval a megoldas az, hogy valahogyan letiltod az egetoprogramodban az eeprom irasat, vagy pedig megkeresed a forrasfile-ban az eeprom tablat definialo es feltolto sort (ha van ilyen).
Ha kikapcsolom az EEPROM írást az égetőbe, akkor hibát dobott égetéskor...
Megfogtad a lényeget: nekem égetéskor semmilyen értékre nincs szükségem az EEPROM-ba, mivel futás közben kerül bele, a helyes érték. Csak azért lenne lényeges, hogy mégis csak legyen valami kezdőérték, mert alapból "FF"-et éget bele, azaz 255-öt, amit én minden íráskor egyesével lepörgethetek. De mondom, PICKit 2 v2.61-gyel égetek, ott manuálisan megadhatom alul, hogy mivel töltse fel azt a memória címet(ez az én megírt programomat semmilyen mértékben nem befolyásolja). Úgy néz ki marad, ez a megoldás, szerencsére csak 11 értéket kell beállítani , csak ugye lusta az ember fia, ezért próbáltam volna valami gyorsabb megoldást találni. Köszi szépen.
Valami ilyesmit keresek, csak ugye még nem csináltam, aztán nem tudom, hogy lehet, ahogy keresgéltem sem találtam egyelőre semmit. Ezt ki is próbálom.
Üdv!
Egy asm nyelvű program több includfájlból áll, és több helyen van CBLOCK definíció. Van arra egyszerű módszer, hogy programkóddal vagy utasítással meghatározható legyen az utolsó változó memóriacíme? A hozzászólás módosítva: Jan 22, 2013
Assemblyben meg igy nez ki:
ORG 0xf000 db 1,2,3,4,6,7,8,9,0,0 db 10,11,12....stb A db utan paros szamu byte-nak kell kovetkeznie, legalabbis a 18F-es sorozatnal. En a progi elejen szoktam, utana viszont kell egy masik ORG, ami a rendes programvektor es IRQ vektor cime. Ha a progi vegere rakod, nem kell. Milyen egetoprogi az, ami hibat dob, ha nem engeded irni az eepromot???? Szerintem valts valami masikra, de tustent.
Szia!
Az első programozáskor a forrásból fordított értékeket programozd be. A forrásbeli megadást a többiek már részletezték. Ha a programot szeretnéd frissíteni, de az EEProm adatait meg szeretnéd tartani, vedd ki a pipát az EEProm Data Enabled felirata elől.
Így az aksiban van a következő szabad hely címe ( jelen esetben 22, ha a tizes számrendszer az alapértelmezett! )! Steve A hozzászólás módosítva: Jan 22, 2013
Azt a progit használom, amit Hp41C linkelt.
Fordítónak meg XC8-at használok. Amit simpi írt, az meg XC8-ba csak az első 16 helyet címzi meg:
Szóval ez se, amit keresek, de már közelít.
Próbáltam ezt a megoldást, de hibát dobott égetéskor, többszöri próbálkozásra is. Itt az EEPROM résznél simán átírtam a megfelelő címeknél az értékeket, amik nekem kellenek. Nem olyan sok az a 11-13 átírás, még kivitelezhető elég gyorsan.
Üdvözletem!
Segítséget kérnék 16f873a ügyben, problémám a következő: Az AN0 éa AN1 portokról feszt szeretnék mérni, de pontatlan a mért érték, pascalban csinálom annak az ADC_read függvényével. Nem túlságosan jó ez szerintem, pontatlan és néha akkor is mér ha 0 volt van a porton. Mintha azt olvastam volna, hogy ki kell kapcsolni a megszakítások, a komparátort és egyebeket... Szeretném ezt megcsinálni az ADCON0 és ADCON1 és a többi ehhez szükséges regiszterekkel. Tudnátok segíteni, hogy a regisztereket hogy állítsam be, hogy tökéletesen mérjen? Előre is kösz!
Szia!
Az aktuális csatorna kiválasztása és az A/D indítása között várj ki 2*Tad időt. Ld. Adatlap A/D fejezete. Az analóg bemeneteket tápláló áramkör kimeneti impadanciája lehetőleg ne haladja meg az 5k -t. Használj szűrőkondenzátorokat a bemeneteken. A mérőkör és egyéb digitális áramkörök föld vezetéke legyen elválasztva - a gyorsan változó, jelentős áramok, amit a digitális egységek jelváltáskor keltenek ne folyjon át az analóg földvezetékeken. A tápegyszég csillagpontja a kontroller Vss kivezetése (közelében) legyen. Ha ezek betartásával is nagy lenne a zaj, akkor több mérés eredményétt átlagold. A hozzászólás módosítva: Jan 23, 2013
Rendben ezeket át fogom nézni. Mondjuk a panellal már sokat nem tudok csinálni csak, hogy telepakolom a tápot és a portot is kondikkal.
Tehát azt mondod, hogy nyugodtan használhatom a kész adc_read függvényt? Egyébként csak ezt csinálom és semmi mást: delay_us(10); vf:=adc_read(0); vr:=adc_read(1); Ez nem elég így, a függvény használata mellett is állítgatni kell a regisztereket is? Különben megcsináltam "rendesen" is regiszterekkel az ADRESH és L-ből kiolvasva az adatot, a szimulátorban működni látszik, kipróbálni csak este tudom. De korántsem biztos, hogy jól csináltam Ha esetleg le tudnád írni, hogy melyik regisztert hova állítsam, hogy biztos jól működjön azt megköszönném.
Szia!
Az a baj, hogy tudni kellene, mit csinál a Pascal adc_read(channel) eljárása. A csatorna kiválasztása és az A/D indítása a ADCON0 regiszter bitjeivel történik: (Már felejtem a Pascal -t...)
Köszi próbálok ezzel valamit. Egyébként adc_go eljárás nincs, hacsaknem az ADCON0 GO bitjére gondolsz.
Viszont szimulátorban ez működik, legalábbis látom, hogy a portokat a fesz függvényében beállítja:
Ezt a pic pdf-je alapján okoskodtam ki részben Az ADIE és ADIF-eket a neten találtam, nem tudom azok milyen bitek. Ha esetleg leírnád az ADCON0 értékadást így: ADCON0:=00000001; akkor azt jobban tudnám értelmezni
Sziasztok!
Hogyan kell c-ben carry kersztül forgatni?
A hozzászólás módosítva: Jan 23, 2013
Jó estét!
Azóta sem sikerült a carry-n kersztül forgatnom. Bonyolultabb megoldással sikerül elérnem. Igazából nem is a carry-vel dolgozom. Ez még mindig érdekelne. Ugyanakkor az is érdekelne, hogy anyagi okokból van ilyen szinten teli zsúfolva felesleges sorokkal az assembly forrása a hi-tech.c-nek? Egy kis program is tetemes helyet foglal, arról nem is beszélve hogy jelentősen lassabb.
avagy C18 -on
A hozzászólás módosítva: Jan 23, 2013
Hát igen....
Egy full optimalizált XC8 program háromszor akkora, mint az assemby, egy standard pedig hatszor, a free móddal fordított pedig tizenkétszer. Ráadásul a fordításkor még működésképtelen kódot is előállíthat még a full mód is. pl. Legyen x egy olyan változó, amit a főprogram ír meg, és a megszakítás kiszolgálója kezeli (többértékű szemafor). A feladat az lett volna, hogy a z alsó 4 bitjét írjuk be az x be. A felső 4 biten lehetnek nem 0 bitek. Több helyen fordította a kövekkező kódot az XC:
Mi történik, ha a megszakítás a movwf x utasítás után csap be? Lemondtam az XC8 használatáról. Amennyit kínlódni kellett, hogy az nyúlfarknyi C program beleférjen a kontrollerbe, azalatt az assembly megírható ilyen hibáktól mentesen, sokkal kevesebb ram felhasználásával. A full optimalizálás pofátlanul drága. A hozzászólás módosítva: Jan 23, 2013
De na csak a Hitech ill. XC8 -ról legyen szó:
Kiragadott példák a C30 által forított kódból:
Ha a W0 -ban a második utasítás csak a 0. bitet hagyja meg, minek az első két utasítás?
Miért kell négyszer elvégezni az and műveletet?
Hozzászólásaid elismerve nagyon elgondolkodtató a pic további programozási nyelve. Valószínűleg a c. csak a szélesebb látókör miatt lesz gyakorlott számomra. És talán egyszer olyan programot írok amit assemby-ben már tényleg lehetetlenség átlátni. A c. nyelv tetszetősége az elegancia és a tömörség. De ha ez azzal járhat, hogy működésképtelen akkor az tényleg kiábrándító egy bonyolultabb programnál, míg kikeresed a fordító által szerkesztett asm-ben a hibát.
Gondolom az XC8-as fordító ráadásul méregdrága? Melyik az az inegyenes fordító amit tapasztalatból tudtok ajánlani? Kritériumként persze nyilván a: leghatékonyabb és leghibamentesebb?
Mindenesetre elgondolkodtató a kérdés:
XC8 (alias Hitech C): A legnagyobb Advanced Midrange kontroller 16k program memóriával rendelkezik. Ha az ingyenes fordítót használjuk, akkor kb. 16k / 12 = 1.33k assembly programot tudunk beletenni a kontrollerbe. Ez kevesebb, mint ami belefér a 16F628 -ba (2k). Az Advanced Midrange -re mondják, hogy C frendly... Már értem, a Midrange max. 8k memóriájába csak 0.66k program férne - ez a 16C83 szintje. Tragédia. Kicsit jobb a helyzet a hajdani C18 és a hajdani C30 fordítókkal, ott az arány jobb... A hozzászólás módosítva: Jan 23, 2013
|
Bejelentkezés
Hirdetés |