Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Szilvanak vannak fenntartasai a FET-ek miatt, hogy a LED es a 220R-en keresztul a FET-ek kaphatnak kapcsolo feszultseget. En jelenleg igy latom a helyzetet:
Ha megnezed a programot, az azt csinalja, hogy: 1. Mindent inputra tesz (lebegtet) hogy ne legyen zavar 2. Beallitja a PORTA-n hogy melyik oszlop van kivalasztva - minden mas 0 szintu 3. Ha az aktualis bit (sorkivalaszto) magas, azaz a LED-nek vilagitania kell, akkor a PORTB-n beallitja a szintet alacsonyra 4. Kovetkezik a TRISA vakargatasa: 5. A kivalaszto bitet mindenkepp kimenetre kapcsolja 6. A vilagitano LED-ekenek megfelelo TRIS-eket kimenetre allitja -- egyutt a megfelelo PORT pin 0-s szintjevel lesznek ezek aram nyelok Namost, vegyuk a legelso sort, LEDa:1 LEDb:1 LEDc:0 LEDa RA0 magas, mert kivalasztjha a sort, RB0 alacsony, mert vilagitani kell LEDb RA1 alacsony LEDc RA2 lebeg Tobbi oszlopban az RA0-ra kotott LED-ek (LEDa -k) katodjai magasan vannak, tehat tok mindegy milyen a bemenetuk... LEDb: RA1 alacsony, tehat mindenutt ahol aktiv magas van ott vilagitani fog -- de csak az RA0 aktiv magas, tehat csak az elso digitnel fog vilagitani LEDc: RA2 lebeg, sehol sem fog vilagitani.... ... es igy tovabb.... A FET-eket nem tudom, de gyanitom, hogy a LED-en is esik vagy 2V minimum, meg a 220R is kozre jatszik, szoval nem nyit ki rendesen -- lehet direkt olyan FET-eket kell kivalasztani amik ennyinel meg nem nyitnak. Ki kellene probalni persze, szerintem egyszerubb felepiteni egy akar 4x4-es LED-bol allo matrixot is, mint itt toprengeni mi tortenik.
Kösz a segítséget, a lebegtetéssel jogos a pont, de szerintem egy nagy bemeneti ellenállású FET-et nem illik szabadon hagyott GATE-el hagyni, mert akármitől be-ki kapcsolgathat!
Steve
Nincs az szabadon hagyva, ott van az a 10k-s ellenallas halozat ami foldre huzza a vonalakat.
Belenéztem az adatlapjába. Ez nekem magas. Majd beleégetem pic-be és kiderül hogy működik-e, de elösször csinálok egy új nyákot.
Igazad van, ezt most nem is figyeltem!
Steve
Este tovább gondolkoztam ezen a meghajtáson és megnéztem a 2N7000 adatlapját is (elmékeztetőül: erről van szó).
A 2N7000-nek a küszöbfeszültsége tipikusan 2.1V, ami azt jelenti, hogy source követő kapcsolásban a S-on a G-nél ennyivel negatívabb feszültség fog kialakulni. Vegyük azt az esetet, hogy az RA0 H szintjével kijelöljük a LED1 kijelzőt, aminek az anódján (CA pont) a fentiek értelmében 2.9V körüli feszültség lesz. Tegyük fel továbbá, hogy a többi RAx láb mind HiZ állapotban van. Könnyen belátható, hogy a kijelző szegmensein, az RAx szegmensvezetékekben lévő 220R-eken valamint a 10k-s "lehúzó" ellenállásokon keresztül áram fog folyni gyakorlatilag minden szegmensen, igaz, ez a normál üzemi áram nagyon kis töredéke, 100uA nagyságrendű. Az is könnyen átlátható ebből, hogy az RAx lábakra kötött FET-ek G-jeire a LED1 kijelző CA pontján lévő feszültségnek a szegmenseken létrejövő feszültségeséssel csökkentett mértéke kerül. A nagyon kis nyitóáram miatt becsüljük 1V-ra a szegmenseken létrejövő feszültségesést, így az RAx lábakra kötött FET-ek G-jei kb. 1.9V feszültséget kapnak. A source követők S lábain a fentebb leírtak miatt így már -0.2V-ok alakulnának ki, de ez nem lehetséges, mert már nincs annyi feszültségtartalék a tápfeszültségben, így a FETek lezárva maradnak. Az egész kapcsolás működése a FET-eken létrejövő feszültségesésen alapul, ha az túl kicsi lenne (pl. bipoláris tranzisztorokat használnánk), akkor a nem kívánt kijelzők is bekapcsolnának. Mindazonáltal a közölt kapcsolás szerinti áramkör esetén is vannak fals "árnyékok", azaz a kikapcsolt szegmensek sem tökéletesen sötétek, bár lehet, hogy a gyakorlatban ez nem észrevehető, vagy nem zavaró.
Üdv Mindenkinek!
nekem még mindíg 16f628 és GPS modul kapcsolatával kapcsolatban lenne kérdésem, illetve problémám. Millió verziót kipróbáltam már, de sehogy sem jutottam számottevő eredményre. Valami miatt nem szerintem a PIC-et nem sikerül jól átállítanom a megfelelő fogadási sebességre. A GPS 4800-on küldi az adatokat. Úgy már sikerült értelmes foszlányokat a kijelzőre varázsolni, hogy pillanatokra kikapcsoltam a tápot, majd vissza, ekkor értelmes NMEA adatokat(darabokat) írt a kijelzőre, de ezentúl semmi. Nincs vkinek véletlen ilyen példaprogramja ,vagy esetleg valami tanácsa? Tudom, hogy a forrás nem a legátgondoltabb és legrendezettebb, de eddig működik minden a TTL kommunikációt kivéve. mellékelnem az asm forrást. Előre is köszönöm denisz
Ha a BRGH-t 0-ra állítod és a kristály 4MHz-es, akkor az 51-es SPBRG érték, 1200baudot fog eredményezni.
Az igaz, hogy a 4MHz csak sacc, amit az egyik megjegyzésedből bányásztam ki, tehát pontosítsd az adatokat, hogy ha tévedek valamelyikben. szerk: Közben rájöttem, hogy az a programvégrehajtási sebesség, azaz a kristály minden bizonnyal 16MHz, akkor viszont a baud értéked is jó.
Nem emlékszem, próbáltál már valami időzítést(LED-re) készíteni, amivel megbizonyosodtál, hogy a kristály megfelelő frekin rezeg?
Vagy próbáltad már PC-n detektálni a modem jeleit egy terminalban?
oszcilloszkóppall kimértem, ott megvan, hogy 16Mhz az érték
Jobban megnéztem a programod(közben a legelső sorban a 16MHz-et is felfedeztem ), és azt hiszem megvan a bűnös.
Az a Delay100 nem valami jó helyen van. A modem nem egy karaktert küld és nem akkor kezdi, amikor lejár az időzítés ez tuti, ezért a várakozás közben érkező karakterek feltorlódnak a pufferben, ami a túlcsordulásjelzőt beállítja, ami elakasztja a további vételt. Ezt úgy kell szervezni, hogy megszakításban, (vagy nem megszakításban, hanem végtelen ciklusban várakozás nélkül, ami nem túl hatákony, de működhet a próbák idejére)) veszed a karaktereket sorban RAM-ba töltögetve a vége jelig(gondolom CRLF jön a sor végén!). Ha ez megvan, akkor feldolgozod, és várod a következő adagot.
De most nem ertem, Hyperterm-mel vagy Bray-zel letesztelted, hogy 4800 baudon kommunikal a PIC-ed?
igen valami light... nem tudom most pontosan mi volt a neve, mert az én gépemen nincs soros port. 4800, 8bit, 1 stop bit. ezekkel az értékekkel hibátlanul jött a jel
A PIC-től jött a jel, vagy a modemtől?
A PIC, vette is a jeleket? (Egy LED- el és egy összehasonlítással(kivonás, vagy XOR) lehet detektálni a pontos vétel megtörténtét.)
bocs, nem jól válaszoltam...
a GPS modult teszteltem le, a PIC et még nem, de ezt most megcselekszem
Kérlek erőltesd meg magad, és a mondatot kezd nagybetűvel és tagoltan írj, írásjelekkel! Köszi!
Meg lehet csinálni bipoláris tranzisztorokkal is: kép
Vegyük azt az esetet, hogy az RB0 magas, RB2 alacsony, a többi pedig nagyimpedanciás állapotban van a kontrollernél. Ekkor a Q1 tranzisztor bázisára magas szint jut, vagyis be tud kapcsolni, tehát a Q1 emitterét felhúzza kb. 4,3V-ra (vegyük 5V-nak a tápot és a PN átmenetet 0,7V-nak). RB2 alacsony, tehát a 02 jelzésű LED világítani fog. Közben az RB1 lábon a feszültség a 01 leden keresztül egy LED nyitófeszültségével alacsonyabb lesz, mint amekkora a Q1 emitterén mérhető. Vegyük a led nyitófeszültségét 1,5V-nak, tehát RB1-en kb. 5-0,7-1,5=2,8V-ot mérhetünk. Ez a 2,8V jut vissza Q2 bázisára, vagyis annak emitterén kb. 2,8-0,7=2,1V-ot mérhetünk. Ez a 2,1V jut a 12 jelzésű LED anódjára, annak katódján viszont 4,3-2=2,3V van a világító 02 LED miatt, tehát 12 LED nem tud világítani. Ha nem vétettem valahol a levezetésben, akkor ebből látható, hogy a nyitófeszültségek összegződése miatt nem tud olyan LED világítani, amit nem akarunk bekapcsolni, mivel a világító LED-ek lesöntölik a többi átmenetet. Idézet: „igen valami light... nem tudom most pontosan mi volt a neve, mert az én gépemen nincs soros port. 4800, 8bit, 1 stop bit. ezekkel az értékekkel hibátlanul jött a jel” Ha van PICkit2-d akkor azzal is lehet soros kommunikaciot csinalni... En is igy szoktam mert nekem sincs sorosom a gepemben... De amugy egy FT chippel eleg egyszeru sorosat varazsolni. Sem a PICkit2-hoz, sem pedig az FT-hez nem kell kulon szintilleszto, tehat meg jobb is mint egy sima soros.
És tényleg! Valóban igaz, a nem kiválasztott kijelzők anódján lesz annyival kevesebb feszültség, hogy az abban lévő LED-ek ne tudjanak kinyitni. A sötéten hagyott LED-ek derengése azért még szerintem fennáll. Most már akarok látni a gyakorlatban is egy ilyen kijelzősort működni
Idézet: „A sötéten hagyott LED-ek derengése azért még szerintem fennáll. Most már akarok látni a gyakorlatban is egy ilyen kijelzősort működni” Amugy csak ugy halkan jegyzem meg, hogy nem tudom emlekszel-e Szilva, hogy a jo multkor kiserleteztem egy nagy fenyereju LED-del. Ott mar nem emlekszem meddig mentem el ellenallasban, de 10k-nal meg eleg jol lehetett latni, hogy a LED vilagit -- tehat nagy fenyerejunel gyanitom ez a kapcsolas gondot jelenthet valoban. Talan legjobban olyen LED-del jar az ember amiben mar eleve benne van az aramkorlatozo is. Legalabbis ami a tapomban van arra veletlen tettem egy 470 ohmosat (kkhhhmmm, elfelejtettem, hogy ilyen specit vettem ) szoval az mar ezzel a 470-essel is elegge halovanyan derengett...
Ha ráérek, összelógatok egyet, bár csak hétszegmensű kijelzőim vannak itthon.
Az jutott még eszembe, hogy több kijelzőnél az alsó oldalra is kell meghajtótranzisztor, hogy a szegmensáram átlaga elég nagy legyen, és akkor oda lehet rakni szintén emitterkövető kapcsolásban PNP-ket. A PNP-k nyitófeszültsége is hozzáadódik a többihez, tehát még jobb lesz a helyzet a nyitófeszültségeket tekintve. Mondjuk azokat a bázisra kötött ellenállásokat nem értem, hogy miért kellenek, esetleg valami védelmi célból lehetnek ott. De szerintem nem nagyobb az esélye egy led tönkremenetelének, mint bármely másik alkatrész tönkremenetelének. Szóval én azokat az ellenállásokat oda feleslegesnek tartom.
Oszcilloszkóppal sikerült kimérni, mert épp nincs soros portos gép a közelben. 4808 az érték. Szerintem ez tűréshatáron belüli. Egyelőre ennyi, ami előrelépés, sajnos
Ha nincs ott, akkor is változatlan a helyzet...
Nem elég, hogy nincs ott! Az LCD rutin sem futhat le két beérkező adat között(legalább is van egy ilyen sejtésem, amit csak a szimuláció cáfolhat, ha lefuttatod.) Minden adatot el kell tárolj, és utána feldolgozz.
Az más kérdés, hogy első körben egy PC-ről, vagy egy másik PIC-ről, vagy saját magától kiküldve visszafordítva(Tx-Rx összekötve) kellene letesztelni, hogy maga a rutinod csinálja-e amit szeretnél 1 karakterrel! Nem LCD-t kéne detektálásra használnod, hanem egy LED-et, abban kevesebb a hibalahetőség. Egyébként az LCD rutinod működik? Hogy próbáltad le?
4800 helyett 4808? Az miert hatar eset? Hany stop bited van amugy?
Szamolj utana mekkora a bitido? Mekkora csuszassal kell szamolni a PIC reszerol? Mert nekem az adatlapbol ugy tunik olyan 0.15% kornyekere kell esnie, de nem szamoltam utana. Szoval ha tenyleg ekkora a sebesseg akkor az teljesen megfelelo szerintem.
A képlet szerint 4807.69-nek kell lennie, ehhez viszonyítva írtam a határesetet.
Az LCD rutin működik. Ha a text rutint hívom meg (a program végén van), akkor kiirja a beállított karaktereket. Futok egy kört azzal, amit írtál, hogy kiküldök a PIC-el egy karaktert és visszaolvasom.
Az a baj, hogy nem régen foglalkozom PIC programozással, hozzá szoktam, hogy ha valami nem stimmel, látom, hol a gond. Nehéz átállni ilyen módszerre.
A probléma a következő volt...(eddig):
A GPS vevő TTL szinten csak 3 V-ot adott magából, mivel gyakorlatlan vagyok, erre nem is figyeltem. Egy MAX 232-es beiktatásával a vevő RS 232-es jelét küldtem a PIC-be és láss csodát, az adatok hömpölyögnek a kijelzőn... Egy ilyen aprócska probléma négy napig foglalkoztatott... Nagyon köszönöm mindenki segítségét, ezek tartották bennem a lelket eddig!!
Igen, kb. ebbe az irányba terelt volna, ha megbizonyosodsz a rutin működéséről, és máshol kerested volna a hibát. Most csak szerencsés voltál, hogy rátapintottál a lényegre. Örülök, hogy sikerült! A hibakeresési módszereket azért ne feledd, mert ez így megy minden alkalommal, ha elakadsz. Módszeresen ki kell zárni a rendelkezésre álló megbízható megoldás választásával a hibát.
|
Bejelentkezés
Hirdetés |