Fórum témák
» Több friss téma |
Kijelzendő érték legyen mondjuk 22. Ezt 3-mal osztva 7-et kapok (meg a maradék), ez lesz a ciklusváltozóm (7x fut le a 3 vonal kiírása), a ciklusban 3-mal csökkentem a 22 értékét, így a végére 1 lesz a maradék. Ha a kiírandó karakter kódja is 1, csak ezt kell kiírni. Ha a ciklusban csökkentgetek egy karakter számlálót, hogy eddig hány karaktert írtam ki, egy másik ciklus kitörölheti a hátralevőket (amíg le nem nullázódik a számláló), így mindig 14 karaktert fog kiírni.
Tehát kell egy rutin: kijelzendő érték/3=x, ciklus x alkalommal háromvonal + maradék kiíratás+ 14-x-1 alkalom üres kiíratás. Akkor egyszerű ha a 00 karakter üres, 01 egyvonalas 02 kétvonalas.
A mért értékből 3 -at kivonni, betenni az eredménybe (előjeles).
Ha az eredmény pozitív, háromvonás karaktert kiírni, eredményből ismét levonni 3 -at, goto e sor eleje. Az eredményhez 2 -et hozzáadni. Ha az eredmény nagyobb 0, kétvonás, karaktert kiírni, ha nulla, egyvonás karaktert kiírni. Ez maximum 14 kivonás és egy összeadás... Minek ide az osztó rutin, aztán meg egy ciklus, ami az eredménynek megfelelő számú karaktert kiírja?
Ezt nem egészen értem. Ha a mért érték pl.117, és hármakat vonok ki belőle, az már 39. Ennél jóval kevesebb karakterhely van.
Nyilván ez csak eredmény<42 esetén működik, az e feletti értékeket nem kezeli. De ez nem is lenne olyan nagy gond, a nagyobb gondom ezzel van:
Idézet: „Ha az eredmény nagyobb 0, kétvonás, karaktert kiírni, ha nulla, egyvonás karaktert kiírni.” tehát nics olyan opció ebben, hogy üres karaktert írjon. Egyébként az ötlet zseniálisan egyszerű csak picit finomítani kell, mert most ha egy nagyobb értékről csökkentem az ADC értékét mindenhol "egyvonás"-t hagy maga után ahogy megy vissza a kijelzés.
Úgy is megoldható, ha 18-akat vonsz ki mindig az eredeti értékből addig amíg el nem fogy (előtte azért 0..251 közé be kellene korlátozni a mért értéket mert 18*14 = 252). Ha a maradvány >14 akkor három vonalat, ha 9..13 közé esik akkor két vonalat, ha 4..8 között van egy vonalat, ha 4 alatt van akkor egy szóközt rajzolsz ki. Így nem kellene sem szorozni, sem osztani, csak kivonogatni.
A hozzászólás módosítva: Aug 19, 2015
Idézet: „.ha egy nagyobb értékről csökkentem az ADC értékét mindenhol "egyvonás"-t hagy maga után ahogy megy vissza a kijelzés.” Ezért kell ciklusban végezni a feladatot, hogy ki tudd számolni, mennyi üres karaktert kell még kiírni. Minden esetben meg kell legyen a 16 karakter. Bár, mivel nem időkritikus a feladat, az egy sorban elhelyezhető karakterek száma pedig 40, így csinálhatod azt is, hogy a végére kiírsz 13 üres mezőt. A hozzászólás módosítva: Aug 19, 2015
Igen, ezen már túl vagyok azóta, de sehogy sem jó. Valami mindig bekavar. Most épp az a baj, hogy ha fokozatosan növelem az ADC értékét, akkor amikor 3-mal osztható lesz az érték összekavarodik a kijelzés, mert ahogy Hp41C javasolta, kivonom a 3-at, ha pozitív az eredmény akkor 3 vonás. Igen ám, de 3-3=0 is pozitív és ezen nem tudok túljutni. Elkezdem növelni az értéket akkor így jönnek egymás után 1, 2, 0, 4....
Ne csak a carry, hanem a zéró bitet is vizsgáld.
Bár így a végére lehet, hogy hosszabb lesz a programod, mintha egy rutinba tett osztást használnál. Ezt persze a leírt részre értem, nem órajelre.
Igen ezzel tisztában vagyok csak nem mindegy, hogy mikor vizsgálom, de úgy tűnik jó lesz, legalábbis a szimulátor szerint, aztán majd kiderül.
Még olyan kérdésem lenne, hogy az analóg bemenetet hogyan illesszem az audio jelhez? Találtam EZT a rajzot, de nem vagyok tökéletesen meggyőződve az alkalmassága felől.
A hozzászólás módosítva: Aug 20, 2015
Te majdnem ugyanazt csinalod, mint en. En szorzom 42-vel, majd osztom 256-tal. Te szorzod 21-gyel es osztod 128-cal. Fele, fele. Az eredmeny ugyanaz, csak te 21 muvelettel (osszeadassal) gondolod megoldani, en ottel (harom shift, ket osszeadas). Ezen felul a 128 osztoas egy shiftelessel tobb, mint a 256-tal valo osztas. Mitol jobb ez? Persze, ha te ugy gondolod, hogy 21 egymas utani mintat adsz ossze, akkor az mar egy kicsit tovabb bonyolitja, hogy szamolni kell az osszeadott mintakat. Bar egyet meg kell jegyezni: a 21 minta osszeadasaval egy atlagolast is beviszel a dologba, ami az adott feladatnal meg jo is.
Valóban 0..41 értékere működik. Annyit kellene még hozzátenni, hogy egy ciklus számolja, hogy hány karaktert írt már ki, ha nem érte el a 14 -et, üres karaktereket ír még ki.
Idézet: „... kivonom a 3-at, ha pozitív az eredmény akkor 3 vonás. Igen ám, de 3-3=0 is pozitív és ezen nem tudok túljutni.” Ha a 3 -ból kivonod a 3 -at, az eredmény valóban 0, az is pozitív. Ekkor ki kell írni egy háromvonalast és vissza kell menni e sor elejére. Azaz a 0 - ból is ki kell vonni a 3 -at, ez -3, azaz negatív. Tehát nem kell több "vonást" kiírni. A fentiek figyelembe vételével 13 üres karaktert kell még kiírni. Ha elég a 0..39 tartomány, akkor 10 db 10 bites A/D mérés eredményét kell összadni 16 bitesen, és venni a felső byte-jét. A hozzászólás módosítva: Aug 20, 2015
Pazar vita alakult itt ki. Mindenki védi a saját megoldását. Javaslom, készítssen mindenki egy kis mintaprogramot. Pali79 kipróbálja őket, és eredményt hirdet.
Sziasztok! Megint én.
Megírtam az RFM12b demo kódját, amit a gyártó egy PDF fájlban leközölt. Egy olyan bajom van vele, hogy a main függvény while ciklusában, az első WriteFSKbyte sor után lefagy a program. Elé beírtam, hogy az egyik kimeneten levő ledet felvillantsa, de ki már nem alszik, addig világít, míg el nem veszem a tápfeszt. Mi lehet a gond?
Ez pedig a WriteFSKbyte függvény.
Kicsit tovább vizsgáltam, az SDO nem lép magas szintre, az RGIT változó nem megy át egybe, ezért visszatér a Loop elejére, tulajdonképpen nem lefagy, hanem az SDO hiánya miatt újra és újra próbálná beletuszkolni a bájtot az RFM modulba. Az adatlapban nem találom, hogy miért nem húzza fel az SDO-t a modul. Valahonnan hiányzik valami?
Mivel pont van itthon kész áramköröm amivel ki tudtam próbálni, össze is dobtam gyorsan a programot (lásd melléklet). A hardver PIC18F4550 (HID bootloaderrel 48MHz-en járatva), a két poti az AN0 és AN1-re csatlakozik (AN2..AN7-re is poti megy, de a program ezeket nem használja), a kijelző pedig a charlcd.h-ban beállított lábakra.
Szia!
Az SDO lábat sima TTL bemenetre kell tenni, mert az ST bemenet 0,8 tápfesznél lesz 1 értékű.
Sziasztok! PIC24H-nak OC moduljával bajlódok. Sikerült kicsiholnom már PWM jelet, viszont nem értem a folyamatát. (a sima 16F és 18F-es sorozat PWM CCP moduljaival nem volt gondolm, és a PWM mód is egyszerű volt) Ami a kérdésem lenne, hogy OCxRS regiszternek mi a szerepe? És a másik kérdés, hogy 40MIPS-en lehet-e 400Hz alatti PWM frekvenciát előállítani legalább 10 bites felbontással? Adatlapokat fejtegetem de az angol csak alapszinten mozog nálam...
A 400Hz alatti PWM et elő tudom állítani TMRx előosztójával, ez sikerült, de a kitöltési értéket a 2 regiszter alapján kéne elvileg belőni (OCxR és OCxRS) logikailag nem világos mi a szerepe OCxRS nek.
Szia!
A TTL nem tudom, mennyire jó megoldás, a PIC is 3,3V-ról megy, és a modul is. Elméletileg a PIC-nek nem probléma ez a kisebb tápfesz, de emiatt a TTL nem használható.
Melyik uzemmodot hasznalod? (OCxCON regiszter OCM bit erteke mennyi?)
OCM bit értéke 101. Ezzel ha OCxR regiszter értékét változtatom, akkor változik a kitöltés, viszont ami még probléma, hogy a jel nem megy le sosem teljesen 0-ra így analizátorral nem is tudom figyelni.. (lehet hogy hardveres a hiba, bár nem jöttem még rá)
A hozzászólás módosítva: Aug 21, 2015
OCxR maradjon nullan es az OCxRS regiszter allitja a kitoltest ebben az uzemmodban. Pic kimenete le kell menjen kozel nullaban, ha nem akkor meghibasodott a port vagy zarlatos egy masik labbal (esetleg pozitiv tappal).
A jelenlegi beállításaim: PR2: 0FFF OCxRS: 0FFF OCxR:0---0FFF-ig kitöltés, ledeken nézem a változást, az erősen világítóról le tudom venni majdnem teljesen sötétre... (analizátor nem mutat semmit. Megpróbálom úgy ahogy ajánlottad!
Az általad javasolt módon, ha PR2: 0FFF OCxR :0000 és OCxRS értékét változtatom, kb a leden látható változás 60-80% os kitöltés így szemre, ezeken a határokon belül mozog csak... Valami nem kerek.
Sziasztok! Nem PIC de mégis az: Egy kedves fórumtársunk felajánlásának hála hozzájutottam egy ilyen Basic Stamp boardhoz Mivel a basic stamp tulajdonképpen PIC így érdekelne, hogy esetleg más PIC-ek programozásához is használható lenne szerintetek? Esetleg milyen szoftver kellhet hozzá? Másik kérdés. Van-e valaki közületek, aki ismeri ezt a boardot és a basic stampet? A potméter leolvasása ugyanis nagyon nem akar működni. Arra már rájöttem, hogy igen "érdekesen" van bekötve a boardon az ajánlásokhoz képest, mert nem párhuzamosan van a potin a kondi, hanem meglepő módon - sorban. Lehet, hogy emiatt nem akar működni? Amúgy nagyon jópofa kis board. Propeller után igazán gyorsan sikerült megbarátkoznom vele. A gyereknek szántam, emiatt keresgélek kész programok után, hogy ne megutáltassam, hanem megszerettessem vele a dolgokat. Előre is köszönöm, ha volna valakinek érdemi válasza.
A hozzászólás módosítva: Aug 21, 2015
Sikerült addig eljutnom, hogy majdnem lineárisan tudom trimmerrel szabályozni a PWM jel kitöltését, viszont 2 problémám van továbbra is: Ha leveszem "nullára" a trimmert akkor a kitöltés 100% körül lehet és kis tekerés után kezdi halványról az erősödést maximumig. A másik problémám, hogy analizátorral nem látom a jelet, 18F67K90-es PIC-en rendesen mutatkozik a jelalak, de 24H-n nem. Egyébként Open drain es meghajtással optokapun keresztül jönne ki a jel.
Csatoltam a környezetet, és a rajzát.
Ez a fajta optokapu elrendezés stabilabban működik igaz, ez egyben negálja is a jelet. AMi a rajzodon van, az nem Open Drain -es meghajtás.
A hozzászólás módosítva: Aug 21, 2015
Szia lehet elírtam, de a lényeg hogy a PIC nyelőként kapcsolja az optóra a feszt
|
Bejelentkezés
Hirdetés |