Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Nem hibás, mert a display7seg_date() eljárás úgy van megírva, hogy csak egy "pillanatra" jeleníti meg a dátumot. Ezt sűrűn meghívva folyamatos kijelzésnek látszik.
De ki fogom próbálni a while(key1)-et is. ![]()
Igen, ha csak egyszer villan fel és utána törli az adatot vagy kinullázza a portot, akkor kell a ciklus, de ha csak a display7seg_date() függvény elején törölnéd a kimeneti adatokat, akkor nem kell a ciklus, elég a késleltetés.
Persze úgy nem lehet túl okosnak lenni, ha nem látjuk a teljes programot ![]() A hozzászólás módosítva: Ápr 10, 2015
Akkor a rend kedvéért a teljes program:
Van benne pár plusz sor a kísérletezések miatt, majd ha végleges lesz, letisztázom. ![]()
ohhh, bár én nem vagyok CSS-es, de a helyedbe azonnal utána néznék a tömböknek kicsit bővebben is, mert szerintem ezt a programot sokkal kevesebből is meg lehet írni..
És ha nem is csak a tömböknek, de a bitléptetésnek bitenkénti műveleteknek mindenképp. Ha pl.:
Ezzel az egy sorral pl. az összes "OUTPUT_high(digit?) ;"-es sort kiválthatod. És az is érdekes, hogy digit változót frissítésenként növeled így minden frissítenél egy újabb feltétel érvényesül. Szerintem ez felesleges, a feltételeket is simán ki lehetne hagyni és akkor egy lefutásnál az összes szegmenst gyújthatná egyesével és adatokat írna rá. Esetleg pici időzítéseket hagyhatsz a szegmensek közt. Látom, hogy minden egyes feltételben gyújtod a szegmenst vagy adsz vezérlést a tranzisztoroknak, de ha elbírja az áramkör akkor nem lenne muszáj kapcsolgatni őket, persze ez megnövelheti a fogyasztást. Így hirtelen ennyi, és kérlek fogadd eszt jó tanácsoknak mind sem kioktatásnak vagy belevauvaunak.. ![]() A hozzászólás módosítva: Ápr 11, 2015
Tudom, hogy kicsit "fapadosan" van megírva a program, de két érv szól mellette:
- így át tudom látni a lépéseket (a bit shift-es dolgok nekem kicsit zavarosak...) - így a digiteket nem kell ugyanarra a portra tennem, oda köthetem őket, ahol épp hely van... ![]()
Már csak szőrszálhasogatás, de az is megoldható
![]() Amúgy éppen azt néztem tegnap, hogy hasonló elven írtam meg én is a bináris órám programját. Érdekes... ui: Idézet: „(a bit shift-es dolgok nekem kicsit zavarosak...)” Később óriási hasznát veszed ![]() A hozzászólás módosítva: Ápr 12, 2015
Sziasztok!
Lenne egy olyan problémám hogy a stringes dolgokat nem nagyon értem. Azt kellene megoldani, hogy jön soros porton egy elég hosszú szöveg, most meg nem mondom hány karakter, de hosszú. Például a beolvasott string 17. karaktere érdekelne. Ha az megegyezik pl. 1-el akkor egy kimenet legyen aktív. Ez nem nagyon akar összejönni.
A hozzászólás módosítva: Ápr 26, 2015
Szia!
A tömb a 0.elemmel kezdődik, tehát a 17. elem: szoveg[16]; Egyébként meg működnie kell!
Az AT parancsok kiküldésénél fordított sorrendben adtad meg a zárókaraktereket:
A "hivatalos" sorrend: 1. kocsi-vissza (Ctrl-M) 2. soremelés (Ctrl-J), érdemes ezt a sorrendet használni, akkor is, ha most ebből nincs probléma!
Köszi az infót be fogom tartani a sorrendet ezentúl.
Egy strukturált tömböt próbáltam létrehozni ... (Bocs ha nem jól mondom!)
Amikor a tömb elemszáma 18 akkor fordításkor azt írja hogy RAM 62%, ha 20 ra állítom az elemszámot hibaüzenetet kapok, kevés a RAM. ( próbaképp csökkentettem 16-ra, pár százalékkal csökkent csak a RAM foglaltság) 16F887-es PIC Átléptem valami "bűvös határt"? Vagy mi okozza ezt?
Idézet: 10 byte -ot foglal.„unsigned int ora,perc,napok,kimenet, uzemmod;” A 16F887 -ben egy lapon (page) a 0x20 .. 0x6F ill. 0xA0 .. 0xEF tartomány használható fel szabadon: 0x70 - 0x20 = 0x50 = 80. Ha a választott C model nem kezeli a lapokon átnyúló struktúrát, a struktúra maximális mérete 80 byte lehet. Az ora, perc miért 16 bites?
Hát, ha nem tévedek akkor az unsigned int az csak 8 bite, legalábbis én idáig így tudtam...
CCS-C Watch ablakban is azt irja hogy size: 8 bits. De még így is több mint 80 byte ami még működik... 5*18=90 ... azt hiszem még az 5*19=95-öt is elfogadta ... Most, hogy belenéztem az adatlapba, és tudtam mit kell keresni meg is találtam! Általános célú regiszter bank0 96 bytes, bank1 80 bytes, bank2,3 16+80bytes. Na akkor már csak az a kérdésem hogyan lehet megoldani, hogy kezelje a lapokon átnyúló struktúrát? Másik C nyelv választása? Másik PIC család választása?
Idézet: „... azt hiszem még az 5*19=95-öt is elfogadta ...” Ha elfogadta, akkor a közös memória 16 rekeszét (0x70..0x7F) is felhasználta a struktúrához.
Sziasztok!
Wifi modullal játszadozok és olyan problémába ütköztem hogy ha a prinf-es sorok benne vannak a programba akkor nem megy a szöveg beolvasása. Tehát ha beégetem a kódot akkor inicializálódik a wifi modul, de nem megy a szöveg beolvasása. Ki kell törölnöm a két printf-es sort és újra beégetni hogy ha küldök szöveget akkor működjön. Amúgy kifogástalan a működése de feszültség mentesítés után mindig el kell játszani ezt a dolgot sajnos, hogy jó legyen. Miért tiltódik le a gets ha benne van a két printf-es sor?
Biztos vagy benne, hogy "nem megy" a beolvasás? Szerintem csak más a szöveg és emiatt elcsúszik a karakterek pozíciója. Pl. van, amikor OK helyett azt írja, hogy No change vagy ilyesmi.
Ha ez egy ESP8266 csodabogár, akkor kösd egy USB-TTL konverterrel a PC-hez, és próbálgasd végig az AT parancsokat! Akkor látod, hogy mire mit válaszol. Egy UART kapcsolatnál, ami végtelen karakterfolyamnak tekinthető, nem szabad ilyen merev elvárásokat tenni, hogy majd a buffer 10. és 11. pozíciójába érkezik a várt parancs! Én parancsértelmezőnél valami speciális jelet használnék a parancs elejének jelzésére (pl. '#'). De legalább egy sorvége jelet keresnél, s az azt követő két karaktert vizsgáld meg!
Debuggoltam és láttam hogy semmi változás nem történik a stringbe egyetlen karakter sem változik, csak ha kitörlöm a két sort.
Sziasztok, egy kis segítséget, ill. ötletet szeretnék kérni...
Van egy szövegbeviteli függvényem, amelyben egy sztringbe viszek be értékeket. Ez egy karakteres, 12 hosszú sztring, a neve setupstring[12]. No most, ha a függvény meghívása után az ebbe a sztringbe beírt numerikus értéket egyben atoi()-val átalakítom, semmi gond nincs, szépen megcsinálja, a numerikus eredménnyel tudok tovább dolgozni. (minden változóm globális) A gond akkor van, ha úgy akarok numerikus értékhez jutni, hogy a sztringbe egyben beírt numerikus értékből egyes karaktereket akarok kiemelni és azt numerikussá alakítani. Tehát pl. szükségem lenne a setupstring[0]-n levő egy darab számjegy numerikus értékére. Ha ezt akarom átalakítani:
Az eredmény egy nagy semmi, a konvertált értéket nem is tudom megjelentetni az LCD-n, egy üres karaktert ír ki. Lenne esetleg valami ötlet, hogy hogyan lehetne ezt úgy csinálni, hogy működjön is? ![]() Előre is köszönöm... A hozzászólás módosítva: Máj 7, 2015
És így?:
Köszönöm, de közben megtaláltam a tuti megoldást, ki is teszteltem, működik rendesen. Közreadom a kódot, hátha valakinek még hasznos lesz:
![]()
Ha ez egyetlen karakter, akkor nem stringkezelő függvénnyel kell vacakolni, hanem 48-at (a nulla ASCII kódját) le kell vonni belőle.
A string a C-ben úgy néz ki, hogy az "értékes" karakterek után áll egy nulla is...
A tuti megoldásokon - mielőtt valóban alkalmazzuk, vagy közzétesszük - mindig érdemes kicsit elgondolkodni.
Jó a tanács, köszönöm!
![]() Egyébként én általános, paraméterezhető megoldást kerestem, amelyet nem csak ebben az egy esetben tudok majd használni, hanem más programjaimban is "könyvtárból". Ez a megoldás olyan, mind a Basic-ban, vagy a Foxpro-ban a MID$ függvény, azaz akármekkora stringből, akármilyen startpozicióból, akármilyen hosszú részt ki tudsz vele vágni, így pl. nálam most egy ciklusból meghívva a függvényt, szépen végig tudtam menni a 8 karaktert tartalmazó forrás stringen és ki tudtam belőle szedni a számomra szükséges karaktereket egyenként vagy éppen kettesével. Azóta természetesen már megírtam általánosan paraméterezhető formában is és bővítettem vele a string.h könyvtáramat. Amint azt láthatod, hajnal 3 tájban raktam fel a választ, mert úgy gondoltam, hogy hasznos lehet másnak is, de természetesen, akinek nem szimpatikus, nem kötelező használni... A hozzászólás módosítva: Máj 8, 2015
Sziasztok!
Picit ismerkednék ccsc-ben uart-al de bele ütköztem egy kis problémába.
A Idézet: tökéletesen működik pickit2 uart tool-al látom szépen megjelennek a küldött egyesek szépen sorba viszont ha a pickit2 uart tool-al én küldök egy 1-est akkor a „printf("1");” Idézet: sor után c tartalma nem egy hanaem 0x31 lesz. Miért nem kapom meg a küldött értéket?„c = getc();” Mit bénázok? Segítségeteket előre is köszönöm. A hozzászólás módosítva: Máj 26, 2015
Szia!
A 0x31 az '1' ASCII kódja, valószínűleg karakterként küldöd el, nem értékként ![]() Idézet: mikor pic küld pic nek akkor is ez a helyzet nem a printf(""); paranccsal kell küldeni? „printf("1");”
Küldheted puts('');-el is.
A hozzászólás módosítva: Máj 26, 2015
|
Bejelentkezés
Hirdetés |