Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Ne haragudj, hogy megint zavarok, de van benne egy sor nevezetesen ez: #include
Kérhetnék egy szívességet?
Szükségem lenne egy olyan header file -ra ,ami LCD -t kezel és ismeri a magyar ékezetes betűket is. Előre is köszi!
Szia!
Nagy feladat: Az LCD modulban 8 definiálható karakternek van hely, az ékezetes karakterek 2 * 9 -en vannak (áéí óöő úüű ÁÉÍ ÓÖŐ ŰÜŰ). Egy megfelelően választott kódolással (HD44780-A02) rendelkező modul sokat tartalmazhat, csak a ő, Ő, ű, Ű szokott hiányozni. Rengeteg féle modul kapható, a 0x80 kód feletti karakterek kódolása nem egységes.
Automata akksitöltőt szeretnék csinálni, már kész is a hardver, csak a program nem akar úgy működni, ahogy kellene.
A 16F690-esem az A2-es bemenetére kapja egy 5K és 10K feszültség osztóból az akkumulátorról a jelet. A probléma az lenne, hogy a töltő feszültség szűretlen (mivel a pulzáló DC-t szereti az akksi), ezért mondjuk egy 20ms-os periódusban átlagolni kellene a feszültséget, és azt kijelezni. Simán, le tudom mérni a feszültséget, csak ugye ugrál amiatt, hogy az akkumulátor feszültségét a töltő emeli a félszinusz csúcsa közelében. for(i=0;i<255;i++){ set_adc_channel(2); delay_us(74); feszultseg+=read_adc(); } feszultseg=feszultseg/255.0; Én így gondoltam, de ez így nagyon nem működik. Elvileg (74+4)*255=19890us-ig kellene mérjen, azaz kb 1 periódust 255 ponton kellene mérjen, de így most ilyen 0,4-1,7V-okat mér. csináltam olyat, hogy ms-enként mértem egyet, és ezt 20x, de ugyan úgy ugrált utána, mondjuk akkor kijött a 13-13,5V feszültség töltés közben. Valaki egy pár sorral kisegítene?>
Szia
Az ADC hany bites? Belefer 255 szor a valtozoba?
Azonkivul amit tomat5 mondott, a ciklusodban 256-ig szamlalj, es 256-tal ossz, es ne float-tal, hanem int-tel, mert azzal konyebben banik a PIC... (Nyilvan a 'feszultseg' nevu valtozod is int tipus legyen, valoszinuleg unsigned long kellene oda)
Én is számolgattam, hogy beleférjen akkor is, ha az adc-n folyamatosan max jönne be. Unsigned long int a feszultseg változóm. Long int-nél rövidebbel nem is hajlandó az adc értéket áttenni a változóba. (unsigned int se jó neki)
Szóval elvileg abba 4giga fér, az olyan 4millió mérés összege lenne. A 256-ot be fogja venni? Csak mert mintha valahogy úgy emlékeznék, hogy az 0-255-ig mehet. Az i változóm is int vagy unsigned int típusú.
Biztos vagy benne, hogy az unsigned long 32 bites? Azért ellenőrizd le, mert a CCS-ben az szerintem csak 16 bites...
Használj int32 típust, az tényleg 32 bites.
Megpróbálom kideríteni.
10 bites az ADC 0-1023.
Csak halkan kérdezem meg, hogy egy egyszerű kondenzátor az analog bemeneten miért nem jó integrátor? Egy akksitöltő szerintem nem az a bonyolultság, ahol miliszekundumonként tudni kell a kapocsfeszt.Vagy ragaszkodsz a bitek tologatásához?
Sziasztok,
Honnét lehet megszerezni a legújabb változatot? Kössz. Üdv: Buddha
Ezen gondolkoztam én is, csak át kéne nézzek pár anyagot, hogy magamtól kitalálhassam, hogy hogy kössem össze.
Átírtam "long long int"-re a változómat, és mostmár nagyon jó, működik, ahogy kell, és semmi ingadozás, a töltőből kijövő jelet is szépen leméri. Teszi is a műszer épp a dolgát. Köszönöm a hasznos tanácsokat!
Idézet: „Csak mert mintha valahogy úgy emlékeznék, hogy az 0-255-ig mehet.” Valoszinuleg a byte (unsigned char) tipusra gondoltal. 256 a C-ben int-re kell promotalodjon (ilyen szep Magyar szoval elve), de ami a lenyeg, hogy 256-tal torteno osztas egyszeruen azt jelenti, hogy a legalso byte-ot ki lehet hagyni a szamitasbol (magyaran a szamodat 8 bittel shifteli jobbra). Ha jo a fordito optimalizacioja, akkor ezt rendkivul gyorsan el tudja vegezni, mig a 255-tel torteno osztasnal mar valoszilueg sokat fog toprengeni, foleg ha "255.0" -t adsz meg neki, mert ha nincs szerencsed azt meghagyja neked float tipuskent es a math library-t fogja berantani es hasznalni egy egyszeru integer muvelet helyett (bar lehet eszre sem veszed ezeket, mert eleg gyorsak ezek a cuccok, mindenesetreegy apro modositas es a kodod optimalizalva van...)
Köszi, az optimalizációra sose árt figyelni!
Sziasztok
Egy rs485 vonalon kommunikáló eszközt bütykölök. Az lenne a kérdésem, hogy futási időben meg tudom-e változtatni a baud-ot. A fordító azt mondja, hogy a setup_uart(baud)-ot csak konstanssal hívhatom meg. Köszönöm a segítséget.
Ha nagyon nem menne, én közvetlenül regiszterbe írnám a paramétert.
Köszi
Közben arra gondoltam, hogy nem a baud értékét küldöm át, hanem valami hozzárendelt sorszámot vagy azonosítót. Utána egy switch-el már be tudom állítani...
Ha közvetlenül regiszterbe írsz, akkor bűvészkedni kell az értékekkel (ha jól emlékszem, nem a baud megy a regiszterbe, hanem az adatlapban lévő algoritmus alapján számított érték). Én függvényt írnék rá.
Esetleg kipróbálhatsz egy konstans tömböt (amiben az általad használandó baud értékek vannak), hátha megeszi ezt a setup_uart().
Szervusztok,
Probalta valaki az MPLAB X -et CCS pluginnal hogyan mukodik ?
Hello,
Igen, nekem működik vele, az egyedüli bosszantó dolog, hogy ha elütök valamit a programkódban, vagy hibázok, nem a CCS fordító ablaka nem tűnik el magától, hanem neked kell lezárnod, ezen kívül minden működik szépen. Nekem most egyszerre az MPlab 8 és az X is bent van a gépben és nem zavarják egymást, külön mappában vannak, és egymástól függetlenül futnak, szóval próbáld ki nyugodtan.
Én egy működő programmal akartam kipróbálni, beólvastam de a Compilálás után sok hibát talált abban a programban ami az eredeti CCS 4.1o4 programmal hibátlanul fordul. Az MPLAB 8.86 kiirja, hogy Build Succeeded de nem találom sehol a hexa fájlt .
Ha neked a HEX fájl kell, akkor ne a Build-re kattints hanem a Make project-re, ekkor elkészíti a HEX fájlt. Ezt megtalálod az MPlab 8.85-ben is. Nekem minden probléma nélkül vitte az MPLAB X-el is, esetleg nézd meg, hogy a mappák jól vannak-e beállítva.
Sziasztok!
Lehet, hogy triviális dolgot kérdezek, de egyszerűen nem jövök rá, hogy mi a probléma. 16F628a-t programozok.
Kell még valami ezen kívül, hogy működjön az MCLR. Eddig nem volt gond, most pedig az van, hogy az MCLR láb állapotától függetlenül elindul a pic programozás után azonnal. A lábon mértem a szintet, az OK. Mindegy neki, hogy alacsony vagy magas, ketyeg. Több hobbiprojektet elkövettem ezzel a típussal és eddig nem volt ilyen problémám. A másik gondom, hogy a wdt sem működik. Ha jól gondolom elégnek kellene lenni a WDT fuse-nak és egy setup_wdt()-nek. Köszi a válaszokat.
Fordítás után az MPLAB Configure menüje alatt a Configuration bits alatt nézd meg, hogy tényleg be van-e állítva a megfelelő paraméter. Az ablak első részén be kell pipálni a Configuration Bits in code checkbox-ot.
|
Bejelentkezés
Hirdetés |