Fórum témák

» Több friss téma
Fórum » MSP430 mikrovezérlők
 
Témaindító: gomzito, idő: Ápr 21, 2006
Témakörök:
Lapozás: OK   19 / 139
(#) icserny válasza szitko hozzászólására (») Nov 24, 2011 /
 
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!
(#) szitko válasza icserny hozzászólására (») Nov 24, 2011 /
 
É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.
(#) t0bi válasza szitko hozzászólására (») Nov 24, 2011 /
 
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.
(#) szitko válasza t0bi hozzászólására (») Nov 25, 2011 /
 
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.
(#) icserny válasza szitko hozzászólására (») Nov 25, 2011 /
 
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.
(#) szitko válasza icserny hozzászólására (») Nov 25, 2011 /
 
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.

részlet.txt
    
(#) balux33 hozzászólása Nov 26, 2011 /
 
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.
(#) icserny válasza balux33 hozzászólására (») Nov 26, 2011 /
 
Idézet:
„Szükségem lenne egy kis segítségre.”
Nekem is , mert a bemásolt információ önmagában kevés a probléma megkereséséhez!

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.
(#) balux33 válasza icserny hozzászólására (») Nov 26, 2011 /
 
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
(#) icserny válasza balux33 hozzászólására (») Nov 26, 2011 /
 
Idézet:
„Tényleg mi a különbség a kettő között?”
Nem tudom, de ha összehasonlítod, biztosan kiderül.
(#) t0bi válasza icserny hozzászólására (») Nov 26, 2011 /
 
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.
(#) icserny válasza t0bi hozzászólására (») Nov 26, 2011 /
 
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).
(#) zaky hozzászólása Nov 26, 2011 /
 
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?
(#) David.zsombor válasza zaky hozzászólására (») Nov 26, 2011 /
 
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
(#) icserny válasza zaky hozzászólására (») Nov 27, 2011 /
 
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!
(#) icserny válasza David.zsombor hozzászólására (») Nov 27, 2011 /
 
Idézet:
„a kapcsolás az LCD hez nekem nem volt jó.”
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.
(#) David.zsombor válasza icserny hozzászólására (») Nov 27, 2011 /
 
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?
(#) icserny válasza David.zsombor hozzászólására (») Nov 27, 2011 /
 
Idézet:
„5K körül mértem a +5 v felé”
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...
Idézet:
„Amúgy hol vetted azokat a kábeleket?
Ebay.com (Female-female jumper wire)
(#) David.zsombor válasza icserny hozzászólására (») Nov 27, 2011 /
 
Köszi. Nem megy a tápfeszről de jó most így. Legalább lehet állítani a kontrasztot.
(#) zaky válasza icserny hozzászólására (») Nov 27, 2011 /
 
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).
(#) szitko hozzászólása Nov 28, 2011 /
 
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.
  1. ADC10CTL1 = INCH_4 + ADC10DIV_3 + ADC10SSEL_3;
  2.  TA1CTL = TASSEL_2 | MC_1 | TACLR;

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.
  1. TA0CTL = TASSEL_1 | MC_1 | TACLR;

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.
(#) icserny válasza szitko hozzászólására (») Nov 28, 2011 /
 
Az ACLK-t próbáld meg ellenőrizni, hogy működik-e egyáltalán!
(#) szitko válasza icserny hozzászólására (») Nov 28, 2011 /
 
Működik az alábbi kis programma, de csak 10,97KHz jön ki a P1.0 lábon.
  1. void main(void){
  2.          WDTCTL = WDTPW + WDTHOLD;                       // Letiltjuk a WDT-t
  3.          BCSCTL1 = CALBC1_1MHZ;                          // A gyárilag kalibrált 1 MHz-re
  4.          DCOCTL = CALDCO_1MHZ;                           // DCO frekvencia beállítása
  5.          BCSCTL3 = LFXT1S_2;
  6.          
  7.          P1DIR |= 0x13;                            // P1.0,1 and      P1.4 outputs
  8.   P1SEL |= 0x11;                            // P1.0,4 ACLK, SMCLK output
  9.  
  10.   while(1)
  11.   {
  12.     P1OUT |= 0x02;                        // P1.1 = 1
  13.     P1OUT &= ~0x02;                         // P1.1 = 0
  14.   }
  15. }

Így most nem is lehet több, hisz ACLK=VLOCLK, ....
Már összezavarodtam teljesen.
(#) icserny válasza szitko hozzászólására (») Nov 28, 2011 /
 
  1. BCSCTL3 = LFXT1S_2;
A fenti sorral a VLO-t választottad ki. 32 kHz-et csak az LFXT1-ből lehet kicsalni (ha be van forrasztva a kristály).
(#) szitko válasza icserny hozzászólására (») Nov 28, 2011 /
 
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.
(#) szitko hozzászólása Nov 28, 2011 /
 
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.
  1. reg_a=((100 - ertek) & 50)

Szóval ebben a formában, -nemértem, és sok helyen találkoztam ilyen függvényel.
Valaki el tudná magyarázni?
(#) icserny válasza szitko hozzászólására (») Nov 29, 2011 /
 
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).
(#) szitko válasza icserny hozzászólására (») Nov 29, 2011 /
 
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.
(#) icserny válasza szitko hozzászólására (») Nov 29, 2011 /
 
Idézet:
„ChangeBits(reg,val,mask) reg^=((reg^val)&mask)”
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
  1. reg^=((reg^val)&mask);
értékadással, ami valójában azt jelenti, hogy
  1. reg = reg^((reg^val)&mask);
Természetesen a reg, val és mask helyébe is behelyettesítődnek az aktuális paraméterek!

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?
(#) szitko válasza icserny hozzászólására (») Nov 29, 2011 /
 
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;...
Következő: »»   19 / 139
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem