Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   691 / 1320
(#) Hp41C válasza Hujikolp hozzászólására (») Márc 1, 2010 /
 
Szia!

A hívás előtt a PCLATH regisztert is be kell állítani. Azt is meg kell nézni, hogy a táblázat nem nyúlik-e át a 256-os laphatáron.

  1. CIMKE
  2.   ADDWF PCL,F
  3.  
  4.   RETLW 0X01
  5. :STB..
  6.   RETLW 0XFF
  7. CIMKE_VEGE
  8.  
  9. if high(CIMKE_VEGE)!=high(COMKE)
  10.   error 'CIMKE táblázat hiba'
  11. endif


A hívás:
  1. movlw high(CIMKE)
  2. movwf PCLATH
  3. movlw 0
  4. call CIMKE


Ha nem csak a 0. lapon 2k-s van kód, a megszakítási rutin mentse, közvetlenül a mentés után állítsa be a saját (0.) lapjára és visszatérés előtt állítsa vissza a PCLATH regiszter értékét...

Az olyan hívások után, amik nem arra a programlapra hivatkoznak, amelyikről a hívás történik, a hívás előtt a PCLATH-t be kell állítani a cél lapra, a visszatérés után (az első ugrás, más rutinhívás előtt) a PCLATH-t a be kell állítani arra a lapra, amiről a hívás történt.

Szia
(#) Hujikolp válasza Hp41C hozzászólására (») Márc 1, 2010 /
 
Elmentek mindent, majd vissza.
  1. ; Elmentjük a Work és Status regisztereket
  2.         MOVWF   W_SAVE                  ; Először a Work regisztert
  3.         SWAPF   STATUS,W                ; Swap status to be saved into W
  4.         MOVWF   STATUS_SAVE             ; Swaps are used because they do not affect the status bits
  5.         MOVFW   PCLATH                  ;
  6.         MOVWF   PCLATH_SAVE             ;
  7.         CLRF    PCLATH

A 256-os laphatár, gondolom az azt mutatja meg, hogy maximálisan annyi elemet tartalmazhat (sort).
Viszont nekem csak alig van 10-15 sorom.
Az mindegy, hogy a 0.ás lapon, hol helyezkedik el a táblázat? Hallottam olyat is, hogy ha 256-nál nagyobbat kell ugrani, akkor valamit be kell állítani. Viszont nekem a programon belül nem volt ilyen problémám.
A Te módszeredet ki is próbálom.

A lapok közötti váltással nincs gond, megy rendesen
(#) watt válasza Hp41C hozzászólására (») Márc 1, 2010 /
 
Hihetetlen türelmed van, miután kb. 10-szer leírtad ugyanazokra a kérdésekre ugyanazokat a válaszokat! De lehet, hogy csak rengeteg időd!?
(#) Hujikolp válasza Hp41C hozzászólására (») Márc 1, 2010 /
 
Átírtam erre, viszont pár meghívásig működik, utána viszont megint eltéved, hogy mitől...
És pedig csak 10 elem van a táblában. Befolyásolhat valamit a hely, ahol van? Vagy valami?
(#) potyo válasza Hujikolp hozzászólására (») Márc 1, 2010 /
 
Keress rá ebben a témában a PCLATH szóra!
(#) Hujikolp válasza potyo hozzászólására (») Márc 1, 2010 /
 
Ez a hozzászólásod végül is megtudta oldani a problémát. a PCLATH, meg hasonlókat hiába állítottam, egy ideig ment, majd eltévedt. Az tudta fixálni, hogy ha ORG-gal megadtam a helyét előtte. Így már megy.
(#) icserny hozzászólása Márc 1, 2010 /
 
C18-hoz kérnék egy kis segítséget! Ha van egy nagy program, akkor hogy kell szabályosan szétszedni? A CCS C demókban látott forráskód becsatolások pár napja már megkapta a kritikát, ezért azt az utat szeretném elkerülni.

A fő kérdés: hol és hogyan deklaráljam a változókat és tömböket, hogy a több forrásfájlra bontott programban mindenhol látszódjanak, de ne legyenek duplán definiálva?

Például az USB Device CDC Basic Demó főprogramjában levő eljárásokat szeretném külön pakolni, hogy a főprogramban csak a main fv. maradjon. Az include-okról és a vektorok itt most nem mutatott áthelyezéséről már van fogalmam, de a változók feladták a leckét...

A válaszokat előre is köszönöm!

  1. /** INCLUDES ****************/
  2. #include "GenericTypeDefs.h"
  3. #include "Compiler.h"
  4. #include "usb_config.h"
  5. #include "./USB/usb_device.h"
  6. #include "./USB/usb.h"
  7. #include "./USB/usb_function_cdc.h"
  8. #include "HardwareProfile.h"
  9.  
  10. /** V A R I A B L E S ********/
  11. #pragma udata
  12. char USB_In_Buffer[64];
  13. char USB_Out_Buffer[64];
  14. BOOL stringPrinted;
  15.  
  16. /** P R I V A T E  P R O T O T Y P E S *****/
  17. void InitializeSystem(void);
  18. void ProcessIO(void);
  19. void BlinkUSBStatus(void);
  20. void UserInit(void);
  21.  
  22. /** P R O G R A M **************/
  23. /*-------8< NYISSZ! >8----------*/
  24.  
  25. #pragma code
  26. void InitializeSystem(void) {...}
  27. void ProcessIO(void) {...}
  28. void BlinkUSBStatus(void) {...}
  29. void UserInit(void) {...}
  30.  
  31. /*-------8< NYISSZ! >8----------*/
  32. void main(void) {...}
(#) trudnai válasza icserny hozzászólására (») Márc 1, 2010 /
 
Szia! Beteszed a változó deklarációkat egy C fileba, azt felteszed a projektbe. Egy .h filet is létre hozol, ahol a változó definíciókat teszed be extern-ként. Ezt a headert inklúdálod be abba a C fileba ahol a változóhoz hozzá akarsz férni. Most nem tudok példát írni mert még mindig csak mobilról vagyok, remélem más majd megteszi helyettem.
(#) icserny válasza trudnai hozzászólására (») Márc 1, 2010 /
 
Köszönöm, rávezetésnek elég volt az extern kulcsszó! A többi már világos.
(#) efiscp hozzászólása Márc 1, 2010 /
 
Üdv!

Nem tudom, emlékeztek e rá, régebben volt egy kérdésem a PIC hülye viselkedése miatt. Most elővettem megint a témát, mert van egy kis szabadidőm, és megméregettem.
Az eredmény: ha a panel a gumilábain áll, akkor a folyamatosan égő ledek elhalványulnak, majd ki is alszanak. Megmértem, és tényleg a lábakon elkezd esni a feszültség, egészen 0V-ra. (7805 atomstabilan 5,02V-ot ad le). Szerintem ez okozta a BOR-t.
Na de amikor ráraktam a panelt a radiátorra, helyre jött a dolog, és leddel együtt 4,6V (nélküle 5V) van a lábon. Valakinek valami ötlete esetleg?
(#) potyo válasza efiscp hozzászólására (») Márc 1, 2010 /
 
Táp közben hogy áll?
(#) efiscp válasza potyo hozzászólására (») Márc 1, 2010 /
 
Az adapterről a 7805 előtt mindkét esetben 16,02-08V jön le, a 7805 után szintén nem változik semmi.
Vagy ha arra gondoltál, hogy az adapter fizikailag hogy van csatlakoztatva, a drótpár vége fél centin blankolva van, és az van beszorítva abba a csavarós műanyag izébe. A panel fémjétől elvileg el van szigetelve.
(#) potyo válasza efiscp hozzászólására (») Márc 1, 2010 /
 
A PIC táplábain hogy áll a feszültség?
(#) efiscp válasza potyo hozzászólására (») Márc 1, 2010 /
 
5V mindkét oldalon. Az egyik oldalon a hidegítő kondi egy lyukkal félre volt dugva, megigazítottam, de ugyanúgy esik a lábakon a fesz.
(#) trudnai válasza efiscp hozzászólására (») Márc 2, 2010 /
 
Milyen gumi láb meg radiátor? Valami gumi tappancsokat ragasztottal rá? A radiátor az egy fém ami rövidre zárhatja a panelt mert szigetelés nélkül rá tetted? A gumi tappancs vezet? Vagy mekkora a szigetelő képessége? Kontakt hiba nincs ami a panel mozgatása közben vacakol? Kb ezek a kérdések merültek fel bennem.
(#) efiscp válasza trudnai hozzászólására (») Márc 2, 2010 /
 
A radiátor fém, a gumi ellenállásával a multiméter nem boldogult (nagyobb, mint 200M). A mozgatást nem igazán tudom kipróbálni, mert ahhoz túl kaotikusan viselkedik. Múltkor ha közelítettem felé a kezem, már akkor is változott a ledek fényereje.
(#) Harry hozzászólása Márc 2, 2010 /
 
Sziasztok!

PIC16F628A-val próbáltam egy KS0066-os vezérlővel működő 16x2-es, 5x7-es kijelzőt vezérelni. Eleinte próbáltam beépített C parancsokat használni (mikroC), de végül feladtam és írtam egy 500ms-os késleltetésű parancssort a kijelzőre. Elméletileg a KS0066 és a HD44780 hasonszőrűek. Itt látható róla egy avi is. (piros ledek a D7-D4-ig (sorban), alul sárgával az E villan fel)
Egy javas kijelzőszimulátorban is kipróbáltam ezt a parancssort (ami igazából csak inicializálja a 2 sort, és a kurzort villogtatja), és ott működött.
Még egy érdekesség, miszerint ha rákötöm az 5V tápot a háttérvilágításra (minden egyéb bekötés nélkül), a két rajta lévő IC felforrósodik.
Igazából úgy néz ki, hogy nem vesz semmi parancsot. Holott a LED-eken egyértelműen látni hogy a parancsok haladnak a szálakon (első nekifutásra LED-ek nélkül próbáltam a ledek csak debug-oláskor kerültek be)
Előre is

lcd.c
    
(#) watt válasza efiscp hozzászólására (») Márc 2, 2010 /
 
Ne haragudj, már nem emlékszem a projectre, belinkelnéd, vagy leírnád mi akar ez lenni? Esetleg kapcsolási rajz és a forrásfájl is jól jönne, hátha nem kapcsolatad ki az LVP bitet és az PGM lebeg, vagy cibálva van...
(#) watt válasza Harry hozzászólására (») Márc 2, 2010 /
 
Érdemesebb lenne az adatlap szerint inicializálni(ha HD44780U szerint ekerod kezelni)!
Csatoltam az ide vonatkozó képet...
Valamint itt van a KS0066 adatlapja is, az is másképp indít, ha jól látom...
(#) trudnai válasza efiscp hozzászólására (») Márc 2, 2010 /
 
Ebből amit most írtál vagy EMI-re gyanakodnek vagy lebegő digitális bemenetekre gondolnék. Hidegitő kondik legyenek minden Vss és Vdd között, és ne lebeglem egyik I/O sem. Vagy húzd fel ill le vagy digitális kimenetre kapcsold amit nem használsz.
(#) szilva válasza watt hozzászólására (») Márc 2, 2010 /
 
A 44780 adatlapban leírt init szigorúbb és bolondbiztosabb, azzal (ha az időzítések be vannak tartva) minden állapotból fel lehet éleszteni a kijelzőt (ezért küldi ki 3-szor az elején a 8 bites módba kapcsolás parancsát). Tapasztalatom szerint minden HD44780 kompatibilis kijelző tökéletesen initelhető az alapján a szekvencia alapján, volt nekem is KS0066-ossal szerelt, nem volt vele gondom (fordítva már valószínűleg nem lenne igaz, a KS0066 doksiban lévő init-tel egy eredeti HD44780 nem biztos, hogy észhez térne).

Amire még érdemes figyelni, hogy bekapcsoláskor a tápfeszültség milyen gyorsan vagy lassan épül fel. Ha a tápegységben nagy puffer van, akkor elképzelhető, hogy viszonylag lassan emelkedik a névleges értékre. Emiatt én inkább szoktam a kijelzőt kezelő programok legelejére tenni egy fél-egy másodperces időzítést, ennyi idő alatt már minden esetben beáll az üzemi feszültség.
(#) szilva válasza Harry hozzászólására (») Márc 2, 2010 /
 
Jó lenne látni a kapcsolást is, amivel kísérletezel. Pl. hogy a LED-ek hogy vannak bekötve, az R/W földön van-e, a PORTB bitjei jó sorrendben vannak-e a kijelzőn. Nem utolsó sorban a kijelző lábkiosztása is érdekes lehet, mert láttam már pár trükkös dolgot ilyen téren is. A háttérvilágítás adatait adatlapból kellene kinézni, könnyen lehet, hogy abban csak LED-ek vannak, és kell áramkorlátozó ellenállást sorbakötni vele.
(#) watt válasza szilva hozzászólására (») Márc 2, 2010 /
 
Nekem sem szokott gond lenni az LCD-kel, ha betartom a HD-s leírtakat, és én is sokat szoktam várni a bekapcsoláskor.
(#) menyus hozzászólása Márc 2, 2010 /
 
Sziasztok!

Kérdezni szeretném hogy mi lehet az oka hogy egy 12F675 ös sleep ben 1,5 mA t fogyaszt? Akárhogy szenvedek vele nem megy lejjebb a fogyasztás. Egy komparátor megszakításra ébred. A többi periféria le van tiltva. A tok előtt csak egy LP2985 low drop stab van, a szokásos szűrésekkel. (47u tant./100n ker) PIC et már cseréltem...ugyanaz a jelenség.
(#) szilva válasza menyus hozzászólására (») Márc 2, 2010 /
 
A stab. előtt vagy után mérted az áramfelvételt?
(#) Marco_HUN hozzászólása Márc 2, 2010 /
 
Sziasztok!
Nézegettem a példákat olvasgattam és utána néztem a timer-ek működésének de ötletem nincs ahhoz hogyan kellene beállítani a timer-t illetve hogyan lehetne pic-kel egy impulzus szélességét lemérni. Lehet csak nem jöttem rá és ez a valószínű be kell valljam hogy mostanában ismerkedek a pic-kekkel de szeretném a segítségeteket kérni hogyan kell beállítani a regisztert. Úgy gondoltam hogy amikor beérkezik a négyszögjel felfutó éle elindul a timer majd mikor a lefutóél akkor leáll ezt követően kerül kiolvasásra a timer-ből a eltelt idő. Ez így megvalósítható? Nekem egy 16f690-es pic-el kell megoldanom a dolgot.A négyszögjel vagy 0,5ms széles vagy pedig 1ms széles. Hogyan tudnám ezt megoldani.Ha valaki venné a fáradtságot és segítene nekem annak hálám fejezném ki
üdv:Marco_HUN
(#) gydanee válasza Marco_HUN hozzászólására (») Márc 2, 2010 /
 
(#) watt válasza menyus hozzászólására (») Márc 2, 2010 /
 
Hiánytalan rajz nélkül nem lehet mit mondani, de nem a PIC a hibás, ez szinte biztos...
(#) watt válasza Marco_HUN hozzászólására (») Márc 2, 2010 /
 
A varázsszó CCP(ECCP), keress rá, ill. nézzd meg az adatlapban, hogy működik!
(#) menyus válasza watt hozzászólására (») Márc 2, 2010 /
 
Köszönöm, keresem..
Következő: »»   691 / 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