Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Röviden összefoglalva trudnai válaszait(tisztán a probléma megoldása érdekében):
1. addig nem válaszolunk senkinek, amíg nem várjuk meg mit akart mondani, és nagy fokú illetlenség beledumálni a még be nem fejezett mondandóba, illetve figyelmen kívül hagyni annak részeit. (tehát várd meg, míg a modem befejezi az adat küldést, (ennek bizonyára vannak jelei, pl. CRLF) és csak utána válaszolj neki!) 2. Ha elküldök valamit, akkor a végére szintén oda kell tenni, hogy vége.. (CRLF) 3. Nem árt, ha használod a rendelkezésedre álló eszközöket, mint Terminal(pl.Bray), LED, MPLAB SIM stb... 4. Nem árt előbb megérteni a nekünk adott válaszokat, majd csak utána tovább kérdezni, vagy ne adj isten véleményt nyílvánítani valakinek a hozzáértéséről a témában! Sok szerencsét! Idézet: „De ha nem ismered a mikorC-t akkor nem biztos hogy tudsz segiteni.” Az a baj, hogy itt fordítótól független megoldást kell kitalálni. Tehát alaposan nézz szét, hogy a fordító rutinjai pontosan mit csinálnak, és csak ezek ismeretében állj neki az egésznek. Biztosan meg lehet csinálni CCS-ben is, csak ismerni kell hozzá a beépített rutinokat, amik gyakran nem úgy viselkednek, ahogy elvárnánk. Ha nem megy, csináld asm-ben, ez a feladat egyáltalán nem kívánja a C nyelvet.
Köszi a választ, valamivel világosabb lett a téma, igaz már csak egy hajszál választ el tőle. Két kérdésem még lenne.
1. TMR1-nél TMR1H és TMR1L (8-8bit van a prescaler-nél) nem tudom ugy használni, hogy csak az egyiket (1:8)? Interrupt flag-gel egy számlálót el léptetek 128-ig? Így kijönne az 1sec ![]() 2. T1CON regiszterben benne van minden ami kell tehát ha ugy konfigurálnám ahogy nekem kéne az valahogy így nézne ki? INTCON = $C0 T1CON = $3F PIR1.TMR1IF = 1 PIE1.TMR1IE = 1 Ha van konkrét korrekt példa abból kivesézném az összes dolgot és világos lenne mint a nap. ![]() A választ ismételten köszönöm! üdv: Zsuscsinyo
Töltsd fel kezdőértékkel a TMR1H-t és L-t és kész is vagy. Persze minden megszakításkor meg kell ezt tenned. A legjobb, ha hozzáadod a kezdő értéket, nem pedig beletöltöd, mert akkor az esetleges csúszásokat ki is korrigáltad. Ja igen a példa... Hidd el, ha így nem érted, akkor a kódból sem értenéd, mert nagyon ritka, hogy egy kódrészlet pont úgy lesz jó, ahogy neked kell, és ha módosítani kellene, akkor nem menne. Ha meg megérted, akkor megírod...
Terminálprogival megnéztem hogy mit küld vissza a PIC mikor fogadta a hivást.
Egy "!" volt. Addig irtam modosítottam , még sikerült kicsikartnom az ATH és enter kódok kiküldést , amit terminál programmal sikeresen fogtam is. 2008.06.27. 18:49:31.20 [RX] - 065 084 072 013 De sajnos a telefon nem nem csinál semmit rá. És sajnos nem tudom mért. Basicban irtam egy kis rutnint ami küld parancsot telcsinak , azzel rendesen müködik a telefon. Tippem sincs hogy miért nem reagál most a C programocskámra. Idézet: „2008.06.27. 18:49:31.20 [RX] - 065 084 072 013” Jol van, ez mar azert haladas. Probaltad a sorveglezarot "\n" -re cserelni? vagy akar "\r\n" -re? Tehat a 013 helyett elobb hogy 010-et, majd hogy 013 010 -et lass a terminalon. Amugy csongetes nelkul elobb ugy kiserleteznek, hogy kiadnek egy ures AT parancsot, es arra OK-val kellene valaszolnia a telefonnak (mar ha nincs letiltva a valaszolgatas). Ha parancs kuldes megy akkor utana kiserletezhetsz a valaszolassal. Amugy azt is beletetted, hogy az R bejovetele utan addig olvasgatod az RS232-t amig van benne bejovo adat? LED benne van ami R bejovetele utan kigyullad? Amugy az is eszembe jutott nem kell-e a DTR vonalat kezelni amit esetleg a Basic automatan megtesz helyetted?
Na végre sikerüt!
![]() ![]() ![]() ![]() ![]() üdv: Zsuscsinyo
Végre egy jó hír, örülök! További jó hegesztést!
Megpróbáltam amiket írtál.
Egyébként basicbaen így tudom lenyomni a telefont foglaltra: serout PORTB.0,2,["ATH", 13] Megpróbáltam a sorvégekere 10-et és 13-at tenni. Azt hogy minden karaktert kiolvassak a RING után úgy oldottam meg hogy a 13-at várom , ami ugye az enter. Szóval elvileg ATH,13-al megy ki , meg is jelenik a terminálon, de a telefon nem reagál rá. A programnak a sorosport küldő részét így kellett átalakítanom: USART_Write(65); USART_Write(84); USART_Write(72); USART_Write(13); A csengetést megfogja, a jelzőled kigyullad, ami a programban a sorosport küldés utánra van írva. Vagyis a relék kapcsolgatása müködik ,egyedül annyi hiányzik hogy lenyomja foglaltra.
És mi lenne, ha lecserélné az \n, \r eket valós számokra!? Megasztán az is jó megoldás lehet, hogy közvetlenül a TXREG-be írna. Az mcc18-ban nem nagy kaland a WriteUSART() rutin, sokszor nem is használom. Gondolom ez más C fordítóknál sincs másként...
Hello!
Egy pic16f628 -ast szeretnék vezérelni soros portról max 232-vel. A kapcsolást már el is készítettem és ki is próbáltam, de nem működik tökéletesen. A pic hol kapcsolja a ledeket, hol nem. Az RB port egyáltalán nem működik és az is gond,hogy RB1, RB2 fix 5v-on van állandóan(rx,tx). Az RA port csak RA.0-tól RA.3-ig működik. A pic-be a PARSIK-ból átfordított HEX van égetve, 9600 baud a sebesség, ezt egy 877-es pic-kel kipróbáltam ott tökéletesen működik. Ha valaki tudna ezzel kapcsolatban segíteni azt nagyon megköszönném.
A kapcsolásban pár észrevétel:
- a MAX232 Vcc, illetve a PIC Vdd lábaira illik tenni egy-egy 100 nF-os kondit (közvetlenül a láb mellé, kondi másik lába földre) - a soros port testjét nem szkséges 100 Ohm-on keresztül összekötni az áramkörével, mehet direktben - A MAX 6-os lábán (V-) a rajz fordított polaritással jelzi a kondit, oda a negatív pólus kell - adatlap szerint (TI) a MAX köré 1 µF-os kondik megfelelnek A progi, ha korábban működött, talán jó, ezt mondjuk inkább dcsabi kolléga tudná neked gyorsan megmondani.
off: Kérlek legközelebb ekkora méretű képet ne csatolj, mert fél óra míg megjelenik, és a szervert is feleslegesen foglalod. Ha GIF-be mented, akkor 20kB lesz a több mint 1mega helyett. Az már más kérdés, hogy eleve hogy lehetett fekete fehér képet 1m felett jpg-be megszülni... ?
![]() ON: A rajz elvileg jó. Az ellenállásokat vedd ki a soros vonalakból(RX elől és a gnd ágból is). kobold által említett kondit is polaritás helyesen kösd be és 1µF-okat tegyél a 10-esek helyére. Az nem baj, hogy 4,5V körüli a TX, RX lábakon mérhető egyenfesz. Megnéztem a két PIC-et, és nincs különbség az USART mduljaik között, lehet, hogy nem is ott lesz a baj. Hogy sikerült lefordítanod a 877-re írt kódot a 628-ra?
Kösz a tanácsokat mindennel kapcsolatban, a változtatásokat végrehajtom.
A kérdésedre a válasz, hogy Parsic-ban egyszerűen a 877-es helyett 628 -at választottam és a tx, rx lábakat átírtam RB.2, RB1-re. Lehet, hogy ezzel lesz a gond? Egyszer már működött így, csak nem kapcsolta be mind az 5 ledet.
HELLó!
Az lenne a kérésem, hogy valaki magyarázza el mire kell ügyelni ha a PIC ICSP programozásátl már beültetett állapotban szeretném végrehajtani...?! Vagy elég csak a PGD, PGC, Vcc, Vpp és GND lábakra kivezetést rakni... az a helyzet, PGD és PGC lábakat is használom... egy 80 lábú SMD PIC-nél szeretném majd ezt megcsinálni... Ja igen meg mire jók a LATA, LATB, LATC, stb...stb... regiszterek? előre is kösz...
Szia djreg,
Igen, nagy vonalakban vezesd ki. Amiket masmire is hasznalsz, azokat le kell valasztani, ez mehet egy jumperrel is vagy ellenallassal - ez kapcs fuggo. Vpp-nel ugyelj, hogy semmikepp se kerulhessen a 13V mashova mint kellene. LATx regiszterek a kimeneti latch regiszterek, azaz ugyanugy hasznalod mintha kozvetlenul a portra irnal, azonban mentesek az RMW hibatol, nyugodtan lehet veluk nagy sebesseggel es tetszoleges sorredben dolgozni. Csak port kimenetkent hasznalhato nyilvan valoan. Sok sikert! UI: Ha nem titok mire hasznalod el a 80 labu PIC osszes labat, hogy a PGD PGC is kenytelen vagy hasznalni?
Igen, ahogy nezem mar igy csinalja. Nem is ertem igazandibol hol a problema, mot eleg tompa vagyok, hogy atgondoljam
![]()
Ami azt illeti a megszakítások végett használom... de lehet hogy töröm majd egy kicsit a fejem kitalálok vmi mást...
Hát ez egy Mikroprocesszorral vezérelt PC-vel összekötött mérőasztal lesz (táp, cinező, stb... stb... vezérlése)... majd egyszer... az iskolában vannak ilyen méröszatalok persze mikroproci nélkül és én meg arra gondoltam, hogy miért ne lehetne nekem jobb... ![]()
Igen a 13 a Carriage Return karakter (enter a billentyuzeten van csak). Amugy hasznalhatnal szamok helyett karaktereket is. Akkor pl mindig hex ormatumot hasznalnek a bitmezokhoz mivel azt konyebb latni hol allnak a bitek (regen oktalisat hasznaltak ebbol a celbol, azt is hasznalhatod, de velemenyem szerint az nem annyira jo mar mivel a byte 2 nibble-bol all ami ket hex digit lesz igy praktikus a hex, az oktalis meg 3 digit (ugye max 377 ertekkel). Sot, en hasznalnam a #define -okat is, hogy igy is ertelmezetobbe valjon a kod sot ha at kell rakni a portot masik labra eleg egyetlen helyen modositani...
A varakozas a bejovo karakterekre, ill azok kiolvasasat nezd meg az alabbi atfirkalmanyomban en hogy oldanam meg:
Amugy meg csinalj egy olyan felallast, hogy a tx vonalat hookold meg es a terminallal monitorozd mit csinal mikor a telefonra van dugva (mit kuld el, elkuldi-e stb)
Biztosan le lehet csokkenteni az IO szuksegletet, mivel nem tudom milyen megszakitasokrol van szo ezert nem tudom a Te esetedben ezt hogyan lehetne. Billentyuzetre szoktak olyan megoldasokat alkalmazni, hogy egy analog vonalon olvassak be a billentyuk allapotat, amikhez kulonbozo erteku ellenallasok tartoznak - akar 16 lab helyett lehet hasznalni 1-et. Probald meg csoportokba szedni milyen jelek/meresi adatok jonnek a PIC fele es azokat milyen modszerrel lehetne kevesebb labszamu PIC-re ratenni.
Az a gond, hogy nem ismerem ezt a Parsig-et. Eddig fel sem tűnt, hogy említetted, teljesen elmentem mellette... Mindenesetre a két IC között rengeteg eltéréss van, mivel a perifériák száma nem azonos. Ettől még működhetne a program egyikben, másikban, ha nem érint olyan perifériát, amit nem kéne. Ez a Parsic kicsit megnehezíti a segítségadást. Nem tudod mindezt ASM-ban megoldani? (nem egy bonyi program..)
Sziasztok!
Adott a következő kombináció: PIC18F4550 + Mplab + C18 fordító, tehát mindenki Microchip fejlesztés. Életem első PIC-je, ebben kezdő vagyok, de nagyjából tíz éve programozok, és olyan furcsaságokat mint amik itt történnek, én még nem láttam. Mplab Sim-mel debuggolva minden rendben van, de ha rátöltöm a .hex-et a PIC-re, akkor: - nem tudok integert átadni paraméterként egy függvénynek, csak chart, mert "nem érkezik meg" a tartalma, egészen mást ad vissza (más memóriaterületre mutat) - nem tudok integer értéket vizsgáló switch elágazást berakni, mert egész egyszerűen lefagy a program a PIC-en, char-ral működik - meg még van egy sor dolog amin csak meresztem a szememet, és többnyire mind az integer adattípussal függenek össze Kérdésem, hogy tapasztalt-e bárki ilyet, van-e ötlet, hogy mi lehet a gond? Én arra gondolok, hogy a fordító tolja el a dolgot, és valami paraméterrel talán meg lehetne oldani. Ja, és ugyan van PicKIT2-m, de nem tudom debuggolni vele a PIC-et, mert az Mplab nem működik vele együtt, szóval nem tudom lekövetni, hogy élesben mi történik... Köszi előre is!
trudnai, potyo!
Hogy lehet mcc18-ban az ASM-hoz hasonló MACRO-t készíteni? A rossz példa, ami természetesen nem működik:
Kérdést megelőzve, azért nem jó a függvény hívás, mert nagyon sok idő a hívás kiszolgálása, több, mint amennyit várakozni akarok...
Közben elkövettem egy ilyet:
Ez is jó, de hogy lehet egy sort úgy folytatni, hogy ne kelljen egy sorba leírni mindezt?
Próbáltad elkülönített programrészben is? Mert az a gyanúm, hogy egy USB-s firmware kiegészítéseként írtad azokat a részeket.
Ha külön részben próbálod, akkor kérlek csatold a fájlt, mert akkor mi is többet látunk!
Szia watt,
![]() Most sajnos nem tudom kiprobalni mert valami miatt nem tudok most MCC18-at forditani, majd meg kell neznem mi a gond. Amugy ha igy oldod meg, akkor erdemesebb lenne a Wait_10us -t Wait_us -nak hivni es egy valtozot adni neki hogy hany us varakozasra van szukseg. A masik, hogy ha megfigyeled ez tipikusan egy for ciklus, tehat
megteszi. Sokszor ha while-al oldanak meg ilyen szamlalast akkor a while-on belul oldjak meg a szamlalast is, tehat
Lehet meg egy trukkot csinalni ezzel kapcsolatban, bar nem tudom az MCC18 hogy kezeli a lokalis valtozokat. Tehat ha 'i' nem globalis teruleten van, akkor lehet erosen megno a ciklusido a valtozo hozzaferes miatt, ki kell probalni. Mindenesetre ha nem akarsz globalis valtozon dolgozni, akkor ilyet is lehet:
igy az 'i' a blokkhoz tartozik es kivulrol nem lathato, implementacio fuggo, hogy a fuggveny hivaskor vagy a blokk-ba torteno belepeskor kerul az 'i' letrehozasa a stacken - de a stacken fog letrejonni. Amugy lehet ezek a valtozo inicializalasok is idobe kerulnek amit igyelembe kellene venni es le kellene kezelni...
Szia,
Milyen verzioju az MPLAB? A 8.10-esnek mar kellene ismernie a 4550-est. Ha Options/Select device-t megnezed a Debuggerek kozul a PicKit2-nek zoldnek kell lennie. Na, viszont ha nem mukodik a debugger honnan tudod, hogy rossz cimre mutat a valtozo? Azt irtad szimulalva jo volt? Ha a fordito tolja el akkor szimulalva kiderulne ez is (debuggernek MPSIM-et kivalasztva) Amugy meg tudod nezni a disassemblalt kodot, hogy kideruljon ha a leforditott kod nem jo...
Ja, a legfontosabbat persze nem irtam meg, vannak keszen funkciok delay-re: 4.5 fejezet az MPLAB C18 Libraries doksiban (51297f.pdf). Ezekket 1 ill tobbszaz vagy tobbezer utasitasnyit lehet kesleltetni. Van Nop() fuggveny is, az pedig egy nop asm-et tesz be...
Üdv mindenkinek!
Ismét belefutottam egy problémába. Szeretném beüzemelni a felhúzó ellenállásokat egy 16f628 ba de nem tudom hogy kell C be ![]() Milyen parancs kapcsolja be/ki? Leginkább az mclr t kellene felhúzni mert a nyákról lemaradt ez a rész, gányolni meg nem akarok. Előre is köszönöm.
Üdv mindenkinek!
Van mégegy apróság. Egy másik projectnél kellene 20 KHz es jel a B0 on 40% os kitöltési tényezővel. Sajna ennél megakadtam ![]() Ez is C be íródna, próbálkoztam de nem akar alakulni. A segítséget előreis köszönöm. |
Bejelentkezés
Hirdetés |