Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
A fordító valamit "kioptimalizál" valószínűleg hasonló okokból nem támogatott a ROM-ra mutató pointer sem. De nem is igazán elvárható egy C fordítótól az ANSI C-nek nem eleme, eléggé hardver függő dolog, főleg a PIC-ek esetében.
A ROM-ba talán inkább két dimenziós tömbbel lenne érdemes kísérletezni!
Megpróbáltam a 2dimenziós tömböt. Olyan kis huncut a ccs, hogy amikor akkora lesz a tömb amivel gondja lenne akkor a következőt dobja fordításkor:
Idézet: „*** Error 87 "D:\PIC\project\matrixc2\characters2.h" Line 7(24,25): Data item too big” Kipróbáltam, 25x10 byte lefordul, ha hozzáteszem a 26.- at(>256) akkor már nem. Ravasz. Most vagy csinálok több 2 dimenziós tömböt, vagy maradok a 200 soros kezdetleges kódnál. (Vagy kell egy újabb ccs verzió?)
Lehet, tényleg érdemes megnézni egy újabb verziót:
4.082 Some problems with ROM pointers have been fixed 4.082 If you use pointers to ROM see the readme.txt file for possible syntax changes 4.056 A problem with rom pointers is fixed 4.044 PCH was not allowing large constant arrays in 4.043, this is fixed
Hát ezt mondom! Jelenleg is használok 504 tagú tömböt. Az újabb verzió kezeli. A régi nem.
Vagy a frissítés nem jön szóba (céges licensz dolgok stb)?
Kösz!
A tomat5 kollégánál lett ez most akutt probléma, de jó tudni hátha nekem is szükségem lesz egyszer rá.
Itt lehet a kutya elásva. Az enyém 4.013-as. Sajnos frissítéshez nem igen tudok hozzájutni.......
Üdv.
Ha csak tanulás/hobbi célra kell: Bővebben: Link
mindjárt az első találat a 4.106
Köszi
Valamilyen számomra is érthetetlen módon nem az upgrade-re kerestem rá, hanem a komplett programra.
Sziasztok!
Egy egyszerű töltő áramkörön dolgozok, amit egy 12F675 típusú PIC-el szeretnék kivitelezni. A program egyszerű, az indításnál rákapcsol az aksira egy ellenállást és leméri a feszültségét. Ha kisebb, mint 1,41V, akkor folytatja a töltést és tölti újabb 30 másodpercig. Ha többet mér, mint 1,41V, akkor kikapcsolja a töltést és vár 120 másodpercig és újra ellenőrzi, hogy kész van-e. Ezeken kívül a töltés megkezdésénél ellenőrzi, hogy mekkora a feszültség a cella kapcain, ha nagy, akkor hibát jelez. A problémám az vele, hogy valamiért nem jól mér az A/D konverter vagy nem is mér, ugyanis nem reagál semmilyen feszültségértékre a bemenetén. A feszültség az A/D konverter bemenetére egy feszültségosztón keresztül érkezik, hogy ne kerülhessen rá nagy fesz. Tulajdonképpen ez lenne a konstrukció. A program: main.c:
main.h:
Mi lehet vele a gond?
Hiányzik a csatorna kiválasztása.
Ezután jöhet a mérés. Nálad a mintavétel ideje van írva:
Szervusz!
A battery_voltage miért float? 16 bites integer megfelelne erre a célra, a floattal végzet műveletek igen nagy méretű kódot eredményeznek.
Most próbáltam, sajnos valamiért így sem jó. Ezek szerint a hardverben kell keresnem a hibát.
Nem pontosan a problémáról írnék, de felesleges az AD eredményét floatban tárolni. Ha feszültségosztón keresztül méred az 1.4 Voltot, akkor elég lesz az int változó hossz is. De ha nincs feszültségosztó (mert felesleges), akkor is elég az int. Sokkal kényelmesebben tudod kezelni, meg kissebb is a kód. Nem kopik a PIC belseje
Azért van feszültségosztó, mert napelemes eszközben lesz és ha az akku nem érintkezik, akár 6,5V is kerülhet a bemenetére, aminek szerintem nem örülne.
Sziasztok!
Sajnos a hardver átnézésével sem sikerült semmit elérnem, így a programot és a hardvert is leegyszerűsítettem a végtelenségig. A hardver most csak az akkuból és a PIC-ből áll. Az akku a PIC RB0-ás lábára van kötve. A program most így néz ki:
Ebben nem vagyok biztos, hogy azt csinálja amit Te szeretnél:
A CELL_COMPLETED_V = 1 * 1,41 = 1; a C típuskonverziója miatt! Ugyanigy a CELL_ERROR_V is egy lesz. A CELL_COMPLETED_ADC pedig 102 lesz szerintem. A C-ben nem túl szerencsés így használni a makrókat. Esetleg a #define CELL_NUM 1,0 jobb lenne. A floathoz látom ragaszkodsz de majd ha nő a programod akkor leszoksz róla, ha nem fogsz elférni a ROM-ban... Ha mV-ban számolnál nem lenne rá szükséged és az életed is egyszerűbb lenne. Nézd majd meg, hogy ez a pár sor mekkora kódot eredményezett!
Ezek szerint érdemes lenne előre kiszámolt értékkel dolgozni?
Mindenesetre, kevesebb lesz a hibalehetőség.
Így sikerült működésre bírnom.
Hálásan köszönöm mindenkinek a segítséget!
sziasztok I2C kommunikációval kapcsolatban lenne kérdésem.
CCS varázslójával bekonfigoltam a PIC16F677-en az I2C hardveres portot.
Amikor írok az I2C-re akkor megáll a programom. Az írás a következőképpen néz ki:
Mivel még nem csináltam semmi I2C dolgot ezért elég tanácstalan vagyok, hogy itt most a PIC és a PT2323 IC közötti kapcsolat a probléma (talán az ACK miatt) vagy valamit elrontottam amitől így viselkedik. Van valakinek tapasztalata ezzel kapcsolatban?
Szia !
A PT2323 adatlapját mellékelhetnéd mert én csak egy 4 oldalas kis doksit találok, az pedig kevés mert az I2C kommunikációjáról semmi nincs írva !
Csatoltam a két IC adatlapját amivel kommunikálni akarok.
Egyébként ez egy Genius SW 5.1 5000-ben van aminek meghalt a vezérlője és azt akarom kiváltani. A gyári mikrokontrollert kiforrasztottam és annak a lábainak a helyére kötöttem be a PIC-et. Raktam bele debugot, ami RS232-n küldi a debug információkat és ott a PT2323 inicializálásánál leáll a program. Az inicializálás alatt azt értem hogy egyenként az összes csatornát elnémítom. A gyári vezérlő is 5V-ról megy, tehát feszültség illesztés szerintem nem kell. A PT2323 IC SCL és SDA lábán nincs fel/le húzó ellenállás. A mikrovezérlős panelon is az SCL/SDA lábak közvetlenül mennek a csatlakozóra.
Azért csak tegyél mind a kettőre felhúzó ellenállást, ha nincs az okozhatja.....
Tehát ha jól sejtem, akkor az I2C kommunikációban elengedhetetlen az oda vissza kommunikáció az ACK miatt, mert addig nem megy tovább...
Van egy buspirate nevű eszközöm. remélem a héten megérkeznek hozzá a mérőfejek és akkor meg tudom azzal is nézni a kommunikációt és megpróbálom fel/le húzó ellenállásokkal is.
Kellenek azok a felhúzó ellenállások!
A PT2323 adatlapja írja is! Idézet: „Bus Interface ...It should be noted that the pull-up resistors must be connected to the positive supply voltage.” Itt egy elég régi magyar leírás az I2C-ről. A 10.1 fejezet foglalkozik az ellenállásokkal.
köszönöm szépen. Ez életem első i2c projektje. remélem összejön
sziasztok
A kovetkezoben szeretnem a segitsegeteket kerni: Szeretnem merni egy pwm jel impulzus szelesseget egy pic 16f1827es rb0-s laban, ha int_ext-et hasznalok akkor nem mer semmit, ha int_rb-t (tobb labon is ugyanezt csinalta) hasznalok akkor akar egy levegoben logo madzag hatasara is megorul az egesz program, beleertve a soros konzolt(int_rda) es a ccp modulokat is. Ugyanez a kodreszlet, azonos tesztpanelon, bedrotozva, azonos forrasra kotve tokeletesen mukodik 16f882-vel, csak annak kisebb a program memoriaja. Van valakinek otlete, mi okozhatja ezt? A fordito amit hasznalok: 4.114. Es ime a kodreszlet:
open es close fuggvenyek tokeletesen futnak.
Én nem láttam még ilyen mikrovezérlőket, de az adatlapok összehasonlításából úgy tűnik, hogy nem "csak" a memória méretében van különbség, hanem a bemeneti változást detektáló áramkör kialakítása és kezelése is alapvetően eltér:
1. Míg a 16f882 esetén a B port olvasása törli az RBIF jelzőbitet, addig a 16f1827 esetén külön törölni kell az IOCBF regiszter megfelelő bitjét az interrupt kérelem megszüntetéséhez. Az interrupt kiszolgáló eljárásba ezt is írd bele! 2. Míg a 16f882 esetén minden bemeneti változás megszakítást okoz, addig a 16f1827 esetén külön engedélyezni kell a fel- és lefutó élre történő megszakítást. Ezt a fordító által generált kód talán megcsinálja... Ha nem, akkor neked kell beállítani.
Szia
koszi a gyors valaszt 1. kiprobalom, hatha segit. 2. external interruphoz valo elvileg az ext_int_edge() fgv. device h fileban ezek vannak definialva, de delutan atolvasom a microchipes dokumentaciot, lehet csak RTFM hiba. #define INT_RB0 0x30010B08 #define INT_RB0_L2H 0x10010B08 #define INT_RB0_H2L 0x20010B08
Hali. Most kezdtem el foglalkozni egy kicsit a CCS-el de volna egy kis gond méghozzá az hogy valamiért a program szimulációban működik de a próbapanelemen nem akar. A program a következő:
A segítségeteket előre is köszönöm. |
Bejelentkezés
Hirdetés |