Fórum témák
» Több friss téma |
Ha az (x0,y0) középponttal és az R sugárral adott körben kell maradni, akkor azt vizsgáld, hogy az
(x-x0)^2 + (y-y0)^2 nem lesz-e nagyobb R^2-nél, mert az már kívül van. Ha x,y nem azonos mértékegységben vannak, akkor "skálázni" kell! A fenti kifejezés helyett (x-x0)^2 + a*(y-y0)^2 értékét kell vizsgálni!
Értem, akkor igazából a kört amit kirajzoltatok, annak semmi köze nem lesz hozzá. Azért kérdeztem korábban, hogy hogyan tudnám a sorokat pixelenkét megadni, mert szerintem sokkal finomabb lenne a * mozgása, és így most az oszlopoknál mindig hozzá kell adjak 6-ot, plusz be kellett rakni egy csomó késleltetést, hogy lehessen látni.
Köszönöm a válaszod.
Talán pixel-vezérlésre kellene áttérni a karakter-vezérlésről.
A 6100 driverében meg lehet oldani, hogy egy kis négyzetet rajzoljon. Egyik csúcsa a kezdőpont, amitől x és y irányban megadott számu pixel adja meg a négyzet méretét, ami más színü, mint a háttér. Így tettem be megadott háttérbe a fényképet. Problémát az okoz, hogyha elmozdul egyik irányban a kis négyzet, akkor ahonnan eljött, ott a pixeleket a háttér színére vissza kell festeni, mert különben csak csíkot lehetne húzni. Szerintem ez megoldható könnyen. A másik problémádra: először próbálj meg nem kőrterületet, hanem négyzetet kialakítani, ahonnan nem jöhet ki a pötty, talán könnyebben megírható a program. Aztán, ha ez működik, akkor lehet bonyolítani.
Köszi. Igazából egyenlőre örülök neki, hogy egyáltalá idáig eljutottam, és csak az LCD vezérlést kellett beollózam mástól, a többi részét a programnak Én irtam, az adatlapok segítségével.
A másik, szerintem egy kőrt meghatározni sokkal egyszerűbb mint a négyzetet, hisz a körnél csak a sugarat, míg a négyzetnél mind a négy oldalt meg kell határozni, de lehet,hogy tévedek.
Körnél az összehasonlítás egyszerűbb, de előtte sokat kell számolni, s ez ezeknél a "low end" mikrovezérlőknél, ahol nincs hardveres szorzóegység sok utasítás és több idő, mint a téglalapnál a négy összehasonlítás.
Egyenlőre, most csak egy karakternyi részt próbálok meghatározni, hogyha arra a részre rámegy a csillag akkor, valami történni fog. (Hogy mi azt még nem tudom) De ez is eléggé feladta a leckét. Plusz még valahogy le kéne egyszerűsíteni az eddig megírt programom, mert egy ciklusba bezártam egy csomó feltételt, amit lehet, hogy egyszerűbben is meg lehet csinálni,csak elég lassan haladok a C tanulással.
Sziasztok!
Szükségem lenne egy kis segítségre. Error[e24]: Segment DATA16_AN (seg part no 1, symbol "P1OUT" in module "3310", address [21-21]) overlaps segment DATA16_AN (seg part no 2, symbol "_A_P1OUT" in module "RTC", address [21-21]) Ez a hibaüzenet mi lenne? Eddig még nem jött elő ilyen, de most tanácstalan vagyok. Idézet: Nekem is , mert a bemásolt információ önmagában kevés a probléma megkereséséhez!„Szükségem lenne egy kis segítségre.” Valószínűleg a 3310.c és RTC.c forrásállományok két különböző fejléc állományt csatoltak be, s az egyikben P1OUT, a másikban _A_P1OUT lett ugyanarra a címre (0x0021) definiálva.
Hát tényleg be kellet volna tennem őket, de így is eltaláltad a hiba okát
A 3310.c már megvolt és nem is figyeltem hogy abban a msp430g2553.h volt becsatolva az RTC.c be pedig a io430g2553.h -t csatoltam most be. Tényleg mi a különbség a kettő között ? Azért köszönöm a segítséget Idézet: Nem tudom, de ha összehasonlítod, biztosan kiderül. „Tényleg mi a különbség a kettő között?”
Tudod Te nagyon jól, csak hagysz minket gondolkodni
Közben sikerült MSP430G2231-et összekötni egy 24LC512 memóriával I2C interfészen keresztül. A példaprogramok D. Dang munkái, de át kellett alakítani, mert a 24LC512-nek 2 bájt méretü címzés kell. Jelenleg csak az 1 bájtos adatbeírás megy, ezt Pónival ellenőriztem, aztán majd feltalálom a melegvizet és leírom a több-bájtos írást és olvasást, ha majd megértem.
A több-bájtos írás és olvasás csak annyiban különbözik az eddigitől, hogy nem hagyod abba az első adatbájtnál, hanem küldöd/olvasod tovább a bájtokat. Olvasásnál arra kel vigyázni, hogy csak az utolsó bájt beolvasásánál küldj NAK-ot, a többi bájtot ACK-kal kell nyugtázni (pozitív nyugtázás).
Sziasztok,
most próbálgatom a Launchpadomat icserny tanár úr nagyszerű lírása alapján. A LED villogtatás és ki-be kapcsolgatás működik, és belevágtam az LCD modul programozásába is, de a 2x16os kijelzőhöz írt példaprogram lefordítása során egy hibaüzenetet kaptam: "Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement E:\Fenti_Public\Elektronika\MSP430_Launchpad\03_LCDinit\main.c 40 Ezt írja minden sorra, ahol a ChangeBits függvény meghívásra kerül. Szerintetek mit ronthatttam el?
Semmit. A warningokkal nem kell foglalkozni. Rányomsz a debugra és letölti. Talán valahol ki is lehet kapcsolni. Csak akkor nem tölti rá hogyha error van. Ha így se megy akkor a beállításoknál állísd át szimulátorról debugra. És a kapcsolás az LCD hez nekem nem volt jó. Még egy 10K-s potit be kell tenni úgy hogy a középső lába megy az lcd re az egyik föl 5V ra a másik meg föld. Remélem segítettem
1. Nem vagyok tanár. Sajnos, vagy szerencsére, ezt most ne feszegessük!
2. A fordító arra figyelmeztet, hogy a volatile hozzáférések sorrendje határozatlan. (A volatile szószerint illékonyt jelent, az olyan tartalmakra értendő, amelyek "menet közben" megváltozhatnak - pl. hardver regiszterek, megszakításban felülírt változók). Hagyd figyelmen kívül!
Idézet: Milyen LCD-t használtál, milyen kontrasztbeállítással lett jó? Nekem ennél a kijelzőnél kellett csökkenteni (a +5V-hoz képest!), amit egy fix ellenállás sorbakötése megoldott. „a kapcsolás az LCD hez nekem nem volt jó.”
5K körül mértem a +5 v felé de elég finoman kellett beállítani mert a te kapcsolásoddal csak a tele kontraszt látszott... Bővebben: Link Ilyen LCD-t használok. Amúgy hol vetted azokat a kábeleket?
Idézet: Hm, próbáld már ki úgy is, hogy a Launchpad 3,5 V körüli tápfeszültségéről járatod a kijelző modult! (Tehát az LCD Vdd-je ne 5 V-ot kapjon, hanem 3,5 V-ot!) Lehet, hogy kifogtál egy 3 V-os példányt...„5K körül mértem a +5 v felé” Idézet: Ebay.com (Female-female jumper wire) „Amúgy hol vetted azokat a kábeleket? ”
Köszi. Nem megy a tápfeszről de jó most így. Legalább lehet állítani a kontrasztot.
Sziasztok,
köszi a válaszokat. Icserny, rendben hogy nem vagy tanár, mindenesetre a cikkeidet érdemes lenne tankönyvként kiadni. Egyébként a kapcsolás végülis működik. Most egy DS1820 szenzort próbálok hozzá illeszteni (a nagyon távoli cél egy kazánvíz hőmérő és szivattyúvezérlő áramkör lenne).
Sziasztok.
Egy kicsit belezavarodtam az órajelekbe, és ebben szeretnék egy kis segítséget. MSP430G2553-ról van szó. Tehát, röviden azt szeretném, hogy az alap órajel 1MHz legyen, az SMCLK is 1MHz legyen, amit kivezetek a P1.4-es porton. Az SMCLK 1MHz frekijét használja az ADC és a Timer_A1-es perifériák.
Eddig működik is minden. A gondom az lenne, hogy be szeretném állítani a Timer_A0-t is, de azt 32KHz-re.
Hiába állítom TA0-t ACLK-ra nem számol. Az SMCLK-t nem tudom leosztan, mert azt max. 125KHz-ig lehet, (1MHz/8=125KHz) tehát maradt az ACLK, de azt meg nem értem, hogy álllítsam be 32KHz-re. Nézegettem a G2xx3-as mintaprogramokat, de attól se lettem okosabb, csak jobban összekevert.
Az ACLK-t próbáld meg ellenőrizni, hogy működik-e egyáltalán!
Működik az alábbi kis programma, de csak 10,97KHz jön ki a P1.0 lábon.
Így most nem is lehet több, hisz ACLK=VLOCLK, .... Már összezavarodtam teljesen.
Miután újra, meg újra átnéztem a Family U.G.-t rájöttem Én is. Azt meg elfelejtettem írni, hogy a kistály nincs benne, és nem is szeretném beforrasztani. Márcsak azt kell kitaláljam, hogyan csinálok a TimerA0-nak 32KHz körüli frekit. Igazából csak annyi lenne a feladata, hogy számoljon egy bizonyos értékig, és a program, a megadott időközönként kiolvassa, és nullázza, a számláló értékét. Már ezt a részét is sikerült megcsinálnom, de ahoz, hogy jó értéket kapjak, pontosan 31250Hz-es számlálás kellene.De látom, nagy fába vágtam a fejszém.
Sziasztok.
Egy újabb kérdésem, inkabb kérésem lenne. Icserny cikkében, az LCD vezérlésnél láttam egy függvény, amit nem teljesen értek. Egy kicsit alakítottam rajta, hátha könnyebben megértem.
Szóval ebben a formában, -nemértem, és sok helyen találkoztam ilyen függvényel. Valaki el tudná magyarázni?
Ebben nincs függvény, ez egy aritmetikai kifejezés. Egy kivonás és egy bitenkénti ÉS művelet van benne. A zárójelezés (melyek közül a külső itt fölösleges) a műveletvégzés sorrendjének befolyásolására szolgál (hogy a kivonás történjen először, ne a bitenként ÉS).
Köszönöm.
Pontosan erre gondoltam: Idézet: „ChangeBits(reg,val,mask) reg^=((reg^val)&mask)” Kicsit összezavar, az operátorok kiértékelési iránya (balról-jobbra, jobbról-balra), meg, hogy majdnem mindegyikből kétféle van.Pedig a könyvben, még át is van húzva szürkével, plusz ki van emelve, hogy "A logikai és bitoperátorok szimbólumai hasonlítanak egymásra, ezért könnyen összekeverhetők." (&, &&) Megpróbálok több buta kérdést nem fel tenni. Idézet: Ez egy "inline függvény", azaz fordítás előtt a preprocesszor minden ChangeBits(reg,val,mask); előfordulást behelyettesít a„ChangeBits(reg,val,mask) reg^=((reg^val)&mask)”
Ez egy bitzsonglőrködés, amit egyszerűbben így szoktak írni, két lépésben: reg &= ~mask; //reg = reg & ~mask; reg |= val & mask; //reg = reg | (val & mask); (a & mask elmaradhat, ha val csak a beírandó biteket tartalmazza!) Ez lényegében a mask-kal kijelölt bitcsoportot írja felül a val-ban levő értékkel (feltéve, hogy val-ban a megfelelő helyiértéken vannak az adatok!). Például: 1 1 0 1 0 1 1 1 reg eredeti értéke 0 0 1 0 1 0 0 0 val értéke 0 0 1 1 1 0 0 0 mask értéke 1 1 1 0 1 1 1 1 ez lesz az eredmény (remélem, nem számoltam el...). Az általam használt függvény (valójában makró) haszna az, hogy nem módosít olyan bitet, ami a maszkon kívül esik. Ez konkurens programozásnál fontos (ide sorolandók a programmegszakítást használó alkalmazások is), nehogy visszaírjunk egy olyan bitet, amelyet közben a műveletsorunkat megszakító folyamat időközben módosított. Az LCD kezelésnél ez nem volt szükséges, de ha már van egy ilyen bevált módszerünk, akkor miért ne használjuk?
Köszi szépen. Így, hogy már ismét teljesen belekeveredtem, nekem erre az egyenletre:
Idézet: „reg |= val & mask; //reg = reg | (val & mask);” A lenti értékekkel 0xff jött ki. Így ASM után, (ahol mindenre utasítás van) azt vettem észre, hogy a C-ben, néha van egy-két "if" vagy "for" utasítás, és a többi meg csak operátor, meg matematikai egyenlet. Bocsánat, ezt nem végeztem el: reg &= ~mask;... |
Bejelentkezés
Hirdetés |