Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Haat.. A PWM kimenetre. (adatlap) Termeszetesen a TRISB megfelelo bitjet kimenetnek kell allitani.
vilmosd-nek válaszoltam, aki állítgatta a kitöltést.
szuperman pedig örülni fog, hogy valamit csinál a programja. Ő nemhogy a fényerőt nem bírja a kívánt értékre beállítani, hanem a program sem működik. Tehát nem olyan egyszerű az élete, hogy beállítja a fényerőt, oszt jóvan.
Na azt megtaláltam ,hogy a 9 es láb a kimenete. Illetve azt is ,hogy a 3. bitet kell 1 re állítani, de ,hogy?
Sikerült beállítanom. Még mindig semmit nem csinál.
![]()
Szoval tobb problema van . Eloszor is a Byte Trisb sornal meg kell adni a TRISB regiszter cimet. Masodsorban amikor egy portlabat kimenetnek szeretnel allitani, akkor a TRISB vonatkozo bitjet "0" (!!!) szintre kell allitani. Ajanlanam az egesz PIC-ezest az adatlapok tanulmanyozasaval kezdeni. Ja es melle ASM programnyelv induloban.
A led most sem világít. Viszont a pwm fölött lévő lábon (8) fesz van. Ha oda kötöm a ledet akármit állítok akárhova szimplán világít.
Szoval Mea Culpa. A tris_b=0b11110111; a helyes megoldas, mert a RB3/CCP1 a PWM kimenete. De ez kiderul az adatlapbol, csak en nem emlekeztem a 16F628-nal melyik a PWM lab.
Végülis mind 1 mert nem működik. Én már nem érteme zt az egészet. Csináltam egy ilyet:
Ezzel szépen működik a fényerő váltás. Csak villog a led. Mi a gond? Túl gyors a led vagy mi?
Csak ugy halkan megkerdeznem, hogy egyaltalan berugtad a PWM csatornat? Mert ugye a program elejen be kell allitani a labak iranyat, inicializalni kell a hasznalando periferiat, be kell ugye loni a PWM kivant frekijet, i tak dalse... Amennyiben ezek hianyoznak, nem fog mukodni a PWM. Biztosan mukodik kulonben mert en mar sok PWM-es kutyut csinaltam, es volt koztuk 16F628 is. Esetleg a komplett programot ha mellekelned, akkor tobbet lehetne mondani.
Ezt próbáld ki:
Ennek működnie kell.
Történnie kellene valaminek, mert nálam semmit nem csinál ez a program. Csak le húzza a földre a ledemet és jó éjszakát ott is marad.
Szervusz!
A leddel van ellenállás sorbakötve kötve?
Ha ennyi a kód, akkor teljesen jól működik...
Amit nem látok, hogy a dutty hol kap értéket?.
Mivel itt nem fontos a kezdőérték, a program előveszi a megadott RAM memóriacímről a bekapcsoláskor beállt értéket és inkrementálja, majd visszaírja. Mindegy mi volt előzőleg ott, most egyel nagyobb lett ez a szám.
És így tovább.
Sziasztok! Tudna nekem küldeni valaki CCS progit, vagy linkelni egy letölthetőt? Láttam hogy a topikban régebben be lett linkelgetve elég sokszor, de sajnos nem működnek a linkek
![]()
Fórumszabályzat tiltja a warezolást!
Nem kell lopni, vannak ingyenes C fordítók is (HiTec C, MPLAB XC)!
Nem feltétlenül kalóz progit kértem, csak egy linket ahol akár demo is letölthető....azért köszi!
Software Downloads-ra kattintva lathatod miket lehet letolteni toluk!
Bővebben: Link Amugy mielott ilyeneket kerdezel erdemes ezt a modszert kiprobalni, sokkal gyorsabban talalod meg a valaszt, mintha rank varnal: Google a baratod!
A demo letöltése itt: http://www.ccsinfo.com/downloads.php
Köszönöm! Egyébként használtam a google-t, de biztosra akartam menni, ezért kérdeztem. Köszi mindkettőtöknek a linkeket!
![]()
Sziasztok.
18F4550-re írok programot, de nem nagyon tudom hogy hogyan kéne a kódba beleírni hogy a data eeprom milyen címeken helyezkedik el. Na de mutatom is. Van egy ilyen deklaráció hogy, #rom 0xf00000={1,2,3,4,5} Ez persze nem 4550-hez van. Valaki nem tudja hogy kéne átírnom ezt a részletet? A datasheet-ből kell kilesni hogy az eeprom memóriák hogyan helyezkednek el, de én nem nagyon tudom. Van a CCS-nek egy "device editor tool"-ja. Ott azt írja, hogy itt kezdődik az eeprom: 00F00000. De a számokat a kapcsos zárójelben módosítsam? A válaszokat előre is köszönöm!
Nem jól értelmezed a rom és az eeprom fogalmát. Az eeprom mindíg az 0x00 címtől kezdődik és a hossza mondjuk tart 0xFF ig, ha 256byte az eeprom kapacitása. Ha írni akarsz az eepromba akkor ezt az utasítást használd:
write_eeprom(cím,adat); Ha olvasni akarsz belőle, akkor ezt: változó=read_eeprom(cím); ahol a "cím" egy valós eeprom cella címe. Vagy használhatsz előre deklarált címeket is pl. #define Mentes 0x10 write_eeprom(Mentes,adat); változó=read_eeprom(Mentes); Remélem érthető voltam.
Azt mondják az okosok, hogy így kell:
Bővebben: Link
Szerintem félreértetted a kérdést. Szerintem a fordítóval előállított a HEX fájlban szeretné ez EEPROM-ot megcímezni és adatokkal feltölteni.
Most hogy mondod, lehet, hogy valóban ezt szeretné elérni.
Majd megerősíti a kedves kérdező, vagy pontosít.
A #rom 0x020000 = {1, 2, 3, 4, 5} lényege, hogy az eeprom-ba írja az 0x01 0x02 0x03 0x04 0x05 adatokat, mégpedig a 0x020000 címtől kezdve.
Persze ennek feltétele, hogy a 0x020000 valóban az EEPROM területre mutasson amit neked kell biztosítani. Mivel a CCS volt oly kedves és rendelkezésedre bocsájtott pár függvényt, a dolog igazán leegyszerűsödik. Ha nem tudod biztosan az EEPROM kezdő címét, vagy netán újrahasznosítható kódot akarsz készíteni ez is megoldható a CCS jóvoltából valahogy így.
azaz az _EEPROM_ makróval definiálod az EEPROM kezdőcímét, így bármilyen MCU-ra fordítható lesz a program, persze csak ha van EEPROM-ja. A fenti példa az EEPROM 0. byte-tól beírja a 0...5 értéket, a 32. byte-tól kezdve pedig beírja a "TVMACI" karaktertömböt a lezáró 0-vak együtt. Ha jól emlékszem a 4550 EEPROM címe 0x020000, ez ugyan az mint a
A dolog kiválóan működik mindaddig amíg van EEPROM és nem akarod túlcímezni. Ez tulajdonképpen csak a program hordozhatóságát segíti, egyenlőre ne szokj rá ha nem indokolt, inkább szorgalmasan tanulmányozgasd az adatlapot, az előrébb visz! Remélem így már érted!
A CCS fordító "help"-jében néztem hogyan is kell használni a data EEPROM-ot és ekkor láttam hogy van egy #ROM deklaráció. Most reggel kipróbáltam ennek a deklarációnak az elhagyásával, azaz csak írtam egy tetszőleges memóriacímre meg olvastam(write_eeprom(),read_eeprom() ) és működik.
Azt hittem a #rom deklaráció kötelező, de akkor úgy tűnik, hogy nem. Köszönöm a válaszokat mostmár legalább tudom mire jók ezek a deklarációk. |
Bejelentkezés
Hirdetés |