Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
 
Témaindító: G-Lex, idő: Jan 9, 2006
Lapozás: OK   1302 / 1302
(#) cs_gabor hozzászólása Júl 12, 2019 /
 
bit 31-0 BMXDRMSZ<31:0>: Data RAM Memory (DRM) Size bits
Static value that indicates the size of the Data RAM in bytes:
0x00002000 = device has 8 KB RAM
0x00004000 = device has 16 KB RAM
0x00008000 = device has 32 KB RAM
0x00010000 = device has 64 KB RAM
0x00020000 = device has 128 KB RAM

"device has" ami azt jelenti, az eszköz rendelkezik. Akkor ez most mit jelent?
(#) cs_gabor hozzászólása Júl 12, 2019 /
 
Közben kitisztult, találtam adatlap szerint is 128k-s típust, gondolom ott lehet 0x00020000 a regiszter értéke.
Köszönöm a tanácsokat
(#) haffre hozzászólása Aug 12, 2019 /
 
Képtelen vagyok a PIC-em (PIC16F1788) C portját digital IN/OUT-ra állítani.
Van ez az "Alternate Pin Function", ill. "OUTPUT PRIORITY" lista, ahol a legkisebb prioritású az RCx pin.
Már próbáltam az összes perifériát kikapcsolni, de ez sem segít.
Tud valaki segíteni?
(#) pipi válasza haffre hozzászólására (») Aug 12, 2019 /
 
Hali!
amit használtam 1789-es initjét el tudom küldeni ha kell
(#) haffre hozzászólása Aug 13, 2019 /
 
Igen, légyszíves küld el, nagy segítség lenne. Előre is köszönöm!
(#) vandorbot hozzászólása Aug 16, 2019 /
 
Sziasztok !
16F628-ra írtam egy progit Proton basic progiban. Minden remekül működik kis szépséghibával. Két gombbal egy változó értékét állítom lefelé-felfelé. Az egyik az RA4 lábon (lefelé) Na ez szépen működik. A másik gomb RA5-ön ( MCLR láb amit a config wordbben I/O-nak állítottam ). Itt már van baj. Ha folyamatosan nyomom rendben növel, ha nyomkodom akkor leginkább csökkent, de néha növel. !!??.
Ha egyszerre megnyomom a kettőt, akkor kiugrik a goto ciklusból a megfelelő helyre, ez is rendben.
Az a baj, hogy a kijelző miatt elfogytak a lábak. Próbáltam az RB0 ( Int ) lábon azzal sem jó. Maradt még 4 db AN RA bemenet ezeken kívül.
--------------------------
GOMB:
Print At 1, 6, Dec2 flt
Print At 1, 11, "gr"
DelayMS 20
GOMBA:
If PORTA.4 = 0 And PORTA.5 = 1 Then GoTo csokk
DelayMS 10
If PORTA.5 = 0 And PORTA.4 = 1 Then GoTo NOV
DelayMS 10
If PORTA.4 = 0 And PORTA.5 = 0 Then GoTo LOJJ
DelayMS 10
If PORTA.4 = 1 And PORTA.5 = 1 Then GoTo GOMBA
DelayMS 10
csokk:
flt = flt - 0.01
DelayMS 250
GoTo GOMB
NOV:
flt = flt + 0.01
DelayMS 250
GoTo GOMB
LOJJ:
Cls
Print " GOOOOOOOOOOOO ! "
(#) Bakman válasza vandorbot hozzászólására (») Aug 16, 2019 / 1
 
Szerintem a
  1. GOMBA:
  2. If PORTA.4 = 0 And PORTA.5 = 1 Then GoTo csokk
  3. DelayMS 10
  4. If PORTA.5 = 0 And PORTA.4 = 1 Then GoTo NOV
  5. DelayMS 10
  6. If PORTA.4 = 0 And PORTA.5 = 0 Then GoTo LOJJ
  7. DelayMS 10
  8. If PORTA.4 = 1 And PORTA.5 = 1 Then GoTo GOMBA
  9. DelayMS 10
Cseréld ki erre:
  1. GOMBA:
  2. If PORTA.4 = 0 And PORTA.5 = 1 Then GoTo csokk
  3. If PORTA.4 = 1 And PORTA.5 = 0 Then GoTo NOV
  4. If PORTA.4 = 0 And PORTA.5 = 0 Then GoTo LOJJ
  5. GoTo GOMBA
Ha nincs lenyomva gomb, az előző három feltételes elágazás nem fog az igaz ágra ugrani, felesleges a negyedik opciót vizsgálni mert az az előző három sikertelensége okán igaz lesz. A gombok közötti késleltetés is felesleges.

Nincs kizárva, hogy HW probléma van. Milyen felhúzó ellenállásokat használsz?
(#) sdrlab válasza vandorbot hozzászólására (») Aug 16, 2019 / 1
 
Biztosabb megoldás, ha egy segéd változóba egyszer kiolvasod a megfelelő port állapotát, majd azon a változón végzed el az elemzést!
A te verziódban minden egyes vizsgálat(IF ág) során újból olvassa a port értékét...feleslegesen, és hibalehetőséget adva arra, hogy bármilyen impulzus megváltoztassa azt...
(#) vandorbot válasza Bakman hozzászólására (») Aug 16, 2019 /
 
10K-s fémrétegeket.
(#) vandorbot válasza sdrlab hozzászólására (») Aug 16, 2019 /
 
Megcsináltam a kettőtök által javasolt változtatásokat. Szuper. Köszönöm szépen a segítségeteket !
(#) Attila86 hozzászólása Vas, 17:16 /
 
Pásztázni szeretnék egy dsPIC-el, összesen 8db analóg bemenetet. Beállítottam az ADC-t a következőek szerint:
  1. //A/D konverter:
  2.     AD1CON1bits.ADON=0;         //A/D modul kikapcsolva!
  3.     AD1CON1bits.AD12B=1;        //12 bites mód
  4.     AD1CON1bits.FORM=0b00;      //Eredmény jobbra igazítása, előjel nélkül
  5.     AD1CON1bits.SSRCG=0;
  6.     AD1CON1bits.SSRC=0b111;     //Automatikus konverzió
  7.     AD1CON1bits.SIMSAM=0;       //Nincs szimultán mintavételezés
  8.     AD1CON1bits.ASAM=0;         //Automatikus mintavételezés kikapcsolva
  9.     AD1CON2bits.VCFG=0b000;     //AVSS és AVDD használata referenciaforrásnak
  10.     AD1CON2bits.CHPS=0b00;      //Csak a CH0 mintavevő csatornát használjuk
  11.     AD1CON2bits.ALTS=0;         //Nem használjuk az alternáló módot
  12.     AD1CON2bits.SMPI=0b0111;    //Minden 8. konverzió után történhessen megszakítás/DMA címléptetés
  13.     AD1CON3bits.ADRC=0;         //Az ADC konverziós órajelének a forrása a rendszer órajeléből származtatva
  14.     AD1CON3bits.ADCS=0b00000100;//TAD=5*TCY=142,85ns
  15.     AD1CON4bits.ADDMAEN=0;      //DMA nincs használva az A/D-hez, a konverzió eredményei az ADC1BUF0-ADC1BUFF bufferba kerülnek
  16.     AD1CHS0bits.CH0NA=0;        //A CH0 csatorna negatív jelének forrása a VREFL lesz
  17.     AD1CON2bits.CSCNA=1;        //Pásztázás bekapcsolva!
  18.     AD1CSSHbits.CSS24=1;
  19.     AD1CSSHbits.CSS25=1;
  20.     AD1CSSHbits.CSS26=1;
  21.     AD1CSSHbits.CSS27=1;
  22.     AD1CSSHbits.CSS28=1;
  23.     AD1CSSHbits.CSS29=1;
  24.     AD1CSSHbits.CSS30=1;
  25.     AD1CSSHbits.CSS31=1;
  26.     AD1CON1bits.ADON=1;         //A/D modul bekapcsolva!

Van egy 1ms-onkénti megszakításom amelyben az AD1CON1bits.SAMP bit bebillentésével manuálisan indítom a mintavételezést, és ha a nyolc mintavétel megtörtént akkor az ADC megszakítást generál amelynek kiszolgálásában kimásolom az eredményeket az ADC1BUF0-ADC1BUF7 regiszterekből. A dolog működik, van nyolc mérési eredményem amelyek ha hozzáérek a nyákhoz a kezemmel akkor változnak. Viszont szpóppal megnéztem hogy egy darab ilyen pásztázós mintavétel mennyi idő alatt megy végbe és ez néhány ms-ben mérhető ami rengeteg! Kipróbáltam hogy csak szimplán egyetlen mintát veszek, annak a mintavételnek az ideje csupán 1500ns. Hogyan lehet ilyen sok a 8db minta pásztázós vételének ideje?
(#) cross51 válasza Attila86 hozzászólására (») Vas, 21:06 /
 
Ránézésre amit elsőre feljövő ref man-ból ki szedtem szerintem nem a mintavételi időd a hosszú hanem a konverziós időd, mert ha az egy csatornás időeredményt nézzük a TAD=~142ns-mal elvileg 10 bit-re 12 TAD a konverziós idő (~1700ns) ami kb ott van amit írtál.

Gondolom szekvenciális mintavételed van
Idézet:
„If SSRC<2:0> = 111 and SSRCG = 0, the SAMC<4:0> bits should be set to at least ‘11111’ when using
one S&H channel or using simultaneous sampling. When using multiple S&H channels with sequential
sampling, the SAMCx bits should be set to ‘00000’ for the fastest possible conversion rate.”

Az általad írt kódrészletben a SAMC = 0-val és a leggyorsabb mintavételnek 1.5ms "kicsit" sok.
(visszacsatolásként az első gondolatra, mert én se vagyok benne biztos hogy jó amit mondok csak sejtés)

De a CHPS-ből ítélve több SH-d van nem vagy gyorsabb ha szimultán veszel mintát (bár gondolom a konverziós idő nagyobb mint a mintavétel)?
Következő: »»   1302 / 1302
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu