Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   121 / 1320
(#) potyo válasza histu1985 hozzászólására (») Jan 3, 2008 /
 
Úgy van, hogy ha egy bemenetnek állított láb állapotát akarod olvasni, akkor azt a PORT regiszterben teheted meg. Ha viszont írni akarsz egy lábra, vagy az egész portra, akkor a hozzá tartozó LAT regisztert kell használnod.

Tehát ha egy feltételt írsz egy láb állapotától függően, akkor így írod:
  1. if (PORTBbits.RB2)
  2. {
  3. }


Viszont egy lábat így állítasz be:
  1. LATBbits.LATB3=1
(#) histu1985 válasza potyo hozzászólására (») Jan 3, 2008 /
 
Értem. Még új vagyok és mint még sok mindent ezt sem tudtam eddig. Köszönöm

A probléma megoldódott. A triseket elrontottam. Miután kijavítottam hibátlanul ment.

Köszönöm a segítségeket.
(#) bmateusz hozzászólása Jan 3, 2008 /
 
Valaki el tudná magyarázni, hogy lehetne egy kvarc kristályt rákötni a pic-re? (16F887) Próbálkoztam sokféleképpen, de nem jött össze. Érdekes módon az érintéseimet számolja Ha hozzáérek a kondenzátorhoz, akkor beindul az órajel termelés. Szóval valamit rosszul köthettem, vagy a kondenzátor értéke nem jó. A kvarc 3,2768 MHz-s, a kondenzátor 47 pF.
(#) potyo válasza bmateusz hozzászólására (») Jan 3, 2008 /
 
Inkább 22pF kondenzátorok kellenének.

A bekötést meg az adatlapban a Figure 4-3 rajzon találod.
(#) deguss válasza deguss hozzászólására (») Jan 3, 2008 /
 
Még valami, amire rájöttem, igaz csak egy kis szívás árán. Lehet hogy a többségnek tök természetes, csak nekem nem volt.

Ha egy kimeneti pinre egy bitwise AND vagy OR (vagy bármi más) eredményét szeretnénk kitenni, akkor a bitet mindig a 0. helyre kell előtte shiftelni.

Tehát ez NEM működik:
  1. _RB2 = n & 0x08;


Így működne csak:
  1. _RB2 = (n & 0x08) >> 4;


De ez esetben meg felesleges az AND-elés, elég ha a döntő bitet a 0. helyre shifteljük!
Így:
  1. _RB2 = n >> 4;


Sikeres programozást mindenkinek!
(#) potyo válasza deguss hozzászólására (») Jan 3, 2008 /
 
Azért nem működik, mert egy lábra nem írhatsz ki 8-at. A fordító megnézi az oda beírt érték utolsó bitjét, és attól függően ki vagy bekapcsolja a lábat. De ilyeneket nem illik csinálni - függetlenül attól, hogy a C megengedi - mert elég átláthatatlan a kód tőle. Inkább írd ezt:

  1. _RB2=(n & 0x08)?1:0;


Bár ezt a módszert a C18 fordító elég érdekesen fordítja asm-be. A legjobb asm kódot ekkor produkálta:

  1. if (n & 0x08)
  2.         _RB2=1;
  3. else
  4.         _RB2=0;




A túl sok shiftelés sem az igazi egyébként, főleg az ilyen
  1. b>>a
, ahol futásidőben változik a shiftelések száma. Illetve az ilyen-olyan késleltetések (delay) is kerülendők (az -andó, -endő meg a magyarban kerülendő )
(#) bmateusz válasza potyo hozzászólására (») Jan 3, 2008 /
 
Köszönöm a választ. Biztos ez volt a gond akkor, és én a kezemmel sütöttem ki a 47 pF-et, ezért indult be akkor Olyat sajnos vennem kell, majd holnap..
(#) histu1985 válasza bmateusz hozzászólására (») Jan 3, 2008 /
 
Sziasztok.

Szoftverből van rá mód hogy a pic-et reseteljem? Az egyik ötletem ez lenne hogy az MCLR lábat lehúzni földre, de sajna akkor változtatni kéne a nyákon ami már készen van. Valami egyéb megoldás létezik erre?

István

PIC: 18f4550
(#) potyo válasza histu1985 hozzászólására (») Jan 3, 2008 /
 
Van. RESET utasítás
(#) bmateusz hozzászólása Jan 4, 2008 /
 
Végre kegyeg a másodpercre pontos órám! Még csak binárisan, mivel kijelzőm az nincs.
(#) watt válasza bmateusz hozzászólására (») Jan 4, 2008 /
 
Gratula!
Hogyan sikerült az oszcit életre kelteni végül?
(#) gyengus válasza bmateusz hozzászólására (») Jan 4, 2008 /
 
Grat!
Hogy csináltad?
Én is próbálkoztam órával, de egy idő után mindig kiderült, h nem pontos.
Mostanában nincs időm vele foglalkozni a suli miatt. Ha lesz, akkor inkább RTC-vel szeretnék próbálkozni.
(#) bmateusz válasza watt hozzászólására (») Jan 4, 2008 /
 
Jól csináltam mindent eddig is, csak rossz értékű kondenzátorokat raktam be. Most két 12 pF-es üzemel.
Ez még nem tudom mennyire pontos, de a másodperceket látszólag jól számolja.

gyengus: Rákötöttem az oszcit, de ez már le van írva az előző oldalon, hogy kell. Az asm-ben átírtam _INTRC_OSC_NOCLKOUT --> _LP_OSC-re. A számoláshoz a Timer0-t használtam, mivel le tudja osztani a frekvenciát (prescaler). 1:32 leosztás az 1 Hz, de én 1:16-ot használtam egy villogó led miatt, ami a kettőspont szerepét tölti be. Aztán megírtam a programot, és megy szépen Menne, ha lenne kijelzőm.
(#) gyengus válasza bmateusz hozzászólására (») Jan 4, 2008 /
 
én a pic kristályát használtam, lehet azért csúszott el idővel
(#) bmateusz hozzászólása Jan 4, 2008 /
 
Hát.. Én azt nem bírtam beüzemelni. De úgy hallottam, hogy akiknek sikerült, azoknak se volt pontos. Egy 32,768-as kristály 27 Ft, 2 db 12 pF-es kondenzátor együtt 6 Ft. Szerintem érdemes rá beruházni
(#) sszasza hozzászólása Jan 4, 2008 /
 
Megint kifogtam voltam egy szilikonos chipet ?!!!
Tudtok pic18f258nál olyan hibáról, hogy a 200h alatti tartományban bármilyen movf vagy addwf PCL nem hajtódik végre vagy rossz helyre ugrik? Más picekkel működik, 258ból meg nincs másik darabom kipróbálni.
(#) Iron Man hozzászólása Jan 4, 2008 /
 
Sziasztok kezdo vagyok a PICekben de erdekelnek,es szeretnem tudni,hogy mi is az az ICD2?Gondolom valami programozassal kapcsolatos de nem tudom hogy mi is.Segitsegeteket kernem
(#) Frankye válasza Iron Man hozzászólására (») Jan 4, 2008 /
 
Az ICD2 egy komplex, fejlesztő és programozó eszköz.
Arra szolgál, hogy a PIC-be beégesd a programot, s utána ugyan ezzel az eszközzel tudod tesztelni is a szoftvert. Végeredményben egy céláramkörön belüli programozó-fejlesztő eszközként lehetne felfogni leginkább.
(#) potyo válasza sszasza hozzászólására (») Jan 4, 2008 /
 
Nézz utána az errata-ban, van-e valami erről. De az addwf PCL eleve körültekintést igényel, mutathatnál a kódodból részletet, ami nem úgy működik, mint ahogy elvárod.
(#) bmateusz hozzászólása Jan 4, 2008 /
 
Idézet:
„The Program Counter (PC) is 13 bits wide. The low byte
comes from the PCL register, which is a readable and
writable register. The high byte (PC<12:8>) is not directly
readable or writable and comes from PCLATH.”

Ez 16F887, de gondolom a tied is így működik. Van erre egy példaprogramom, ha kell.
(#) potyo válasza bmateusz hozzászólására (») Jan 4, 2008 /
 
A 16F és a 18F ilyen téren eltérnek valamelyest, nem jó az egyikre írt program a másikon.

Nem olyan rég volt a terminal forumon erről szó, megpróbálom megkeresni.
(#) potyo válasza potyo hozzászólására (») Jan 4, 2008 /
 
Na megtaláltam, itt volt róla szó: Link

Az errata-ban nem találtam semmit ezzel kapcsolatban, a kódodban van a jó eséllyel a hiba.
(#) watt válasza bmateusz hozzászólására (») Jan 4, 2008 /
 
Idézet:
„Jól csináltam mindent eddig is, csak rossz értékű kondenzátorokat raktam be.”

Elég furcsa megközelítése annak a ténynek, hogy hibás értékű kondit használtál, ami miatt nem működött az áramköröd!
Na mindegy, lénye, hogy most jó!
(#) sszasza válasza potyo hozzászólására (») Jan 4, 2008 /
 
Köszi, de mint irtam, 2455ben és 452ben is működik ugyanaz a kód.
(#) sszasza válasza sszasza hozzászólására (») Jan 4, 2008 /
 
És MPLAB SIMulatoron is...
(#) bmateusz válasza watt hozzászólására (») Jan 4, 2008 /
 
22pF ~= 47 pF nem? Nem. Mostmár én is tudom
(#) Iron Man válasza Frankye hozzászólására (») Jan 4, 2008 /
 
Köszönöm szépen,sokat segitett,most már értem,ha jól fogtam fel,nem kell egy külön teszt áramkört is épiteni,hanem,ez 2 az egyben.Jó dolog
(#) Frankye válasza Iron Man hozzászólására (») Jan 4, 2008 /
 
Így van. A kész (cél-) áramkörben csak a szükséges kivezetéseket kell kivezetni (ICSP), és azokon keresztül programozható. De ezt bármelyik programozó tudja. Az ICD2 annyiban több, hogy képes futtatni is a beégetett programot a céláramkörben, tesztelés céljából. (Tehát nem kell minden alkalommal kivenni-betenni a PIC-et.)
(#) potyo válasza Frankye hozzászólására (») Jan 4, 2008 /
 
Idézet:
„Az ICD2 annyiban több, hogy képes futtatni is a beégetett programot a céláramkörben, tesztelés céljából. (Tehát nem kell minden alkalommal kivenni-betenni a PIC-et.)”


Hát konkrétan nem ennyivel több az ICD2, mert ezt mindegyik rendes programozó tudja. Az ICD2 annyival több, hogy a céláramkörben lehet léptetni vele utasításonként a programot, közben figyelni a belső regiszterek tartalmát, adott esetben módosítani is lehet azokat, stb.
(#) Frankye válasza potyo hozzászólására (») Jan 4, 2008 /
 
Így van, csak nem akartam nagyon belemászni a kérdező lelki világába...
Azért köszönöm szépen az értékes kiegészítést!
Következő: »»   121 / 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