Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1101 / 1320
(#) AccessDenied válasza kissi hozzászólására (») Okt 20, 2012 /
 
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.
(#) vilmosd válasza AccessDenied hozzászólására (») Okt 20, 2012 /
 
Nem egeszen! A " setup_oscillator()" fvenynek semmi koze ehhez. Ezzel allitod be a INTRC confignal a belso oszcillator frekvenciajat.
Idézet:
„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.

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.
  1. #BYTE option_r = 0x95
  2. #bit  t0cs=option_r.5
  3. #bit  t0se=option_r.4
  4. #bit  psa=option_r.3
Itt megadtuk a TMR0 beallito bitjeit. Majd a hasznalata :
  1. t0cs=0;   // belso oszci
  2. psa=1; //elooszto a wdt-hez rendelve
Ennyi az egesz beallitas. Persze van masik modszer is:
  1. option_r=0b00000111;  // ezt irjuk a OPTION regbe
Ezzel belso oszcit allitasz es az elooszto a TMR0-hoz rendelve, az osztas 1/256. A doksi alapjan tudod ertelmezni a beallitast.
Mert ugye ezzel a modszerrel nem hasznaljuk a beepitett fvenyt, hanem mi magunk allitjuk direkben a regisztert es a bitjeit.

(#) KoBalázs hozzászólása Okt 20, 2012 /
 
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!
(#) mps válasza KoBalázs hozzászólására (») Okt 20, 2012 /
 
Szia! Biztosan kell a mikrovezérlő? Egy ellenállással és kondenzátorral is megoldhatónak tűnik.
(#) KoBalázs válasza mps hozzászólására (») Okt 20, 2012 /
 
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!
(#) mps válasza KoBalázs hozzászólására (») Okt 20, 2012 /
 
Ugyan itt off, de ez hirtelen kisüti a kondit.
(#) foxi63 válasza KoBalázs hozzászólására (») Okt 20, 2012 /
 
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.
(#) AccessDenied válasza vilmosd hozzászólására (») Okt 20, 2012 /
 
É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...
(#) KoBalázs válasza foxi63 hozzászólására (») Okt 21, 2012 /
 
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
(#) _vl_ válasza KoBalázs hozzászólására (») Okt 22, 2012 /
 
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).
(#) vilmosd válasza AccessDenied hozzászólására (») Okt 22, 2012 /
 
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.
(#) Bukall hozzászólása Okt 23, 2012 /
 
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!
(#) watt válasza Bukall hozzászólására (») Okt 23, 2012 /
 
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.
(#) kissi válasza Bukall hozzászólására (») Okt 23, 2012 /
 
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
(#) Bukall válasza kissi hozzászólására (») Okt 23, 2012 /
 
Köszönöm! Sikerült megoldani a tanácsaitok alapján.
(#) Geri12345 hozzászólása Okt 23, 2012 /
 
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?
(#) watt válasza Geri12345 hozzászólására (») Okt 23, 2012 / 1
 
Nem kell PIC, de akkor nem ide való a kérdés...
(#) Geri12345 válasza watt hozzászólására (») Okt 23, 2012 /
 
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
(#) watt válasza Geri12345 hozzászólására (») Okt 23, 2012 /
 
Köszi!
(#) futlac hozzászólása Nov 1, 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!
(#) szaffo555 hozzászólása Nov 2, 2012 /
 
PIC24 assemblyt próbálok kicsit tanulni.

Az alábbi programban egy USART került megvalósításra.
  1. .include "p24FJ256GA106.inc"
  2.  
  3.  
  4. .equ CORCONL, CORCON
  5. .section .const, "r"
  6.  
  7. hello:
  8. .ascii"Hello Word \n\r\0"
  9.  
  10. .global __reset  ;kod start cimkéjének deklarálása
  11. .text
  12.  
  13. __reset:
  14.  
  15. clr             U1STA
  16. mov             #0x0800,W0              ;enable UART
  17. mov             W0,U1MODE
  18. mov             #12345,W0
  19. mov             W0,U1BRG
  20. bset    U1STA,#UTXEN
  21.  
  22. Again:
  23. ;rcall  Delay500msec
  24. mov             #psvpage(hello),W0
  25. mov             W0,PSVPAG
  26. bset.b  CORCONL,#PSV                    ;program Space Visibility
  27. mov             #psvoffset(hello),W1
  28.  
  29. TXSEND:
  30. mov.b   [W0++],W1                               ;
  31. cp              W1,#0
  32. bra             Z,Again
  33.  
  34. BufferTest:
  35. btsc    U1STA,#UTXBF
  36. bra             BufferTest
  37. mov             W1,U1TXREG
  38. bra             TXSEND
  39.        
  40. .end


Első kérdésem az, hogy a programban miért kell
  1. .global __reset
címkét globálisan definiálni? Enélkül hibát ad a fordító.
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
(#) icserny válasza szaffo555 hozzászólására (») Nov 3, 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 psvoffset operátor 0x8202 -t ad”
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 .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).




(#) szaffo555 válasza icserny hozzászólására (») Nov 3, 2012 /
 
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
(#) icserny válasza szaffo555 hozzászólására (») Nov 3, 2012 /
 
Idézet:
„mit értünk laphatár alatt?”
Azt a címet, ahol PSVPAG értékét is változtatni kell.
Idézet:
„Amit eddig tudok róla, hogy opcodja 1010 1000 bbbf ffff ffff fffb alakú”
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ó.
Egy kis disassembly talán megvilágítja:
  1. 0208  A80044     bset.b 0x0044,#0               20:       bset.B CORCONL,#0
  2. 020A  A82044     bset.b 0x0044,#1               21:       bset.B CORCONL,#1
  3. 020C  A84044     bset.b 0x0044,#2               22:       bset.B CORCONL,#2
  4. 020E  A88044     bset.b 0x0044,#4               23:       bset.B CORCONL,#4
  5. 0210  A80045     bset.b 0x0045,#0               24:       bset.W CORCONL,#8

(#) szaffo555 válasza icserny hozzászólására (») Nov 3, 2012 /
 
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
(#) stomo válasza beigli767 hozzászólására (») Nov 4, 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.
(#) Hp41C hozzászólása Nov 5, 2012 / 2
 
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.
(#) Hp41C hozzászólása Nov 6, 2012 /
 
Sziasztok!
Azoknak, akik sokat szeretnek számolni lebegőpontos számokkal: Kooprocesszorok SPI és I2C felülettel
(#) watt válasza Hp41C hozzászólására (») Nov 6, 2012 /
 
Ügyes, de hol kapható?
(#) _vl_ válasza Hp41C hozzászólására (») Nov 6, 2012 /
 
Ez szép meg jó, csak $20-ért már jobbféle ARM CPU-kat lehet kapni...
Következő: »»   1101 / 1320
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