Fórum témák
» Több friss téma |
Sziasztok!
Azt , hogy tudom megoldani , hogy meghívja a pic a következő oldalt automatikusan? : http://oldalam.hu/adat.php Van erre valami funkció? Http kérést kellene csinálnia,de nem tudom milyen függvényekkel kellene nekikezdeni.
Üdv mindenkinek!
Nagyon kezdő vagyok még a PIC programozásban,Szabadságon lévén most van több időm játszadozni.MikroC alatt próbálkozom. Irtam egy kis programot,ami Pic16f88ra állitva a mikroC alapbeállitásban,a program tökéletesen lefut (Build),de ugyanez a program Pic16f628A alat viszont nem (annyit látok hogy az analog rész körül van a bibi,mert amikor azt kiveszem a programból azt a részt,akkor lefut mindkét Pic-el). Hát ebben kérnék segitséget. Ime a program:
A 628-ban nincs A/D konverter.
Nagyon szépen köszönöm a gyors válast.
Mostmár ezek után értem a különbséget.
Sziasztok!
Szeretnék segítséget kérni azoktól, akik a mikroc és a mikropascal programozásban is otthon vannak. Sajnos én csak pascal-ban tudok programozni úgy-ahogy. Ezt a részletet szeretném felhasználni mikropascal-ban és szeretnék valaki hozzáértőt megkérni, hogy írja át mikropascalba. Köszönöm a segítséget!
Sziasztok!
Szeretnék segítséget kérni:hogyan lehet char típusú változót floatba konvertálni?
Sziasztok!Szeretnék véleménynyt kérni a következő problémára.
Ékezetes és néhány saját karaktert szeretnék megjeleníteni az lcd-n ezek összesen 12 féle. A CGRAM-ba tudomásom szerint 8 saját karakter írható. Az lcd-n kölönböző információk kerülnek kiírásra, de a 12 saját karakter nem egyszerre kerülnek megjelenítésre. A kérdés most következik. Ha a megjelenítés elött hívom meg az adott karakterre vonatkozó "void CustomChar(char pos_row, char pos_char)..." függvényt és irom be egy adott címre, aztán jelenítem meg az lcd-n, majd egy másik információ megjelenítése előtt ugyanerre a CGRAM címre egy másik karakter megjelenitésére vonatkozó "void CustomChar(char pos_row, char pos_char)..." fügvénnyel beírok egy másik saját karaktert, majd jelenítem meg, akkor ez működik? Mert ha igen, akkor így bármennyi saját karakter megjeleníthető, bár értelmezésem szerint egyszerre 8 saját karater jeleníthető meg, egy információs egységben.
Nem lehet így "kijátszani", összesen csak 8 db. felhasználói karakterképpel lehet gazdálkodni. Néhány ékezetes karakter azonban az előre definiált karakterek között is szokott lenni (pl. ö). Bővebben: Link
A hozzászólás módosítva: Dec 1, 2017
Szia!
Szerintem működik, csak arra vigyázz, hogy ha átírod a mintát, akkor minden, már előzőleg kiírt helyen is átíródik ( azaz egy kiírási képben csak egyféle mintázat lehet az adott kódhoz tartozóan!) .
Szia!
Az ajánlott cikkben, a "A cikk mintapéldái összecsomagolva (examples.zip)" nem található, igy nem tudom letölteni. Légy szíves segíts a letöltésben! Köszi.
Megtaláltam itt
A hozzászólás módosítva: Dec 1, 2017
Sziasztok!
Újabb kérdés: hogyan tudom kiíraratni az lcd-re mikroc-ben, a cgrom-ban levő "ü" és "ö" karaktereket, amik a 11110101 ill. 11101111 címeken vannak?
Szia!
Köszönöm, de nem ez volt a kérdés. Ez az egyéni karakterek készítését és megjelenitését magyarázza el. Ezzel nincs is semmi baj, ez világos ilyet már csináltam máskor is még mikropascal-os koromban.
Ja,ja,már értem! Viszont az engem is érdekelne,nyernénk két karaktert
![]()
Szia!
Megtaláltam a módját. Az Lcd_Chr(1,2,245) paranccsal ki tudod írítni bármelyik karaktert. A 245 éppen az " ü "betű. A 245 helyére karakter tábla bármely karakterének a címét kell beírni. A 245 binárisan 1111 0101 ami az ü betű címe.
Szia! Örülök,köszönöm,ezt én is használni fogom ezentúl.
Csak egy apró megjegyzés a dologhoz. Nem minden kijelzőben vannak magyar ékezetek. A dolog attól függ, hogy milyen karaktertábla van programozva a vezérlőbe. Lásd itt: Bővebben: Link.
Szia!
Persze, de én nyilván arról beszélek amiben van magyar ékezet, és ez az eszköz adatlapjából ill. kódkészletéből, kiderül.
Sziasztok! Meg tudna valaki erősíteni, abban, hogy a következő kódok működhetnek?
1 feladat: Adott két unsigned short változó és egy unsigned int változó. Az int változóba írnám a két short változó tartalmát ezzel a kóddal:
Ez így okés? 2. feladat: Az int tartalmát egy start bittől kezdve írjuk vissza egy másik 8bites változóba.:
Vagyis így a int.F3 lesz a Short.F0, int.F4 a Short.F1 és így tovább... a vége int.F10 a Short.F7 Ha a három eltolási számot mondjuk 8-ra cseréljük, akkor, int.F8 lesz Short.F0 és így tovább. Valaki erősítsen már meg, hogy jól gondolom. Köszönöm szépen. A hozzászólás módosítva: Dec 10, 2017
Szia! Mi ezzel a célod, mit szeretnél megvalósítani? Miért kell két short-ot egy int-be tenni, miért nem maradhat külön? Ha beírod google keresőbe "two shorts into int", van pár hasznos találat. Egyébként miért nem próbálod ki?
A másodikra írtam egy példát: #include <stdio.h> main() { unsigned char Short_; unsigned int int_=0b1100110011001100; Short_ = int_ >>3; printf("Short_=%u\n",Short_); return 0; } Futtatva: ./test Short_=153 azaz, 10011001. Levágta az alsó 3 bit-et és a felső biteket, amik nem fértek a 8 bit-es változóba.
A célom ezzel az, hogy van egy 5 oszlopból, és 7 sorból álló led-mátrixom, ami egy motorkerékpár fokozat visszajelzője (kiírja hányadikban van a váltó). A számokat szépen megjeleníti a kijelző, de én úgy szeretném, hogy ne csak átlépjen egyikből a másikba, hanem soronként lépjen egyik számból a másikba, ráadásul úgy, hogy ha lefele váltok felfele menjen az előző szám, felfele váltásnál fordítva. Az áramkör úgy működik, hogy a kijelző oszlop meghajtása nagyjából 1ms -ként lépked a következőre oszlopra, közben a PIC másik portja adja az megfelelő oszlophoz tartózó sor meghajtást. Ezen sor információ egy tömbben van tárolva 8 bites változókban (igaziból csak az első 7 bit van használva). Itt jön a képben a 16 bites változó, aminek a felső byte-ba beírnám a kiindulási szám megfelelő sor infóját, az alsó byte-ba a cél szám ugyanazon sor infóját, és elindulnék onnan hogy 16 bites változó >> 8 (Eredmény:Felső byte, kiindulási szám) és csökkenteném az eltolást egy beállított timerrel egész nulláig (Eredmény:Alsó byte, cél szám)ennek az eredménynek csinálnék egy 8-bites változót, amibe az épp megjeleníteni akart adatokat helyezném. És addig, amíg a váltás nem megy végbe addig a folyamatosan változó eredményt jelezném ki, utána visszatérnék a tömb 8 bites kijelzéséhez. Nem tudom így érthető, mit szeretnék. Az általad adott kódot, még "értelmezésre" átnyálazom. A z utolsó 2 sorral még nem találkoztam, de utána nézek, mit is takar. Viszont nálad az int változó értéket kap, úgy nekem is ment(0xFF00), csak a 2 db 8 bites változóból nem kreál olyat, mint amit fent említettem. Addig is nagyon köszi, hogy segítesz.
Ez egy általános C kód, Linux-on GCC-vel fordítottam. A bit eltolás és összeadás valószínűleg minden C alatt ugyanaz, a demonstrálásra jó. Az utolsó két sor nem vonakozik a PIC-re. Kiírja a változó értékét és visszatér a main() függvényből 0 értékkel az operációs rendszerhez.
Nem találtam volna ki, hogy ehhez kell. Érthető mit szeretnél, bár nekem kicsit bonyolultnak tűnik ez a kivitelezés. Ha jól értem, az oszlophoz tartozó "sor" függőlegesen értendő. Én lehet, hogy a számokat ennek megfelelően, szekvenciálisan tárolnám le a memóriában (pl. 0. byte legnagyobb szám első oszlopa, ..., 4. byte legnagyobb szám ötödik oszlopa, 5. byte eggyel kisebb szám első oszlopa, stb.). Kell egy mutató. A mutató azt mondja meg, hogy melyik szám melyik sorától (0-7) induljon a kijelzés. Pl. 0 a legnagyobb szám nulladik sora, 7 a legnagyobb szám utáni üres rész (gondolom kell üres vonal a számok közé), 9 az eggyel kisebb szám első sora, 20 a mégeggyel kisebb szám negyedik sora, stb. A kijelzőt kezelő függvény a mutató alapján kiveszi a táblázat megfelelő egy vagy két byte-ját, amiből összeshift-eli és vagyolja a megfelelő biteket, azaz a kijelzendő "sort" (byte-ot). Ha éppen byte határra esik, akkor nem kell shift-elni. Váltásnál, beállítasz egy időzített megszakítást (pl. ha 1s alatt kívánod a számokat áttolni, akkor 1/8s-onként hívódik meg), ami kijelzés kezeléstől függetlenül növeli vagy csökkenti a mutatót, amíg el nem éri a célszámot. Mivel csak 7 sor magas a szám, így lesz egy üres sor a számok között a csúsztatásnál, ami talán direkt jól is jönne. Ha vonalat szeretnél betenni a számok közé, szerintem azt is meg lehet oldani, csak kicsit át kell variálni a kijelzőt kezelő függvényt és az időzített megszakítást is (több lépés lesz). Ez most csak úgy hirtelen az eszembe jutott, nem tudom mennyire kivitelezhető az adott PIC-en. Arra is gondolni kell, hogy mi történjen ha gyorsabban váltasz, mielőtt átfutnak a számok vagy egyszerre többet váltasz, esetleg nem két egymás melletti fokozat között. Ezzel a módszerrel végigfuttathatod a teljes számsort. Ha nem egymás mellettiek a fokozatok (számok), úgy nem működne. A hozzászólás módosítva: Dec 11, 2017
Tegyük fel, hogy 5 fokozatod van. Csinálsz egy 8*(7*5) bitmátrixot (ez 35byte). Egy byte egy vízszintes sort takar, amiből csak 5bitet használsz fel, mert ekkora ledmátrixod szélessége. Az első fokozatban az első 7 bájt (0..6) által meghatározott bitmátrixot rajzolod ki. Ha váltottál, szép lassan felgyalogolsz a 7..13 bájtig, ha megint váltottál felfelé, újabb 7 bájtnyit gyalogolsz. Az egészet úgy kell elképzelni, mint ha egy darab kétszínű 8*35 pixel méretű bitmapod lenne, aminek mindig csak az aktuális részét jeleníted meg. Azért célszerű vízszintesen irányba letárolni a karaktereket, mert így a függőleges tologatásnál nem kell a biteket tologatni, csak a tömbben előre-hátra lépkedni.
Ugyanezt írtam, csak 90°-al elforgatva. Azt írta oszloponként lépked a kijelző meghajtó áramkör. Kézenfekvő, hogy ehhez lenne célszerű igazítani az adatok (bit-minta) tárolását. Ha az áramkör soronként lépkedne, akkor működne az, amit írsz. Nem kellene bit-eket tologatni.
Igen, freedyke elgondolása jobb számomra a oszlop meghajtások miatt. Lehet, hogy az én elgondolásom "bonyolultabb", a tietek sokkal elegánsabb, de ez a közvetlen memória pakolás, mutató, nekem még sok, ilyennel még nem foglalkoztam. Próbáltam a rendelkezésemre álló tudásomból megoldani a dolgot, de jó dolog, hogy mindenki másképp gondolkodik, másképp old meg problémákat, és így sokszor(mint most is), rávilágít egy másik megoldásra, amely sokszor jobb, gyorsabb, egyszerűbb kódot eredményez. Logikailag értem mit kellene megvalósítani a ti verziótokban, de a gyakorlatban a kód írásnál fogalmam sincs, hogy csináljam. Megpróbálok ennek a témakörnek bővebben utána nézni.
Amúgy sikerült megoldani a dolgot ezzel a 16bites változó bit tologatásával , de tény, vannak a kódban olyan sorok, amihez neki kell ülni, ha értelmezni akarom... Köszönöm még egyszer a segítséget. A hozzászólás módosítva: Dec 12, 2017
A számok bit-mintáját egyébként is tárolni kell valahogy. Mindketten azt mondjuk, hogy "szőnyegként" érdemes kiteríteni a számokat. Egy ablakon keresztül (a kijelző) megjeleníted a szőnyeg kívánt részét (a mutató mondja meg hol áll az ablak). A bit tologatást meg lehetne spórolni és egész byte-okkal dolgozni, ha az áramkör sorokat hajtana meg (ahogy benjami írta). Ez sokkal egyszerűbb kódot eredményezne. Ha mégis oszlopokat hajt meg, akkor lehet mégsem a fent leírt módon tárolnám a "bit-mintát". A számsort 90°-al balra elforgatva tárolnám, a bal alsó sarok a kiindulópont. A 0. byte a legnagyobb szám (5) nulladik oszlopa, az 1. byte az eggyel kisebb szám (4) nulladik oszlopa, ..., 5. byte a legnagyobb szám (5) első oszlopa, 6. byte az eggyel kisebb szám (4) első oszlopa, stb. A számok (90°-al elforgatva) 8 bit szélesek (ebben benne van egy üres sor a számok között). Ha 5 szám van, 5*8=40 értéket vehet fel a mutató 0-39 között. Az időzítő függvény semmi mást nem csinál, mint mondjuk 1/8 másodpercenként csökkenti/növeli a mutató értékét, amíg el nem éri a célértéket. (A főprogram állítja be az időzítőt, illetve a kezdő és célértéket, valamint az eltolás irányát.) A megjelenítő függvény megjeleníti a bit-mintából azt a részt, ahova a mutató mutat. Pl. a mutató értéke 4, akkor az 5-ös szám alsó három sorát, az üres sort és a 4-es szám felső három sorát. 4/8=0 (ahol 4 a mutató értéke, 8 a 90°-al elforgatott szám magassága + egy üres sor a bit-mintában), 4%8=4 (maradék). Tehát, fogja a 0. (4/8) és 1. byte-okat (mert épp lefelé váltasz, az eltolás iránya lehet egy külön byte-ban), és eltolja 4 (4%8) bit-el jobbra (mert épp lefelé váltasz). A következő oszlopnál hozzáad 5-öt (feltéve, hogy 5 karaktered van) és megismétli, amíg végig nem ér az összes oszlopon. Nem olyan bonyolult ez. Nagyon fapadosan gondolkodom (ASM-ben), talán a C-t kihasználva lehetne tovább egyszerűsíteni.
Sziasztok!
Szeretnék lcd-re kiíratni float változót. A pic 18F4520 a kíírandó szám pl:23.5 meg -3.5. A microc beépített FloatToStr badarságokat ír ki. Ha valaki tudna segíteni a feladat programból való megoldásának az jó lenne Köszönöm! |
Bejelentkezés
Hirdetés |