Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Nekem így is ugyan ezt adaja:
47 23.5030N 020 13.4440E
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... )
Tényleg, most működik köszi. Az előbb elgépelhettem valamit mert a Google hisztizett hogy hibás a formátum.
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
É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.)
Van az osztásról némi leírás az oldalamon(forráskóddal(jobb gomb, mentés másként)).
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. 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.
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.
Nem számol, vagy összevissza számol?
Mivel állítod elő az impulzusokat?
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.
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).
Nem számol egyáltalán. Egy darab drótot dugdosok 5V és 0V között.
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...
Csak egy megjegyzés. C-ben nem igen használjuk a goto-t!
A mainloop-tól így szebb:
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 )
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.
Ü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.
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.
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.
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.
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.....
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.
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.
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!
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.
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.
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
99%, hogy a két hétszegmenses kijelző lábkiosztása nem kompatibilis egymással, adatlapjaikat hasonlítsd össze.
Ö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 .
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. |
Bejelentkezés
Hirdetés |