Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   508 / 1320
(#) pepe33 válasza menyus hozzászólására (») Jún 21, 2009 /
 
Nekem így is ugyan ezt adaja:

47 23.5030N 020 13.4440E
(#) menyus válasza menyus hozzászólására (») Jún 21, 2009 /
 
Kicsit eltértünk a PIC témától, bocs az OFF ért. (Bár nem sokan vagyunk itt jelenleg akiket ez zavart volna... )
(#) menyus válasza pepe33 hozzászólására (») Jún 21, 2009 /
 
Tényleg, most működik köszi. Az előbb elgépelhettem valamit mert a Google hisztizett hogy hibás a formátum.
(#) menyus válasza trudnai hozzászólására (») Jún 21, 2009 /
 
Bár az eredeti probléma megoldódott, hála pepe33 nak, az osztás feladat megoldása továbbra is érdekelne ha tunál segíteni a megoldásában....((#458100)

köszönöm
(#) watt válasza pepe33 hozzászólására (») Jún 21, 2009 / 1
 
Értem.
- Ezt - a doksit láttad már?

Ellenőrizd le, hogy égetés alatt a Vdd megvan-e minimum 2,65V.
Azt is nézd meg, hogy a bekötés megegyezik-e a 2-4 ábra első, vagy utolsó ábráján láthatóval.

Minden Vdd és Vss láb be van kötve (2-3 ábra szerint)? Vannak a lábaknál közvetlenül apró smd kerámia kondik?

(Bocs, ha újra kérdeztem volna valamit, de szeretném összefoglalni a dolgokat.)
(#) watt válasza menyus hozzászólására (») Jún 21, 2009 /
 
Van az osztásról némi leírás az oldalamon(forráskóddal(jobb gomb, mentés másként)).
(#) menyus válasza watt hozzászólására (») Jún 21, 2009 /
 
Köszönöm, már nézem is!
(#) pepe33 válasza watt hozzászólására (») Jún 21, 2009 /
 
A doksit láttam , minden VDD és VSS láb ami az ábrán vastagon van szedve be van kötve, VDD ken mérhető 3,1 V és a VSS-ek is jók , ENVREG szintén 3,1V VCAP lábon 2,5V mérhető.
Képet mellékelek. Már dierktbe is próbáltam rövid kábellel kötni a PICKITET , végső elkeserédesemben, de semmi nem változik.

P1040710.jpg
    
(#) watt válasza pepe33 hozzászólására (») Jún 21, 2009 / 1
 
Idézet:
„VCAP lábon 2,5V mérhető”

Van rajta 1µF-os kondi?

A másik kérdésem, hogy mekkora az össz kapacitás a Vdd-n? Ha túl nagy, akkor nem épül fel a Vdd kellő idő alatt. Ezt úgy lehet kicselezni, hogy a Vdd-t fixen ráadod, és nem a PK2-vel kapcsoltatod.
(#) lidi hozzászólása Jún 21, 2009 /
 
Küzdök már itt egész délután, a Timer1 -et szeretném beállítani úgy hogy T1CKIN pinre érkezett impulzusokat számolja. 12F683 + HiTech C. Forrás mellékelve. Mi a fene van ezzel ? Sehogy nem bírom számlálásra bírni, pedig szimulációban működik, ha a bemenetet váltogatom. 0 és 5V ot kapcsolgatok a bemenetre, de nem számol. Valakinek van valami ötlete hogy miért? Forráskód + project fileok mellékelve.
(#) watt válasza lidi hozzászólására (») Jún 21, 2009 /
 
Nem számol, vagy összevissza számol?
Mivel állítod elő az impulzusokat?
(#) icserny válasza skeletornb hozzászólására (») Jún 21, 2009 /
 
Idézet:
„Nem szívesen foglalkozok még 16 bites mikrovezérlőkkel, kicsinek tartom magam hozzá.”

Szerintem meg sokkal egyszerűbb és kényelmesebb, mint a PIC16F bankváltásaival szenvedni.

A 28 lábúak elég emberközeliek, a mellékelt "kapcsolás" szerintem elég meggyőző. Az igaz, hogy egy PICkit2 kell mellé, ha kényelmesen akar dolgozni az ember.

Az is igaz, hogy az ECE3274 tanfolyam programkönyvtárának van egy kis "mézesmadzag" jellege, mert az alábbi LEDvillogtató program "egyszerűsége" mögött elég bonyolult dolgok zajlanak a háttérben.
  1. #include "pic24_all.h"
  2. int main(void) {
  3.  configClock();
  4.  CONFIG_RB15_AS_DIG_OD_OUTPUT();
  5.   while (1) {
  6.     DELAY_MS(250);  
  7.     _LATB15 = !LATB15;
  8.   }
  9. }


De a "támogatói könyvtár" hókuszpókuszai nélkül is megírható röviden a program, s ha belegondolsz, hogy ez a pársoros kód már az ADC letiltásán kívül nyitott nyelőelektródás üzemmódot is állít és hardveres órát is kezel, akkor be kell látni, hogy nem is olyan bonyolult ez (legalábbis idáig).

  1. #include <p24Hxxxx.h>
  2. #define DELAY   3900   // késleltetés
  3.  
  4. main()
  5. {  
  6.     AD1PCFGL = 0x1fff;  // Analóg bemenetek tiltása
  7.     TRISB    = 0x7fff;      // RB15 legyen kimenet
  8.     ODCB     = 0x8000;  // RB15 legyen nyitott nyelőelektródás
  9.         T1CON    = 0x8030;  // TMR1 be, előszámláló = 1:256 Tclk/2
  10.         while( 1)
  11.         {       TMR1 = 0;
  12.                 while ( TMR1 < DELAY) { }
  13.                 _LATB15=!_LATB15;
  14.         }
  15. }


ECE-1.jpg
    
(#) lidi válasza watt hozzászólására (») Jún 21, 2009 /
 
Nem számol egyáltalán. Egy darab drótot dugdosok 5V és 0V között.
(#) icserny válasza lidi hozzászólására (») Jún 21, 2009 /
 
Rossz a konfigurációs bitek beállítása!
Az EC beállítás például letiltja TIMER1 bemenetét (T1CKI), mert ilyenkor CLKIN működik. INTOSCIO opció hasznosabb lenne...
(#) MPi-c válasza lidi hozzászólására (») Jún 21, 2009 /
 
Csak egy megjegyzés. C-ben nem igen használjuk a goto-t!
A mainloop-tól így szebb:
  1. while (TMR1L <= 10);
  2. OUT1 = 0;
  3. while (1)
  4. {
  5.    OUT2 = 0;
  6. }
(#) lidi hozzászólása Jún 21, 2009 /
 
Ohhogyaza, azt az EC -t már kínomban írtam át régebben. De most visszaírva jó lett. Köszi !

MPi-c: while-t ismerem, de számomra a goto szemléletesebb. Bár tudom, hogy átkozza mindenki, de túl rég óta használom a GOTO -t minden programnyelvben. (ZX81 basicje óta )
(#) pepe33 válasza watt hozzászólására (») Jún 21, 2009 /
 
Vddre 8db 100nF van összesen berakva, de próbáltam úgy is hogy a panelt saját tápjáról tápláltam , nincs siker.
VCAP, most visszatettem 2x100nF kondit, de egészen 10µF ig probálgattam már mindennel , nincs javulás.
(#) peti634 hozzászólása Jún 21, 2009 /
 
ÜDV.
Lenne egy kérdésem, hogy attól tönkremehet egy pic hogy összeér a vdd és a vcc??? Lehet hülyeség, de újra lehet e valahogy éleszteni?

A hiba: A nem lehet programozni a memóriáját, olvasáskor mindig 3FFF jön ki.
(#) baxo hozzászólása Jún 21, 2009 /
 
Sziasztok!

Most ismerkedem a PIC-el és assembly nyelven próbálom programozgatni. A kérdésem az lenne hogy:

movlw b'00001111'
movwf PORTC

beállítom a portc regiszteren mik aktivizálódjanak,(előtte kimenetre konfiguráltam őket) és kiadok egy:

bcf PORTC,1

parancsot mindent kinulláz a regiszterben nem csupán az 1-es bitet, és egy LED sem világít.
(#) watt válasza pepe33 hozzászólására (») Jún 21, 2009 / 1
 
Mi van a PGD, PGC lábakon, csak az égető?

A VCAP minimum 1µF kell legyen az adatlap szeint, de olvasom, hogy már próbáltad 10-el is, viszont a 2x100n kevésnek tűnik.
(#) lidi válasza lidi hozzászólására (») Jún 21, 2009 / 1
 
Uhmm, na mostmár tényleg nem tudom az előbb mégse működött rendesen, még kellett a T1CON 3. bitjét is 1 re rakni. Érdekes amúgy, mert ha a 3. bit 0, akkor a T1CLKIN/GP5 bemenetet tudom figyelni simán, és állapotától függően ledet bekapcsolni másik lábon. Így ellenőriztem az optokapu működését. Viszont így nem számolt a timer. Miután a T1CON 3. bitjét is 1 re kapcsoltam, már nem működött a GP5 bemenet olvasása, viszont számolni kezdett a Timer1.
(#) pepe33 válasza watt hozzászólására (») Jún 21, 2009 /
 
PGC,PGD,MCLR lábak alól kiforrasztottam a tüskét, úgyhogy csak az égető van rajta, gondoltam hátha valami a panelon történik velük, de így sincs siker, raktam 2,2µF kondit is a VCAP ra.....
(#) icserny válasza lidi hozzászólására (») Jún 21, 2009 /
 
Idézet:
„Miután a T1CON 3. bitjét is 1 re kapcsoltam...”

Jól bekapcsoltad az LP oszcillátort?

Inkább a 3-as bitet állítsd '1'-be, ha nem ragaszkodsz a szinkronizáláshoz!

Mellesleg: az adatlap szerint felfutó élre számol a Timer1.
(#) potyo válasza baxo hozzászólására (») Jún 21, 2009 / 10
 
A probléma forrása az ún. RMW probléma, Read-Modify-Write. Pontosítva az, hogy amikor a port egy bitjét módosítod, akkor a processzor beolvassa a teljes portot, módosítja az adott bitet, és visszaírja a teljes portot. Namost a beolvasáskor a láb állapotát olvassa be a processzor, nem pedig azt, amit előzőleg ráírtunk - remélem érted a különbséget.

Amit sokan mondanak ezzel kapcsolatban, hogy a probléma forrása az, hogy a láb nem állt még át a magas szintre az előző módosításkor. Pl.
  1. MOVLW b'00001111'
  2. MOVWF PORTC
  3. BSF PORTC, 7

Itt az történik, hogy kiírunk 00001111-et a PORTC-re, majd beolvassuk a PORTC-t, módosítjuk a hetedik bitet, és ismét kiírjuk a PORTC-t. Namost ha az első kiírás és a beolvasás között pl. az RC0 lábon a kapacitív terhelés miatt nem megy fel a feszültség elegendő szintre, akkor a beolvasás nullát olvas az RC0-ról, majd utána nullát ír ki vissza rá, tehát hiába írtunk előzőleg 1-et az RC0-ra, mégis nulla lesz rajta a BSF után. Namost ha a BSF elé beteszünk néhány NOP utasítást, vagy átrendezzük a programot, hogy valami mást csináljon a BSF előtt, akkor a kapacitív terhelés miatt bekövetkező jelenséget kiküszöbölhetjük. De csak a kapacitív miattit!

Ugyanis az RMW probléma akkor is jelentkezik, ha a lábon túl nagy az ohmos terhelés (pl. direkben van rákötve egy LED, akkor hiába világít esetleg a LED, akkor sincs elég feszültség a lábon, hogy az beolvasáskor 1-nek legyen olvasva. És ezen nem segít a NOP, mivel végtelen hosszú idő alatt sem megy fel a lábon a feszültség. Tehát itt a hardverkörnyezetet kell módosítani (a kapacitívnál is illik minimalizálni a kapacitív terhelést, vagy valami elválasztófokozatot használni).

A harmadik, ami miatt jelentkezik a probléma, az az, hogy vannak lábak, amiknek van analóg funkciójuk. Namost ha az analóg funkciót (komparátor, ADC) nem tiltjuk le, de kimenetté állítjuk a lábat, akkor a kimenetre íráskor a kiírt szint megjelenik a lábon, pl. a led világít. Olvasáskor viszont nem a láb állapotát olvassuk be, hanem mindig nullát, mivel az analóg funkció engedélyezve van, így digitális beolvasásnak nem lenne értelme, ezért a hardver ilyenkor nullára húzza a láb beolvasását. Ilyenkor gyönyörűen elalszik az RA2-re kötött led, ha végrehajtunk egy BSF PORTA, 3 parancsot. És nem volt se nagy kapacitív terhelés, sem nagy ohmos terhelés a lábon, egyszerűen nem állítottuk be a kontrollerünket az adott hardverkörnyezethez.

Mondjuk a PORTC-n emlékeim szerint nem szokott lenni analóg funkció, de az első kettő simán előfordulhat. Nekem kapacitív túlterhelés miatt még nem sikerült előhoznom a problémát, ohmos terhelés miatt már igen, pedig volt előtétellenállás a led előtt, és elvileg nemis terheltem túl a lábat, aztán gyakorlatilag meg mégis (azért közel volt a 25mA-hez).

A 18F-es és "nagyobb" PIC-ekben létezik minden porthoz egy LAT regiszter is, ennek az a feladata, hogy amikor egy bitet akarunk módosítani a lábon, akkor egy BSF LATA, 3 utasításnál nem a fizikai lábon mérhető feszültséget olvassa be a processzor, hanem azt az értéket, amit előzőleg a LATA regiszterbe beírtunk, tehát ha 1-et írtunk a LATA,2 lábra, akkor ez is lesz beolvasva, függetlenül, hogy mi van valójában a LATA,2 lábon, és az utasítást követően mind a LATA,2, mind a LATA,3 lábak magas szinten lesznek (persze csak akkor, ha kimenetté vannak állítva). De attól, hogy létezik a LATx regiszter, attól még ugyanúgy le kell a lábakon tiltani az analóg funkciókat, ugyanúgy kell megfelelő áramkorlátozó ellenállás a LED elé, és a nagy kapacitív terhelést ugyanúgy illik elválasztófokozattal táplálni. Tehát a LATx létezése nem mentesít a fentiek alól!
(#) lidi válasza icserny hozzászólására (») Jún 21, 2009 /
 
A 2-es bit kapcsolja a szinkront, az nekem nem kell. De tényleg nem megy a 3as bit nélkül. Nekem is fura.
(#) Hp41C válasza potyo hozzászólására (») Jún 21, 2009 /
 
Sziasztok!

Még egy eset a RMW szituációra: Amikor a feladat során a port egyes bitjei irányt váltanak.

Többször olvastam a fórumon, hogy pl. az I2C eeprom szoftveres kezelése egymagában megy, de egy másik programrészlettel egyszerre már nem. A probléma ugyan az. Az I2C kezelése open drain kimenettel történik, amit a pic-ek portjai nem tudnak (vannak kivételek 24F, stb..). Az alacsony szinetet a port kimenetre kapcsolásával, a kimeneti bit 0-ra állításával, a magas szintet a port bemenetre kapcsolásáva és felhúzó ellenállással valósítják meg. Egy RMW művelet a beállított alacsony szinetet elronthatja. Ez a művelet lehet, hogy nem is kapcsolódik az I2C kezeléséhez, de ugyan arra a portra vonatkozik, mint amin az I2C adat és órajel vonalak vannak.

Megoldás: a port kimeneti regiszterét nem olvassuk vissza, hanem minden állítást egy ram kópián végezünk el, és a kópia értékét másoljuk át a port regiszterbe.
(#) mate_x hozzászólása Jún 21, 2009 /
 
Helló!
Megépítettem ezt a kapcsolást:Bővebben: Link
azzal a különbségel, hogy BC560 as tranzisztorokat és négy darab különálló SA03-11EWA hétszegmenses kijelzőt használtam. Az a baj, hogy valamiért nem működik, valami összevisszaságot ismételget folyamatosan . Pedig én csak egy mezei órát akarok a szoba falára. Most a programmal lehet baj, vagy én építhettem rosszul a kapcsolást?

üdv:
mate_x
(#) kisszee válasza mate_x hozzászólására (») Jún 21, 2009 /
 
99%, hogy a két hétszegmenses kijelző lábkiosztása nem kompatibilis egymással, adatlapjaikat hasonlítsd össze.
(#) mate_x válasza kisszee hozzászólására (») Jún 21, 2009 /
 
Összehasonlítottam és úgy építettem össze a hasonlítás alapján. És ha így is lenne akkor sem tizedmásodpercenként mást mutatna. Jó lenne ha csak ennyi hiba lenne .
(#) baxo válasza potyo hozzászólására (») Jún 21, 2009 /
 
A kapacitív terhelést kizártam terhelést a proram átrendezésével, és idők beszúrásával.
Ohmos túlterhelődésre sem gyanakszom, az ellenállások megfelelően vannak méretezve a LED-ek előtt.
A 3. dolog már érdekesebb, mivel ezek a lábak amiket használok el vannak látva analóg funciókkal! Most már csak az a kérdés hogyan lehetne ezt letiltani? MPLAB-ot használok programozásra, fordításra.
Következő: »»   508 / 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