Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Szoktam volt rád hallgatni, kerülgetem is, de azért néha előveszem, hogy aztán újra félretegyem...
![]()
Köszi a segítséget. Viszont nem tudom ccs ben ,hogy lehet beállítani a megfelelő bitet. Le tudnád esetleg írni ,hogy lehet beállítani a megfelelő bitet?
Előre is köszi!
A kulcsszó, ami neked kell: #fuses. Erre keress rá a súgójában. Vagy a 12F629.h fájlban is megtalálod a listát a lehetséges konfigbitekről.
Röstellem ,de nem igazán tudom értelmezni amit a súgó mondd,
Esetleg ez lenne a megoldás? #FUSES 1 = 0xC200
Valaki segítsen!
Hogy lehet ccs -ben beállítani a 2007h konfig bit alső 3 bitsét 100 -ra?
Ha biírom ,hogy :
#fuses INTRC_IO //Internal RC Osc, no CLKOUT Akkor egyáltalán el sem indul a PIC programja. Mit kell még megadni??
Miért nem használod a Project Wizardot a beállításokhoz?
Nekem nincs CCS C telepítve, de egy leírásban azt olvastam, hogy a View menüben előcsalogatható a kiválasztott mikrovezérlő típushoz használható érvényes FUSE kulcsszavak. Lehetséges pl. hogy az INTRC_IO helyett mást kell írni (pl. RC). Nézz körül!
Köszi szépen!
Sikerült megtalálnom a megfelelő beállítást. Bár ebbe a wizard -ban sem enged rengeteg dolgot beállítani ezen a PIC en. Érdekes.... Idézet: „Bár ebbe a wizard -ban sem enged rengeteg dolgot beállítani ezen a PIC en. Érdekes....” Pont azért, mert ezen a PIC-en nincs más beállítható... Most már fut is? Idézet: „Valaki el tudná magyarázni ,hogy működik a rand() fv.?” Gondolom a használatára gondoltál. Szintén a súgóban le van írva, egy szótár vagy egy fordító sokat segít (Más is így csinálja...). A lényeg, hogy a stdlib.h-t be kell includolni. A függvény 0 és a RAND_MAX közötti int16 értékkel tér vissza. A RAND_MAX a stdlib.h-ban van definiálva 32767-nek. A stdlib.h includolása előtt beállíthatod a RAND_MAX értéket magad is.
Itt folytatnám akkor. Annyit kérdeznék, hogy ha rosszul konfigoltam az oszcillátort, van mód rá, hogy átírjam a konfigurációt, vagy készítsek egy új projektet?
De ezt hogyan tudom megtenni? Próbáltam úgy, hogy a mappa ikonra kattintva a "Recent files" fül alatt megtalált main2.h-file-t megnyitottam, megjelent a programom mellett, itt átírtam az XT-t HS-re majd Build-all, jól csináltam? Bocs a sok hüle kérdésért, de ez most nagyon új nekem.
Megcsináltam, de valahogy a belső oszcit használja, mert bár fut a programom, de ha kihuzom a kvarcot, akkor is fut, fene enné meg, nem értem :S Majd csak rájövök.
Ezt írd át:
erre:
Illetve ez elé tegyél 2 db. per jelet így:
Ennek a miértjét sejtem, ez a beállítás ugye arra vonatkozik, hogy ha nem megy a külső oszci akkor a belsőt használja, ezt kellene kikapcsolnom?
A Fail-safe clock monitor akkor kapcsol be, ha valami miatt leállna a külső oszci.
A setup oscillatorban az OSC_INTRC meg a belső oszcillátorra vonatkozik. Azt mond meg: jó lett?
Ez az! Kiveszem a kvarcot, és megáll, visszadugom, megy tovább. Működik. Mit rontottam el eddig? A Fail-safe-t értem, de mi történt akkor amikor két perjelet tettem a setup_oscillation elé?
Idézet: „mi történt akkor amikor két perjelet tettem a setup_oscillation elé?” Kikommentezed -- azaz hatastalanna tetted azt a kodreszletet...
Vagyis teljesen kikapcsoltam a belső oszcit?
Igen. Vagy a belsőt, vagy a külsőt használod- ennél a felállásnál.
Értem, akkor köszönöm nektek a kiigazítást, folytatom az okosodást.
![]()
Sziasztok!
Valakinek van tapasztalata a CCS-ben az "addressmod" használatával? Ez egy olyan lehetőség, hogy egy külső területen létrehozhatunk és tárolhatunk változókat, de nem tudom működésre bírni. Nekem egy AT45db161D dataflash lenne a külső adatterület. Az író és olvasófüggvényei úgy vannak megírva, hogy lineáris a címzése. A problémám pedig az, hogy, ha létrehozok egy változót, akkor azt nem arra területre hozza létre, hanem ugyanúgy a belső RAM területre. Ezt úgy ellenőriztem, hogy létre akartam hozni egy 15000 elemű tömböt és nyavajog a fordító, hogy nincs elég RAM terület. Tehát, ha működne, akkor nem kellene szólnia, mert a dataflash-ben 2Mbyte elfér. A dataflash függvényei egyébként tökéletesen működnek mert 1000 bájtot beírva és visszaolvasva ugyanazokat az eredményeket kapom. De a CCS manualja szerint létrehozhatunk az addressmoddal a külső területen tömböket, struktúrákat, stb. Szóval más is találkozott már ilyen problémával? A processzor egyébként PIC24FJ128GA010. Köszönöm.
Sziasztok!
Építek egy DMX adó áramkört, ahol 24 csatornát lehet vezérelni külön-külön egyesével, vagy csoportosítva, vagy az összeset egyszerre. Ezenkívül az áramkör képes előre beállított csatornaértékeket is előhívni. Egy LCD kijelzőn jelennek meg az adatok, készen van a komplett menürendszer, működik minden. Gombnyomásra vagy a poti tekerésével változnak az értékek, a DMX adatkeret felépítésével is tisztában vagyok, de magának a kommunikációnak a megvalósításánál elakadtam. Az elképzelésem az lenne, hogy egy bufferbe sorban beírom az adatokat, és amikor az megtelt, a program kiküldi az adatkeretet. A kérdésem az lenne, hogy hogyan lehetne előállítani az EUSART-hoz 250k baud rate-et, és hogyan lehet leprogramozni az adatküldést. CCS fórumot nézegettem, de nem lettem okosabb. Egyébként 18F4620-as PIC-et használok 20 MHz-es kvarccal. Segítségeteket köszönöm!
A sebesség számolásához ajánlom az adatlap 207.oldalát, a leprogramozáshoz pedig a környezetét. Ha egy pufferba töltesz és onnan írsz ki, akkor a mutatóként használd valamelyik FSR regisztert ( assemblyben ). C-ben pedig ugyanígy, mutató segítségével, a megfelelő adóregiszterbe betöltve.
Steve
Halihó,
Jelenleg MPLAB IDE alatt használom a CCS C forditót. Szerintetek az MPLAB X alatt is lehetne használni?
Helló mindenki!
Egy elég egyszerű problémám van. Szeretnék egy ellenállást megmérni PIC -el. Csináltam egy fesz osztót rákötöttem az A0 lábra. Szeretném beolvasni a fesz értéket ,de nem történik semmi. (PIC16F877) Csináltam egy ilyet: setup_adc_ports(AN0); output_b(read_adc()); Mit kellene még tennem ,hogy megjelenjen az érték a RB porton? Előre is köszi!
Be kell állítani az ADC órajelét setup_adc (mode);
Én a belső RC órát ajánlanám, az minden kvarcal kompatibilis ![]() Utána ki kell választani a mérendő channel-t set_adc_channel(0); Utána elindítani a mérést read_adc(adc_start_only); Megvárni, amíg befejezi while(ADC_godone); (persze az ADC_godone bitet először valahol a program elején deklarálni kell, hogy megtalálja. Használd a #byte és a #bit preprocesszor direktívákat. Segítségül: #byte ADCON0 = 0x1F #bit ADC_godone = ADCON0.2) Ha ezen túljutott a program, akkor ki lehet olvasi az ADC mérés erdményét. PORTB=read_adc(adc_read_only); Persze a PORTB-t is a #byte direktívával kell ismerté tenni a fordító számára. És voila meg is van a dolog. A while(ADC_godone) vizsgálat helyett meg is várhatod, amíg befejezi a konverziót, (bár az előbbi elegánsabb) aminek az idejét a 16F877 leírásából lehet kiolvasni az Electrical Characteristics fejezet alatt a TABLE 15-13: A/D CONVERSION REQUIREMENTS táblázatból. Ez azt írja, hogy 12 ADC órajel alatt megcsinálja a konverziót (Tad= 4us*12) ami azt jelenti, hogy egy kis ráhagyással delay_us(60); utasítással is lehet operálni. Persze, ez mind benne van a helpben is, szinte szó szerint. Tessék beszerezni a CCS honlapjáról a Reference Manual-t. 2011 july 11 dátummal ott van a legfrissebb. Persze így könnyebb, mert nem kell bellelapozni a doksikba. ![]() |
Bejelentkezés
Hirdetés |