Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   1062 / 1211
(#) glaci válasza szucsistvan123 hozzászólására (») Dec 31, 2018 / 1
 
Ezt próbáld megszerezni!
(#) Bakman válasza glaci hozzászólására (») Dec 31, 2018 /
 
Nekem úgy rémlik, lehet, hogy hibásan, hogy ezt a könyvet nagyon nem javasolják kezdőknek.
(#) szucsistvan123 válasza glaci hozzászólására (») Dec 31, 2018 /
 
Köszi!
De ez meg van nekem is!
Meg a Ruzsinszky féle is!
Csak gondoltam hátha van ezen kettőn kívül valami más.
(#) kiszebra válasza szucsistvan123 hozzászólására (») Jan 1, 2019 /
 
Egyébként ajánlanád kezdőnek? Én most ismerkedem a PIC-kel.
(#) szucsistvan123 válasza kiszebra hozzászólására (») Jan 1, 2019 /
 
Annyira nem mélyedtem még bele még, de így első ránézésre tényleg nem annyira kezdő szint.
Egy próbát megér, ha megveszed, nem olyan drága: Bővebben: Link


A másik könyv pedig ez: Bővebben: Link
Szerintem ez elég érthető kezdőknek is. Az elején egy kis C gyorstalpaló is van.
A hozzászólás módosítva: Jan 1, 2019
(#) usane válasza kiszebra hozzászólására (») Jan 1, 2019 /
 
Nem kezdőknek való.
(#) glaci hozzászólása Jan 1, 2019 /
 
Sziasztok!
Megint van egy problémám!
Számolás eredményeként van egy float szám. Ezt a számot meg szeretném jeleníteni lcd-n, kerekítés után 4 karakteren, egy tizedes pontossággal. Az egész része 20 és 30 közé esik. Sehogy nem akar 4 karakteren a kijelző megállni.

  1. float napit,x;
  2.  
  3.  
  4. char txt[4];
  5. char txt3[4];
  6. .
  7. .
  8. .
  9. .
  10.  
  11. x=napit*10;
  12.  
  13. kerekit(x);
  14. x=(float)x/10;
  15. FloatToStr(x,txt);
  16. txt3[0]=txt[0];txt3[1]=txt[1];txt3[2]=txt[2];txt3[3]=txt[3];
  17.  
  18. Lcd_Cmd(_LCD_CLEAR);
  19.                    
  20.  
  21. Lcd_Out(4,6,txt3);


a kerekit függvény

  1. int kerekit(float x)
  2. {
  3.    if((x-(float)(int)x<0.5))
  4.    {
  5.       return(int)x;
  6.    }
  7.    else
  8.    {
  9.       return(int)(x+1);
  10.    }
  11. }


Az lcd-n megjelenik a szám, de utána még kiírja azt is ami nincs a kiíratási parancsban, az eredeti txt-ben levő számot. A program mikroc-ben íródik.
Mondjátok hogyan csináljam?
(#) benjami válasza glaci hozzászólására (») Jan 1, 2019 /
 
1. Ha négy karaktert szeretnél használni, akkor legalább 5 bájtos karaktertömböt hozz létre, hogy a lezáró nulla is beleférjen.
2. A FoatToStr jó eséllyel túlírja a 4 bájtos karaktertömbödet, csoda, hogy nem ír felül minden mást.
A megoldás:
- használj akkora karaktertömböt amibe biztosan belefér a FloatToStr eredménye
- A tömb 5. elemét (aminek 4 az indexe) nullázd ki, így az Lcd_Out úgy veszi, hogy ott vége a string-nek.
(#) glaci hozzászólása Jan 1, 2019 /
 
Sziasztok!
Megoldódott!
A napit változó számolásánál követtem el hibát. Régi más program nyelvekből megmaradt rossz beidegződés miatt nem fordítottam kellő figyelmet a változók kikényszerített előjelességére, így megint a korábbi unsigned hiánya okozott hibás kiértékelést.
(#) glaci válasza benjami hozzászólására (») Jan 1, 2019 /
 
Köszönöm a tanácsot, de mint írtam sikerült a hibát megtalálni. A FloatToStr is csak egy kényszerűség volt.
(#) eSDi hozzászólása Jan 2, 2019 /
 
Sziasztok!

Csak egy apróság, hátha más is belefut kezdőként C nyelven. MPLAB X v5.10 - XC8 v1.45
Én BASIC-ben szoktam, így néha fejtörést okoz a C, mint most is.

  1. void I2C_Master_Start() {
  2.     SSP1CON2bits.SEN = 1;
  3.     while (SSP1CON2bits.SEN == 1) {
  4.         asm("nop");
  5.     }
  6.     PIR1bits.SSP1IF = 0;
  7. }


Korábban működött, de most nem fut rá a program, nem is fordítja le és nem is reklamál érte.
  1. I2C_Master_Start;


Így működik.
  1. I2C_Master_Start();
(#) Hp41C válasza eSDi hozzászólására (») Jan 2, 2019 /
 
  1. I2C_Master_Start;

Ez a sor C nyelven azt jelenti, hogy a I2C_Master_Start eljárás címét kellene eltenni valahová, de a cél nincs megadva. Egy rendes fordító / optimalizáló a sort értelmetlensége miatt kiveszi a kódból. Értemet pl. akkor kaphatna, ha ezt a függvény belépési címet átadnánk egy pointer típusú változónak vagy egy másik eljárásnak un. függvény paraméterként.
  1. I2C_Master_Start();

Ez a sor az eljárás meghívását írja elő.
A hozzászólás módosítva: Jan 2, 2019
(#) rolandgw válasza eSDi hozzászólására (») Jan 2, 2019 /
 
Ebben nincs semmi meglepő, ahogy Hp41C is írta. Ki is tudod íratni a címet:
  1. printf("%p", I2C_Master_Start);
(#) eSDi válasza Hp41C hozzászólására (») Jan 2, 2019 /
 
Ez így teljesen oké. Csak könnyen lemaradhat, ha nem figyelünk kezdőként. A fordító ki is vette, nem volt a listázásban, csak éppen azt nem írta le sehova, hogy miért.
(#) Hp41C válasza eSDi hozzászólására (») Jan 3, 2019 /
 
Ezt is kiveszi az optimalizáló pedig lenne értelme. Az USART vevő bufferből kiolvassa a hibás karaktert. Mivel hibás, az értéket úgyis eldobjuk...
  1. RCREG;

Ez csak azárt magad a kódban, mert a WREG volatile kulcsszóval definiált.
  1. WREG = RCREG;
(#) Jani_80 hozzászólása Jan 3, 2019 /
 
Sziasztok! Frissen regisztrált tag vagyok itt, köszönöm a befogadást! PIC C-ben való programozással kapcsolatban lenne kérdésem. ASM-ben már használtam PIC-et , hobbi szinten nagyobb dolgokat is csináltam, de most C-ben szeretnék elkezdeni PIC-et Programozni. PIC16F877-el dolgozok, MPLAB 8.92-est használok, jelenleg a CCS C compilert használom, a próba verziót (demo), ami még 42 napig ingyenes és utánna meg kellene vennem. Tudna valaki segíteni, hogy honnan tudnék letölteni egy nem demó , de ingyenes CCS C compilert a fent írt MPLAB-hoz, és hogy a PIC16F877 et tudjam vele prgramozni /debugolni? Probaltam a googleval már megoldást keresni de sajnos nem jön össze. Más c fordító is szóba jöhet, csak az MPLAB megszokott környezetemhez és a PIC16F877-hez rakaszkodnék.. Előre is köszönöm a segítségeteket!
(#) Hp41C válasza Jani_80 hozzászólására (») Jan 3, 2019 /
 
Nem demo CCS fordítót a CCS honlapjáról lehet letölteni a megfelelő díj kifizetése után.
Más megoldás a Microchip XC8 fordítója, ami néhány napig teljes módban működik, utána Free módban használható. Hátrány, hogy nincs annyi előre megírt könyvtára, mint a CCS -nek, hogy meglehetősen hosszú kódot fordít az ingyenes módban. Továbbá a régi MpLab 8.xx -hez 1.33 vagy 1.34 körüli verzió használható.
(#) glaci hozzászólása Jan 3, 2019 /
 
Sziasztok!
Meg mindig az eepromokkal küszködök! A fejlesztő rendszer mikroc.
Van egy do-->while ciklus, ami után ki kell olvasni az eepromból adatokat. Ez után a ciklus után csak úgy hajlandó helyes adatokat kiolvasni az EEPROM_Read, hogy az utasítást, 100 ms késleltetés után adom ki. Miért van ez?
(#) kissi válasza glaci hozzászólására (») Jan 3, 2019 /
 
Szia!

A do-while alatt írod bele ?!
(#) glaci válasza kissi hozzászólására (») Jan 3, 2019 /
 
Nem, hanem amikor kiléptem a do-while ciklusból.
(#) Jani_80 válasza Hp41C hozzászólására (») Jan 3, 2019 /
 
Az MPLaB 8.92ben nem tudtam beallitani forditokebt az XC8at, mert a legurdulo listaban csak C8at latok. Ez miert lehet? LEhet hogy masik mplab verzio kell?
Ha megis ccs c forditot szeretnék akkor megszerezhető valamilyen feltort verzió ha igen honnan? Hobbi celra nem fizetnék ki ilyen osszegeket. Köszi!
(#) kissi válasza glaci hozzászólására (») Jan 3, 2019 /
 
Kilépsz a do-while-ból, utána írsz bele és már olvasod is ?! Az EEPROM íráshoz idő kell, jelzi egy bittel, hogy mikor van kész, azt figyeld !!
(#) brato válasza Jani_80 hozzászólására (») Jan 3, 2019 /
 
Itt nem nagyon tolerálják ha feltröt dolgokat kérsz.
(#) glaci válasza kissi hozzászólására (») Jan 3, 2019 /
 
A do-while alatt van eeprom írás ami switch ciklusban történik, majd az írás befejezése után van egy if vizsgálat ami azt nézi meg, hogy az összes eepromba történő írás meg volt e. Ha igen akkor a do-wilele ciklus elhagyásához szükséges változó átírása történik meg, majd kilép a do-while ciklusból és kezdene az eepromból olvasni.

  1. do       // ciklus kezdet
  2.                 {
  3.                    switch(j)
  4.                    {
  5.                       case 10:EEPROM_Write(j,Hi(ev));break;  //az évszám alsó byte-ja
  6.                       case 11:EEPROM_Write(j,Lo(ev));break;  //az  évszám felső byte-ja;
  7.                       case 12:EEPROM_Write(j,ho);break;
  8.                       case 13:EEPROM_Write(j,nap);break;
  9.                       case 14:EEPROM_Write(j,ora);break;
  10.                       case 15:EEPROM_Write(j,perc);break;
  11.                       case 16:EEPROM_Write(j,Highest(tuzeloa));break;
  12.                       case 17:EEPROM_Write(j,Higher(tuzeloa));break;
  13.                       case 18:EEPROM_Write(j,Hi(tuzeloa));break;
  14.                       case 19:EEPROM_Write(j,Lo(tuzeloa));break;     //eddig kész
  15.                    }
  16.                    j++;
  17.                    if(j>19)
  18.                    {
  19.                       i=1;j=0;
  20.                    }
  21.                 }while(j);  //itt van vége az eeprom-ba írásnak
  22.                 // ki kell olvasni az eepromból adatokat
  23.                 delay_ms(100);
  24.                 Data=EEPROM_Read(0x000);                      //unsigned short int
  25.                 delay_ms(50);
A hozzászólás módosítva: Jan 3, 2019
(#) eSDi válasza glaci hozzászólására (») Jan 3, 2019 /
 
A Mikro C kézikönyve fel is hívja rá a figyelmed, hogy amíg nem fejeződött be az írás, nem kapsz vissza jó eredményt.
Idézet:
„Ensure minimum 20ms delay between successive use of routines EEPROM_Write and EEPROM_Read. Although PIC will write the correct value, EEPROM_Read might return an undefined result.”

Ha nem akarsz fix ideig várni, akkor ahogy mondták, figyelned kell a EEPROM írás befejezését jelző bit-et (adatlap).
(#) glaci válasza eSDi hozzászólására (») Jan 3, 2019 /
 
Köszi ezt én is olvastam! De azt gondoltam, hogy írás után van néhány lépés ami elég kéne legyen időben, hogy tudjon jó eredményt adni. Lehet a figyelést próbálom még meg.
(#) usane válasza glaci hozzászólására (») Jan 3, 2019 /
 
Ne gondold. Számold ki az órajelből. Bár C-ben nem könnyű. Nem tudom a mikroc készít e disassembly fájl-t.
(#) glaci válasza eSDi hozzászólására (») Jan 3, 2019 /
 
if(EECON1.WR==0) feltétel után jó!
(#) eSDi válasza usane hozzászólására (») Jan 3, 2019 /
 
Nem is kell számolgatni nagyon, kb 8ms lehet az EEPROM írási ciklus. Belátható, hogy ez azért elég hosszú idő.
(#) kissi válasza glaci hozzászólására (») Jan 3, 2019 /
 
Következő: »»   1062 / 1211
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