Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Mint ahogy én is....
Köszi a megoldást!
Szerintem rosszul spekulálsz, a mantissza tartalmát illetően, az nem normál integer szám:
Ha az exponenseket is összeszorzod akkor 32768-at kapsz (a megfelelő korrekciókkal) Tehát 65535-nél a mantissza 65535/32768=1,99996948242187 ez a 1/1 + 1/2 + 1/4 + 1/8 + ... + 1/32768 sornak felel meg= 0b11111111 11111111 00000000 tehát nem 'FFFFFF' lesz.
Szerintem jól, mert a rejtett egyessel a maradék 23 bitet egésznek tekintem, tudva róla, hogy ez a szám 2 hatványának valahány szorosával/részével eltér a valóstól. Ezen értékek összeszorzásával helyes eredményt kell kapjak (48 bitest), melyben balra 46 bitre ott a kettedespont. Ezt a szabályok értelmében a kitevővel korrigálva helyes eredményt kell kapjak.
Jól gondolkodom?
Jól, ha integerként kezeled.
Próbálom megérteni mi a problémád: Idézet: persze, mert a 65535-ot csak úgy lehet leírni! akkor nem lenne jobbra értékes bit, ha 65536-ról lenne szó... „kettedesponttól jobbra is keletkeznek bitek” A hozzászólás módosítva: Szept 27, 2012
Rendben. Úgy értettem, hogy az LSB 0. bitjétől balra a 46-47. bit között lesz a szorzásból eredő kettedespont. Értem amit írtál, nekem az volt a gondom, hogy az említett számokkal való szorzásból azt hittem pontosan megkapom a 65535 öt....
Sajnos a fentiek szerint nem vettem figyelembe, hogy a 3,27675 32 bites floatban nem ábrázolható pontosan, így nekem a szorzásból mindig jöttek "többlet" kettedespont utáni bitek. Pedig most jobban megnéztem a convertert tartalmazó lapot, és igaz nem kiemelve, de hozza a pontos értéket is. Csak észre kellett volna venni.
Még nyalánkságok:
XC8 / HighTech C:
Ha már a fordító az lsrf utasítást használja, akkor tudhatná, hogy az advanced midrange kontrolleren a WREG címezhető. Nem kellene a ??_main- be menteni (az érték nem kell másutt), majd visszahozni onnan, ráadásul az utolsó léptetés lsrf ??_main,w formában is el lehet végezni.
Érdekes, itt eszébe jutott az addwf WREG,w megoldás. A következő stikli viszont "megmagyarázhatatlan" hibás működéshez vezethet:
A SoundCounter egy többértékű szemafor, amit a megszakítási rutin használ fel. A módosítását un. primitív művelettel kell végeni, aminek lefutását a megszakítás nem tudja elválasztani, felbeszakítani. Ha a nagyrabecsült fordító a következő - szerintem kézenfekvő - módon fordítaná rövidebb is, és primitív művelet is lenne.
Már csak 768 utasítás kellene rövidítenem, hogy a program beneférjen a 16F1827 -re. Az adatok már elférnek a 384 byte RAM -ben... A hozzászólás módosítva: Szept 28, 2012
Mi az oka, hogy a fordító fittyet hány az OSCCON regiszter általam beállított értékeinek?
A hozzászólás módosítva: Szept 29, 2012
Megint nézeteltérésem támadt a PIC18F25K80-al. A CCP2 moduljából szeretnék PWM jelet kicsikarni, de nem ad ki semmit. A TRISC-ben kimenetre van állítva, ezen felül ezeket állítottam be:
De semmi. Megnéztem a CCPR2L-t hogy van-e egyáltalán benne valami, de van! Ezen a lábon nincs semmi más, csak a T1G. Megnéztem a T1GE bitet de nulla, tehát a gate funkció ki van kapcsolva. A CCP4 és CCP5 modulokat is PWM-nek használom, azokat is ugyan így állítottam be és azok működnek.
Bogarászom az adatlapot, az ODCON és a PMD0 regiszterek is játszanak, de mindkettő nulla.
Az Erratát nézted már? Sajnos már futottam bele szomorú dolgokba ott...
Megnéztem, de nem ír hibát a CCP2 modulhoz.
Sziasztok!
Ti találkoztatok már olyannal, hogy az Mplab8.85 MCC18 párosban van egy project a C:\!midi\proba útvonalon. az eredeti usb fájlok az áttekinthetőség miatt egy \usb mappában vannak. Minden féjl be van tallózva, ám az egyik nem találja a másikat (csak egy). A forrásban ez a sor az:
Egy mappában vannak ugyebár. Viszont így már megismeri:
Az alatta lévő másik includdal már nem kell eljátszani a kilépek visszalépek párost. Akkor is ezt teszi ha kihagyom a felkiáltójelet az elérési útból. Van erre magyarázat is, vagy csak egyszerűen ez ilyen?
Include search paths rendesen be van állítva? Nekem ilyen esetben nem talált dolgokat.
Igen, azt átnéztem többször is. Ez oldotta meg. Végülis mindegy, mert működik, bár izgat az oka.
Szia!
Ez teljesen más téma. az az RC0 és RC1 lábakat érintette, a probléma pedig a SOSC volt. Itt most RC2-ről van szó.
Szia!
Az ECAN modul CIOCON regiszterének CANCAP bitje?
Sikerült valahogy megcsinálnom. Hogy hogyan azt nem tudom, de most működik.
Sziasztok!
Elkészült és ketyeg az Real-Time Clock and Calendar (RTCC) áramkör a pic24fj128ga010-ban. Nem a legprecízebb de érthető. Ha valakit érdekel, csatoltam a c fájlt.
Helló mindenki!
Adott egy PIC18F14K22 ami 16 MHZ-en működik. Az INT0 lábbal váltóáram (230VAC/50Hz) nullátmenetét szeretném mérni, konkrétan azért, hogy kijelzőn megjelenítsem az áram frekvenciáját. Már eljutottam odáig, hogy kiszámoltam: az áramban 100 váltás van másodpercenként és 10ms időközönként van egy nullátmenet, ill. 20ms-ig tart egy teljes hullám. Átnéztem az AN521, az AN182 (AVR) cikkeket és odáig eljutottam, hogy a fázist közvetlen rádughatom az INT0 lábra néhány ellenállás beiktatásával. Amit viszont nem értek, hogy pontosan a szinusz melyik pontján fog keletkezni interrupt. A példa hardware is meg van építve, de INT0-ra még nem raktam ellenállást, mert nem tudom, hogy 1M, 2x1M, 5M vagy 10 M legyen rajta, valamint azt sem, hogy Vdd és nulla közé tegyek-e ellenállást és, ha igen, milyet.
Miért akarod a fázist közvetlenül rávezetni? Leveheted a jelet a trafód (tápfeszhez) szekunder tekercséről is amit aztán egy diódával és tranzisztorral már szép jellé formálhatsz...
Köszönöm, elvben egyet is értenék, de ez megbonyolítja a dolgokat. Nekem nem kell szép jel, mivel nem vagyok kíváncsi a szinusz tulajdonságaira és a táp jelenleg egy USBs telefontöltő. Csak a frekvenciát szeretném számolni, hogy a későbbiekben ezt másra is használhassam. Konkrétan majd a váltóáramon átfolyó áram mennyiségét szeretném mérni, de nincs értelme ennyivel előre menni, míg nem tudom megkeresni a nullátmenetet.
A szép jelet azért írtam, mert a hálózati szinusz nem az. Ahogy gondolod, de ezen már átrágtam magam én is. Igaz én teljesítmény szabályzót építettem, de fő szempont volt az érintésvédelem és korrekt detektálás.
A frekvenciát meg lehet mérni így, mivel ebből a szempontból teljesen mindegy, hogy hol fog a Schmitt-trigger kapcsolni, de azt lehet tudni, hogy minden periódusban pont egyszer fog. Azt viszont nem lehet pontosan kiszámítani, hogy a perióduson belül pont hol fog (az tuti, hogy nem pont a null-átmenetnél, és nem a csúcsnál, hanem valahol közben).
De az áramot nem fogod tudni így mérni, ahhoz áramváltóra (vagy esetleg egy söntellenállásra) lesz szükséged. További gond lesz, hogy a fogyasztód biztosan nem tisztán rezisztív, ezért RMS-t kéne mérned (egyidőben feszültséget és áramot, másodpercenként nagyon sokszor, és kiszámolni a pillanatnyi feszültség és áram szorzatának RMS integrálját). Elárulom, vannak erre cél IC-k, nem is horribilis áron, pl. egy ADE7763 nem kerül még egy ezresbe sem, és a feszültség/áram érzékeléshez szükséges illesztésen kívül csak olvasni kell belőle a mért értékeket (pl. feszültség, áram, freki, valós és látszólagos teljesítmény - gyakorlatilag minden, amit el tudsz képzelni).
Hmmm, nem rossz! Ezeket találtam még:
PM9106AP, Single Phase Watt Measurement Module With A 5 Digit Led Display PM9103AP, Single Phase Power/energy Metering Module PM9603AP, Single Phase Power/energy Metering Module Spi Interface PM9604AP, Three Phase Power/energy Metering Module For Spi Bus And Pulse Output Devices PM9105AF, Three Phase Power/energy Metering Module Pulse Output ADE7753, Active And Apparent Energy Metering Ic With Di/dt Sensor Interface - Analog Devices SA2005F, Three Phase Bidirectional Power/Energy Metering IC With Instantaneous Pulse Output MCP3906A, Energy Metering ICs With Active Real Power Pulse Output SA2007M, Single Phase Power/Energy Metering IC With Tamper Detection SA9602F, SINGLE PHASE BIDIRECTIONAL POWER/ENERGY METERING IC WITH INSTANTANEOUS PULSE OUTPUT ADE7751, Energy Metering Ic With On-chip Fault Detection - Analog Devices ADE7763, Single-phase Active And Apparent Energy Metering Ic - Analog Devices CS5460, Single Phase Bi-directional Power/energy Ic
Egyébként hibáztam, mert az ADE7763 csak teljesítményt mond, az ADE7753 tud részletes adatokat. Meg van belőlük háromfázisú verzió is...
Ez a projekt hívta fel rájuk a figyelmemet.
Ez a válasz sokkal jobb, dupla köszönet jár érte. Ugyan mindjárt neki fogok látni átnézni az adatlapokat ill. azt hiszem, hogy már a Microchip is dobott piacra hasonló terméked, de még nemigazán kaptam választ magára a kérdésre.
Idézet: „A frekvenciát meg lehet mérni így, mivel ebből a szempontból teljesen mindegy, hogy hol fog a Schmitt-trigger kapcsolni, de azt lehet tudni, hogy minden periódusban pont egyszer fog.” Azaz másodpercenként százszor? Idézet: „Azt viszont nem lehet pontosan kiszámítani, hogy a perióduson belül pont hol fog (az tuti, hogy nem pont a null-átmenetnél, és nem a csúcsnál, hanem valahol közben).” Igen, ott majd ki kell számítani valami eltolást, hogy meg lehessen tippelni, hol van a nullpont. Idézet: „ De az áramot nem fogod tudni így mérni, ahhoz áramváltóra (vagy esetleg egy söntellenállásra) lesz szükséged.” Sönt van tervbe véve, egy 10R 10W-os, hogy ne kelljen még műveleti erősítőt sem használni. Idézet: „További gond lesz, hogy a fogyasztód biztosan nem tisztán rezisztív, ezért RMS-t kéne mérned (egyidőben feszültséget és áramot, másodpercenként nagyon sokszor, és kiszámolni a pillanatnyi feszültség és áram szorzatának RMS integrálját). ” Én azt hittem (lehet tévesen), hogy ha a hullám legmagasabb pontján mérek (vagy legalább mindig ugyanazon a ponton), akkor annak a másodpercenként mondjuk 50 mérésnek az átlaga meg fog felelni egy olyan értéknek, ami arányosan nő vagy csökken az áramfelvétellel. Maga a feszültségmérés nem gond, legyen feszültségosztó vagy trafó, az a része már megy, bár egyszerre nem tudom mérni, mivel egyszerre csak egy ADC tud futni legjobb tudomásom szerint. Idézet: „Elárulom, vannak erre cél IC-k,” Igen, igen... csak azért kell mikrovezérlő mert a project ennél bonyolultabb! 10 csatorna mérése és etherneten való továbbküldése a cél. Ebből minden más megy, csak az az iciri piciri apróság nem, hogy AC-n fogyasztást mérjek. Még az se baj, ha az adatok nem pontosak, csak reálisak legyenek, mivel minden egy MySQL adatbázisba megy, úgyhogy a kész értékeken is el lehet végezni a kalibrálást. Csak az nem lenne jó, ha egy PC ami állandóan 20W-ot fogyaszt az egyszer 543-at mutatna ADC-n, a következő mérésben meg 68-at.
Igen, hasonló készülne már 6 hónapja. De egyelőre még a váltóáram alapjainál nem jutottam tovább.
Idézet: „Azaz másodpercenként százszor?” Ha egyenirányítasz, akkor százszor, ha nem, akkor ötvenszer (persze ez utóbbi esetben valahogy meg kell oldanod, hogy negatív feszültséget ne kapjon a mikrokontroller). Idézet: „Igen, ott majd ki kell számítani valami eltolást, hogy meg lehessen tippelni, hol van a nullpont.” Na ja, de azt az eltolást a készüléknek magának kellene bekalibrálnia (rendszeresen), mert az nem megy, hogy megméred, beírod a programba, mert holnapután 10 fokkal melegebb lesz, és simán odébbmehet a Schmitt-trigger küszöbfeszültsége mondjuk 50-100mV-nyit. És az eltolás frekifüggő is... Idézet: „Sönt van tervbe véve, egy 10R 10W-os, hogy ne kelljen még műveleti erősítőt sem használni.” A sönttel az gond lehet, hogy nincs galvanikusan leválasztva. A feszültséget trafóval le tudod, az áramváltó szintén galvanikus leválasztást ad. Galvanikus leválasztás nélkül a mérést végző komponenst (A/D vagy cél IC) az adott 220-as áramkörhöz kell kötni valamilyen módon. Az A/D esetén a váltóáram miatt ez nem lesz egyszerű, ill. minimum mérendő áramkörönként külön mérő kell, hiszen az áramköröket nem kötheted össze egymással. Cél IC-s esetben ez nem jelent extra gondot, hogy úgyis külön IC kell áramköröként, a vezérlő mikrokontrollert meg lehet optocsatolón keresztül hozzájuk kapcsolni. Idézet: „ha a hullám legmagasabb pontján mérek (vagy legalább mindig ugyanazon a ponton), akkor annak a másodpercenként mondjuk 50 mérésnek az átlaga meg fog felelni egy olyan értéknek, ami arányosan nő vagy csökken az áramfelvétellel. ” A nem teljesen színuszos görbék miatt eleve nem biztos, hogy kellően pontosan tudsz csúcsértékből effektív értéket számolni. Ezen felül a villanykörte, a hősugárzó és a villantűzhely kivételével nemigen van olyan háztartási fogyasztó, aminél el lehetne tekinteni attól, hogy a feszültség és az áram nem szinkronban megy, így pedig csak látszólagos teljesítményt tudnál mérni, ami fogyasztás szempontjából nem releváns. Különösen igaz ez a relatíve kis (5-10-20W) teljesítményű kapcsolóüzemű tápegységekre - mint pl. egy telefontöltő, mert azokban nincs PFC áramkör. Idézet: „bár egyszerre nem tudom mérni, mivel egyszerre csak egy ADC tud futni legjobb tudomásom szerint.” Nem kell egyszerre mérni, elég egyszerre mintát venni. Persze a legtöbb PIC-ben nincs két mintavevő (se), amiben meg van, az többe kerül mint az általam említett cél IC. Idézet: „csak azért kell mikrovezérlő mert a project ennél bonyolultabb! 10 csatorna mérése és etherneten való továbbküldése a cél. ” A mikrokontrollert itt sem úszod meg, csak nem kell küzdeni az AC mérés rejtelmeivel. Persze, ha az a célod, hogy a méréstechnikai tudásodat felfejlesszed, akkor érthetően nem ez a jó út Idézet: „Még az se baj, ha az adatok nem pontosak, csak reálisak legyenek” Az már inkább baj szokott lenni, ha a mért adatok nem eléggé lineárisak (pl. kétszer akkora fogyasztást háromszor akkorának mér), vagy ugyanakkora fogyasztású eltérő készülékeket eltérőnek mér (RMS mérés helyett látszólagos érték mérése).
Sziasztok!
Bár az adatlapban semmi nem utal arra, hogy nem lehetne megtenni, de ugye én az analóg bemenet földjének és tápjának adhatok teljesen mást, mint amit a kontroller digitális részének? A hasznos jel, amit A/D-zni akarok, 2 és 3 V között van (a PIC földjéhez képest), ezért gondoltam, a PIC megkapja a 0 , 3 V-ját, az AVDD lábra menne szintén a 3 V, és az AVSS lábra pedig egy feszültség követő m.erősítőt kapcsolással kreálnék 2V-ot. És akkor a 10 bit ezen a tartományon lenne 10 bit... Ehhez tartozó plusz kérdés, hogy ettől még ugye igaz marad, hogy az analóg bemenet láb 0 és 3 volt közé kaphat jelet tönkremenetel nélkül? Vagy az is lehet, hogy ez hülyeség, és nem így kell eltolni az AD referenciáját, mert végül is van VREF+ meg VREF- láb, de arra meg nem igazán találtam meg, hogy hogyan lehet eltolni az AD-zési tartományt... Ebben kérdek segítséget! Köszönöm! A hozzászólás módosítva: Okt 1, 2012
|
Bejelentkezés
Hirdetés |