Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   234 / 1320
(#) watt válasza pepe33 hozzászólására (») Jún 27, 2008 /
 
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!
(#) potyo válasza pepe33 hozzászólására (») Jún 27, 2008 /
 
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.
(#) zsuscsinyo válasza trudnai hozzászólására (») Jún 27, 2008 /
 
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 Tudom furcsa a logikám de megpróbálnám.

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
(#) watt válasza zsuscsinyo hozzászólására (») Jún 27, 2008 /
 
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...
(#) pepe33 válasza pepe33 hozzászólására (») Jún 27, 2008 /
 
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.
(#) trudnai válasza pepe33 hozzászólására (») Jún 27, 2008 /
 
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?
(#) zsuscsinyo válasza watt hozzászólására (») Jún 27, 2008 /
 
Na végre sikerüt! Köszi a segítséget már világos minden!! Nagyon sokat szívtam, képzeld a 32.768-as kvarc lábánál az eggyik kondenzátor félre volt forrasztva csodálkoztam is hogy mi a fenétől nem akar menni, amugy a másodperces ciklusokat számlálóval el tudtam érni mivel az interrupt flag minden 2. sec alatt vált 1-re, már tudom hogy megy az osztás is! Örök hálám a segítségért! Ha valami esetleg nem menne akkor még kérdeznék! Köszi!

üdv: Zsuscsinyo
(#) watt válasza zsuscsinyo hozzászólására (») Jún 27, 2008 /
 
Végre egy jó hír, örülök! További jó hegesztést!
(#) pepe33 válasza trudnai hozzászólására (») Jún 27, 2008 /
 
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.
(#) watt válasza trudnai hozzászólására (») Jún 27, 2008 /
 
É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...
(#) user hozzászólása Jún 28, 2008 /
 
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.
(#) kobold válasza user hozzászólására (») Jún 28, 2008 /
 
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.
(#) watt válasza user hozzászólására (») Jún 28, 2008 /
 
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?

(#) user válasza watt hozzászólására (») Jún 28, 2008 /
 
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.

(#) djereg hozzászólása Jún 28, 2008 /
 
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...
(#) trudnai válasza djereg hozzászólására (») Jún 28, 2008 /
 
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?
(#) trudnai válasza watt hozzászólására (») Jún 28, 2008 /
 
Igen, ahogy nezem mar igy csinalja. Nem is ertem igazandibol hol a problema, mot eleg tompa vagyok, hogy atgondoljam
(#) djereg válasza trudnai hozzászólására (») Jún 28, 2008 /
 
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...
(#) trudnai válasza pepe33 hozzászólására (») Jún 28, 2008 /
 
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:

  1. #define be9v 0x20 // B5
  2. #define be5v 0x08 // B3
  3.  
  4. unsigned short i;
  5. void main() {
  6.     TRISB = 0x02; // RB1 bemenet a tobbi kimenet
  7.    
  8.     // hexben irod akkor konyebb a biteket 'latni'
  9.     PORTB = be9v | be5v;
  10.  
  11.     USART_init(9600);    // initialize USART module (9600,n,8,1)
  12.     Delay_ms(1000) ;
  13.     while (1) {
  14.         if (USART_Data_Ready()) {            // if data is received
  15.             i = USART_Read();                  // read the received data
  16.             if (i == 'R')  {
  17.                 // itt mire varunk?
  18.                 Delay_ms(100);
  19.  
  20.                 // itt addig olvasgatnek ameddig van mit...
  21.                 while (USART_Data_Ready()) {
  22.                     // itt kiolvassuk a bufferbol a karakter,
  23.                     // de nem kell nekunk ezert el sem taroljuk
  24.                     USART_Read();
  25.                     // itt azert varakozunk kicsit, mert ha egy
  26.                     // hosszabb uzenetet kuld el a telefon/modem,
  27.                     // akkor legyen ideje elkuldeni az osszes karaktert
  28.                     Delay_ms(1);
  29.                 }
  30.  
  31.                 USART_Write('A'); // betuket hasznalnek, ez megkonnyiti
  32.                 USART_Write('T'); // kesobb a program ertelmezeset
  33.                 USART_Write('H');
  34.                 USART_Write(13);
  35.  
  36.                 // itt nekem amugy nem tetszik, hogy ekkora varakozasok vannak,
  37.                 // ha kozben erkeznek befele karakterek azok nyilvanvaloan
  38.                 // nem lesznek lekezelve
  39.                 Delay_ms(1000);
  40.                 PORTB = 0;              // 9v 5v kikapcs
  41.                 Delay_ms(5000);         // 5mp várakozás
  42.                 PORTB = be9v;           // 9v bekapcs
  43.                 Delay_ms(50000);        //  50 mp várakozás
  44.                 Delay_ms(50000);        //  50 mp várakozás
  45.                 PORTB = be9v | be5v;    // 9v és 5v bekapcs
  46.                 Delay_ms(1000);         // 1 mp várakozás
  47.             }
  48.         }
  49.     }
  50. }


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)
(#) trudnai válasza djereg hozzászólására (») Jún 28, 2008 /
 
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.
(#) watt válasza user hozzászólására (») Jún 28, 2008 /
 
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..)
(#) Seele hozzászólása Jún 28, 2008 /
 
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!
(#) watt hozzászólása Jún 28, 2008 /
 
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:

  1. Wait_10uS() MACRO
  2.         i=0;
  3.         do
  4.         {
  5.         i++;
  6.         }while(i<10);
  7.         ENDM


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...
(#) watt válasza watt hozzászólására (») Jún 28, 2008 /
 
Közben elkövettem egy ilyet:

  1. #define         Wait_10uS()             i=0; do{i++;}while(i<10)

Ez is jó, de hogy lehet egy sort úgy folytatni, hogy ne kelljen egy sorba leírni mindezt?
(#) watt válasza Seele hozzászólására (») Jún 28, 2008 /
 
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!
(#) trudnai válasza watt hozzászólására (») Jún 28, 2008 /
 
Szia watt,
  1. #define tobbsoros_macro Sok C-ben ugy lehet, \
  2.     hogy a sor vegere beteszel \
  3.     egy backslash karaktert

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
  1. #define Wait_us(us) for(i=0; i<us; i++) {}

megteszi. Sokszor ha while-al oldanak meg ilyen szamlalast akkor a while-on belul oldjak meg a szamlalast is, tehat
  1. #define Wait_us(us) i=us; while(i--);

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:
  1. #define Wait_us(us) { unsigned char i=us; wait(i--); }

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...
(#) trudnai válasza Seele hozzászólására (») Jún 28, 2008 /
 
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...
(#) trudnai válasza watt hozzászólására (») Jún 28, 2008 /
 
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...
(#) Thowra hozzászólása Jún 28, 2008 /
 
Ü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.
(#) Thowra hozzászólása Jún 29, 2008 /
 
Ü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.
Következő: »»   234 / 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