Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Közben variáltam a megszakításkezelőn:
E szerint, akkor kéne negálnia a ledet, ha felengedem a gombot. A gyakorlatban viszont általában nem negálja. Vagy rossz mindkét gomb amivel próbáltam vagy még mindig összeszed valahonnan valami zavart. A main loopban továbbra sincs semmi.
Az induláskori led-kigyulladásnál arra gondoltam, hogy talán nem jó az inicializáló sorrend, és bebillenhet miatta a port; ezt akár ki is próbálhatod, 0 helyett 1-el indítani a ledet, és ha nem világít, tutira van ott egy beragadó interrupt. Esetleg, mielőtt globálisan engedélyeznéd a megszakítást, töröld ki az RBIF flag-et.
Tutira prell lehet amúgy... Felfutó élre programoztad a megszakítást, vagyis gomb elengedésére, és ha mégsem invertál rendesen, akkor az "if (sw2)" feltételnél éppen nem látja a magas szintet, a kontakt miatt. Tényleg nincs egyetlen kondid sem?
Bármilyen PIC-el lehet őket kezelni. SPI protokolt is ismerik. Van adatlap az oldalamon...
Nem otthon vagyok, max a picről tudom leszedni az egyik 100nF kerámiát.
Az RBIF egy regiszterben van a megszakítás engedélyező bitekkel, így állítom be: INTCON = 0b11001000; Ez elé még tegyek egy külön törlést? Az init() alatt bekapcsoltam a ledet. De induláskor nem világított. Ez az init() fv:
szerk: Betettem a 12. sor alá: INTCONbits.RBIF = 0; Így már világító leddel indul. Én a gombra tippelek, olyan mintha kontakt hibás lenne, mintha random működne.
Nem biztos, hogy az RBIF 0 lesz a beírás után, az adatlap szerint legalábbis; a GIEH beírása előtt vagy be kéne olvasni a PORTB-t, vagy törölni az RBIF-et (a port olvasása is törli).
Csak kéne egy kondi a továbbiakhoz, szedj szét valamit...
Kipróbáltam dróttal, jobban ment mint gombal
A GIEH-t csak a többi beállítás és az RBIF törlése után engedélyezem.
Utólag olvastam, hogy átírtad, pont arra gondoltam én is.
Eszerint billegős gombod volt? Hát igen, ha nem remeg az ember keze, drótozni is lehet...
Akkor ez a probléma megoldva
Nagyon szépen köszönöm a segítséget!
Szia foxpaw,
Power up timer NEM lassitja ennyire, az kb 18ms kesleltetes, arra valo, hogy az oscillator szepen bealljon mielott a PIC-ben levo firmware elindul. Ha a firmware-ben nincs semmi kesleltetes az elejen, akkor valoszinuleg meg mindig kuszkodsz valami problemaval - pl a kristaly lassan all be. Tegyel a rogramba egy olyat, hogy rogton az elejen kigyujt egy ledet, es nezd meg kigyujtja-e "azonnal" a bekapcsolaskor. Mekkora kondik lognak a kristalyodon? Masik tappal megprobaltad mar az aramkorod amugy?
Sajnos csak 18 pf kondikat kaptam, annál kissebbük nem volt (15 pf ajánlott, ha jól tudom.)
A 16f876 azonnal indult, de rájöttem, hogy az elemtartó egyik vezetéke kontaktos (grrr), lehet, hogy azért nem indult azonnal. (Talán megmocorogtattam, és csak akkor kapott rendes tápot.) Azóta kicseréltem az elemtartót, de már a boardot is átépítettem a 876-hoz. (A végleges, teljes kütyü labortápról fog menni hál' istennek, szóval az elemmel nem lesz gondom.) Most semmi panaszom sincs (remélem nem is lesz), 16f874A-t tartalékba van rakva, most a másik saját 16F876-ot bűvölöm. Éppen AD konverziót hajtok végre ASM-ben és működik... Próbáltam HITECH C-ben, elvileg a minden config bitet beállítottam kódban, mégsem akart elindulni, úgyhogy maradtam a jó öreg assemblynél. Ott működik is és a hex is tizedakkora. A következő és végső állomás az USART belövése lesz. Nézegettem az adatlapot, és sajnos úgy érzem, hogy bőség zavara... Ha PC-hez akarom csatlakoztatni (MAX232 van), akkor melyik adatátviteli sebességre lenne szükségem a rengetegből?
Nem néztem bele a mellékelt zip-ekbe, de ebből a részletből nekem nem derül ki, hogy az RBIF-et kiváltó mismatch condition-t törlöd-e.
A törléshez az kell, hogy egy olvasási műveletet kiadj a PORTB-re, amivel a belső tárolókba kerül a láb aktuális állapota, és ezek után a változást ehhez képest fogja figyelni. Ha ezt kihagyod, akkor az interrrupt rutin befejezése után azonnal újra be fog jönni az RBIF interrupt.
Ha nem olvasol rá a portra, akkor a belső tárolók, amikhez képest a változást nézi, soha nem fognak megváltozni, így lehet, hogy az RBIF törlése után azonnal újra beíródik. Fontos a port olvasása (a belső összehasonlító regiszterek feltöltése miatt) minden egyes RBIF törlés előtt!
Valóban, azóta olvasgattam az adatlapot, és amit nagy hirtelen úgy értelmeztem, hogy vagy kiolvasás, vagy törlés, az igazából ezek sorrendje.
Hát, ha az ember először találkozik ilyen "nagyvadakkal" (mármint azokhoz a kontrollerekhez képest, ami nekem van), akár még tévedhet is Mindenesetre köszi a megerősítést, megjegyeztem magamnak.
Itt a megszakításkezelőm:
Így jó? szerk: most olvastam amit Koboldnak írtál. Ezek szerint kell még egy tmp = PORTB; a 3. sor elé v alá? szerk2: jut eszembe, az sw2 a PORTBbits.RB5, vagyis megvan a kiolvasás, akkor csak ez alá kell tenni az RBIF törlését és jó lesz?
Ha én is jól értelmeztem, akkor a második kiegészítés helyes, azaz sw2 vizsgálata után jön RBIF törlése.
Viszont talán az inicializáló részbe is kellene, a flag-et törlő sor fölé egy ugyanilyen tmp=PORTB kiolvasás...
Köszi az eddigieket!
Javítgattam a beléptető terminálomat... Végül is beleraktam még egy SD kártya olvasót, valamint kiegészítettem a tápot a szükséges 3.3v-al. Az akkus megoldást úgy akarom megoldani, hogy fixen egy 12V-s akksiról fog menni, ami folyamatos töltés alatt lesz! Kérlek nézzétek már át a kapcsolást, nehogy elrontsak valamit... Az SD kártya olvasó részben nem igazán vagyok biztos, de minden építő jellegű észrevételt szívesen fogadok! Köszi és üdv. Zoli
Bocs, kevés a szabadidőm...
Szóval élőben kipróbáltad, és műkidik? Hogy kötötted be a PIC-et? Itt van a cikk, így csináltad?
Szerintem az MCLR-t nem szabad foldre huzni, meg jo, hogy a konfiguracioban ki van kapcsolva, kulonben nem menne. Nem latom igy szerepet, teljesen ertelmetlen es hibalehetoseg.
Ami felmerult pet, ha vissza olvasol, hogy ez ahol jelenleg meg van irva 10 masodpercet(!) var mielott villogni kezd. Kapcsold be az aramkorod, es varj kb 15mp-et mielott kikapcsolnad, ha addig sem kezd ell villantgatni akkor lehet valoban baj van.
Igen működik!! :yes: :yes:
Csak várni kellett egy kicsit. Kösz mindenkinek a segítséget és bocs, hogy keveset olvastam
Ha jól tudom az SD kártya nem visel el 5V-os bemenő jeleket. A PIC pedig nem biztos, hogy a 3V-ot H szintnek veszi. Ide lehet, hogy kell egy illesztő IC, pl. 74VHCT04A
Egyébként nem vállalhatom, hogy egy ekkora rajzot átnézek helyetted, és azt mondjam biztosan jó. Még a saját terveim sem mindig indulnak elsőre, annak ellenére, hogy igen nagy munka van bennük. Ne is csodálkozz, hogy más se vállalkozott erre eddig, hiába kérted. A jó megoldás, hogy próbapanelon részenként összerakod és lepróbálod.
Van egy próbapanelem, amibe a 683 illeszkedik, és momentán van is itthon egy marékkal (jó kis darab, azért szereztem be belőle jópárat).
Úgyhogy semmi extrát nem csináltam, csak betettem egy 683-at a panelba, átírtam az asm-ben a GPIO2-re a LED-láb definícióját (mert ezen a panelemen ott van egy LED), fordítottam, programoztam és már ment is. A próba alatt a tápfeszt a PICkit2 szolgáltatta. Viszont most elolvastam a cikket is, hát mit mondjak, ha már takarékosságról van szó, akkor lehetne kicsit többet is spórolni. Nekem egy komplett, járó LCD kijelzős órám van, ami 6uA-t vesz fel a telepről, mert szinte állandóan alszik. Ezt egyáltalán nem használta ki a cikk szerzője, pedig nem lett volna túl bonyolult egy alvós villogót írni.
Én már csak azt nem értem, hogy a cikkből származó forrásban hogy lehetett az az egy LED kimenet bemenetnek konfigolva???
Én keresnék egy olyan embert aki szívesen elvállalna egy PIC12F675-ös kontrolerbe egy program írását. Ha esetleg van ilyen bátor jelentkező akkor, az jelezze felém, legyen szíves Nem egy bonyolult cuccról lenne szó.
Előre is köszönöm a segítséget
A cikk szerzoje nyilvanvaloan nem ert a PIC-ekhez, kulonben nem tette volna az MCLR-t foldre, nem tette volna bele a forrasba azokat a BEGIN..END-eket sem es bele tett volna azert egy hidegito kondit is a kapcslasba. Azt pedig vegkepp nem ertem miert kell 10 mp-ig vilagitania az elejen, de ez mar egy masik tema...
Te ezt hol latod a kodban? Amit en nezek abban az MCLR van csak inputon.
Üdv mindenkinek!
Ma megpróbálkoztam egy lcd modul meghajtásával pic16f627 tel meghajtva. Találtam itt pár lcd t felhasználó kapcsolást de nem jutottam előre. A modul kipróbálását egy saját, szerintem nem túl jó megoldással oldottam meg. A lényeg ez: output_low(Pin_B0); ///d0 ...... output_high(Pin_B7); ///d7 output_high(Pin_a0); ///E be delay_ms(10); output_low(Pin_a0); ///E ki Tehát beállítom a bináris kódot, kiíratom az E kapcsolásával. A példákba nem igazodtam el így nem volt jobb ötletem. Hogy megy ez a dolog profibban? 2x16 karakteres lcd m van és csak kiírni szeretnék rá. Van esetleg valakinek egy minta progija(minél egyszerűbb)? Előre is köszönöm!
Mielőtt írnál bármit is a kijelzőre, inicializáltad?Itt van egyébként egy oldal, igaz, PC-re, de mivel a C-kód is ott van, nagyon gyorsan átírható PIC-re. Benne van szép sorban minden, és kellőképp szájbarágós is.
Üdv!
A program nem mint lcd t kezelte, egyszerűen csak a kimenetekre adtam + vagy 0 jelet és utánna kiirattam az E vel. Mivel ez nem épp a leg célszerűbb így szeretnék valami rendes lcd kezelő progit összehozni. Az itt lévő forrásokat tanulmányoztam de nem értettem meg a folyamatot. Találtam olyat ahol meg volt adva a lábkiosztás (pin_a0 az E, a1 az RW stb), de volt ahol nem láttam ilyet:S 2 hasonlót nem találtam, ezért kérdeztem, hogy nincs e valakinek egy minta amin el tudok indulni. Mivel a c t is most tanulom ahogy tudom, így van pár dolog amit nem értek még.
Akkor jól elfoglaltad magad te is
Ezen a lapon több forrás is van a HD44780 kompatibilis LCD-khez (bár nem mondtad, hogy a tiéd az, de úgy gondolom). Van minta PIC-re is, igaz, asm, de a megértést talán jobban segíti. Ha a kezelés logikai sorrendjét megérted, utána már nem nagy kaland programozni sem. |
Bejelentkezés
Hirdetés |