Fórum témák
» Több friss téma |
Egy indiai hobbista lépegető robotot készített egy Launchpad kártya és két szervó motor felhasználásával. A szellemes megoldás lényege az, hogy a motorokat tartó lap nem sík, hanem szögben megtörő, így az elfordulás egyúttal az elöl lévő láb kis emelésével is együtt jár. Bővebben: Link
Mégegy írás Indiából: Ishan Karve az 1-Wire DS18B20 kezeléséről írt egy cikket. A mintaprogram MSP430G2452-höz készült.
Idézet: „a felhúzás hiánya miatt a program egyből lenyomottnak tekinti a vége gombot...” A megoldás:
helyett azt kell írni, hogy:
Ez tetszik. Ezt lehet, hogy tovább lehetne fejleszteni, más eszközök 1 vezetékes vezérléséhez.
Csak sok sikert tudok kívánni hozzá, az én életemből ugyanis kimaradtak ezek az 1-wire ketyerék (őszintén szólva nem nagyon bánom...).
Az MSP430G2xxx sorozatban, azért jól jönne néha egy-két plus I/O kivezetés. Ha egy vezetéken meg lehet oldani valamit, és működik is, akkor már 1-el több kivezetés marad.
Mondjuk én most nagyon kacsingatok a 2-es, és az FR57xx-es sorozatokra.
Sziasztok!
Ha egy msp430g2452 uc-en a portbeállításoknál nem tudom, hogy mi hogyan lett elállítva, akkor hogyan tudom biztonságosan mondjuk beállítani egy ponttól kezdve a programban, hogy egy porton felélesszek egy MOSFET-et. Amit Icserny írt példaprogramokat, azoknál ugye minden alapbeállításon van, és a programnál már nem tudok eligazodni, hogy előtte a P1SEL vagy P1REN stb hogyan lett átállítva. Például hogyan állítom be biztonságosan a P1.3-as porton egy MOSFET élesztését (pl:IRLR2705-öt)? Ha valaki ezt le tudná írni példának, azért nagyon hálás lennék, mert én már annyit próbálgattam, de sehogy sem jön össze, és kezdek elkeseredni .
Mármint annál a programnál nem tudok eligazodni a portbeállításnál, amit fejlesztenem kéne (mert csak egy részét kell nekem megcsinálni), és nem a példaprogramoknál.
Idézet: P1.3 nem egy port, hanem annak csak egyik bitje/kivezetése. (P1 és P2 a portok, egyenként 8 bitesek ennél a típusnál).„Például hogyan állítom be biztonságosan a P1.3-as porton egy MOSFET élesztését (pl:IRLR2705-öt)?” Az adatlap végén található az egyes I/O kivezetések részletes leírása (blokkvázlat és táblázat). Az MSP430G2452 esetében a 15. táblázat tartalmazza P1.3 üzemmódjainak beállítását. A MOS-FET élesztés nem tudom, hogy mit takar, de feltételezem, hogy digitális kimenetet. Ennek feltétele a PSEL.3=0, PSEL2.3=0, P1DIR.3=1, ADC10AE.3=0. Az analóg komparátorral még nem foglalkoztam, de ha be van kapcsolva egyáltalán (közös fejlesztésnél nem árt a fejlesztő társakkal beszélő viszonyban lenni...), akkor a CAPD.3=1 beállítással lehet letiltani a P1.3-ra vonatkozóan a bemeneti buffert - ha van ennek értelme. A P1REN.3=0 kikapcsolja a le- vagy felhúzást. Megjegyzés: A CAPD regiszter bitjeinek szerepét az adatlap és a Family Userg Guide pont ellentétesen írja le. Az adatlap szerint 0: tiltás, 1: engedélyezés, a Family User Guide szerint 1: tiltás, 0: engedélyezés. Az ördög sem tud ezen eligazodni!
Köszönöm a felvilágosítást, és a részletes magyarázatot!
Így érthetőbb számomra a működés, na meg ezentúl az adatlappal is többet fogok foglalkozni. Egy dolog nem világos még számomra, hogy ugye a digitális módba történő állításhoz az adott lábhoz tartozó analóg funkciót le kell tiltani az ADC10AE regiszter megfelelő bitjének nullázásával. Viszont a fordító az ADC10AE &= ~BIT3; sornál azt írja error-al, hogy undefined. Pedig G2452-nél elvileg jónak kéne lenni. Idézet: Igazából nem is nagyon kéne foglalkozz velel, mert az alapértelmezett beállítás, a digitális ki/bemenet, tehát amikor elindítod a vezérlőt, ADC10AE=0b00000000. Hacsak nem menet közben szeretnéd visszaállítani analógról digitálisra. Sajnos azt nem találtam meg, ahol az alapértelmezett beállítások vannak, de arra emlékszem, hogy olvastam valahol. „hogy ugye a digitális módba történő állításhoz az adott lábhoz tartozó analóg funkciót le kell tiltani”
Értem.
Csak ugye nem tudom, hogy a program előtte lévő részében ez át lett-e állítva. Illetve, hogy ha igen, és nem állítom vissza, akkor okoz-e valami problémát. Már a P1.0 és a P1.1 nem működik, tegnap esti próbálgatás közben gondolom elromlott. :S Idézet: „Csak ugye nem tudom, hogy a program előtte lévő részében ez át lett-e állítva” Én meg ezt nem értem. Bár lehet, hogy csak a meleg miatt lassú a felfogásom. Idézet: „Mármint annál a programnál nem tudok eligazodni a portbeállításnál, amit fejlesztenem kéne (mert csak egy részét kell nekem megcsinálni), és nem a példaprogramoknál.” De amúgy kipróbáltam, és a ADC10AE &= ~BIT3; nélkül nem működik azon a helyen a programban, ahol programoznom kéne. Viszont ha a progi elejére beírom a ADC10AE &= ~BIT3; kihagyásával icserny sorait, akkor tutin működik. Tehát szerintem biztos, hogy ez is el lett állítva. Idézet: Megkell nézni, hogy tényleg az MSP430G2452 típust állítottad be a projekt opcióknál. Megkel nézni, hogy az io430g2452.h állományban (ezt is vedd fel a kötelező olvasmányok közé!!!) mi és hogyan van definiálva. „a fordító az ADC10AE &= ~BIT3; sornál azt írja error-al, hogy undefined.” Ha az io430g2452.h helyett az msp430g2452.h állományt használod, akkor értelemszerűen azt kell turkálni. Ellenőrizni kell azt is, hogy a BIT3 (meg a többi BIT) definiálva van-e. Ezek után már csak valami elgépelésre lehet tippelni.
Értem, és nem értem.
Ez olyan mintha 5-es írnánk egy programot, ahol mindenki csak egy részletet ír? Ha pl. az első ember beállította az analóg modult, és Te letiltod, akkor hogy, fog működni a program? Csak Icserny fórumtársunkat tudom idézni, miszerint "közös fejlesztésnél nem árt a fejlesztő társakkal beszélő viszonyban lenni..."
Értelek, és igazat is adok részben, de ha az én programrészletem végén visszaállítom, a beállításokat, akkor nincs probléma. Most nem tudok vele (a másik fejlesztővel) kommunikálni, mert külföldön van.
A kérdés arról szólt, hogy hogyan tudom beállítani, ha a P1.3 előző életét nem tudom. Ezt fogjuk fel egy gyakorlófeladatnak, és ehhez kell segítséget nyújtani. Amit részben meg is kaptam, azt hiszem. Köszönöm a válaszokat! A hozzászólások alapján ha sikerült valamire jutnom, írok. Idézet: Ez egyáltalán nem biztos, hiszen a P1.3-ra csatlakozó áramkör ottmarad. Ha valakinek a programrésze elkezdi matatni, akkor abból baj lesz.„ha az én programrészletem végén visszaállítom, a beállításokat, akkor nincs probléma.” Nem ismerem a feladatot, de ha lehetséges, akkor meg kellene egyezni, hogy ez a portláb az enyém, senki más ne babrálja el az ehhez tartozó biteket, mindenki csak azokat a biteket állítsa, amelyik hozzá tartozik. Ez azt jelenti, hogy pl. a P1DIR = valami, vagy ADC10AE0 = valami kerülendő, a nemkívánt mellékhatások miatt. Idézet: Akkor ez az én figyelmetlenségem volt, bocs! De látod, pont az ilyen bosszantó apróságok miatt kell a fejléc állományokat nézegetni, mert abból pillanatok alatt kiderül. „A "0" hiányzott a végéről.”
A belső hőmérő használata gyári kalibrációs adatokkal
Az MSP430G2452 és MSP430G2553 mikrovezérlők az ADC-hez is tartalmaznak gyári kalibrációs adatokat. A fejléc állományokban azonban nincs definiálva hozzájuk szimbolikus név, ezért vagy a programunkba, vagy a fejléc állományokba helyezzük el az alábbi sorokat:
A definíciókból kihagytam a volatile módosítót, feltételezve, hogy programfutás közben úgysem változnak ezek az adatok... A CAL_ADC_GAIN_FACTOR és az CAL_ADC_OFFSET elvileg az ADC-ből kiolvasott eredmény korrekciójához kell. Nálam ezek annyira közel esnek 1-hez és 0-hoz, hogy nem érdemes veszkődni vele. A mellékelt programban a 2,5 V-os belső referenciát használjuk, ezért a belső hőmérő kiolvasott értékének átszámításához a 2,5 V-os referenciával 30 és 85 fokon mért értékeket használjuk a C-fokra történő átszámításhoz, lineáris összefüggést feltételezve:
Vagyis a 30 fokhoz viszonyítunk, s az 55 fokos különbségnél (85 C - 30 C ) kapott gyári értékekből határozzuk meg a meredekséget is. A tapasztalat szerint az így kiszámolt érték kb. 3 fokkal fölé lőtt a szobahőmérőnek, ezért a továbbiakban 30 fok helyett csak 27 fokot használok a képletben. Ha tizedfokokat is ki akarunk íratni (bár sok értelme nincs), akkor a fenti képletben 10-zel kell szorozni a konstansokat (tehát 55 helyett 550, 30 helyett 300, vagy 27 helyett 270). A mellékelt mintaprogramban a P1.5 bemenetre kapcsolt feszültséget (0 - 2,5 V) is mérjük, valamint a 11. csatornában a VDD/2 feszültséget is. Utóbbiból meghatározhatjuk a tápfeszültséget, felhasználva, hogy most független referenciánk van. A feszültségeket millivoltokban célszerű kiszámolni. Ha takarékoskodni akarunk a mérési idővel, akkor nem túl nagy csalás, ha 1023 helyett 1024-gyel osztunk (hogy léptetéssel megoldható legyen), de a programban nem éltem ezzel a lehetőséggel. A kiírást a korábban már ismertetett outdec() függvénnyel végezzük, ahol második paraméterként a levágandó tizedesjegyek számát kell megadni (hőmérésnél 1, mV-ban kiszámolt feszültségnél pedig 3). A program érdekessége, hogy nem használunk benne float változót, s a kiíratáshoz a korábban bemutatott egyirányú szoftveres UART kezelést használjuk. A mellékelt képen P1.5 összevissza kóvályog, mert csak a felszedett zajt mérte...
Egy kicsit had dicsekedjek.
Két bontott "solar lámpa" napelemmel (sorba kötve), egy 1,2V 1500mA akksival, egy TPS61221-es Step up DC/DC converter segítségével, két hete megy, egy MSP430g2231-es, tesztüzemben, mely felváltva villogtatja a ledeket. Az akksit rendesen töltötte a napelem, a DC/DC konverter bemenő feszültsége 1,2V, a kimenő, stabil 3,274V. A TPS61221-est, max 200mA-ig lehet terhelni! Most egy hőmérő áramkört fogok tesztelni, nokia lcd-vel. Ha lesz időm, és valakit érdekel, csinálok róla videót.
Gratulálok, majd érdekelne a hőmérős áramkör tesztje is mert én is gondolkodok hasonlóban.
Gratulálok én is! Ezeknek a napelemeknek mi a fényigénye? A szabadban, napsütésben töltöd, vagy elég neki a szűrt/szórt fény is? Én egy kínai csodaketyerével próbálkozom, de ablaküveg mögött a saját töltésjelzőjét sem tudja kiszolgálni huzamosan.
Ha szűrt fényt kap akkor nem tölti fel teljesen az akksit egy nap, de mikor kiraktam a tűző napra, kb 5-6 óra elég volt, a teljes töltésre. Természetesen, ha már komoly áramkör meghajtására kerül a sor, akkor fogok venni egy, a méreteiben hasonló, ám teljesítményben nagyobb napelemet.
A link meg lemaradt: tehát valami ilyesmire gondoltam.
Ez nem ronditja el a háztetőt, és ha kiszámolom a költségeket, (220V-nál: trafó, elektronika stb...) hosszútávon jobban megéri, mint a 220. Egyébként most egy kazántermosztáton dolgozom, amiben lesz: 2db hőmérő, szivattyúvezérlés, óra naptárral, színes lcd-vel, és ezt napelemmel szeretném üzemeltetni, úgy, hogy a töltésvezérlést is a uC szabályozza. (még szerencse, hogy csak télre kell)
Egy kis matematikai segítséget szeretnék kérni, mert vagy túl meleg van, vagy már tényleg nem tudok számoni.
Egy timer-t szeretnék beállítani, egy ciklus lefutási idejének figyelésére. A timer modult úgy szeretném beállítani, hogy ne csorduljon túl (ha lehetséges). Megpróbáltam úgy megmérni a lefutási időt, hogy a ciklus elején, egy kimenetet ki/bekapcsolok, és szkóppal rámértem. Így ~75kHz-re jött ki a ciklusidő, de nekem ez pontosan kéne, minden egyes lefutás után. Odáig eljutottam, hogy ugye az adatlap szerint a mikrovezérlő (430g2xxx), egy utasítást 62,5ns alatt végez el. Nekem a uC 2,99MHz-en megy, akkor ~334,448ns alatt végez el egy utasítást. De hogyan tudom kiszámolni, hogy mennyire állítsam a timer-t, hogy nem csurduljon túl? |
Bejelentkezés
Hirdetés |