Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   844 / 1319
(#) icserny válasza Kisvé hozzászólására (») Nov 23, 2010 /
 
Az ENTER-nél pont fordítva kell vezérelni, mert az E jel alaphelyzete nulla. Beíráskor tehát felemeled, majd kis idő múlva leviszed 0-ba.

Ezen kívül a kiküldött adatsor sem jó, mert az első 4-bites mód beállítása még 8 bites módban történik, tehát
  1. MOVLW   B'00000010'             ;4 bitesbe állít
  2.         MOVWF   PORTB  
  3.         CALL    ENTER  ; Itt még 8 bites módban van az LCD!

után már vége van az első LCD parancsnak, ne akard azt folytatni!
Az üzemmód beállításhoz tehát mégegyszer ki kell adni a fenti utasításokat, s csak utána jöhet a második félbájt kiküldése
(#) AZoli válasza icserny hozzászólására (») Nov 23, 2010 /
 
Köszi!
Az első kettő alapján jutottam idáig, de nem vagyok túl jó angolból, gondolom ezért is homályos a dolog. Én a C-vel még nem tudtam megbarátkozni. Nem tudnál egy egyszerü C-ben írt megszakítás kezelést és a .hex állományát feltenni? Talán kicsit megvilágosodnék.. vagy nem..
(#) watt válasza AZoli hozzászólására (») Nov 23, 2010 /
 
Csatoltam egy teszt programot, szerintem ebből meg lehet érteni.
(#) icserny válasza AZoli hozzászólására (») Nov 23, 2010 /
 
Az első link szerintem magyar volt, s ott van a C és az assembly kiszolgálás bemutatása is (_Matherror lekezelése). A komplett mintapélda pedig megtalálható a PIC24 támogatói programkönyvtár és mintaprogram gyűjteményben (egyben letölthető a esca.atomki.hu/PIC24/code_examples.zip címen).

chap09/trap_test_handled.c - Interrupt kiszolgáló, amely kezeli a matematikai kivételt (nullával történő osztás). Ennél egyszerűbbet már nem tudok mutatni.

Második példának a következőt ajánlom:
chap09/int1_wakeup.c - INT1 használata alvás üzemmódból történő felébresztésre.
(#) watt válasza vicsys hozzászólására (») Nov 23, 2010 /
 
" Lényeg, hogy bárki, bármit mond, ..."
Ezért is tetszett a megfogalmazás, mert tényleg ez a lényeg...
:yes:
(#) Kisvé válasza icserny hozzászólására (») Nov 23, 2010 /
 
Sajnos nem értem tökéletesen.

MOVLW B'00000010' ;4 bitesbe állít
MOVWF PORTB
CALL ENTER
MOVLW B'00000010' ;4 bitesbe állít
MOVWF PORTB
CALL ENTER
MOVLW B'00000000' ;1. Kurzor
MOVWF PORTB
CALL ENTER
MOVLW B'00001111' ;2. Kurzor
MOVWF PORTB
CALL ENTER
Így kellene?
(#) icserny válasza Kisvé hozzászólására (») Nov 23, 2010 /
 
Nem teljesen, mert a második parancs kiküldése már 4 bites módban történik, tehát két félbájtot kell küldeni. S azért kell kiküldeni másodjára ezt a parancsot, mert4 vonal esetén csak a 4 bites mód bekapcsolása után tudod beállítani azokat a biteket, amelyek a sorszámot és a fontméretet szabályozzák.
Magyarul ez azt jelenti, hogy harmadikként küldj ki egy B'00001000'-at is, mielőtt a Kurzorbeállítás jönne.

De mindezek kitűnően le van írva a HD44780 adatlapjában, s kipróbálhatók LCD simulatorban.
(#) Kisvé válasza icserny hozzászólására (») Nov 23, 2010 /
 
Értem.
Köszönöm szépen.
(#) robing16 válasza tardis hozzászólására (») Nov 23, 2010 /
 
Kezdem feladni, 2 óra alatt 2 - 3 percet késett

Lehet hogy igazad van, mert a mostani programban benne van az óra állásnak az átszámítása is...
Ezt az időt nem számoltam bele...

Van egy adatregiszter, amihez hozzá ad 1-et így kapom meg duplán a 125-öt, visszaállítja a TMR0-át és újra állítja a INTCON Regisztert...
Ha csak 3 utasítás lenne a megszakításban, akkor szerintetek mennyire lehet pontos?
(#) watt válasza robing16 hozzászólására (») Nov 23, 2010 /
 
Ezt olvastad? Bővebben: Link Milyen ötleteid vannak a felvetéssel kapcsolatban?
(#) Hp41C válasza robing16 hozzászólására (») Nov 23, 2010 /
 
Valamint, a TMR0 regiszter írásakor az előosztó törlődik, és két utasítás időre leáll a számlálás...

Milyen típusú a kontroller, nincs benne Timer2?

Még ötlet...
(#) messer hozzászólása Nov 23, 2010 /
 
Sziasztok!
Próbálom ezt a sort értelmezni:
  1. #define bkbhit (next_in!=next_out)

az első kérdés az, hogy a bkbhit az micsoda (változó?), és miért nem tudom mplab.ban a watch ablakban megjeleníteni.
(#) icserny válasza messer hozzászólására (») Nov 23, 2010 /
 
A bkhit egy makró, jelen esetben egy logikai kifejezés, ami megmondja, hogy a buffer bemeneti és kimeneti mutatója megegyezik-e, vagy sem.

Ha a mutatók megegyeznek, akkor üres a buffer. Ha nem egyeznek meg, akkor van kiolvasatlan karakter.
(#) robing16 válasza Hp41C hozzászólására (») Nov 24, 2010 /
 
Értem, tehát amíg lekezeli, azon időt is bele kell számolni mint késleltetés?
16F877A Van benne Timer2. Sajnos ezt még nem használtam, ugyan belenéztem a következő oldalt,( Link) nem értettem, mi az elő és utó osztó...
(#) watt válasza robing16 hozzászólására (») Nov 24, 2010 /
 
A kérdéseidre megkaptad a jó válaszokat(olvastad?), most rajtad a sor, hogy megértsd és jó kérdéseket tegyél fel, illetve a kért válaszokat megadd!
(#) messer válasza icserny hozzászólására (») Nov 24, 2010 /
 
Szia! Honnan tudtad, hogy buffer? Vagy ez egy általános alakja és módszere a bufferek vizsgálatának?
(#) icserny válasza messer hozzászólására (») Nov 24, 2010 /
 
Idézet:
„Honnan tudtad, hogy buffer?”
Onnan, hogy nem csak szép és jó vagyok, hanem okos is!
Emlékeztem rá, hogy az ebben a hozzászólásomban ajánlott mintaprogramban láttam ezt a definíciót.
(#) messer válasza icserny hozzászólására (») Nov 24, 2010 /
 
gondoltam, hogy van benne turpisság

Egy ilyen logikai kifejezéseknek az állapotát értékét nem is lehet nyomonkövetni a watch ablakban?
(#) watt válasza messer hozzászólására (») Nov 24, 2010 / 1
 
Nem, de a next_in, next_out-ét valószínűen igen, ha regiszterre mutatnak.
(#) icserny válasza messer hozzászólására (») Nov 24, 2010 /
 
Megjeleníted mindkét mutatót, azt meg csak el tudod dönteni, hogy egyezik, vagy sem...
(#) tardis válasza messer hozzászólására (») Nov 24, 2010 / 1
 
A C-ben minden # jellel kezdődő utasítást előfordítói direktrívának hívunk. Mint neve is mutatja ezt a fordító hajtja végre mielőtt ténylegesen lefordítaná a kódot.
Bővebben a Wikiben

Hogy a konkrét kérdésedre is válaszoljak:
a "#define " értelmezésénél az előfordító gyakorlatilag a kódodban szereplő összes -t kicseréli úgy, ahogy van a szövegére.

Roppant észnél kell lenni! Tipikus hiba a zárójelek elhagyása. Pl.:
  1. #define hat 2+4
  2. #define nyolc (hat+2)
  3. int tizenketto = hat*2;  //10 lesz
  4. int tizenhat = nyolc*2;  //16 lesz
(#) Hp41C válasza robing16 hozzászólására (») Nov 24, 2010 / 1
 
Szia!

A timer2 az Fosc/4 frekvenciójú jelet kapja meg az előosztó bemenetére. Az előosztón 1, 4, 16 osztás állítható be. Az előosztó kimenete egy 8 bites számlálóra, ami TMR2 néven érhető el. A számláló aktuális értékét a PR2 regiszter értékével összehasonlítja, egyezés esetén a TMR2 törlődik. Ezt a törlési jelet kapja az utóosztó órajelnek. Az utóosztónál 1..16 -os osztást lehet beállítani. Az utóosztó kimenete kér megszakítást.

pl: 4 MHz quartz esetén az Fosc/4 = 1 MHz. Ha a Timer2 előosztó osztása 4, a PR2 értéke .249, az utóosztó osztása 1, akkor 1us*1000 = 1ms - enként periódikusan megszakítást két a timer2. Ez az időzítés a quartz pontosságával megegyező prontosságú, mivel a program a beállítás után nem változtatja meg a reiszterek értéket....
(#) dinokal válasza Kisvé hozzászólására (») Nov 24, 2010 /
 
(#) AZoli válasza icserny hozzászólására (») Nov 24, 2010 /
 
Köszi az eddigi segítségeteket!
Kezdem érteni, szimulátoron már megy a dolog.
(#) robing16 válasza Hp41C hozzászólására (») Nov 24, 2010 /
 
Szia!

Köszönöm szépen hogy így leírtad, elsőre megértettem, miről is van szó. Át is állítottam az értékeket, regisztereket és jelenleg az óra siet. 6 órát hagytam, hagy menjen, 3 mp különbség volt a laptopom órája és a PIC órája között... Itt már valami hardveres állítást kell eszközölni?
Az lenne a kérdésem, hogy a számításom helyes?

Elméletem szerint a PR2-es regiszterben lévő érték is egy osztó érték, így a képletem ez lett.

16MHz / 4 / 16 (Előosztó) / 125 (PR2 érték) / 16 (Utóosztó) = 125 Hz.
Egy AdatRegisztert elszámoltatok 125-ig és elméletben, ha eljutott 125-ig akkor megvan az 1s-os megszakítás...
(#) potyo válasza robing16 hozzászólására (») Nov 24, 2010 /
 
Jó a számítás, ezzel már pontosnak kell lennie az órának annyira, amennyire a kvarc pontos. A kvarcot tudod kicsit hangolni a kondenzátorok állításával. Próbálj ki kicsit kisebb vagy kicsit nagyobb kondenzátorokat, akár aszimmetrikusan is. Ezután lehet agyalni a hőmérsékletfüggésen, de ha annyira pontos kell, akkor érdemesebb órakvarccal próbálkozni, nagyfrekvenciás kvarc sosem lesz tökéletesen pontos.
(#) Hp41C válasza robing16 hozzászólására (») Nov 24, 2010 /
 
Szia!

Ez már 140 ppm pontosság... Ez már azt jelenti, hogy a quartz frekvenciája eltér a névlegestől. Ebben a hozzászólásban megadott oldal ötletével megoldható, hogy a végső szoftveres osztásnál a hibát korrigáld.


Az órakvarc is csak 20 ppm pontos...
(#) messer válasza tardis hozzászólására (») Nov 24, 2010 /
 
Értem és köszönöm, ez igen jó tanár lennél köszönöm a türelmedet és a hasznos bemutatót
(#) vlacexx hozzászólása Nov 25, 2010 /
 
Sziasztok, egy PICkit-et akarok vasarolni , a ChipCad-nal van is a Pickit2 9500Ft a Pickit3 12250Ft, szerintetek meiket eri meg jobban megvasarolni? En 18-as Pic-eket szeretnek egetni vele de a jovoben majd mast is. Mi a lenyeges kulombseg a ket programozo kozott? Kosz a valaszokat.
(#) icserny válasza vlacexx hozzászólására (») Nov 25, 2010 /
 
Itt megtalálod a választ. A jó döntéshez tudnod kell, hogy a "jövőben majd mást is" mit takar. Ha újabb típusokat (pláne PIC32-t) akkor inkább PICkit3. Ha régebbieket, és a jobb (jelenleg) használhatóság a fontos, akkor inkább PICkit2.
Következő: »»   844 / 1319
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