Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Nem tudja kiszámolni a dátumból... Pedig nem lehetetlen kiszámolni: A dátumot át kell számítani JDN (Julian Day Nuimber) -re, annak 7 -tel való osztásának maradéke adja a hét napját (1 - hétfő). Ha beállítasz egy dátumot, állítsd be a hét napját is. Ezután a beírt számot naponként növeli (modulo 7).
Sziasztok!
A következő kódnak elvileg azt kellene csinálnia, hogy pontosan 10 másodperc után bekapcsol egy LED-et. A TIMER1-külső karórából bontott kvarcról megy, ezenfelül van még egy 20MHz-es kvarc a rendszernek. Az a problémám, hogy a 10 másodperc nem 10 másodperc, hanem jóval kevesebb kb 2. Mit rontottam el?
Köszönöm a segítséget!
A Timer 1 1:1 előosztóval, külső 32.768kHz -es quartz -ról 2 másodperc alatt 0 -ról elér 65535 ig és átfordul...
De be van állítva elvileg a preload érték is 57344-re így elvileg az interruptnak 1s-osnak kéne lennie, de mégsem annyi. Mit értelmezek félre? Ezt használom kalkulátornak.
Külső órakvarcnál nem kell 4-el osztani a frekvenciát. Az csak akkor szükséges, ha a főoszcival hajtod meg a TMR1-et.
Tehát a preload legyen 32768. Van még egy hiba. Elsőnek lefut a teljes TMR1 ciklus, mert csak ezután adod meg (a megszakításban) a preload értékét. Ettől 11s-es cilusod lesz 10 helyett.
Beállítottam a preloadot 32768-ra így 8 másodperc után kapcsol a LED.
Hány kHz-es a kvarc? Ha nincs ráírva semmi, akkor addig kell állítgatni a preload-ot, amíg pontos lesz, mert attól, hogy órában volt, nem biztos, hogy a szokványos 32,768 kHz-es.
Van még probléma. Ha pontos időzítést akarsz, akkor a TMR1-et közvetlenül az rb0_isr()-ben indítsd, mert eddig bármi lehetett az értéke 0-1s között.
Ettől jóval pontosabb lesz az időzítés. Pont gombnyomásra indul és 10 TMR1 ciklus után megáll. Mérd meg a futási időt és állítsd a kvarchoz a preload-ot.
Úgy ahogy mondod nincs ráírva semmi. Nekem is megfordult a fejembe hogy lehet nem is annyi az értéke. Köszi a javítást megnézem hogy mit produkál és hozzáfogok állítgatni a preloadot.
Szia!
Megcsináltam amit írtál még tegnap de már nem volt erőm írni ide a fórumba. El kezdtem bejátszani a preload értékét, de észrevettem hogy többszöri indításra nem ugyan abban az időben kapcsol a LED. Most kicsit félretettem az egészet és megvárom míg lesz rendes órakvarc. De ez a jelenség akkor is furcsa, szerintem valami érték benne marad az i változóba azért csinálja ezt.
Mivel az i-t nem nullázod az rb0_isr()-ben, ha futás közben megnyomod a gombot, újraindul ugyan a TMR1, de bent marad az i-ben a korábbi érték.
Az sem ártana, ha ugyanott letiltanád az INT_EXT-et és csak a 10 másodperces ciklus után engednéd újra. Ezzel kizárhatod a gomb okozta problémákat. Ehhez nem kell új órakvarc.
Oké még megpróbálom majd a délután köszi a segítséget.
Sziasztok!
Saját tudatlanságomon elgondolkodva arra jutottam, hogy tanulni kellene. Talán lehetünk még egy páran, akik nem az iskolapadban tanultuk az ANSI C-t, sőt semmilyen programozási nyelvet nem tanultunk, de mindezek ellenére az a mániánk, hogy mikrokontrollereket kell programozni. Nekem az alapokat a Topi: "Nullától a robotokig" cikksorozat jelentette - köszönet érte - és ha ez a cikksorozat nincs akkor valószínű, hogy nem is találkozok a CCS-C-vel. A kérdés az, hogy van-e valaki, aki elvállalná egy hosszabb-rövidebb továbbképzés megtartását, és vagyunk-e annyian, akiknek ezt érdemes lenne megtartani? Idézet: BRIAN W. KERNIGHAN – DENNIS M. RITCHIE: A C programozási nyelv (Az ANSI szerint szabványosított változat) „Talán lehetünk még egy páran, akik nem az iskolapadban tanultuk az ANSI C-t...”
Köszönöm a linkelt anyagot, hasznos lesz a későbbiekben. Viszont nem kifejezetten ANSI C továbbképzésre gondoltam, hanem a CCS-C hardware specifikus parancsaira. Azokra az utasításokra, amik a mikrokontroller működését állítják be. Egy 16F-es sorozathoz tartozó header file-t sikerült részben visszafejteni abban az értelemben, hogy van kapcsolat egy definiált parancs paramétere és a PIC egy adott regisztere között. Ugyan ez a módszer egy PIC24-esnél már nem segített az UART port beállításában. A kérdésem talán az, hogy hol van elrejtve a CCS-C HW parancsaihoz tartozó, az adott beállítást elvégző értékadás.
(A regisztrációmban javítottam az email címemet egy működőre. - és elnézést kérek, ha valaki nem tudott elérni.) Idézet: A CCS C perifériakezelő könyvtárai nem nyílforrásúak, ennélfogva csak annyit lehet róluk tudni, ami a dokumentációban le van írva. Magyarul: ez zsákutca. „Viszont nem kifejezetten ANSI C továbbképzésre gondoltam, hanem a CCS-C hardware specifikus parancsaira.”
Köszönöm! Akkor egy titokkal kevesebb, és lehet koncentrálni az éppen aktuális feladat megoldására.
Azért a CCS-ben is el lehet érni az összes regisztert és az adatlap szerint fel lehet konfigurálni....
lehet hogy kevésbé olvasmányos, de némi kommentel megtámogatva tudni fogod mi az és lehet hogy hatékonyabb is mint a CCS belső univerzális cucca. Idézet: Lehetni lehet, de akkor mi értelme marad a CCS C használatának? Akkor már inkább a C30, amihez nyíltforrású perifériakönyvtárak és mintaprogramok is rendelkezésre állnak. Sőt, tankönyv is... Bővebben: Link „Azért a CCS-ben is el lehet érni az összes regisztert és az adatlap szerint fel lehet konfigurálni....”
Nokia 5510 lcd-t használok, de felmerült egy érdekes igény. El kellene forgatni 90 fokkal az egészet és úgy használni.
Van erre valami egyszerű ötlet? Egyelőre csak karakteres kiiratások vannak, grafika még nincs.
Ha a beépített funkciókkal nem sikerült beállítani, akkor azt megteheti regiszterenként is, és a többi részen nem veszíti el a CCS kényelmes funkcióit.... bár ízlés kérdése, de ha egy funkció nem megy akkor még nem feltétlen kell az egész környezetet lecserélni ha megoldható egy kis plusz munkával.
Sziasztok! Nekem egy olyan kérdésem lenne, hogy hogyan tudom rávenni a fordítót, hogy az LCD-n megjelenítse nekem a % jelet? HD47780-as vezérlőjű 2*16-os LCD-ről van szó, és a gyári LCD.c drivert használom.
Próbáld meg idézőjelek közé tenni.
Sziasztok! Szeretnék építeni magamnak egy többcsatornás rc távirányító rendszert, maga a jelfeldolgozás (a potik állása alapján szervók vezérlése) már működik, ott akadtam el, hogy a 6 változó értékét hogyan juttassam át az adó oldali pic-ből a vevő oldali pic-be. Az adatátvitel egy játékautó rádió adó-vevő párosán alapulna, csak az adó végfokot, ill. a vevő dekóder részét felhasználva, a gyári TX-2/RX-2 párost kidobtam a nyákból. Szóval nekem valami olyan kóder/dekóder mintaprogram kellene, ami a 6 változómat átalakítja egy impulzussorozattá, aztán ebből az impulzussorozatból a másik oldalon megkapom a 6 változót. Nagyon hülyeség amit akarok, vagy megoldható? Az egész egy távirányítású homlokrakodó modellhez kellene, egy 6 csatornás gyári rádiórendszer ára eléggé húzós, és nekem felesleges is akkora hatótáv, a párszor 10 méter, amit tud a játékautó rádiója is bőven elég.
Sziasztok ! A CCS PCD compiler v5.011-est használom, szeretnék 32 bites változót használni. Az alábbiak szerint, és ha jól értelmezem, akkor a 32 és 48 bitre is "long" van definiálva. Na most akkor a "long" változóm hány bites lesz?
A PIC header file-jában a következő van: #device PIC24HJ128GP502 .. #if !defined(__PCD__) #define _bif #define int8 char #define int16 int #define int32 long #define int48 long #define int64 long long #define float32 float #define float48 float #define float64 double #define int1 char #endif
Használd azt, hogy int32 és int48. Ez biztosan azt fogja jelenteni, amit.
Köszönöm! Nem tudtam, hogy ez így érvényes forma.
Sziasztok ! Szeretnék segítséget kérni abban, hogy rendezzem valahogy a CCS forrás-file-omat. Szeretném az egyes funkciókat tartalmazó függvényeket, programrészeket különálló "___.c" file-ban elhelyezni, és linkelni a fő programhoz. Eddigi próbálkozásaim nem vezettek eredményre.
Egy "alma.h-ban deklaráltam a függvényt, ezt "#include"-oltam a főprogramba. Az "alma.c"-ben megadtam a függvényt, (ebben is include-olni kellett az "eszköz.h"-t) A "főprogram.c"-ben meghívom a függvényt, a fordítás sikerül, de nem sikerül, mert kiakad a CCS. Más ehhez hasonló verziókban sem tudtam ezt megoldani. Lehet erről olvasni valahol, hogyan lehet ezt megcsinálni?
Ugye nem használsz ékezetes betűket?
Idézet: „"eszköz.h"..."főprogram.c"”
Nem-nem!
Még annyival egészíteném ki az előzőekben leírtakat, hogy korábban a Kónya-Kopják könyvben leírtak szerint próbáltam, de nem sikerült megoldani. A napokban egy C++-ban járatos ismerősöm dobott föl fejből egy vázlatot, de az sem sikerült. Az előzőekben leírtak szerinti kísérletben fordítás után a CCS windows hibaüzenetet adott (memória olvasási hiba), és lefagyott az Mplab is. |
Bejelentkezés
Hirdetés |