Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1096 / 1320
(#) cassis válasza p_istvan hozzászólására (») Szept 27, 2012 /
 
Mint ahogy én is....
Köszi a megoldást!
(#) p_istvan válasza cassis hozzászólására (») Szept 27, 2012 /
 
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.
(#) cassis válasza p_istvan hozzászólására (») Szept 27, 2012 /
 
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?
(#) p_istvan válasza cassis hozzászólására (») Szept 27, 2012 /
 
Jól, ha integerként kezeled.
Próbálom megérteni mi a problémád:
Idézet:
„kettedesponttól jobbra is keletkeznek bitek”
persze, mert a 65535-ot csak úgy lehet leírni! akkor nem lenne jobbra értékes bit, ha 65536-ról lenne szó...
A hozzászólás módosítva: Szept 27, 2012
(#) cassis válasza p_istvan hozzászólására (») 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.
(#) Hp41C válasza Hp41C hozzászólására (») Szept 28, 2012 /
 
Még nyalánkságok:
XC8 / HighTech C:
  1. 2218                           ;main.c: 1846: Month = BCD2BIN(DCF_Month / 8);
  2.   2219  0A1C  0021                      movlb   1       ; select bank1
  3.   2220  0A1D  083E                      movf    _DCF_Month^(0+128),w
  4.   2221  0A1E  0020                      movlb   0       ; select bank0
  5.   2222  0A1F  00ED                      movwf   ??_main
  6.   2223  0A20  36ED                      lsrf    ??_main,f
  7.   2224  0A21  36ED                      lsrf    ??_main,f
  8.   2225  0A22  36ED                      lsrf    ??_main,f
  9.   2226  0A23  086D                      movf    ??_main,w
  10.   2227  0A24  2720  3188                fcall   _BCD2BIN
  11.   2228  0A26  00B3                      movwf   _Month

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.
  1. 843                           ;main.c: 792: Second2 = BCD2BIN(I2CBuffer.bytes.b[1]) << 1;
  2.    844  093E  0020                      movlb   0       ; select bank0
  3.    845  093F  0844                      movf    _I2CBuffer+1,w
  4.    846  0940  2720  3188                fcall   _BCD2BIN
  5.    847  0942  0709                      addwf   9,w
  6.    848  0943  00BC                      movwf   _Second2

É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:
  1. 4158                           ;main.c: 2480: SoundCounter = Scratch & 0x0F;
  2.   4159  0EA5  087C                      movf    _Scratch,w
  3.   4160  0EA6  0020                      movlb   0       ; select bank0
  4.   4161  0EA7  00BD                      movwf   _SoundCounter
  5.   4162  0EA8  300F                      movlw   15
  6.   4163  0EA9  05BD                      andwf   _SoundCounter,f

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.
  1. 4158                           ;main.c: 2480: SoundCounter = Scratch & 0x0F;
  2.   4159  0EA5  087C                      movf    _Scratch,w
  3.   4160  0EA6  0020                      movlb   0       ; select bank0
  4.                                         andlw   15
  5.   4161  0EA7  00BD                      movwf   _SoundCounter

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
(#) Krisszes hozzászólása Szept 29, 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
(#) Attila86 hozzászólása 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:
  1. movlw   b'00001100'     ;PWM mód
  2.         banksel CCP2CON
  3.         movwf   CCP2CON         ;RC2-es láb PWM módban működik
  4.         banksel CCPTMRS
  5.         bsf             CCPTMRS, C2TSEL         ;CCP2 órajele a TMR4 legyen

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.
(#) Attila86 válasza Attila86 hozzászólására (») Szept 29, 2012 /
 
Bogarászom az adatlapot, az ODCON és a PMD0 regiszterek is játszanak, de mindkettő nulla.
(#) _vl_ válasza Attila86 hozzászólására (») Szept 29, 2012 /
 
Az Erratát nézted már? Sajnos már futottam bele szomorú dolgokba ott...
(#) Attila86 válasza _vl_ hozzászólására (») Szept 29, 2012 /
 
Megnéztem, de nem ír hibát a CCP2 modulhoz.
(#) mps hozzászólása Szept 29, 2012 /
 
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:
  1. #include "Compiler.h"

Egy mappában vannak ugyebár.
Viszont így már megismeri:
  1. #include "./usb/Compiler.h"

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?
(#) efiscp válasza mps hozzászólására (») Szept 29, 2012 /
 
Include search paths rendesen be van állítva? Nekem ilyen esetben nem talált dolgokat.
(#) mps válasza efiscp hozzászólására (») Szept 29, 2012 /
 
Igen, azt átnéztem többször is. Ez oldotta meg. Végülis mindegy, mert működik, bár izgat az oka.
(#) Hp41C válasza Attila86 hozzászólására (») Szept 29, 2012 /
 
Szia!

Évente megkéredezed? Bővebben: Link
(#) Attila86 válasza Hp41C hozzászólására (») Szept 29, 2012 /
 
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ó.
(#) Hp41C válasza Attila86 hozzászólására (») Szept 29, 2012 /
 
Szia!

Az ECAN modul CIOCON regiszterének CANCAP bitje?
(#) Attila86 válasza Hp41C hozzászólására (») Szept 29, 2012 /
 
Sikerült valahogy megcsinálnom. Hogy hogyan azt nem tudom, de most működik.
(#) Krisszes hozzászólása Szept 30, 2012 / 1
 
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.

PIC24_rtcc.c
    
(#) netnet.hu hozzászólása Szept 30, 2012 /
 
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.
(#) vicsys válasza netnet.hu hozzászólására (») Szept 30, 2012 /
 
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...
(#) netnet.hu válasza vicsys hozzászólására (») Szept 30, 2012 /
 
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.
(#) vicsys válasza netnet.hu hozzászólására (») Szept 30, 2012 /
 
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.
(#) _vl_ válasza netnet.hu hozzászólására (») Szept 30, 2012 / 1
 
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).
(#) vicsys válasza _vl_ hozzászólására (») Szept 30, 2012 /
 
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
(#) _vl_ válasza vicsys hozzászólására (») Szept 30, 2012 /
 
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.
(#) netnet.hu válasza _vl_ hozzászólására (») Szept 30, 2012 /
 
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.
(#) netnet.hu válasza _vl_ hozzászólására (») Szept 30, 2012 /
 
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.
(#) _vl_ válasza netnet.hu hozzászólására (») Szept 30, 2012 /
 
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).
(#) nem hozzászólása Okt 1, 2012 /
 
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
Következő: »»   1096 / 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