Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   524 / 1320
(#) potyo válasza Stefan hozzászólására (») Júl 8, 2009 /
 
Periódusidőmérés jobb választás. CCP modul Capture módja erre van kitalálva, nézd meg az adatlapban.
(#) trudnai válasza Stefan hozzászólására (») Júl 8, 2009 /
 
Ha kitoltesi tenyezot nem kell merni akkor talan egyszerubb ha azt mered bizonyos ido alatt hanyszor ment felfele a jel. Pl. 1s alatt szamolsz, es akkor nagyjabol 1Hz tol mar mukodokepes a muszered...

Masik modszer mikor az elvaltas ill a ket emelkedes kozotti idot mered. Ilyenkor alacsonyabb frekinel 1 emelkedest varsz meg, tehat elso emelkedesre indul a szamlalas, masodikra leall... magasabb frekiken pedig egyszeruen lehet novelni, hogy 10-et mersz, 100-at stb stb stb...

Kodmegdobas: Googlizz ra, tuti ezer szam vannak hasonlo projectek a neten...
(#) trudnai válasza Prince86 hozzászólására (») Júl 8, 2009 /
 
Idézet:
„Szerintem párszáz nF párhuzamosan vele megoldja ezt a problémát is.”


Van aki 1µF-osat tesz mindenhova hidegitonek -- de keramiabol es lehetoleg SMD kivitelben. Adatvonalra az adatsebesseg figyelembevetelevel lehet csak kondikat elhelyezni, ezert javasoltam az 50pF koruli erteket oda.
(#) Stefan hozzászólása Júl 8, 2009 /
 
Közbe rájöttem, hogy a periódusidőmérés lesz a jó, mert nemjó ha a program "áll" akár fél mp-re is.
Megnézem ezt a CCP-t, aztán ha nem jön be akkor maradok az élfigyelésnél, és a timernél.
Nemakartam guglizni, pont azért mert 10000 ilyen projekt van, és bevallom most kicsit lusta vagyok bogarászni

Köszönöm a segítségeket.
(#) Stefan válasza potyo hozzászólására (») Júl 8, 2009 /
 
Nézegettem az adatlapot.
Szóval akkor ezt kéne csinálnom:
Az első le/felfutó élre (CCP jelzőbit 1) törlöm a TIMER1 regisztert, a capture jelzőbitjét, megvárom amíg a bit 1 lesz, és akkor kiolvasom az eredményregiszterből az értéket, és ezzel továbbszámolok? Ennyi?
Bocs ha hülyeséget írok, első programom
(#) potyo válasza Stefan hozzászólására (») Júl 9, 2009 /
 
Most nincs a kezemben adatlap, de ha a CCP lábon bekövetkezik a jelváltozás, akkor a Timer1 aktuális értékét áttölti valamelyik regiszterbe, nevezzük ezt UJ-nak, amit te ezután szépen elmentesz magadnak mondjuk REGI néven. Legközelebb ismét áttölti a Timer1 aktuális értékét, ekkor fogod, és egyszerűen kivonod az UJ-ból a REGI-ben eltárolt értéket, és megkaptad, hogy hány órajelciklus futott le a két jelszintváltás között. Ezután az UJ értékét ismét átmásolod a REGI-be, hogy legközelebb ismét legyen mit kivonnod. Ezért jó a CCP modul, mert csak felfutó (vagy lefutó) élre reagál, és így periódusidőt mér, nem zavarja a kitöltési tényező. Ezután a periódusidőből meghatározod a frekvenciát, és kiírod LCD-re, hétszegmenses kijelzőre, elküldöd usb, ethernet, stb.

A dolgot még megfűszerezheti, hogy a Timer többször is túlcsordulhat két felfutó él között, de ezen gondolkozz egy kicsit, hogy kellene lekezelni
(#) Stefan válasza potyo hozzászólására (») Júl 9, 2009 /
 
Pont a Timer1 túlcsordulása miatt aggódok, hogy megfűszerezi a dolgot, ezért is gondoltam az első élnél való nullázásra
A másik meg , hogy a túlcsordulás miatt a kivonásra is külön algoritmus kellene nem? Nem egyszerű az élet...
12Mhz es kvarc esetén 5,41msecenként csordul túl, ami
184 hz... ennél kisebbet úgyse akarok mérni.
Kocsiba lesz fordulatszámmérőnek
Köszönöm a helpet
Üdv!

Szerk:
Ok , rájöttem ... tényleg ki lehet vonni... negyed kettőkör mér nemmegy a számolás 2bájtos változókkal
(#) kisszee válasza Stefan hozzászólására (») Júl 9, 2009 /
 
Szerintem ez a számolás nem jó, 12MHz -nél 1 utasításciklus az kb.~ 333ns, tehát így kb. 45Hz lesz nekem a mérés alsó határa. (1/65536*333ns). De lehet én számoltam el így fél kettő fele.
(#) potyo válasza Stefan hozzászólására (») Júl 9, 2009 /
 
12000000/4/65536=45,77Hz

Nemtudom, hány hengerről van szó, meg hogy milyen jelet mérsz, de ha négyhengeres és a gyujtótrafó primeréről viszed a jelet, akkor a 45Hz kb. 1350-es fordulatnak felel meg. Ezt ha még osztod az előosztóval mondjuk 1:4 arányban, akkor már használható lesz fordulatszámmérésre, ha négyhengeres a motor és a trafó primerjéről veszed a jelet.
(#) watt válasza Stefan hozzászólására (») Júl 9, 2009 /
 
Ahányszor túlcsordul a Timer1(Beállítod a timer1 megszakítását, és növelsz egy változót ha megtörténik) annyiszor 65536-ot hozzáadsz a kivonás eredményéhez. Nem túl komplikált.
(#) Stefan válasza kisszee hozzászólására (») Júl 9, 2009 /
 
Nemvettem figyelembe, hogy 1 ciklus 4 órajel
wattnak igaza van, az a legegyszerűbb ha deklarálok egy long int-et aztán abba számolok. 4 bájt csak elég...
Köszönöm segítséget mindenkinek, mostmár el tudok indulni
(#) Prince86 válasza trudnai hozzászólására (») Júl 9, 2009 /
 
1µF-os kerámia kondi? Sose láttam olyat még. főleg nem SMD-be.
Azt hittem a kerámia kondik kb 470nF ig vannak. Max ha kettőt össze teszek akkor nagyjából kijön az 1uF.
(#) szilva válasza Prince86 hozzászólására (») Júl 9, 2009 /
 
Pedig a legtöbb kis SMD kondenzátor kerámia. Csak persze a kerámia dielektrikumok közt is van különbség, vannak egész pontosak, kevéssé hőfüggők és olyanok is, amilyeneknek a hagyományos kerámiakondikat megszoktuk, hogy pl. nagyon hőmérsékletfüggő a kapacitásuk. 1µF-osakat már én is vettem és használom is őket, pl.:

Bővebben: Link

Nézd meg az adatlapot is, X7R-eseket lehet sok helyen kapni, az már egy elég jó kompromisszum a relatíve hőmérsékletfüggetlen viselkedésre.
(#) potyo válasza Prince86 hozzászólására (») Júl 9, 2009 /
 
Pedig létezik, egyszer valamiért én is vettem. Ugyanúgy néz ki, mint a 100nF-os, csak minden irányban kétszer-háromszor akkora. Bár ez nem smd, az igaz.
(#) Amarton válasza Prince86 hozzászólására (») Júl 9, 2009 /
 
SMD kerámiában még 10µF-os is van. Csak sokkal magasabb, mint a sima 1206-os.
(#) Amarton válasza potyo hozzászólására (») Júl 9, 2009 /
 
Ugyan úgy néz ki, de nem smd. Akkor mi? Huzalos?
(#) potyo válasza Amarton hozzászólására (») Júl 9, 2009 /
 
A lábas 1µF kerámia ugyanúgy néz ki, mint a lábas 100nF kerámia, csak a fizikai méretei mások. Lábas=átdugjuk a panelon, és a túloldalon forrasztjuk, szóval nem smd.
(#) Amarton válasza potyo hozzászólására (») Júl 9, 2009 /
 
"1ľF-os kerámia kondi? Sose láttam olyat még. főleg nem SMD-be."

Az erre adott válasz pedig:

"Pedig létezik, egyszer valamiért én is vettem. Ugyanúgy néz ki, mint a 100nF-os, csak minden irányban kétszer-háromszor akkora. Bár ez nem smd, az igaz."

Azért kérdeztem, hogy smd kerámiáról beszéltek, aztán ugyan úgy néz ki, de mégsem smd. Na mindegy.
(#) trudnai válasza Amarton hozzászólására (») Júl 9, 2009 /
 
Idézet:
„Azért kérdeztem, hogy smd kerámiáról beszéltek, aztán ugyan úgy néz ki, de mégsem smd. Na mindegy.”


Teljesen mindegy, a kondenzatorok eleg sokat fejlodtek az elmult 10-15 evben. Allandoan csokkentik a meretet es javitjak a tulajdonsagokat ahogy az egesz ipar fejlodik es ahogy egyre nagyobb szukseg van a nagy integraltsagu eszkozokre -- elegendo csak a mobil telefonokra gondolni. Ma mar olyanokat is figyelembe szoktak venni, hogy a kis meretu SMD kondiknak jobbak az egyeb parametereik -- minel kisebb annal jobb, hasonloan az ellenallasokhoz. Ma mar nem ritka, hogy 0201-es meretekkel talalkozik az ember...
(#) trudnai válasza trudnai hozzászólására (») Júl 9, 2009 /
 
Hmm, ugy tunik a mid-range-eknek is letezik "klonjuk" a Microchip-en belul:

HA2089

Kivancsi vagyok a 18F-eknek is van-e valami olcsobb valtozatuk
(#) mammut válasza trudnai hozzászólására (») Júl 9, 2009 /
 
Hehe! Én még nem is hallottam ilyenekről!
De nem semmi ez a kis mikrovezérlő(cske)..
(#) Prince86 válasza szilva hozzászólására (») Júl 9, 2009 /
 
Megint tanultam valamit!
(#) szilva válasza trudnai hozzászólására (») Júl 9, 2009 /
 
Ez ránézésre olyasmi, mint a 16F684. Vajon lehet rendelni is belőle a MC-től, vagy csak akkor, ha 10-100ezres tételben gondolkozom?
(#) Csaplar válasza trudnai hozzászólására (») Júl 9, 2009 /
 
Újra itt vagyok a problémámmal. Próbáltam minimalizálni a kódot és szétdaraboltam a nagyobb részeket kicsi eljárásokra, de sajnos nem oldódott meg a dolog:
  1. can not fit the section. Section '.code_main.o' length=0x0000023c


Említettétek, hogy a Linker scriptet kellene esetleg módosítgatni.
Még sohasem nyúltam hozzá, így nem tudom mire gondoltatok. Esetleg konkrétumot tudnátok mondani, hogy mit növeljek mire a 18f1220-as lkr-jében?

Mit lehetne még egyébként megpróbálni, hogy megoldódjon a probléma?

Köszi
Zoli
(#) benjami válasza Csaplar hozzászólására (») Júl 9, 2009 /
 
Használj 18f1320-at. Az teljesen ugyanaz mint a 1220 csak nagyobb a program memóriája. Ha nem megoldható akkor a kódodban nézd meg hogy mi foglal el akkora helyet, és ott próbálj meg optimalizálni. Ha használsz sprintf vagy hasonló könyvtári függvényeket, akkor váltsd ki sajáttal.
(#) icserny válasza Csaplar hozzászólására (») Júl 9, 2009 /
 
A fordító által generált .map fájl első két táblázatát (Section Info és Program Memory Usage) légy szíves megmutatni! Az, hogy a main mérete mekkora, nem sokat mond, hiszen nem tudjuk, hogy milyen sallangok kerülnek mellé.
(#) Csaplar válasza icserny hozzászólására (») Júl 10, 2009 /
 
Jó lenne ha maradhatna a 18f1220, abból van itthon néhány darab...
Mellékelem a map fájlt.

Köszi
Zoli

Terminal.map
    
(#) icserny válasza Csaplar hozzászólására (») Júl 10, 2009 /
 
Számoljuk össze a részleges MAP fájlban található helyfoglalásokat, és adjuk hozzá a main méretét, ami már nem fért be (itt page 0x002a - 0x0fff az a terület, ahová a kód elhelyezhető):

  1. .cinit             0x000e
  2. .code_vfprintf.o   0x0c22
  3. .code_DS1307.o     0x02a0
  4. .code_main.o'      0x023c
  5. -------------------------------
  6.                    0x110C


Ez nyilvánvalóan nem fér bele a 4 kilobájtos memóriába (pontosabban a 0x0026-0x0fff kódterületre). Az is látszik, hogy a memória legnagyobb részét (75 %-át!!!) a vfprintf könyvtári modul viszi el. Erről vagy le kell szokni, vagy keress egy nagyobb memóriájú mikrovezérlőt!
(#) messer hozzászólása Júl 10, 2009 /
 
Sziasztok!

Segítségeteket szeretném kérni! CCSC fordítót használok mplab-ban, és 12f508 al szeretnék megvalósítani egy kapcsolást. valamiért a GP2-es portot nem tudom írni.
A forrás:

#include <12F508.h>

#zero_ram
#fuses INTRC,NOWDT,PROTECT,NOMCLR
#use delay(clock=4000000)
#define XTAL_FREQUENCY 4000000 //kristály frekvenciája Hertzben
int flag;
#use fast_io (B)

//=============================================================
void init(void){
//=============================================================
set_tris_b(0b00000000); //portok definiállása 1-bemenet, 0-kimenet
//output_b(0b00000000); //PORTOK törlése (ellenörzött indulás)
flag=0; //flag törlése
}

//============================================================
void main(){
//============================================================
init();

//debug
for (;
{
output_bit (PIN_B2,1);
}
}

Segítségeteket előre is köszönöm!
(#) littlejoe hozzászólása Júl 10, 2009 /
 
Tisztelt fórumtársak!
Sajnos nem tudok programozni viszont a PARSIC nevű pic programnyelvet már valamennyire ismerem.Letölthető innen:http://rapidshare.com/files/193400110/Parsic_3.56.zip
A ds1820 as hőszenzort szeretném a parsicban használni ehhez viszont asm kód kellene.Ha lenne kedvetek ránézni a PARSIC programra és esetleg beleirni egy kiolvasó rutint a ds 1820-hoz azt sokan megköszönnénk a PARSIC-os fórumról!
Következő: »»   524 / 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