Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Aláírom hogy kezdő vagyok, de azért a hibát elolvasni én is tudom, , viszont ha definiálva van a funkcióm, és a támogatói könyvtárral is tisztában vagyok, és mégis ezt írja ki akkor vagyok kicsit megakadva. Nem véletlenül írtam valamelyik nap hogy egy az egyben az ő programrészeit nem tudom használni mert nagyon sokmindent kéne átírnom. Viszont magát az elgondolást írtam bele az én programomba az hogy maradtak a funkciónevek azok mint az övé az egy dolog , de ha az a probléma akokr lehet azt is irni nem pedig doksi olvasgatást javasolni... Lehet rosszul tudtam hogy pic miértek hogyanok a téma neve... Nem szeretem a lekezelőséget...
Ha lelkizés helyett a programot mutattad volna meg, akkor több eséllyel tudna valaki segíteni!
Nem lekezelesnek szantam, hanem, hogy lasd hogyan lehet eljutni a hibauzeenettol a megoldasig... magyaran, hogy onalloan legyel kepes ehhez hasonlo hibak felderitesere -- es ez neked jo, nem nekem.
A funkcio nev problema: Ha a funkciok nem a sajat forras file-jaidban vannak definialva, akkor problema lehet (nem feltetlen az, de mivel nincs minden standardizalva, ezert legtobbszor ezek a dolgok kulonbozoek). Doksit emiatt is irtam, mert egyreszt ehhez kell a C18 doksija, hogy megnezdd az _usart_putc() mit csinal (ill. ha ez icserny mester tamogatoi konyvtaranak fuggvenye akkor ott kellene megnezni), masreszt a HitTech fordito doksijabol kellene kinezni milyen ehhez hasonlo fuggvenyek allnak rendelkezesre, es annak megfeleloen atirni a progit. Mi is csak a doksibol tudnank segiteni, kiveve ha valaki nap mint nap ezt csinalja es fejbol tudja. Masik tipp, hogy googliba beirja az ember a fuggvenyt, es kikopi az oldalakat (pl most igy akkor mar tudom a Microchip C18 fuggvenye ez es nem icserny-e). Ezekutan azt is beirtam a googliba, hogy HiTech es lam, pelda programok vannak a kepernyomon hogyan kell HiTech-ben USART-ot kezelni...
Tulajdonképpen csak annyi a probléma, hogy a függvény vagy nem lett definiálva, vagy rossz helyen lett definiálva (ahol "nem éri el" a hivatkozás). Hogy Zolinak kell definiálnia, az nem kétséges, hiszen semmilyen gyári függvény nem fogja kezelni az általa definiált bufferbe az általa definiált interrupt kiszolgáló által bepakolt karaktereket.
A nagyobbik baj az, hogy a másfajta fordító használatával elvész a kapcsolat a felhasználó által definiált függvények és a "gyári" stdio függvények között. A Microchip C18 fordítójánál leírja a dokumentáció, hogy a standard output a _user_putc() vagy a _usart_putc() függvényekre irányítható, ezért kell pont ilyen nevű függvényeket (felül)definiálni. A Hi Tech fordító és futtató környezet esetében nem tudom, hogy ez hogyan történik.
Szeretném kipróbálni az USART modult. Két PIC18F4520 fog információkat cserélgetni egymással, parancsokat adnak majd egymásnak meg ilyesmi...
Az USART konfigurációjának beállításában kérnék egy kis segítséget. Idáig jutottam:
De a BAUDCON regiszter beállításánál elakadtam. 10MHz-es kvarc lesz mindkét PIC-en, PLL-el tehát 40MHz-en fognak menni. Az USART aszinkron módban megy majd, 9. bit, auto-baud detektálás, hibajelzés meg minden hókuszpók nélkül. Egy 'szóváltás' egy vagy három, pár kivételes esetben maximum egymás után négy bájt átvitelével fog járni de ezt majd én szoftveresen szépen lekezelem. A nagy sebesség egyáltalán nem fontos de azért ne tartson ms-okig egy bájt átvitele. Szóval, hogyan állítsam be a BAUDCON regisztert? Illetve be kell még állítanom valamit?
Sziasztok.
Egy 16F648-as picet szeretnék felprogramozni a WLPT_Vpp_mini_v4-es nyomtatóportos programozóval. Valaki tud valami tapasztalatot mondani, hogy melyik progit érdemes használni? Esetleg valami amire oda kell figyelni? (A programozó már össze van rakva de még nem volt kipróbálva remélhetőleg nincs elkötve semmi.) A tápellátást meg lehet oldani adapterrel is vagy azt is stabilizálni kell?
Szia!
Csatoltam egy forrást, abból szerintem kiderül minden.
Nem 16F648A-t akarsz programozni?
A WPB programmal fel tudod, nézz fel az oldalamra! Előtte a cikk szerint ellenőrizz le mindent, és olvasd el Ezt a topicot.
Sziasztok .
Melyik programmal lehet legegyszerűbben grafikusan pic et programozni propeler cuccot építenék csak ne hogy már csak időt írjon ki és ezért kérdem. Köszönöm előre is.
Szia!
Köszönöm! Ez tök jó, innen végre választ kapok egy maréknyi kérdésemre hogy hogyan oldják meg magát a kommunikációt. Magamtól is hasonlót találtam ki amúgy. De a BAUDCON regiszterről ebben az asm-ben nem is esik szó.
Akkor egy olyat tudsz mondani hol kezdjem az olvasást a programozáshoz?
Szerintem ezek semmire sem valók, jobb ha először asm-el kezdesz ha már értesz váltasz egy magasabb nyelvre pl c aztán esetleg meglesed ezeket a grafikus dolgokat, érdekességnek jó led villogtatáshoz is talán de ahogy jelentkezik picike probléma kezdheted az alapokkal. Tehát jobb ha már egyből az alapokkal kezdesz időt energiát spórolsz.
Icseny oldalán, itt a hobbin a cikkekben, és az oldalamon is vannak infók a kezdéshez.
A BAUDCON regiszterbe nullát írj,ha nem használod a 16 bites módot (az SPBRGH regisztert). Ha használod, akkor is csak a BRG16 bitjét álltísd '1'-be.
El kell dönteni, hogy a baudrate-et hogyan akarod beállítani (ugyanazt az adatsebességet is többféle módon beállíthatod, esetleg a névlegestől való eltérése különböző lesz. A beállítás módja a BRGH és BRG16 bitek beállításától függ.
Szerintem előbb azt kell végiggondolni, hogy mit is akarsz pontosan csinálni, s az mennyi erőforrást igényel. Utána lehet mikrovezérlő típust és hozzávaló fordítót/programnyelvet választani.
Hát ezt azért vitatnám.Hobbi szinten nem akarok annyira belemászni,nekem elég a flowcode.Ettől függetlenűl,meg szoktam nézni a lefordított C-t és asm-et,lehet belőle tanulni.Legutóbb alkonykapcsolót csináltam.15 másodpercenként mintavételez,az utolsó 16 átlagát értékeli,a kimenetet hiszterézissel kapcsolja.Mindez kb. 20-25 perc alatt a pic-ben volt.Megvolt a sikerélmény.
Biztos jo az, en nem tudom, mert nem ismerem -- de annak van egy topikja, lehet ot jobban tudnak segiteni.
Mi az a 16 bites mód?
Amúgy szerintem teljesen mindegy hogy hogyan és milyen módon állítom be a sebességet mert a két PIC hardveresen és szoftveresen is teljesen megegyezik majd egymással. Pontosan ugyan azt a szoftvert kapja mindkét PIC és gondolom a lényeg az hogy mindkettő ugyan úgy legyen beállítva. Na ez így garantált lesz. Ez így szerintetek jó lesz? Az egyik PIC egy decimális 1-est küld a másiknak, amire annak 2-essel kell válaszolnia. Az a PIC amelyik válaszol, annak a válaszadása megszakításból lesz természetesen kezelve. Van még pár homályos dolog, például hogy mi van ha mindkét PIC egyszerre akar beszélgetést kezdeményezni...
Idézet: Amikor a Baud Rate Generator 16 bitesen számlál (SPBRGH:SPBRG). „Mi az a 16 bites mód?” A mellékelt ábra bemutatja az összefüggéseket. Az órajel egyik osztója a beállításoktól függően lehet 1/4, 1/16 vagy 1/64, a másik osztó pedig a [SPBRGH:SPBRG]+1 érték. Ha 8 bites módban vagy (BRG16=0), akkor az olyan, mintha SPBRGH mindig nulla volna...
kb 100% hogy valamiért nem látja ezt a fügvényt a program, a hitech manualt már sokadjára átböngészve"a szerintem ide tartozo részeket) odáig jutottam hogy :
static near unsigned char RX_inp; static near unsigned char RX_outp; static near unsigned char TX_inp; static near unsigned char TX_outp; static near unsigned char usartchar; unsigned char RX_buffer[RX_BUF_SIZE]; unsigned char TX_buffer[TX_BUF_SIZE]; void interrupt low_priority lo_isr() { // PIC hardware USART Rx interrupt? if (PIR1bits.RCIF) { usartchar = RCREG; RX_buffer[RX_inp++] = usartchar; if (RX_inp == RX_BUF_SIZE) RX_inp = 0; } if ((PIE1bits.TXIE) && (TXSTAbits.TRMT)) { if (TX_inp != TX_outp) { TXREG = TX_buffer[TX_outp++]; if (TX_outp == TX_BUF_SIZE) TX_outp = 0; } else { PIE1bits.TXIE = 0; } } } char _usart_getc(void) { char c; while(RX_inp == RX_outp); c =RX_buffer[RX_outp]; if(RX_outp+1==RX_BUF_SIZE) {RX_outp=0;} else {RX_outp++;} return (c); } void _usart_putc(char x) { while(TX_inp == TX_outp); TX_buffer[TX_outp]=x; if(TX_outp+1==TX_BUF_SIZE) {TX_outp=0;} else {TX_outp++;} } void putst(register const char *str) { while((*str)!=0) { _usart_putc(*str); if (*str==13) _usart_putc(10); if (*str==10) _usart_putc(13); str++; } } Majd a főprogramrészben csak az _usart_getc() és _usart_putc() fv-t hivogatom. Ha jol sejtem a buffer tömbök és a mutatóik az ACCES-ben vannak . Elképzelhető hogy a forditó ismeri ezt a parancsot de neki másképp van definiálva és emiatt ütközik az enyémmel ? Idézet: --> Ez úgy is két vezetéken történik„"mi van ha mindkét PIC egyszerre akar beszélgetést kezdeményezni..."” ( RX,TX ), tehát fizikai jellegű ütközés nem lehet! Egyébként meg az egyik legyen a "főnök" és mikor kérdez a másik csak akkor küldheti a problémáit ! Steve Idézet: „Error [499] ; 0. undefined symbol: _usart_putc(minor_v6.obj)” Ez a hibajelzés nem ütközésről szól, hanem definiálatlan szimbólumról. Csak nem tudom, hogy mi az a minor_v6. Meg azt sem tudom, hogy a _usart_putc és az összes rá történő hivatkozás ugyanabban a forrásállományban található-e, vagy a projekted több forrásállományból áll, s onnan hivatkozol a függvényre, ahol az nincs is deklarálva. Mellesleg a _usr_putc() elejéről sürgősen vedd ki a
sort, mert így sohasem fog működni! Gondolj csak bele: induláskor TX_inp és TX_outp egyaránt nulla! Pont a _usr_putc fogja különbözővé tenni... Várakozni a kiírás után érdemes, ha betelt a buffer. Nem mellékesen a PIE1bits.TXIE bitet is kezelni kellene.
Nem szeretném az egész programot beilleszteni csak részletek vannak bevágva, összességében kb 2000 sornál vagyok.
Amugy sor kivéve, jogos észrevétel... A többi forrásállomyánban nincs erre történő hivatkozás, minden putc hivás ebben a fájlban van. Inicializálásnál az interruptokat engedélyezem, adatlap szerint beálítom őket, majd ez a rész törli nem ? f (TX_inp != TX_outp) { TXREG = TX_buffer[TX_outp++]; if (TX_outp == TX_BUF_SIZE) TX_outp = 0; } else { PIE1bits.TXIE = 0; } a minor meg a program neve Idézet: Ellenőrizd, hogy van-e olyan hivatkozás, ami megelőzi a függvény definícióját. (Jobb helyeken a fájl elején deklarálják a függvényeket, s akkor már mindegy a sorrend, akár a legvégén is lehet a definíció...) „minden putc hivás ebben a fájlban van” Idézet: Pontosabban letiltja. Éppen ezért kell az újabb karakter küldésekor újraengedélyezni... „Inicializálásnál az interruptokat engedélyezem, adatlap szerint beálítom őket, majd ez a rész törli nem ?”
Feladtam ..
István megtudod mondani hogy a PICULA project melyik fordítóra készült az MPLAB-ban? CCS C Compiler for pic.... ccsc.exe vagy MPLAB C Compiler mcc18.exe? Nyitok egy uj projectet és a mai napot rááldozom erre. (Illetve kérdés hogy ha a legujabb mplabot letöltöm akkor abban benne vannak ezek a fordítók ?)
Ez már megtörtént mielőtt írtam volna hogy gondom van.. Azért az alap dolgokat ellenőrzöm mielőtt segítséget kérek Viszont valami még mindig nem klappol és már szinte átláthatatlan számomra szoval kezdem az alapoknál újra , majd reménykedem hogy a funkciókat elég csak bemásolnom és pár parancsot átirni bennük..
Értem senkit nem akarok semmire rábeszélni lebeszélni. Nekem az a tapasztalatom, hogy nem fogja senki és semijen program megírni helyettünk a kódot, így legegyszerűbb módja a dolgoknak ha olyan tudást halmozunk fel, hogy egyedül meg tudjunk oldani problémákat ehhez nagyon jó segítség ez a fórum és jó irányokat ad.Nekem sajnos nem jött be a flowcode jó jó szép de nem látom bit szinten hogy mi történik a pic-ben!
|
Bejelentkezés
Hirdetés |