Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   408 / 1319
(#) Peti.Janka válasza szilva hozzászólására (») Feb 10, 2009 /
 
Köszönöm a választ! Örülök, hogy jó lett
(#) watt válasza Peti.Janka hozzászólására (») Feb 10, 2009 /
 
Megtennéd, hogy felteszed a rajzod? Kíváncsi vagyok milyen alkatrészekkel oldottad meg a kényes feladatokat. Köszi!
(#) Gatery hozzászólása Feb 10, 2009 /
 
Sziasztok!

Tudna nekem valaki segíteni...
Egy dsPIC33FJ128GP804 -el próbálkozom DAC-ot összehozni. És nagyon nem megy...és nagyon nem látom hogy hol lehet a hiba.

Ide bemásolom a kódot hátha észrevesz valaki valamit...

Ja igen amit látok hogy a kimeneten kb stabilan 1.4 Volt van. Ha változtamo a DAC1RDAT értékeét olyan 0.8 -tól változik 1.4-ig de nem lineárisan.


Kód:

#include "p33fxxxx.h"
#include "libpic30.h"

_FOSCSEL(FNOSC_FRCPLL); // Internal FRC oscillator
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_NONE);

void __delay32(unsigned long cycles);
void __delay_us(unsigned long);

void InitClock() {
PLLFBD = 38; // 80Mhz -40Mhz
CLKDIVbits.PLLPOST = 0; // N1 = 2
CLKDIVbits.PLLPRE = 0; // N2 = 2
OSCTUN = 20; //for 8 Mhz
RCONbits.SWDTEN = 0;
RCONbits.SWDTEN=0; // Disable Watch Dog Timer
}

void InitDAC(){
ACLKCONbits.ASRCSEL= 1, // Primary OCS as input
ACLKCONbits.SELACLK = 0; // Enable the reference clock
ACLKCONbits.AOSCMD = 0; // Auxiliary Oscillator Disabled
ACLKCONbits.ASRCSEL = 1; // Auxiliary Oscillator is the Clock Source
ACLKCONbits.APSTSCLR = 2; // Aux. Clock devider

DAC1CONbits.DACEN=1; // DAC module Enable
DAC1CONbits.DACSIDL=0; // Stop in idle mode
DAC1CONbits.AMPON=1; // Enable output amp during sleep
DAC1CONbits.FORM=0; // Data Format Unsigned
DAC1CONbits.DACFDIV=0; // Devide input clk

DAC1STATbits.ROEN=1; // Right Channel Enable
DAC1STATbits.LOEN=0; // Left Channel Enable
DAC1STATbits.RMVOEN=1; // R. Midpoint on pin
DAC1STATbits.LMVOEN=0; // L. Midpoint on pin

DAC1DFLT=32000;
}


int main(void) {

InitClock();
InitDAC();

TRISA=0b11111111111111111;
TRISB=0b11100111001111111;
TRISC=0b11111111111111110;

while(1){

LATBbits.LATB8=1; __delay32(400);
LATBbits.LATB8=0; __delay32(400);
DAC1RDAT=0xFFFF;
}
}

És előre is nagyon köszönöm!


(#) gambrus hozzászólása Feb 10, 2009 /
 
Sziasztok!

Kérdésem a következő lenne, 16f-es piceknél mi a különbség az RB0/INT és az RB4-7 lábon történő változás megszakítások között, azon kívül, hogy az INT megszakításnál van élválasztás és schmitt triggeres?
Konkrétan egy 16f627A-t kínzok, és míg az INT megszakítás tökéletesen működik, a másik hol működik hol nem, és egy 74ls14 schmitt triggeres inverter beépítése után is sokkal érzékenyebb a pergés jelenségre.
(#) icserny válasza gambrus hozzászólására (») Feb 10, 2009 /
 
Idézet:
„16f-es piceknél mi a különbség az RB0/INT és az RB4-7 lábon történő változás megszakítások között ?(Konkrétan egy 16f627A-t kínzok)”


RB0 külső interrupt bemenet, az INTEDG (OPTION.6) beállításától függően felfutó vagy lefutó élre reagál.

RB4..7 pedig a logikai szint megváltozására okoz interruptot (tehát hol felfutó, hol lefutó élre!) okoz megszakítást.

Pergésmentesítésnél tehát azt is ellenőrizni kellene, hogy interruptnál milyen szinten van éppen a láb...

Olvasnivaló: adatlap 14.6.1 és 14.6.3
(#) icserny válasza Gatery hozzászólására (») Feb 10, 2009 /
 
Jó lenne látni a kapcsolást, és azt, hogy hol és mit mérsz!

AVDD és AVSS gondolom VDD, ill. VSS-hez van kötve (és szűrve). Ha minden igaz, neked csatornánként három kimeneted van: egy pozitív és egy negatív (differenciális) kimenet, és egy "középleágazás".

Az adatlap szerint amíg az adat 0000-tól FFFF-ig megy, a pozitív kimenet kb. 0,65 V-tól 2,65 V-ig változik, a negatív kimenet pedig ennek a tükörképe, azaz 2,65 V-tól 0,65 V-ig változik. A "középleágazás" pedig 1.64 V körül áll stabilan.

Az általad mért értékek eltér ezektől, ezért lenne jó látni, hogy hol és mit mértél.

Megj: azt nem tudom, hogy miért 16 bites az adatregiszter, de így írják!
(#) icserny válasza icserny hozzászólására (») Feb 10, 2009 /
 
Na, közben leesett a tantusz.... ez 16 bites DAC! :yes:
(#) gambrus válasza icserny hozzászólására (») Feb 10, 2009 /
 
Igen, ezzel tisztában vagyok, de akkor ezek szerint más nincs.
A pergés mentesítést megpróbálom tökéletesíteni.
Köszi a választ.
(#) potyo válasza gambrus hozzászólására (») Feb 10, 2009 /
 
Alapvetően nem szokás pergésre hajlamos jelet megszakításos bemenetre vezetni. Illetve lehet, pl. azért, hogy felébressze a kontrollert a SLEEP-ből, de a bejövő jel állapotának feldolgozásához már nem a megszakítást használjuk fel.
(#) szilva válasza gambrus hozzászólására (») Feb 10, 2009 /
 
Azért annyi különbség van, hogy a "mismatch" állapotot, azaz a változást egy érdekes mechanizmussal állapítja meg a PIC, ami feltételezi, hogy a változásos interruptot előidéző portot kiolvasod az interruptban. Az INT megszakításnál emlékeim szerint nincs szükség ilyen jellegű hókusz-pókuszra.
(#) icserny válasza Gatery hozzászólására (») Feb 11, 2009 /
 
A DAC tesztelése talán egyszerűbb volna, ha az adatot a kísérletezéshez a DAC1DFLT regiszterbe írnád!

Az audio DAC, olyan mint a tamagochi, mindig "etetni" kell - interrupton vagy DMA-val - s ha nem kapja a beállított ütemben a jelet, akkor "visszaesik" a DAC1DFLT-ban tárolt értékre.

A Microchip honlapján a lap alján a 33F Ref. Manual 33. fejezete szemléletes ábrákon és mintakóddal mutatja be az interruptos és DMA-s kezelést.
(#) icserny válasza Gatery hozzászólására (») Feb 11, 2009 /
 
Idézet:
„Ha változtamo a DAC1RDAT értékét olyan 0.8 -tól változik 1.4-ig de nem lineárisan.”


Tegnap az adatlapból idéztem, miszerint 0.65 és 2.65 között kellene mozogni, ellenőrizni azonban nem tudom, mert nincs ilyen vezérlőm. Azonban van itt egy friss topik, amelyikben azt fejtegetik, hogy a dsPIC33FJ128GP802 adatlapja hibás lehet, mert a középszinthez képest csak -0.65 to +0.65 V kilengést mérnek (0000 - FFFF között).

Mivel a dsPIC33FJ128GP802 az általad használt dsPIC33FJ128GP804-nek a kistestvére, az is érintett lehet!

Mellesleg a Ref. Manuálban ajánlott külső erősítő kapcsolása is hibás:
  1. Document DS70211A (section 33 of the 33F Ref Manual).
  2. Section 33.8, page 33-15, Figure 33-5, "External Circuit Example".
  3. On the MCP6022 op-amps, the "+" and "-" inputs are reversed.
  4. On the op-amp inputs, it shows a 10K resistor connected to ground. Those resistors need to be connected to something above ground, such as "Vcc/2". As shown, the outputs of the op-amps sit at the 0-voltage rail, which means they cannot swing negative.


(#) gambrus válasza potyo hozzászólására (») Feb 11, 2009 /
 
Ezek szerint inkább inkább állandóan figyeltessem a bemeneti lábakat megszakítás generálás nélkül. Végülis járhatónak tűnik.
Köszönöm a válaszokat neked és szilvának is.
(#) potyo válasza gambrus hozzászólására (») Feb 11, 2009 /
 
Általában ugye a nyomógombok és a kapcsolók a pergésre hajlamosak. Ezek pedig eleve emberi beavatkozást feltételeznek, tehát egy kis késés (néhánytíz ms) a reakcióban nem probléma. Van egy készülő cikkem, ami még nem publikus, de már teljesen kész, csak még 1-2 fényképet akarok beletenni. Az ott szereplő firmware pontosan azt csinálja, hogy a megszakításra reagál, hogy felébredjen a kontroller, de a megszakítás szerepe itt be is fejeződik. Ha nem küldeném SLEEP-be a kontrollert, akkor nem is lenne szükség a megszakításra. Ha érdekel, itt a cikk: Link
(#) trudnai válasza potyo hozzászólására (») Feb 11, 2009 /
 
Idézet:
„Ha nem küldeném SLEEP-be a kontrollert, akkor nem is lenne szükség a megszakításra.”


Ha a GIE nincs engedelyezve akkor megszakitasi rutin vegrehajtasa nelkul is meg lehet ugyanezt tenni, azaz nincs megszakitas de attol meg a PIC fel tud ebredni es tudja folytatni a munkat a sleep mogotti utasitassal.
(#) potyo válasza trudnai hozzászólására (») Feb 11, 2009 /
 
Pontosan ezt csinálja a Firmware a kapcsolásban Így tényleg érthetőbb.

Szóval a megszakításjelző flag-et billenti be a változás, és ez ébreszti fel a kontrollert sleep-ből. Ehhez kellett engedélyezni az Interrupt-On-Change megszakítást, hogy felébreszthesse, viszont a globális megszakítás nincs engedélyezve, így a SLEEP utáni utasítással folytatja a munkát a kontroller.
(#) sirály12 hozzászólása Feb 11, 2009 /
 
Sziasztok.

Egy kérdésem lenne, mit kell akkor tennem, ha az mplab a következő hibaüzenettel jön nekem:
Unknown processor '18F4550'

A rendszert újra kellett raknom és azóta nem tudom használni az mplabot rajta.

Előre is kösz.
(#) slogan hozzászólása Feb 11, 2009 /
 
Sziasztok !

Kicsit OFF

Mit jelent az "SMD" és az "SMT" ?

Köszönöm

ON
(#) Sir-Nyeteg válasza slogan hozzászólására (») Feb 11, 2009 /
 
Bővebben: Link
Felület szerelt alkatrész, és technológia.
(#) trudnai válasza slogan hozzászólására (») Feb 11, 2009 /
 
SMD - Surface Mount Device, mig az SMT - Surface Mount Technology. Tehat ez utobbi az egesz technologiat jelenti mig az elozo magat a komponenst/alkatreszt.
(#) slogan válasza trudnai hozzászólására (») Feb 11, 2009 /
 
Köszönöm mindenkinek !
(#) icserny válasza sirály12 hozzászólására (») Feb 11, 2009 /
 
Idézet:
„mit kell akkor tennem, ha az mplab a következő hibaüzenettel jön nekem: Unknown processor '18F4550'?”

1. PONTOSAN megírni,hogy mindez hol, milyen körülmények között és milyen előzmények után következett be. (pl. assemler vagy C fordító futtatésakor, eszköz kiválasztásakor, stb.).
2. Gondosan utánanézni, hogy mi van a telepítési könyvtárban.
(#) sirály12 válasza icserny hozzászólására (») Feb 11, 2009 /
 
Á ez nem igaz. Nem néztem melyik verziót teszem fel, és egy régebbit raktam fel, amiben tényleg nincs benne. Felraktam a legújabbat, és mostmár jó.
(#) potyo válasza sirály12 hozzászólására (») Feb 12, 2009 /
 
Egy manőverrel törölhetnéd is a régebbieket. Én még a legújabb telepítőjét is le szoktam törölni telepítés után. Ha kell, majd letöltöm ismét.
(#) trudnai válasza potyo hozzászólására (») Feb 12, 2009 /
 
En azert nem szoktam letorolni a telepitoket mert mar nem egyszer kiadtak rossz valtozatot es csak az interim release mukodott - amibol me az archivumban sem oriznek meg peldanyt
(#) zspzs hozzászólása Feb 12, 2009 /
 
Sziasztok!

A PIC16F877A időzítő moduljával ismerkedem. Átolvastam az adatlapot, de néhány dolog még nem tiszta.
Amit meg szeretnék valósítani: az egyik bemeneten megjelenő impulzus hosszát (amíg a bemebet magas) megmérni, majd egy későbbi időpontban ugyan ilyen hosszú impulzust kiadni az egyik kimeneten.
A TIMER1 modul tűnik szimpatikusnak, mert 2 byte-os a számlálója.
Amit nem értek:
1. Hogy tudom az egyszer megmért és eltárolt impulzushosszat "visszajátszani"? Hogy lehet megmondani a timer-nek, hogy csak eddig számlálj, és ne tovább? (Az is jó lenne, ha visszafelé tudna számlálni, és nullánál figyelhetném a túlcsordulást, de ilyen lehetőséget nem találtam.)
2. Pontosan mit csinál a prescaler? Jól értem, hogy ha a prescaler 1:1, akkor FOSC/4 időközönként lép a timer számlálója, ha pedig mondjuk 1:4, akkor FOSC/4/4 időközönként?

Köszi előre is a segítséget!
Péter
(#) watt válasza zspzs hozzászólására (») Feb 12, 2009 /
 
2. igen jól érted.

1. Az impulzus hossz mérésére a CCP1 modult lehet használni megfelelő számlálási sebességgel. A mért értéket 65536-ból és beleteszed a Timer1 számlálójába amit ugyanolyan sebességgel számláltatsz, miközben az impulzus elejét elindítod. Mikor túlcsordul a timer, megszakítást is okozhat, amikor van lehetőséged az impulzust befejezni. Persze korrigálni kell az eltárolt értéket a lekezeléshez szükséges idővel(kivonással).
(#) slogan hozzászólása Feb 12, 2009 /
 
Sziasztok !

Modellvasútról beszélünk és ez egy "foglaltságjelző"
Feladata ,hogy egy ellenőriz kívánt szakasz foglaltságát megjelenítse a szemaforon.

Amit megvalósítottam :
Szakasz elején és végén a talpfák alatt felfelé egy-egy reflexiós - ha jól írom - optokapu.
Működése:
a felette elhaladó kocsikat - azoknak mindenféle kis apró barázdáit,lelógó ütközőit ,stb - "megszámolja" és egy regiszterbe beírja.
A másik végén -tehát "kihaladó szerelvény" - újra megszámolja ,beírja ,egy másik regiszterbe ,majd a két regisztert összehasonlítja.Ha egyezik ,akkor zöld a lámpa - elhaladt az összes "bejött" kocsi ,ha nem egyezik,akkor leakadt egy kocsi ,kvázi piros a lámpa.

Ez idáig tökéletes megy is ,mindkét irányból !
De.......

Mi van akkor ,ha nem megy ki a másik végén ,hanem egyszerűen visszatolat ?Akkor természetesen nem egyezhet a két regiszter.Gondoltam én balga ,teszek még két optot a meglévőkhöz elég közel - mintegy "párnak" - és az majd figyeli az ide oda tolatgatást......Igen ám de itt el is akadtam.
Tehát nem egy konkrét pontot kell vizsgálnom ,hanem egy barázdás valamit

Köszi aki válaszol !
(#) pixels válasza slogan hozzászólására (») Feb 12, 2009 /
 
Két ilyen résoptika kéne egymás mellé, és akkor az irányt meg tudod határozni... Innentől, ha visszafele megindul a szerelvény, akkor csökkented a regiszter értékét, mintha a másik oldalon menne kifelé a vonat...
Lehet szerencsésebb lenne egy egér érzékelőjét felhasználni, az pont ilyen célra készült ( iránymeghatározással számlál barázdákat) Ki kell kísérletezni melyik megoldás jobb.

szerk: ha két résoptikát raksz egymásmellé, mindenképp kell lenni olyan állapotnak, amikor mindkét érzékelő takarásban van, mert enélkül nem lehet irányt meghatározni.
(#) slogan válasza pixels hozzászólására (») Feb 12, 2009 /
 
Köszi !

Az ötlet bennem is eljutott idáig ,csak nem ilyen egyszerű sajnos !
Mert ha egy vagon nem megy át teljes egészében az egyik érzékelőpároson,az egyik többet számlál ,mint a másik

Megpróbálom szemléltetni....

O O optok
IIIIIIIIIIIIIII vagon alján mindenféle barázda
--------> bejövő irány
<-------- kimenő irány
Következő: »»   408 / 1319
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