Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   861 / 1319
(#) erdoszoli válasza trudnai hozzászólására (») Dec 16, 2010 /
 
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...
(#) icserny válasza erdoszoli hozzászólására (») Dec 16, 2010 /
 
Ha lelkizés helyett a programot mutattad volna meg, akkor több eséllyel tudna valaki segíteni!
(#) trudnai válasza erdoszoli hozzászólására (») Dec 16, 2010 /
 
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...
(#) icserny válasza trudnai hozzászólására (») Dec 16, 2010 /
 
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.
(#) Attila86 hozzászólása Dec 16, 2010 /
 
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:
  1. ;USART konfigurációja:
  2.         movlw   b'00100000'     ;8 bites adás, adás engedélyezve, aszinkron mód
  3.         movwf   TXSTA
  4.         movlw   b'10010000'     ;USART engedélyezve, 8 bites vétel, vétel engedélyezve
  5.         movwf   RCSTA

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?
(#) c27 hozzászólása Dec 16, 2010 /
 
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?
(#) watt válasza Attila86 hozzászólására (») Dec 16, 2010 /
 
Szia!
Csatoltam egy forrást, abból szerintem kiderül minden.
(#) watt válasza c27 hozzászólására (») Dec 16, 2010 /
 
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.
(#) suhanc hozzászólása Dec 16, 2010 /
 
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.
(#) watt válasza suhanc hozzászólására (») Dec 16, 2010 /
 
Bármelyikkel, ha értesz hozzá...
(#) Attila86 válasza watt hozzászólására (») Dec 16, 2010 /
 
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ó.
(#) suhanc válasza watt hozzászólására (») Dec 16, 2010 /
 
Akkor egy olyat tudsz mondani hol kezdjem az olvasást a programozáshoz?
(#) messer válasza suhanc hozzászólására (») Dec 16, 2010 /
 
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.
(#) watt válasza suhanc hozzászólására (») Dec 16, 2010 /
 
Icseny oldalán, itt a hobbin a cikkekben, és az oldalamon is vannak infók a kezdéshez.
(#) icserny válasza Attila86 hozzászólására (») Dec 16, 2010 /
 
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.
(#) c27 válasza watt hozzászólására (») Dec 16, 2010 /
 
De, kösz.
(#) icserny válasza suhanc hozzászólására (») Dec 16, 2010 /
 
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.
(#) lalca válasza messer hozzászólására (») Dec 16, 2010 /
 
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.
(#) trudnai válasza lalca hozzászólására (») Dec 16, 2010 /
 
Biztos jo az, en nem tudom, mert nem ismerem -- de annak van egy topikja, lehet ot jobban tudnak segiteni.
(#) lalca válasza trudnai hozzászólására (») Dec 16, 2010 /
 
Ez válasz volt!
(#) Attila86 válasza icserny hozzászólására (») Dec 17, 2010 /
 
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...
  1. ;**************
  2. Válaszolj_parancs
  3.         movlw   d'10'
  4.         movwf   USART_próbálkozások
  5. u07     movlw   d'10'
  6.         movwf   USART_számláló
  7.         bcf             PIE1, RCIE              ;USART vétel megszakítás tiltás
  8.         bcf             PIR1, RCIF              ;USART vétel megszakítás flag bit törlése!
  9.  
  10.         btfss   TXSTA, TRMT             ;shift regiszter üres? (ha igen akkor ugrik)
  11.         bra$-2
  12.         movlw   d'1'                    ;KÜLDENDŐ PARANCSKÓD
  13.         movwf   TXREG
  14.         btfss   TXSTA, TRMT             ;shift regiszter üres? (ha igen akkor ugrik)
  15.         bra$-2
  16.  
  17. u05     btfsc   PIR1, RCIF              ;vétel megszakítás flag bit (ha nem vett adatot akkor ugrik!)
  18.         bra             u04                             ;ha vettünk valamit
  19.         call    delay100us
  20.         decfsz  USART_számláló
  21.         bra             u05                             ;még próbálkozunk a vétellel
  22.         bsf             ÜZEMMÓD, 0            ;USART kommunikációs hiba!
  23.         RETURN                                  ;vétel sikertelen
  24. u04     bcf             PIR1, RCIF              ;vétel megszakítás flag bit törlése
  25.         movlw   d'2'                    ;a "válaszolok" szó kódja
  26.         cpfseq  RCREG                   ;a "válaszolok" szót hallottuk?
  27.         bra             u06                             ;ha nem
  28.         bcf             ÜZEMMÓD, 0            ;USART kommunikáció rendben van!
  29.         RETURN                                  ;vétel sikeres
  30. u06     decfsz  USART_próbálkozások
  31.         bra             u07
  32.         bsf             ÜZEMMÓD, 0            ;USART kommunikációs hiba!
  33.         RETURN                                  ;vétel sikertelen     
  34. ;**********************
(#) icserny válasza Attila86 hozzászólására (») Dec 17, 2010 /
 
Idézet:
„Mi az a 16 bites mód?”
Amikor a Baud Rate Generator 16 bitesen számlál (SPBRGH:SPBRG).

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...

tmit.png
    
(#) erdoszoli válasza icserny hozzászólására (») Dec 17, 2010 /
 
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 ?
(#) kissi válasza Attila86 hozzászólására (») Dec 17, 2010 /
 
Idézet:
„"mi van ha mindkét PIC egyszerre akar beszélgetést kezdeményezni..."”
--> Ez úgy is két vezetéken történik
( 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
(#) icserny válasza erdoszoli hozzászólására (») Dec 17, 2010 /
 
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
  1. while(TX_inp == TX_outp);

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.
(#) erdoszoli válasza icserny hozzászólására (») Dec 17, 2010 /
 
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
(#) icserny válasza erdoszoli hozzászólására (») Dec 17, 2010 /
 
Idézet:
„minden putc hivás ebben a fájlban van”
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ó...)
Idézet:
„Inicializálásnál az interruptokat engedélyezem, adatlap szerint beálítom őket, majd ez a rész törli nem ?”
Pontosabban letiltja. Éppen ezért kell az újabb karakter küldésekor újraengedélyezni...
(#) erdoszoli válasza erdoszoli hozzászólására (») Dec 17, 2010 /
 
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 ?)
(#) erdoszoli válasza icserny hozzászólására (») Dec 17, 2010 /
 
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..
(#) messer válasza lalca hozzászólására (») Dec 17, 2010 /
 
É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!
Következő: »»   861 / 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