Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   212 / 1320
(#) gyengus válasza gyengus hozzászólására (») Máj 17, 2008 /
 
Közben variáltam a megszakításkezelőn:
  1. void InterruptHandlerHigh () {
  2.     if (INTCONbits.RBIF) {
  3.                 INTCONbits.RBIF = 0;
  4.                 if (sw2) mLED_1_Toggle();
  5.         }
  6. }

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.
(#) kobold válasza gyengus hozzászólására (») Máj 17, 2008 /
 
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?
(#) watt válasza Csaplar hozzászólására (») Máj 17, 2008 /
 
Bármilyen PIC-el lehet őket kezelni. SPI protokolt is ismerik. Van adatlap az oldalamon...
(#) gyengus válasza kobold hozzászólására (») Máj 17, 2008 /
 
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:
  1. void init(void) {
  2.         ADCON0 = 0;
  3.     ADCON1 = 0x0F;                 // Default all pins to digital
  4.         LATB = 0;
  5.         TRISB = 0;
  6.     mInitSwitch();
  7.     mInitAllLEDs();
  8.  
  9.         INTCON = 0b11001000;                    // enable all and RB change interrupts
  10.         INTCON2bits.RBPU = 1;                   // PORTB pull-up disable
  11.         INTCON2bits.RBIP = 1;                   // RB port interrupt set to high priority
  12.         RCONbits.IPEN = 1;                              // Enable priority levels
  13.         INTCONbits.GIEH = 1;            // Enable interrupts
  14.  
  15. }


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.
(#) kobold válasza gyengus hozzászólására (») Máj 17, 2008 /
 
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...
(#) gyengus válasza kobold hozzászólására (») Máj 17, 2008 /
 
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.
(#) kobold válasza gyengus hozzászólására (») Máj 17, 2008 /
 
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...
(#) gyengus válasza kobold hozzászólására (») Máj 17, 2008 /
 
Akkor ez a probléma megoldva
Nagyon szépen köszönöm a segítséget!
(#) trudnai válasza foxpaw hozzászólására (») Máj 17, 2008 /
 
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?
(#) foxpaw válasza trudnai hozzászólására (») Máj 17, 2008 /
 
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?
(#) szilva válasza gyengus hozzászólására (») Máj 17, 2008 /
 
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.
(#) szilva válasza kobold hozzászólására (») Máj 17, 2008 /
 
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!
(#) kobold válasza szilva hozzászólására (») Máj 17, 2008 /
 
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.
(#) gyengus válasza szilva hozzászólására (») Máj 17, 2008 /
 
Itt a megszakításkezelőm:
  1. void InterruptHandlerHigh () {
  2.     if (INTCONbits.RBIF) {
  3.                 INTCONbits.RBIF = 0;
  4.                 if (!sw2) mLED_1_Toggle();
  5.         }
  6. }

Í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?
(#) kobold válasza gyengus hozzászólására (») Máj 17, 2008 /
 
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...
(#) Csaplar válasza watt hozzászólására (») Máj 17, 2008 /
 
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
(#) pet válasza szilva hozzászólására (») Máj 17, 2008 /
 
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?
(#) trudnai válasza pet hozzászólására (») Máj 17, 2008 /
 
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.
(#) pet válasza trudnai hozzászólására (») Máj 17, 2008 /
 
Igen működik!! :yes: :yes:
Csak várni kellett egy kicsit.

Kösz mindenkinek a segítséget és bocs, hogy keveset olvastam
(#) pet válasza pet hozzászólására (») Máj 17, 2008 /
 
Uri Geller beindította
(#) watt válasza Csaplar hozzászólására (») Máj 17, 2008 /
 
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.
(#) szilva válasza pet hozzászólására (») Máj 17, 2008 /
 
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.
(#) watt válasza szilva hozzászólására (») Máj 17, 2008 /
 
Én már csak azt nem értem, hogy a cikkből származó forrásban hogy lehetett az az egy LED kimenet bemenetnek konfigolva???
(#) zoz11 hozzászólása Máj 17, 2008 /
 
É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
(#) trudnai válasza szilva hozzászólására (») Máj 18, 2008 /
 
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...
(#) trudnai válasza watt hozzászólására (») Máj 18, 2008 /
 
Te ezt hol latod a kodban? Amit en nezek abban az MCLR van csak inputon.
(#) Thowra hozzászólása Máj 18, 2008 /
 
Ü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!
(#) kobold válasza Thowra hozzászólására (») Máj 18, 2008 /
 
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.
(#) Thowra válasza kobold hozzászólására (») Máj 18, 2008 /
 
Ü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.
(#) kobold válasza Thowra hozzászólására (») Máj 18, 2008 /
 
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.
Következő: »»   212 / 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