Fórum témák
» Több friss téma |
Megszakításból működik. Én is úgy loptam a netről, de most nem találom a forrást.
a cha és chb a rb4 és 5 a gomb pedig rb0. A bemeneteken 47k van vss fele.
Nálam működik, volt egy kis prell, de vdd fele tettem 100nF-os kondikat az megoldotta. Üdv.
Köszönjük!
Sziasztok!
Flowcode segítségével állítom elő a .hex fájlt, amit PICKit 2 Programmer-rel töltök az IC-be. Eddig szép és jó, de az EEPROM-ot hogyan tudom adatokkal feltölteni? A mellékletben egy táblázat (neten találtam), amit szeretnék tárolni többszöri felhasználáshoz. A programozóból csak kimásolni lehet adatokat, beillesztést nem enged. PIC16F690 (igen, újonc vagyok a témában ) Előre is!
Szia!
1. A táblázatod jobb oldalán levő Intel hex (: -tal kezdődő szövegek) sorokat másold be egy szöveges állományba - data.hex. Indítsd el a PICkit2 programját, töltsd be a programodat (a FC -ből fordítottat). Vedd ki a pipát az EEProm data elől, programozd be. Tedd vissza a pipát a EEProm data elé, töltsd be a táblázatból kimentett állományt - ne törődj a No config... hibával. Vedd ki a pipát a Program memory elől. Programozd be az adat memóriát. Ha ezekután programot szeretnél változtatni, akkor csak a program memóriát írd, vedd ki a pipát írás előtt a EEProm data elől. 2. Nyisd meg a FC által fordított hex állományt egy szövegszerkesztővel és az utolsó Intel hex (:00000001FF) sor elé másold be a táblázatból kimentett Intel hex sorokat. Mennyire hiányzik a PICKIt2 programjából, hogy egy már betöltött programra egy másik állomány rá lehessen tölteni? Nálam már működik...
Sziasztok. Pic-el szeretnék hangvezérelt "diskó fényeket" készíteni. Annyi lenne az egész lényege, hogy 1bemenet és 3kimenet legyen, bemenetre a keverőpult kapcsolódna, és ritmusra kellene váltani a kimenetek közt. En úgy gondoltam, hogy 1kimenet mindig aktív és ha megfelelő jelet kap a bemenet, akkor vált a 3kimenet között (random). Ehhez szerintettek szükséges pic, vagy megoldható mással is? PIC-ekhez jelenleg egyán talán nem értek sajna.
A hozzászólás módosítva: Jan 25, 2013
Köszönöm, tökéletesen működik a dolog. Észer sem vettem, hogy az EEPROM részt lehet külön programozni.
Ezt ahogy értem igazábó futtatod a fényt? Mindig csak egy megy, de az mindenképp? Nem muszáj a pic, ha ne értesz hozzá. Van a klasszikus fényorgona, a 3 színű, az nem azt csinálja mit leírtál, de szerintemk szebb is. Ha mindenképpen ez kell pic nélkül akkor egy 4017 órajelét lépteteted a hanggal. És mondjuk a "randomitását" úgy oldod meg, hogy a különböző kimenetkhez különböző igazságokat rendelsz. De ezt ötvözheted a klasszikus meghajtással (mély magas közép) úgy érdekesebb. Ezekről számtalan leírás van a neten. Írd ezt a google-ba: fényorgona
Köszönöm a válaszod, ennek 4017-nek még utánna nézek. Es ha PIC-el szeretném megoldani, hogy aztán idővel fejleszthető legyen ? Nem tudsz egy olyan kiindulási programot mutatni amiből kilehetne indulni ?
Ez magas nekem. Ezt
Idézet: tudnád egy picit pontosíttani? Esetleg átmehetnénk más topikba, hogy ne off-oljunk. „egy 4017 órajelét lépteteted a hanggal”
Küldtem üzenetet.
Ha valaki küldene az emil címemre egy jobban optimalizált fordítót, nagyon megköszönném. Egyszerűen, akkor is idegesít ha futja a tárhelyből, hogy ilyen oktalan módón kell ezt megoldania. A jobb oldalon az általam írt asm ugyanazt csinálja. Nem várom ezt el, hogy ennyire rövid legyen, de azért a bal oldal a hi-tech.c azért az elég durva.
A hozzászólás módosítva: Jan 25, 2013
Ez így nem túl sportszerű a C-vel szemben!
Lehet hogy ugyanazt csinálja, de nem úgyanúgy: A függvényhíváskor a C-ben két paramétert is átadsz, a vezérlési szerkezet és feltételvizsgálat is más. paraméterátadás helyett használj globális váltózókat (lcd_data, rw) így lcd_write() is kisebb lesz. Ekkor kb ez fog megfelelni az asm kódodnak (nézd meg mire fordítja): lcd_data = 49; if ( command_out && 0b10000000 ) lcd_data = 48; lcd_write(); Ha csak egyszer történik a programban az lcd_write() hívása akkor a fordító a fügvényhívás helyett belefordíthatja a hívás helyére magát a függvényt, hogy sporoljon a hívással és visszatéréssel. C-ben először a programozónak kell optimalizálni, majd csak utána jön a fordító és akkor nem olyan lehangoló a helyzet, mint ahogy azt korábban lefestették!
Ajjaj. Nemtudok globális változót deklarálni. :S Annyira jöttem rá hogy a volatile char látszik megszakításon kívül is...
Ha jól gondolom a static kulcsszó lesz az.. de ha alkalmazom nem jó a program , lehet más a rossz. De egyébként hogyan kell? A hozzászólás módosítva: Jan 25, 2013
A függvényeken kívül deklarálod ( a main előtt ) !
Steve
Most éppen megoldódott. A probléma az volt, hogy még a függvényben is benne volt u.a. a változó, gondolom azzal foglalkozott. De a volatile pontosan mit jelent??
Nem kellene először egy általános C nyelvről szóló könyvet forgatnod?
Globális változót úgy hozunk létre hogy függvényen kívül definiáljuk a változót. Ezt általában az elején szokták megtenni (nem kötelező de ajánlott, mert csak a definiálás után fog látszani). A volatile annyit jelent csak, hogy a fordító ne próbálja meg optimalizálni. Ezt akkor kell használni, ha ugyanazt a változót megszakításból és azon kívülről is fel akarod használni. Ha a függvényen belül hozol létre változót, az lokális lesz, azaz csak a függvényen belül lesz látható. Ha static a változó, akkor nem a veremben hozza létre. Ez akkor kell ha meg akarod őrizni a tartalmát a függvényből történő kilépés után is. Static nélkül a veremben lesz a változód és csak addig él amíg a függvényből vissza nem tér, a következő alkalommal az értéke definiálatlan lesz. A hozzászólás módosítva: Jan 25, 2013
Idézet: „....Ha static a változó, akkor nem a veremben hozza létre. ... Static nélkül a veremben lesz a változód és csak addig él amíg a függvényből vissza nem tér, a következő alkalommal az értéke definiálatlan lesz. ...” Így csak akkor igaz, ha a kontroller stack -et használ, a 16F családnál nem ez a bevett megoldás, a HW stack csak visszatérési értékeket tartalmazhat, a stack indexelése rendkívül körülményes. A lokális változók használatát úgy optimalizálják, hogy azon függvényekben használtakat azonos helyre teszik, amik nem hívják egymást. A hozzászólás módosítva: Jan 25, 2013
Igazad van, a hitech-C -ben minden lokális változó static-ként működik. Azzal az egy szem indirekt regiszterrel tényleg elég macerás lenne veremben megcsinálni.
Sziasztok,
Nem tudtam, hová tegyem, arra gondoltam, talán a kezdőknek (magamat is beleértve) lesz rá a legnagyobb szüksége. Összedobtam egy univerzális programozó adaptert, ami a 8, 14, 18, 20, 28 és 40 lábú PIC-ekhez való. ICSP felülete van, tehát elvileg bármelyik ICSP programozóval (PICkit2, PK3, ICD, LPT portos) használható. Elsősorban a régebbi base és mid range szériákat (12F, 16F, 18F) tartottam szem előtt, noha tudom, ezzel most kivívtam Hp41C kolléga haragját, mert a korszerűbb vezérlőkkel nem törődtem. Szándékosan hagytam benne ennyi átkötést: így jobban átlátható, szerintem. Üdv: t
Köszönöm, hogy válaszoltál. Időközben sikerült megoldanom.
Nincsenek. Ezelőtt ugyanezt 3 külön kis panelre építettem meg, azokra sem tettem és eddig nem volt gondom.
Azért nem lenne rossz, ha nem spórolnád le. Valamiért csak bekerültek a téma fejlécébe is...
Az eredeti postot már nem tudom módosítani, így itt a korrekció.
Ha így van közvetlenül a panelon akkor nekem se kellett. De breadboard-on ahol 10-15 cm hosszú a kábel ott már bajt okoz!
Sziasztok! Segítség kellene PICKIT2-vel akarok felprogramozni 16F628-at , de mikor végez csak ennyit ír ki.(Program Memory...EE...UserIDs...Config...Done) . Ez miért van? Rossz lenne a HEX fájl.
A "DONE" azt jelenti, hogy kész! Ha nem írt hibát, akkor valószínűleg rendben is van a programozás, de ez nem jelenti azt automatikusan, hogy a program rendben is fog futni!! Az asm helyett inkább az üzenetről kellett volna egy fényképet csatolnod és leírni, hogy milyen programmal csinálod, Te írtad-e a programot vagy "tuti", stb. !
Steve
A programot nem én írtam, nem megy a programozás .
|
Bejelentkezés
Hirdetés |