Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Na ma próbálgattam, és T0_INTERNAL-t kell használni belső rc és külső oszcillátorral is. Annyi, hogy ha nem adom meg az setup_oscillator() értékét, akkor külső órajellel megy a timer0, ha megadok bármit, akkor belsőről. Gondolom a fordító automatikusan állítja. Mostmár minden rendben. A motor 1500-9000 között pörög.
Nem egeszen! A " setup_oscillator()" fvenynek semmi koze ehhez. Ezzel allitod be a INTRC confignal a belso oszcillator frekvenciajat.
Idézet: A TMR0 beallitasa az OPTION regiszterben tortenik, A T0CS bit allitja a belso/kulso forrast, a TOSE a kulso forras elet (LO/HI, HI/LO), a PSA az elooszto hozzarendeles TMR0/WDT. Mondjuk ez a doksiban a TMR0 fejezetnel vilagosan le van irva. Ugyanugy a CCS C help is tartalmazza a beepitett fvenyek funkcioit. Erdemes ezeket szorgosan olvasgatni. Persze van tobb modszer is, ahol be lehet allitani a TMR0 tulajdonsagait. Az egyik, hogy hasznalod a "setup_timer_0 (mode)" fvenyt, ahol fel lehet parameterezni az altalad kivant mukodesi modra. A masik talan bonyolultabb elso latasra, de egyszerubb a vegeredmeny szempontjabol. „This function controls and returns the state of the internal RC oscillator on some parts. See the devices .h file for valid options for a particular device. ”
Mert ugye ezzel a modszerrel nem hasznaljuk a beepitett fvenyt, hanem mi magunk allitjuk direkben a regisztert es a bitjeit.
Sziasztok!
Egy problémát kell megoldanom. A feladat a következő: Rendelkezésre áll egy analóg bemenő jel (+-) 0-5 V feszültséggel. Ezt a feszültségszintet (vezérlőjelet) egy potenciométer fogja szolgáltatni, aminek a pozícióját egy gázpedál pillanatnyi állása határoz meg. A probléma az, hogy a kimenő jelszint hirtelen nagyot tud változni. (Pl: padlógázos indulás) Megoldásként egy olyan mikovezérlős megoldás érdekelne, ami egy analóg bemeneti jelet másol egy analóg kimeneti jelre, de kizárva - egy bizonyos meredekség feletti változást. Köszi a segítséget!
Szia! Biztosan kell a mikrovezérlő? Egy ellenállással és kondenzátorral is megoldhatónak tűnik.
Szia!
Szerintem azzal az a baj, hogy ha a vezérlőfeszültség hirtelen 0 V lesz, akkor a kondenzátor még tárolja a feszültségértéket, így nem állítja le a rendszert. Azt nem írtam, hogy csak pozítív meredekségben kell a szabályzás. Szép estét!
Ugyan itt off, de ez hirtelen kisüti a kondit.
Szia!
jó az a kondi- ellenállás, csak még kell egy dióda. Felfutás -> ellenálláson keresztül, lefutás diódán keresztül- üdv.
Értelek, és köszönöm a segítséget. Valóban a setup_oscillator() függvénynek semmi köze a külső oszcillátorhoz, azzal a belsőt lehet megadni. A setup_timer_0() függvényben nincs olyan beállítási lehetőség, hogy externalra állítsam át a clock sourceot. De ha #fuse-nak megadod a HS-t, akkor csak akkor fog a külső kőről menni a cpu, ha nem hívom meg a setup_oscillator() függvényt, másképp átáll a belső oszcillátorra. A setup_timer_0() függvény úgy működik nálam, hogy T0_INTERNAL-ra van állítva, és akkor megy a timer0 a külső kőről. Egyébként az a megoldás, amit írtál a legprofibb! Pont ezt hiányolom a helpből is, hogy írják, hogy melyik függvény melyik regisztert írja/olvassa, és annak is hanyadik bitjét milyen paraméter megadására...
Szia!
Tényleg nagyszerű megoldásnak tűnik, de jó lenne szimulálni, mivel be kell bizonyítanom néhány embernek, hogy ez egy jó megoldás. Pspice megfelelő erre a feladatra? Köszi
Pspice jó, Tina is jó lehet (ti.com-ról ingyenes verzió letölthető).
Viszont ha lényeges, hogy 0-5V -> 0-5V legyen a transzformáció, akkor a dióda bizony látványos nemlinearitást visz a rendszerbe (nyitófeszültség, ugye). A mikrokontrolleres megoldásnak is vannak persze hibái, csak éppen másmilyenek. Ha az adott felhasználásban (gázpedál) az emberi életet is kockáztatja a készülék, akkor el kell gondolkodni a meghibásodások kezelése hogyan történjen (egy szenzor nem szenzor, egy vezeték nem vezeték, egy mikrokontroller nem mikrokontroller).
Ez a modszer alkalmazhato barmely regiszternel, es barmelyik bitnel. Jobban kezbentarthato a regiszterek irasa es olvasasa. Most nem tudok kuldeni mintapeldakat, de Te is tudsz csinalni sajat .H filet, aholis definialod a regisztereket, es a hozzatartozo biteket. Utana nem kell hasznalnod a CCS C beepitett fvenyeit, hanem Te magad tudod a dolgokat kezbentartani. Mellesleg egy-egy fvenyt vissza tudsz kovetni, mert forditaskor keletkezik egy .lst ASM lista, es szepen visszakovetheto mire forditott le egy fvenyt.
Sziasztok!
Jelenleg csinálok egy munkát, ebben kérnék tanácsot, segítséget. A feladat, hogy fotoellenállásal érzékelt fény intenzitásának változására irányítsak egy motort. Úgy oldottam meg, hogy A/D átalakítással egy előre beállított értékhez hasonlítom az ellenállás feszültségét (fix fényerőt kell elérnem), azaz kivonom a két értéket egymásból. Különbségből, azaz a carry tartalmából következtetve forgatom a motort. Ha carry 0, egyik irány, ha 1, másik irány. A probléma az, hogy amikor elérte a kívánt fényerőt, mindig túlszalad rajta, majd egyből vissza, így a motor azon a helyen "rezeg". Próbál beállni a pontos fényerőre, de ez a kivonásos művelet miatt lehetetlen. Azt kéne megoldanom valahogyan, hogy legyen egy bizonyos tolerancia, tehát a fényerő kis változására nem legyen egyből reakció. Tudna ebben valaki segíteni, ötletet adni? Assembly-ben írom a programot. Esetleg linkelhettek olyan cikket, kapcsolást, ahol ilyen vagy hasonló dolgot építettek meg. Köszönöm!
Nézd meg, hogy mekkora a bizonytalansági mező, ami a mérésből fakad, majd az összehasonlítás után(alapjel-mért érték) nézd meg, hogy ennyivel nagyobb, vagy kisebb-e az eredmény és csak akkor avatkozz be. Ezt holtzónának szokták hívni.
Az ilyen összehasonlításokat SUBLW, STATUS C és BTFSx ekkel szokták megoldani. Egyenlőséget XORLW és Z-vel.
Szia!
Kell egy kis hiszterézis: ha átlép adott irányban, akkor abba az ellenkező irányba változtasd meg a billenési pontot! Pl.: 160-as fényerő a kérdés, elérte, akkor átállítom 158-ra, így csak ott billen vissza, illetve ugyanez fordítva! Hiszterézis nélkül nem tudod megoldani, mert akkor azt csinálja, amit most! Remélem érthető volt a leírás?! Steve
Köszönöm! Sikerült megoldani a tanácsaitok alapján.
Sziasztok!
Egy kis segítséget szeretnék kérni az alábbi termékhez: ID-20 Nem értem pontosan hogy milyen kártyákat olvas. Ami EM4001 felett van azokat, pl Link1 vagy Link2 ? Valamint az érdekelne még, hogy soros porton tudom valahogy olvasni közvetlenül az adatokat vagy mindenképp kell PIC a dologba? Az olvasással nem lenne gond, labview ban visa-n keresztül könnyen ki tudom olvasni az adatokat csak kérdés hogy megoldható e így?
Nem kell PIC, de akkor nem ide való a kérdés...
Utólag én is észre vettem hogy nem ide kellett volna feltegyem. Átrakom az RFID-s kérdések közé.
A hozzászólás módosítva: Okt 23, 2012
Van egy rövid program-részletem NIGHTPIC V 2.1 basic-ben szeretném, ha valaki visszafordítaná ASM-be, vagy hex-ába fordítaná nekem.
dim i as byte dim a as word meres: a=counter porta.0,100 a=a*10 for i= 1 to 10 print”Frekv,=”,a,”Hz” next i goto meres Köszi szépen!
PIC24 assemblyt próbálok kicsit tanulni.
Az alábbi programban egy USART került megvalósításra.
Első kérdésem az, hogy a programban miért kell
Másik dolog, hogy a hello címkéjű szöveg hol van tárolva a PIC ben? Program a PSV elvet használja, melyben ablakot nyit a programtároló memóriára. A psvpage operátor sorát futtatva a szimulátor W0 ra 0x0000 -t ad, tehát ez lenne a hello első betűjének kezdőcíme.? A psvoffset operátor 0x8202 -t ad a W1 be, ez valami offset ablak de nem értem pontosan. A hozzászólás módosítva: Nov 2, 2012
A hello cimke előtt
.section .const, psv kellene. A leírások szerint ez garantálja, hogy ne essen laphatárra az adat. Idézet: A láthatósági ablak a 0x8000-es címen kezdődik, ide képeződik le a 0x000000 ROM cím. Az adat ezek szerint fizikailag a 0x000202 címen helyezkedik el a programmemóriában. (A felhasználó program a 0x000200 fizikai címen kezdődik, előtte a megszakítási vektorok IVT és AIVT táblája helyezkedik el).„A psvoffset operátor 0x8202 -t ad” A .global __reset direktíva a fordítónak szól. Ez a program belépési pontját definiálja globális szimbólumként (gondolom azért, hogy ezt a címet helyezze el a RESET vektorban).
Igen, az ASCII tényleg ott van 0x202 től, 2 karakterenként tárolva a program memoriában, és NOP utasításnak visszafordítva. Ezért nem találtam.
Ha szabad egy triviális kérdést: mit értünk laphatár alatt? A hozzászólás módosítva: Nov 3, 2012
Idézet: Azt a címet, ahol PSVPAG értékét is változtatni kell.„mit értünk laphatár alatt?” Idézet: Amint látod, ebben összesen 4 db. b-vel jelzett bit van. Ebből a bset.b csak hármat használhat. A negyedik bit (ami a 0. bitben van) csak bset.w utasításban használható.„Amit eddig tudok róla, hogy opcodja 1010 1000 bbbf ffff ffff fffb alakú” Egy kis disassembly talán megvilágítja:
Igen, közben ahogy leírtam megvilágosodott, töröltem is a kérdés ezen részét, de azért köszönöm a választ. Magam is ezen logika szerint néztem végig.
A hozzászólás módosítva: Nov 3, 2012
Szia beigle767!
Ha még nem válaszoltak és nincs megoldásod, első ránézésre a kódodban hibát találtam: 197/212. sor: a logikai OR operátort használod, de nem teszed egyenlővé semmivel. Használd így pl.: T1CON |= 0b10001111; És figyeld a warningokat. Ezen kívül nem látom, hol és hogyan konfigoltad a pic-et. Kódban ez nem látszik.
Sziasztok!
Sikeres a quartz nélküli USB konfiguráció tesztje a 16F1455 illetve 16F1459 kontrollerekkel. Az Active Clock Tuning (ACT) modullal az USB adatforgalom órajeléhez tudja állítani a belső oszcillátor frekvenciáját. Egy USB periféria a kontrollerből, 2 db kondenzátorből (egy a Vusb3v3 -ra és egy tápszűrő) és a csatlakozóból áll. Ilyen modullal készül még a 18F2xK50 család.
Sziasztok!
Azoknak, akik sokat szeretnek számolni lebegőpontos számokkal: Kooprocesszorok SPI és I2C felülettel
Ez szép meg jó, csak $20-ért már jobbféle ARM CPU-kat lehet kapni...
|
Bejelentkezés
Hirdetés |