Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   936 / 1320
(#) Ideiglenes válasza THL hozzászólására (») Márc 17, 2011 /
 
Az is kérdés lehet, hogy a PIC mely lábára megy az analóg jel, illetve hogy mekkora értékek jelennek meg a bemeneten. A feszültségosztónak az alsó vagy a felső ágában van Pt1000-es? Mekkora a feszültségosztó másik tagja?
8mV -> 20 digit
409mV -> 1023digit
Az A/D átalakító referenciája mire van állítva?
(#) kissi válasza Pepebá hozzászólására (») Márc 17, 2011 /
 
C fordító van feltelepítve ( pl. C18 a 18-as sorozathoz?) ?

Steve
(#) Hp41C válasza Pepebá hozzászólására (») Márc 17, 2011 /
 
Project / Project Wizard a típus kiválasztása utáni ablakban "Step Two" a "Select a language toolsuite" litáján a megfelelő fordító kiválasztása...
(#) Pepebá válasza Hp41C hozzászólására (») Márc 17, 2011 /
 
Üdv.
Köszönöm, működik a dolog.
(#) THL válasza Ideiglenes hozzászólására (») Márc 17, 2011 /
 
Hali!

az analóg jel az AN1 és AN0 lábakra megy ugyan is van benn egy visszacsatolás (mérem a mindenkori tápfeszt, mérem az esett feszültséget és mivel tudom a feszosztó felső tahjának értékét ezért tudok számolni a pt1000 ellenállására.) a pt1000 az alsó ágban van(egyik vége a testen másik a feszosztó felől) a másik tag egy 1.6 kOhm
2,048V-os referencia IC-vel a PIC Vref+ lábárakötve (így egy egység 2mV). Alapjáraton 753 egység van azaz 1506 mV
(#) Ideiglenes válasza THL hozzászólására (») Márc 17, 2011 /
 
Az ADCON1-be milyen értéket töltesz? A tápfeszt is osztón keresztül méred? Milyen méréstartományban gondolkozol celsiusfokban?
(#) THL válasza Ideiglenes hozzászólására (») Márc 17, 2011 /
 
5V-ról van egy 2V-os szabályzó és a 2V a tápfesze a feszosztónak. Szóval mérem a feszosztó előtt meg a közepén az ADCON1 = 10000001.
Igen celsiusban gondolkozom mivel a PT1000 elég lineáris karakterisztikával rendelkezik és ebből következően 3,8 Ohm változás jelent 1°C-ot.
Méréstartomány 20-300°C
(#) Ideiglenes válasza THL hozzászólására (») Márc 17, 2011 /
 
Ha az osztód valóban úgy van, ahogy írtad, akkor ott 788mV-nak kellene lennie ( +/- a Pt1000-es eltérése ).
Ha viszont 1506mV van ott, akkor az osztó 3915mV feszültséggel van hajtva.
(#) Ideiglenes válasza THL hozzászólására (») Márc 17, 2011 /
 
A Pt1000-es ellenállása 20°C-on R20=1078 ohm és ehhez a számításom szerint 824mV tartozik. Most nagyjából ennyit kellene mérned, ha valóban úgy áll össze az illesztés, ahogyan írtad.
300°C-nál az ellenállás R300=2120 ohm és az ehhez tartozó feszültség, ha nem tévedek 1167 mV.
Namármost 824mV-nál az A/D eredménye 411, az 1167mV-nál 583.
A 753-at soknak találom.
(#) THL hozzászólása Márc 17, 2011 /
 
a pt1000 ellenállása 1095 Ohm (25°C-on) a feszosztó felsőtagja pedig 1620 Ohm

a feszosztó 1900mV-al van megtáplálva és a feszültségesés 760mV

de sajnos nem ezekkel van a probléma, mert a mérés jó jól működik a rendszer (viszonylag) csak +-20 egységen belül random ugrál és egyszerűen nem jövök rá miért
(#) Ideiglenes válasza THL hozzászólására (») Márc 17, 2011 /
 
Én tennék valamennyi analog bemenetre legalább 100nF-os kerámia kondit, de inkább nagyobbat. Sima potméterrel kipróbáltad már, hogy mit mutat?
Ellentmondásos számomra, a korábbi és a legutóbbi írásod, miszerint alapjáraton 753 egység van, azaz 1506mV illetve, hogy a feszültségesés 760mV. Illetve egyszer azt írod, hogy 2048mV-ról megy a feszosztó, aztuán meg 1900mV. Ez azért nem mindegy. A PIC adatlapja szerint a Vref érték minimuma 2V lehet.
(#) THL hozzászólása Márc 17, 2011 /
 
Igen rájöttem elnéztem a dolgokat, mivel szervizelés céljából reátettem egy 4soros 16 karakteres kijelzőt és kiírattam pár értéket és csak a 753 ugrott be de az mV nem egység, korábban írtam rosszul elnézést érte

az előbbiekben azt nem írtam semikor hogy 2.048-ról megy a feszosztó, csak azt hogy a PIC azt a referenciát kapja
és azért az 1900mV azért majdnem 2V
tudom pontosabbnak kéne lennem de elnézéseteket kérem mert elég szétszórt vagyok.

A segítségeteket még 1x köszönöm!
Holnap majd belebarkácsolok aztán majd írok mit sikerült összehozni.

Jó éjt!
(#) icserny válasza THL hozzászólására (») Márc 18, 2011 /
 
Nem tudom, hogy miért kell bűvészkedni a referenciával, meg a tápfeszültség mérésével, amikor csak az osztási arányt kell meghatározni? Ha a Vdd-vel táplálod az osztót, akkor az ADC eleve a Vin/Vdd arányt méri (az 1023 végkitérés felel meg az 1.0-nak), ami az R1/(R1+R2) osztási aránynak felel meg. Ebből tehát a feszültség ismerete nélkül is meghatározható R1 (ha R2 ismert).

Az ADC konfigurálásánál fontos, hogy az adatgyűjtési idő (Tacq) és az adatkonverziós idő (Tad) jól legyen megválasztva. 20 MHz-es frekvenciához Tad = 32 Tosc vagy 64 Tosc kell).

Fontos a földvezeték, és a tápfeszültség kialakítása, a tápfeszültség szűrése, s a jelvezeték árnyákolása (ne legyen antenna).

A leosztott jelet is szűrni kell, s az ADC méréseket átlagolni. Ilyen nagyságú jel még elég jól kezelhető, mérhető.

Trivialitás, de csak leírom, hogy az osztó másik tagjának precíziós ellenállásnak kell lennie. Szükség esetén árnyékolni kell, ne szedjen fel zajt!
(#) watt válasza icserny hozzászólására (») Márc 18, 2011 /
 
Idézet:
„Trivialitás, de csak leírom, hogy az osztó másik tagjának precíziós ellenállásnak kell lennie.”

Igazából csak az lenne fontos, hogy hőre és egyéb hatásra ne változtasson az ellenállássán sokat. A konkrét értéke nem annyira fontos, miután programból lehet kalibrálni a mérőkört.
(#) Hp41C válasza THL hozzászólására (») Márc 18, 2011 /
 
Ellenállásosztóval a skála nem lesz lineáris. Egy hőkompenzált áramgenerátorral kellene meghajtani a hőelemet és a hőelemen eső fesültséget kellene mérni - ez lineáris skálájú mérést eredményezne...
(#) icserny válasza watt hozzászólására (») Márc 18, 2011 /
 
Én is így értettem: alacsony hőfoktényezőjű legyen.
(#) nyjani hozzászólása Márc 18, 2011 /
 
Sziasztok!
Segítséget szeretnék kérni a következő problémámra. Egy PIC24FJ64GB002 mikrokontrollerbe fejlesztem a szoftveremet és szükségem lenne arra, hogy tárolni tudjak adatot a flash memóriájában. EEPROM sajnos nincs benne. MPLAB 8.56, C30 környezetben írom a programot. Lefoglaltam a linkerrel egy akkora területet a változómnak, amit egy erase folyamat alatt töröl a flashből (512 utasítás), és ide raktam a változót, amibe írni akarok. Így nem kell arra figyelni, hogy valami fontos adatot esetleg felülírok. Erase után word-önként akarok beleírni. De az adat nem kerül beírásra. Csak a terület felszabadítása sikerül, mert mikor visszaolvasom, hogy mi van ott, 0xFFFF-et kapok. Nem tudom mit rontok el, vagy mit hagytam figyelmen kívül. A következő kódrészlettel próbálkoztam:
  1. unsigned int SecretKey[8] __attribute__ ((space(prog))) __attribute__ ((address(0x200))) = {1,2,3,4,5,6,7,8}; //globális változó 200h címen
  2.  
  3.             Page = __builtin_tblpage((const void*)&SecretKey);
  4.  
  5.             Offset = __builtin_tbloffset((const void*)&SecretKey);
  6.  
  7.  
  8.             //erasing flash
  9.  
  10.             TBLPAG = Page;
  11.  
  12.             __builtin_tblwtl(Offset,0x0000);
  13.  
  14.             NVMCON = 0x4042;
  15.  
  16.             asm("DISI #5");
  17.  
  18.             __builtin_write_NVM();
  19.  
  20.            
  21.  
  22.             KeyData = __builtin_tblrdl(0x7FF); //próbaolvasás, mennyit törölt? Ezt még szabad!
  23.  
  24.             KeyData = __builtin_tblrdl(0x800); //próbaolvasás, többet törölt-e? ezt már nem szabad!
  25.  
  26.            
  27.  
  28.             NVMCON = 0x4001;
  29.  
  30.             TBLPAG = Page;
  31.  
  32.             Offset = __builtin_tbloffset((const void*)&SecretKey);
  33.  
  34.             for(i=0;i<128;i++)
  35.  
  36.             {
  37.  
  38.                         if(i<8)
  39.  
  40.                         {
  41.  
  42.                                    __builtin_tblwtl(Offset,DataToWrite[i]);
  43.  
  44.                                    __builtin_tblwth(Offset,0x00);
  45.  
  46.                                    KeyData = __builtin_tblrdl(Offset); //próbaolvasás
  47.  
  48.                                    Offset += 2;
  49.  
  50.                         }
  51.  
  52.                         else
  53.  
  54.                         {
  55.  
  56.                                    __builtin_tblwtl(Offset,0x0000);
  57.  
  58.                                    __builtin_tblwth(Offset,0x00);
  59.  
  60.                                    Offset += 2;
  61.  
  62.                         }
  63.  
  64.             }
  65.  
  66.  
  67.  
  68.             asm("DISI #5");
  69.  
  70.             __builtin_write_NVM();
  71.  
  72.             Nop();
  73.  
  74.             Offset = __builtin_tbloffset((const void*)&SecretKey);
  75.  
  76.             KeyData = __builtin_tblrdl(Offset); //próbaolvasás sikerült-e?


Előre is köszönöm szépen a válaszokat!
(#) Ideiglenes válasza icserny hozzászólására (») Márc 18, 2011 /
 
Nekem adott ötletet, bár a Vref-et én is inkább a tápra szoktam állítani és a mintavételezést a belső RC-re bízom. A variálást, "trükközést" az indokolhatja, hogy a hardver minél egyszerűbb legyen, amit a PIC-kel és úgy általában a mikorvezérlőkkel kapcsolatosan meg szoktak említeni. Aztán majd a szoftverből megoldjuk a nehezét. Miért is rakták a PIC-be a Vref változtatásának lehetőségét? Még az sem lenne baj, ha nem lineáris a mérés, mert szoftverből úgyis lehet simogatni a karakterisztikát. Ha nem túl bonyolult a vezérlés, annak úgysem kell sok memória. A fennmaradót meg mindenféle korrekciós táblázattal fel lehet tölteni. Számomra csak az lenne a lényeg, hogy stabil legyen a mérés, ami a PIC lábához illeszkedik, a környezeti hőmérséklet ne vigye el a munkapontot.
Szóval én THL helyében úgy gondolkoznék, hogy adott az elvárt működési tartomány, 20-300°C. R300 értékkel hoznám létre a feszültségosztót, és így nem mennék el a Vref megengedhető legkisebb értékére. Itt az osztás 1:1, tehát egy másik egyszerű feszültségosztóval létrehoznám Vref-et 1:1 osztással 2,5V-ra. Ez jóval az alsó határ felett van. Ez azt is eredményezné, hogy 300°C -hoz 1023-as digitális érték tartozhatna, tehát a lehető legnagyobb. R20 nál az osztás alacsonyabb feszt eredményezne. Mivel minkét osztó ugyanarról a tápról kapja az alapot ezért ha a tápfesz változik, az osztók kimenete is egyenlő arányban változik és a digitalizált eredményt ez nem befolyásolja ( első közelítésben ).
Konkrétan:
Rfelső = 2200 ohm ( ilyet lehet kapni )
Ux az analog bemeneten = 5V * Rpt1000 / ( Rpt 1000 + Rfelső )
U20 = 1,64V -> 671dig, U300 = 2,45V -> 1002dig
A feldolgozási tartomány tehát 1002-671 = 331, ami ( ha lineárisnak teszem fel a mérést, de nem az! ) 280°C/331 = 0,85°C felbontást eredményezhet.
Egy picit még megvizsgálnám, hogy a Pt1000-es hőmérsékletének változása függvényében hogyan változik az osztó kimenő feszültsége, akár egy táblázatkezelő segítségével és abból már lehetne gondolkozni, hogy a program miként értékelje ki az analóg bemeneten érkező adatot.
(#) icserny válasza Ideiglenes hozzászólására (») Márc 18, 2011 /
 
Idézet:
„Miért is rakták a PIC-be a Vref változtatásának lehetőségét?”
Az a pontos feszültségméréshez való. Itt viszont - amennyire értettem - nem arról van szó.
(#) dtocy hozzászólása Márc 18, 2011 /
 
Heló!

Abba a problémába ütköztem, hogy a pic16f88-as mikrokontrollerem csak az egyik lábat nézi adc-nél, holott két lábon is kellene mérnie. A kódrészlet:
  1. adcon0=%10001101
  2.   egy = Adc_Read(1)
  3.   adcon0=%10000101
  4.   ketto = Adc_Read(0)
  5.   harom = egy+ketto/2


Az egy, ketto és a harom float-ra van állítva. Az ansel-lel analógra állítottam, a trisa-val bemenetnek az RA0-t és az RA1-et. MikroBasic-et használok. Tudja valaki hogy mi lehet a probléma?

A segítséget előre is köszönöm!
(#) zolo hozzászólása Márc 18, 2011 /
 
Sziasztok!

PIC18f6622-vel hajtok meg egy 2x16 karakteres LCD-t a háttérvilágítást meghajthatom közvetlenül a PIC lábáról?
(#) potyo válasza dtocy hozzászólására (») Márc 18, 2011 /
 
Külön-külön méregetve jó? Van elég idő a csatornaváltások között? Ilyenkor kellene megnézni a kapott asm listát, illetve kipróbálni szimulátorban, hogy mit csinál.
(#) potyo válasza zolo hozzászólására (») Márc 18, 2011 /
 
Közvetlenül nem. Tranzisztort vezérelhetsz vele és azzal kapcsolhatod.
(#) zolo válasza potyo hozzászólására (») Márc 18, 2011 /
 
Ha lesz az áramkörben műv. erősítő és a tokban maradt egy kihasználatlan akkor gondolom azt is használhatom. Ilyenkor mekkora erősítést állítsak be?
(#) dtocy válasza potyo hozzászólására (») Márc 18, 2011 /
 
Köszönöm a gyors választ, majd kipróbálom késleltetéssel és szimulátorral is.
(#) potyo válasza zolo hozzászólására (») Márc 18, 2011 / 1
 
LCD háttérvilágítása 300-400mA szokott lenni, egyszerű műveleti erősítők, mint ahogy a PIC lába is 20-25mA-nél többet nem tudnak. De egy emitterkövető üzembe rakott tranzisztor kell csak pluszban, illetve az háttérvilágítást beállító soros ellenállás, semmi más nem kell.
(#) Atielektro hozzászólása Márc 19, 2011 /
 
Sziasztok!

Újfent akadt egy kis problémám . Külső megszakítást szeretnék használni egy PIC24HJ64GP502-es pic-en, ami egy MicroStick nevű eszközön van rajta. A problémám az az, hogy valamiért nem lép be a megszakításba a program. Annyiban speciális a pic, hogy a perifériái szabadon multiplexelhetőek bizonyos lábak között. A programban elvileg mindent beállítottam...Amelyik lábon a LED van azt Open-kollektorosra állítottam és felhúztam 5V-ra, továbbá a külső interrupt is a megfelelő lábhoz lett rendelve.
A programot és a kapcsolási rajzot csatoltam. Az USB és az 5V-os tápforrás földjét közösítettem.
Légyszi segítsetek! Biztos valami bagatell hiba van benne, de én nem bírok rájönni
Előre is köszi!
(#) kisnagylaci hozzászólása Márc 19, 2011 /
 
Sziasztok! Szakdogámat írom és I2c kéne benne használnom, de már valami miatt ott elakadtam, hogy a C port minden lábát billegtessem, így meg az I2C-nek neki sem tudok állni! Az RC2 és RC3 nem akar billegni már szimulátorban sem!!!

#include "p18lf26k22.h"

void main(void)
{
PORTC=0;
LATC=0;
TRISC=0;
ANSELC=0xFF;

while(1)
{
ADCON0=0;
LATC=0xFF;
LATC=0;
}
}

MI lehet a probléma?? Előre is köszi!
(#) bankimajki hozzászólása Márc 19, 2011 /
 
Sziasztok, a 16F vagy 18F-es szériaban taláható olyan PIC, amelyik 12 bites A/D átalakítóval rendelekzik? Ill. több referencia ponttal. Hogy egyszere több különböző jelet tudjak mérni. (A cél: 1 PIC-kel egy labortápban 2 fesz. és 2 áram mérése. Ill. 4 kijelző vezérlése. A gond csak annyi, hogy elég nagy potenciálkülönbség lehet a 2 fesz. ill. 2 áram között, mivel ezek különálló egységek lennének.) Vagy egyszerűbb 2 PIC-et használni?
(#) dtocy hozzászólása Márc 19, 2011 /
 
Heló!

A/D konverzió tesztelése közben, egy elég furcsa dolog történik.
Elvileg ki kéne írnia a picnek a kijelzőre a feszültségértékének 100szorosát, ami meg is történik (386, és 3,86 voltot kapcsoltam a lábára), de viszonylag stabil periódusokban az érték kissé nagyobb ennél 410 körülig felugrik majd visszaáll.
Ez mitől van, és hogyan tudnám megakadályozni?

A segítséget előre is köszönöm.
Következő: »»   936 / 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