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   1063 / 1211
(#) Hp41C válasza Jani_80 hozzászólására (») Jan 4, 2019 / 1
 
Nálam az MpLab 8.90 és az XC8 1.35 kombináció még működött. Esetleg a mellékelt állományban levő kötegelt állomány végrehajtása (a fordító bin könyvtárából indítva) segíthet.
(#) Jani_80 válasza Hp41C hozzászólására (») Jan 4, 2019 /
 
Szia! Köszönöm a segítségedet! Kipróbáltam amit írtál de sajnos továbbra sem tudom kiválasztani az XC8 fordítót az MPLAB-ból. Leszedtem minden MPLAB-ot és fordítót, majd feltelepítettem az általad ajánlott MPLAB8.90-et és az XC8 1.35-öt, majd ahogy írod az általad küldött állományt lefuttattam az XC8 fordítón bin könyvárában, majd gép újraindítás , próba és sajnos nem látom az MPLAB fordító listájában az XC8 fordítót, ahogy a csatolt képen is látható.
Szerinted mi lehet a probléma?

Ez a környezet:
Laptop: win10, MPLAB 8.90, XC8 1.35-ös fordító, PICkit2, PIC16F877-es mikrovezérlő (lehet , hogy ehhez a PIC-hez nem jó az XC8?)

Köszönöm előre is a segítségedet!

kép.jpg
    
(#) Hp41C válasza Jani_80 hozzászólására (») Jan 4, 2019 / 1
 
Idézet:
„...majd ahogy írod az általad küldött állományt lefuttattam az XC8 fordítón bin könyvárában...”

Esetleg "Run as Administrator" kell hozzá. Nálam (a legmodernebb op. rendszer: Windows 10P azaz XP alatt) nem kellett...

Más megoldás: MpLabX sok türelemmel + XC8
(#) Jani_80 válasza Hp41C hozzászólására (») Jan 4, 2019 /
 
Köszönöm! , próbálkozom még ezzel is és a CCS C vel is. Az MPLABX az első látásra tényleg nem volt szimpatikus
(#) Hp41C válasza Jani_80 hozzászólására (») Jan 4, 2019 / 1
 
Nézd meg, ki van-e töltve ez a táblázat, kézzel fel tudod-e venni az XC8 adatait.
(#) Jani_80 válasza Hp41C hozzászólására (») Jan 4, 2019 /
 
Köszi az infót! Sajnos valamiért a set language Tool Location blakk segítségével sem tudtam a telepített XC8-at felvenni az MPLAB ba. Egyenlőre az XC8- al kapcsolatos telepítési infókat félre teszem (máskor jól jöhet még). Viszont sikerült a CCS C fordító használatára megoldást találnom, így egyenlőre azt fogom használni. Köszönöm a segítségedet, és a korábbi bejegyzéseidet is , mert azok alapján tudtam elindulni a C -témában !
(#) Hp41C válasza Jani_80 hozzászólására (») Jan 4, 2019 /
 
CCS plugin MpLab 8.xx ill. MpLab X -hez.
Hogyan telepítetted fel az XC8 -at? Előbb már fenn volt az MpLab8?
(#) Jani_80 válasza Hp41C hozzászólására (») Jan 4, 2019 /
 
Azt hiszem fent volt már az xc8 telepítése előtt az MPLAB8. Ugye a lenti helyes sorrend a telepítésben?
1, leszedni minden mplab-ot
2, mplab8 telepítése
3, CCS plugin telepítése
4, XC 8 telepítés
5, Mplab-ban beállítani hogy a projektnél az XC8-at használja
(#) Hp41C válasza Jani_80 hozzászólására (») Jan 4, 2019 /
 
Elégnek kellene lennie, ha leszeded az XC8 -at, újraindítás után visszateszed. Esetleg egy régebbi XC8 -at feltenni, majd az 1.35 -öt. ... Régen volt már.
(#) Dress hozzászólása Jan 4, 2019 /
 
Sziasztok!

Szeretnék egy kis segítséget kérni.
Rövid/hosszú gombnyomást kellene kezelnem. A problémám az, hogy a hosszú gombnyomás lehet akár egy perc is, így nem fér bele az "unsigned long"-ba se. Ha viszont tulcsordulás után beleesik a 100-5000 közé, elfogadja rövidnek. (és ez a nagy változó még a ROM-ot is megeszi)
Biztos van jobb/elgánsabb megoldás.

  1. unsigned long int  jobb_sz ;                     //0-4294967295
  2.  
  3. ...
  4.  
  5. if(bejobb==0) {jobb_sz++; rovidjobb=0; hosszu_jobb=0;}
  6.  if(jobb_sz>=5000)  {hosszu_jobb=1; rovidjobb=0; }
  7.  if((jobb_sz>=100) && (jobb_sz<=5000)) {rovidjobb=1; jobbv=0;hosszu_jobb=0;}
(#) Bakman válasza Dress hozzászólására (») Jan 4, 2019 /
 
Hány gombról lenne szó?
(#) Dress hozzászólása Jan 4, 2019 /
 
Kettő

jobb-bal
(#) Bakman válasza Dress hozzászólására (») Jan 4, 2019 /
 
Használj két változót. Két UInt32-vel el lehet számolni 1,844 * 10^19 -ig. Annyi már csak elég.

Ha az LSB megtelt, növeled az MSB-t.
A hozzászólás módosítva: Jan 4, 2019
(#) Jani_80 válasza Hp41C hozzászólására (») Jan 4, 2019 /
 
Fogok még vele kísérletezni az biztos. Ha jelenleg a CCS C van fent a gépemen és azzal dolgozik és felteszem az XC8-at és egy masik projekthez az XC8-at állítom be fordítónak, akkor a CCS C és az XC8 nem ütközik majd ugye? Tehát tudom probálgatni az XC8-at is ha a CCS C is fent van? (Szeretném azért az XC8 -at is feléleszteni...)
(#) glaci hozzászólása Jan 4, 2019 /
 
Sziasztok!
Float írása és olvasása belső eeprom-ba és -ból problémám van.Nem kapok vissza jó eredményt.
Találtam egy kódot. Mondjatok róla valamit.

  1. float E2P_read_float(unsigned int addr)
  2. {
  3.       unsigned char i;
  4.       float result;
  5.       float* pResult;
  6.       unsigned char* temp;
  7.       temp=&result;
  8.       for(i=0; i<4; ++i)
  9.          *(temp+i) = EEPROM_Read(addr+i);
  10.       return result;
  11. }
(#) Hp41C válasza glaci hozzászólására (») Jan 4, 2019 /
 
Kell csinálni egy u_n_i_o_n_t, amelyik egyik tagja float, a másik tagja egy karakter tömb.
  1. typedef u_n_i_o_n _FLOAT_VAL
  2. {
  3.     float Val;
  4.     unsigned char bytes[4];
  5. } float_VAL;
  6.  
  7. float_val f;
  8.  
  9. f.Val = 3.1415;
  10. EEPROM_Write(f.bytes[0]);
  11. EEPROM_Write(f.bytes[1]);
  12. EEPROM_Write(f.bytes[2]);
  13. EEPROM_Write(f.bytes[3]);
  14.  
  15. f.bytes[2] = EEPROM_Read(addr+2);


ps: Az u_n_i_o_n -ból az aláhúzásokat el kell hagyni.
A hozzászólás módosítva: Jan 4, 2019
(#) Hp41C válasza Dress hozzászólására (») Jan 4, 2019 /
 
Miért számolsz ilyen gyorsan? A gombok lekérdezése bőven lehetséges, ha csak 100 ms vagy 10 ms -onként fut le. Ekkor egy perces lenyomott gomb 600 ill. 6000 értéknek felelne meg, bőven beleférne egy 16 bites számba is.
A hozzászólás módosítva: Jan 4, 2019
(#) pipi válasza Dress hozzászólására (») Jan 4, 2019 /
 
Hali!
Ha eléri a "hosszú gomb" értéket akkor már ne növeld tövább a számlálót
(#) rolandgw válasza glaci hozzászólására (») Jan 4, 2019 /
 
A 7. sor helyesen:
  1. temp=(unsigned char*)&result;
(#) Dress válasza Hp41C hozzászólására (») Jan 4, 2019 /
 
Rakjam be pl. megszakításba ?
(#) Dress válasza pipi hozzászólására (») Jan 4, 2019 /
 
Azt hogy?
(#) foxi63 válasza Dress hozzászólására (») Jan 4, 2019 /
 
Szia!
A timer 2 számlálóval könnyű, másodperc alapú (1msec -20msec) időnként megszakítást generálni. Amikor bekövetkezik a megszakítás, akkor csak egy változó 1 bitjét átállítod mondjuk 1-re. a timer2 megszakítása ezzel véget is ér lekezeled a pir1,tmr2 if jelzőbitet és kész is..
A főprogramban csak ezt a bekapcsolt bitet kell vizsgálgatni ciklikusan, és ha ez 1 akkor kiolvasod a billentyűzetet., nullázod a bitet. Esetleg tehető ide egy másik számláló, ha 1 másodperben csak 10x kédezed le a gombokat. Így elkerülhető mindenféle prellezés,rossz érték beolvasása, stb.
üdv .: Foxi
(#) pipi válasza Dress hozzászólására (») Jan 5, 2019 /
 
pl jobb_sz++; helyett if(jobb_sz<5001) jobb_sz++;
De én is megszakításban csinálnám, ahogy Hp41 javasolta...
A hozzászólás módosítva: Jan 5, 2019
(#) Dress válasza foxi63 hozzászólására (») Jan 5, 2019 /
 
Köszönöm!
Ezt emésztem kicsit , megpróbálom megcsinálni, majd mutatom.
(#) Dress válasza pipi hozzászólására (») Jan 5, 2019 /
 
Ezt értem, köszönöm.
Azt veszem észre (megpróbálom érthetően megfogalmazni) hogy:
a főprogramban fut az egész, megnézem, hogy a gomb 0 vagy 1
ha 0, akkor elkezdek számolni
ha 100 és 5000 között vált 1-re akkor rövidként lekezelem
ha tulhalad 5000-en akkor hosszúként kezelem
viszont ha tulhaladt már mondjuk 10-szer az 5000-en és elkezd ujra számolni, itt vált vissza 1-re a bemenet, és akkor pont beleesik 100-5000 közé, akkor rövidnek tekinti és lekezeli rövidként.
Azt kéne elérnem, hogy ha egyszer túlment az 5000-en, mindegy mikor tér vissza, ne legyen belőle rövidnek megfelelő.
UH
remélem sikerült...
(#) kissi válasza Dress hozzászólására (») Jan 5, 2019 /
 
Szia!

Pipi kolléga pont ezt írta le Neked...Ha növeled a változód ( pl. jobb_sz), akkor csak 5001-ig nő, így amikor elengeded a gombot és megvizsgálod a számlálót, akkor hosszú nyomásnál max. 5001 lehet benne ( rövidnél vagy zavarnál meg az aktuális érték!) !
(#) Dress válasza kissi hozzászólására (») Jan 5, 2019 /
 
Értem!
Így bármikor engedem el, max 5001 lesz az értéke, ekkor én nullázom le és indulhat újra.

asszem erre vágytam, köszönöm
(#) glaci hozzászólása Jan 5, 2019 /
 
Sziasztok!
A problémám a következő. Az EEpromba két helyre szeretnék adatokat írni. Először az alsó 9 helyre , majd ezután a következő 9 helyre. Amikor az írás a k írásához ér, az első írásnál, azt nem írja be az eepromba. A következő írási folyamatnál viszont már beírja.
Mit nem látok?

  1. do
  2.                 {
  3.                    switch(j)
  4.                    {
  5.                       case 0:EEPROM_Write(j,Hi(fkev));break;  // évszám alsó byte-ja
  6.                       case 1:EEPROM_Write(j,Lo(fkev));break;  // évszám felső byte-ja;
  7.                       case 2:EEPROM_Write(j,fkho);break;
  8.                       case 3:EEPROM_Write(j,fknap);break;
  9.                       case 4:EEPROM_Write(j,fkora);break;
  10.                       case 5:EEPROM_Write(j,fkperc);break;
  11.                       case 6:EEPROM_Write(j,Highest(k));break;    //a long k 32  bites egész szám
  12.                       case 7:EEPROM_Write(j,Higher(k));break;
  13.                       case 8:EEPROM_Write(j,Hi(k));break;
  14.                       case 9:EEPROM_Write(j,Lo(k));break;
  15.                    }
  16.                    j++;
  17.                    if(j>9)
  18.                    {
  19.                       i=0;j=10;
  20.                    }
  21.                 } while(i);      //  eepromba írás vége, kilépés
  22.              
  23.                 do       //feltöltés ciklus kezdet
  24.                 {
  25.                    switch(j)
  26.                    {
  27.                       case 10:EEPROM_Write(j,Hi(ev));break;  // évszám alsó byte-ja
  28.                       case 11:EEPROM_Write(j,Lo(ev));break;  //  évszám felső byte-ja;
  29.                       case 12:EEPROM_Write(j,ho);break;
  30.                       case 13:EEPROM_Write(j,nap);break;
  31.                       case 14:EEPROM_Write(j,ora);break;
  32.                       case 15:EEPROM_Write(j,perc);break;
  33.                    
  34.                       case 16:EEPROM_Write(j,Highest(k));break;        //a k  32 bites egész
  35.                       case 17:EEPROM_Write(j,Higher(k));break;
  36.                       case 18:EEPROM_Write(j,Hi(k));break;
  37.                       case 19:EEPROM_Write(j,Lo(k));break;     //eddig kész
  38.                    }
  39.                    j++;
  40.                    if(j>19)
  41.                    {
  42.                       i=1;j=0;
  43.                    }
  44.                 }while(j);
A hozzászólás módosítva: Jan 5, 2019
(#) eSDi válasza glaci hozzászólására (») Jan 5, 2019 /
 
Én például ezt nem látom.
Idézet:
„if(EECON1.WR==0) feltétel után jó!”

Miért nem használod, ha egyszer már működött? Minden írás után meg kell várnod, míg befejezi.
(#) Hp41C válasza glaci hozzászólására (») Jan 5, 2019 /
 
Mit csinál az EEPROM_Write() eljárás?
Következő: »»   1063 / 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