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! Biztos lehetsz benne, hogy eléggé elgondolkodtam rajta, mielőtt alkalmaztam, ill. közzétettem volna...(szokásom)
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 |