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   1147 / 1203
(#) benjami válasza Lamprologus hozzászólására (») Jan 15, 2021 /
 
Ha erre van szükséged, akkor használj pic18f45k50-t. Azon egymástól függetlenül lehet állítgatni. Persze elképzelhető, hogy máshol is módosítanod kell a programodat, mert kicsit eltérnek a perifériák.
(#) slimcolt válasza slimcolt hozzászólására (») Jan 16, 2021 /
 
Hi,

Akkor ez így OK?
(#) Lamprologus válasza Hp41C hozzászólására (») Jan 17, 2021 /
 
Köszi!
Következő problémám: használnám a VREF+, VREF- lábakat is, ami azonos az AN2, AN3-al ... de nekem 4 analóg bemenet kéne.
Az úgy működik, hogy AN0-AN5-ig állítom be az analóg bemeneteket, és a AN0, AN1, AN4, AN5-öt használom, miközben a referencia feszt a VREF lábakra adom?
(#) Lamprologus válasza benjami hozzászólására (») Jan 17, 2021 /
 
Köszi, de szegény ember vízzel főz ... azaz próbálom 18F4550-el megoldani mert ez van itthon!
(#) icserny válasza Lamprologus hozzászólására (») Jan 17, 2021 /
 
Igen, működik. Az ADCON1 regiszterbe bináris 0011 1001-et (0x39-et) írnék.
(#) Peet19 hozzászólása Jan 21, 2021 /
 
Sziasztok!
Lehet használni az RB6-RB7 lábakat kimenetnek a PIC felprogramozása után? Az LCD kimenetet akarom rárakni egy portra, de csak a B portnak van meg mind a 8 lába, csak nem tudom hogy lehet-e használni mindent ha a 6-7-es lábon van a programozó.
Előre is köszi.
(#) Bakman válasza Peet19 hozzászólására (») Jan 21, 2021 / 1
 
Program futása közben lehet használni minden további nélkül. Gond ott lehet, ha programozáskor az ott lévő eszköz terheli a programozó kimeneteit.
(#) Peet19 válasza Bakman hozzászólására (») Jan 21, 2021 /
 
Értem köszi. Akkor amikor épp feltöltöm a progit akkor vegyem le az RB6-RB7 ről az LCD-hez csatolt lábakat?
Mondjuk az LCD D6, D7 lábát raknám rá értelemszerűen.
(#) nedudgi válasza Peet19 hozzászólására (») Jan 21, 2021 / 1
 
Kivétel nélkül, minden program elején, érdemes indulás előtt betenni egy késleltetést, hogy a programozónak legyen ideje átvenni az irányítást. Ez akkor elengedhetetlen amikor a programozó lábakat kimenetnek használod.
Azt is meg lehet tenni, hogy a memória ellenőrző összegét kiszámítod.
(#) Hp41C válasza Peet19 hozzászólására (») Jan 21, 2021 / 1
 
Mivel az RB7 és RB6 lábra bemenetet teszel, ezek nem fogják zavarni a programozást.
A program elején a várakozás csak akkor kell, ha ezeket a lábakat kimenetnek (vagy T1 oszcillátornak - egyes típusokon) használod és a belső oszcillátort használod és a MCLR lábat bemenetnek használod. A hangsúly az és -eken van.
(#) Peet19 válasza nedudgi hozzászólására (») Jan 21, 2021 /
 
Rendben, köszi. Mennyi legyen ez a késleltetés?

Hp41C: köszi értem, de az RB6 és RB7 lábakra kimenetet rakok nem bemenetet. D6, D7 az LCD lábai oda infót küldök, nem akarok onnan olvasni.
(#) Bakman válasza Peet19 hozzászólására (») Jan 21, 2021 / 1
 
Bekapcsoláskori 100 ms bőven elég, még talán túl sok is. Tudommal olyan 10 - 20 ms körül van a biztonságos minimum.

Az is megoldás, hogy átrendezve a bekapcsoláskori programrészeket, ezen lábak kimenetként való használata legyen az utolsó lépés a fő programciklus előtt. Már ha sietni kell valamiért bekapcsoláskor.
(#) Pali79 válasza Peet19 hozzászólására (») Jan 21, 2021 /
 
Miért nem használod az LCD-t 4 bites módban?
(#) Hp41C válasza Peet19 hozzászólására (») Jan 21, 2021 / 1
 
Nézőpont kérdése. Az LCD bemenetét kötöd az RB6 és RB7 -re. Ha biztosítod, hogy az LCD E bemenete alacsony szinten legyen, akkor nem terheled vele a programozót sem.
(#) Peet19 válasza Hp41C hozzászólására (») Jan 21, 2021 /
 
Értem, köszi, ezt jó tudni.

Pali79: még csak tanulgatom a kezelését 8 biten kicsit talán egyszerűbb, 4 biten egy kicsit macerásabb
Meg arra gondoltam hogy "valószínű" egy shift regiszterrel fogom használni a közeljövőben minden lcd-s projektemet, úgyhogy egyenlőre maradok a 8bites módnál.

Bakman: lehet bekeveredtem ezzel az időzítéssel kapcsolatban, de nem az lcd inicializálás előtti késleltetésre gondoltok? Én azt 15ms -re állítottam.
(#) Bakman válasza Peet19 hozzászólására (») Jan 21, 2021 / 1
 
Nem, nem arra gondolunk. Ha Reset után (pl. bekapcsoláskor) a lehető leggyorsabban előállítod Hp41C által leírt feltételeket, problémás lehet a programozás.

Magyarán ha nem sürgős, akkor az egyébként programozásra is használt lábak kimenetre való átkapcsolását késleltesd (Reset után alapesetben minden port bemenet). A legyegyszerűbb megtenni ezt úgy, hogy a teljes program eleve késleltetéssel indul, pl. 20 ms-os várakozással, majd mehet a lábak beállítása. Ennyi idő általában elég a programozónak ahhoz, hogy a kontrollerben lévő program futását megállítsa és programozási üzemmódba kapcsolja át.
(#) Peet19 válasza Bakman hozzászólására (») Jan 21, 2021 /
 
Jaaa, értem már, köszi. Most már minden tiszta. Ezt a késleltetést amúgy érdemes minden esetben beletenni az elejére, vagy csak akkor ha a programozó lábakat is I/O -ként szeretném használni?
(#) pipi válasza Peet19 hozzászólására (») Jan 21, 2021 / 3
 
Könnyebb megszokni, hogy mindig legyen
A hozzászólás módosítva: Jan 21, 2021
(#) Bakman válasza Peet19 hozzászólására (») Jan 21, 2021 / 1
 
Nálam az alábbi sorrend szokott lenni a program elején:

OSCCON regiszter beállítása (opcionális)
100 ms késletetés (mindig)

Hacsak nem valami ultra gyors reagálás kell bekapcsoláskor/Reset után, tegyél ilyesmit a program elejére. pipinek igaza van, könnyebb megszokni.
(#) Peet19 válasza Bakman hozzászólására (») Jan 21, 2021 /
 
Rendben, így fogom csinálni én is mostantól, köszi.

pipi: köszi neked is.
(#) slimcolt válasza Bakman hozzászólására (») Jan 21, 2021 /
 
Én meg ellenkezőleg pont ellenkezőleg szoktam eljárni.
Amint lehetséges, először a portokat állítom be, a lehető legrövidebb ideig legyenek High-Z-n azok a lábak amiket kimenetnek szánok (főleg ha push-pull). A PGED és PGEC lábakat csak bemenetként használok és izoláló ellenállással, hogy a programozót ne terheljem. Az izoláló ellenállás miatt ezen a lábon már esélytelen a gyors adatátvitel, ezért ide csakis az alacsony frekis, bemeneteket kötöm, ahol a slew rate nem számít. Pl egy regulátor Power good kivezetése.
A programozó programozáskor resetbe állítja a PIC-et nem? Vagyis minden IO High-Z.
A hozzászólás módosítva: Jan 21, 2021
(#) Bakman válasza slimcolt hozzászólására (») Jan 21, 2021 /
 
De, oda állítja, ha tudja. Hp41C leírta, milyen esetben lehet problémás a programozás.
(#) slimcolt válasza Bakman hozzászólására (») Jan 21, 2021 /
 
Aha értem. A PIC32-n a MCLR láb ha jól tudom dedikált, semmi másra nem lehet használni. Vagyis én még csak olyannal találkoztam eddig. Elméletileg ott ilyen probléma nem lehet.
(#) Bakman válasza slimcolt hozzászólására (») Jan 21, 2021 /
 
Ja kérem, így már más a leányzó fekvése.
(#) Hp41C válasza slimcolt hozzászólására (») Jan 21, 2021 /
 
A PIC32 család tagjai programozáskor nem igényelnek extra feszültséget valahogy meg kell oldani, hogy mégis programozási módba lehessen lépni.
Eddig nem vettem észre, hogy PIC32 családról van szó.
Egyébként, ha más típust LVP módba kapcsolunk, a MCLR dedikált lesz.
A hozzászólás módosítva: Jan 21, 2021
(#) slimcolt válasza Hp41C hozzászólására (») Jan 21, 2021 /
 
Én nem olvastam eleget vissza pontosan milyen kontrollerről van szó, elnézést.
Aztán nálam már csak PIC32-ről szól a világ egy ideje...
(#) glaci hozzászólása Jan 22, 2021 /
 
Sziasztok!
A problémából megint nem látom a kiutat. A programot PIC16F887-re írom, mikroc alatt. A probléma ami a segítségkérésre ösztönzött, a következő: van egy while ciklus, amibe egy jelzőbit segítségével lépek be, majd egy-egy újabb while ciklusban tölteném fel az eeprom-ot, a program futásához szükséges adatokkal. A program belép a while ciklusba, az adatok beltöltéséhez, de a csatorna kiírás után kilép és az idő törtrészének első szájegyéhez ugrik, pedig erre a gombokról nem kapott utasitást.
  1. void locsido()
  2. {    
  3.      allapot3.F5=0;  allapot3.F6=0;  LCD_Cmd(_LCD_CLEAR); csat=1;
  4.       Lcd_Out_Program_Memory(1,2, part3); Lcd_Out_Program_Memory(2,2, part2);
  5.      while(!allapot3.F5)  //belépés menübe
  6.      {
  7.         while(!allapot3.F6) //belépés a csatornaszám és idők beállításába
  8.         {
  9.            if(csat>16) csat=1;
  10.            txt1[0]=csat/10+48;if(txt1[0]==48) txt1[0]=' ';txt1[1]=csat%10+48;
  11.            for (i=0; i<2; i++){ Lcd_Chr(1,18+i,txt1[i]);  LCD_Cmd(_LCD_MOVE_CURSOR_LEFT);  }
  12.           if(!allapot.F2) { delay_ms(250);csat++; }   //  csatorna léptetés
  13.           if (!allapot.F3)   //csatorna ki van választva
  14.           {
  15.              delay_ms(250);
  16.              if(EEPROM_Read(csat)==255) locs_ido=0; else  locs_ido=EEPROM_Read(csat); //locsolási idő egész része
  17.              allapot3.F6=1; allapot3.F7=0;    //kilépés a csatorna kiválasztásból  belépés a locsolási idő egész részébe
  18.           }
  19.           if(!allapot.F7) allapot3.F5=1; allapot3.F6=1;   //visszalépés a locsolásba
  20.         }
  21.        
  22.         while(!allapot3.F7) //locsolási idő egész része
  23.         {
  24.            txt=locs_ido+48; Lcd_Chr(2,16,txt); LCD_Cmd(_LCD_MOVE_CURSOR_LEFT);
  25.            if(!allapot.F2) { delay_ms(250);locs_ido++;  if(locs_ido>9) locs_ido=0; } //léptetés
  26.            if(!allapot.F3)   //locsolási idő egész része eepromba írás
  27.            {
  28.               delay_ms(250);
  29.               EEPROM_Write(csat,locs_ido); delay_ms(25); //locsolási idő egész része be van írva az eepromba
  30.               /*  az eeprom 49. helyétől a 64. helyig, a locsolára kiválasztott csatornák címei szerepelnek
  31.                 ha a címen 1 van akkor a csatorna ki van választva locsolásra */
  32.               EEPROM_Write(csat+48,1); delay_ms(25);     // a cstorna ki van választva locsolásra
  33.                    //locsolási idő törtrésze  első szám
  34.               if(EEPROM_Read(csat+16)==255) locs_ido=0; else  locs_ido=EEPROM_Read(csat+16)/10;
  35.               allapot3.F7=1;   allapot4.F0=0;  //kilépés az egészrész beírásból belépés a tört első részébe
  36.            }
  37.         }
  38.        
  39.         while(!allapot4.F0) //locsolási idő tört része első szám
  40.         {
  41.            txt=locs_ido+48; Lcd_Chr(2,18,txt); LCD_Cmd(_LCD_MOVE_CURSOR_LEFT);
  42.            if(!allapot.F2) { delay_ms(250); locs_ido++; if(locs_ido>9) locs_ido=0;}//léptetés
  43.            if(!allapot.F3) //locsolási idő tört része első szá kiválasztás
  44.            {
  45.               delay_ms(250);locs_idotort=locs_ido*10;
  46.               //locsolási idő tört második szám
  47.               if(EEPROM_Read(csat+16)==255) locs_ido=0; else  locs_ido=EEPROM_Read(csat+16)%10;
  48.               allapot4.F0=1; allapot4.F1=0;
  49.            }
  50.         }
  51.         while(!allapot4.F1)      //locsolási idő tört szám második helyiérték
  52.         {
  53.            txt=locs_ido+48;Lcd_Chr(2,19,txt);  LCD_Cmd(_LCD_MOVE_CURSOR_LEFT);
  54.            if(!allapot.F2) { delay_ms(250); locs_ido++; if(locs_ido>9) locs_ido=0; }
  55.            if(!allapot.F3)
  56.            {
  57.               delay_ms(250); locs_idotort=locs_idotort+locs_ido;
  58.               EEPROM_Write(csat+16,locs_idotort);//locsolási idő tőrtszáma beírva
  59.               allapot4.F1=1; allapot3.F6=0;
  60.            }   //visszalép a csatornaléptetésbe
  61.         }
  62.      } //eddit tart a locsolási idők
  63. }
(#) Bakman válasza glaci hozzászólására (») Jan 22, 2021 /
 
Az "allapot3.F5", "allapot3.F7" stb. egy-egy változó vagy közvetlen bemenet olvasás is egyben? A sok ilyen illetve ehhez hasonló érték nincs nullázva a kód elején, csak kettő: allapot3.F5=0; allapot3.F6=0;

Ha ezek egy lépésben bemenet olvasások is, akkor lehet, hogy adott bemenet alacsony szinten van.

A feltételes vizsgálatoknál is érzek némi zavart az erőben, lásd melléklet. Ha jól értem a rendszert, akkor az
allapot3.F6 = 1;
sor már független az előző feltételvizsgálattól, az mindenképpen végrehajtódik, kilép a ciklusból. Következik a "locsolási idő egész része", de az "allapot3.F7" valamiért egy (a kód elején nincs nullázva), így az a rész le sem fut, azután lép be a "tört idő első szám ciklusba".

A kód így eléggé maszatos, nehezen követhető. Ez segít kicsit átláthatóbbá tenni: C Beautifier Online.
(#) glaci válasza Bakman hozzászólására (») Jan 22, 2021 /
 
Köszönöm szépen a választ. Az "allapot" 1-2-3-4 változók bitjeinek állapota a ciklusban maradás feltétele. A cikluban maradás feltétele az. hogy az adott jezőbit értéke 0 legyen, tehát amig nem kap 1 értéket benn kéne maradni a ciklusban. Ha viszont az adott ciklusban 1 értéket kap, el kell hagynia a ciklust és abba a ciklusba kéne lépnie, amelyik hozzá a legközelebbi olyan, amelyiknek a jezőbit értéke megegyezik a feltétellel.
(#) glaci válasza glaci hozzászólására (») Jan 23, 2021 /
 
Megoldódott a probléma, átírtam a ciklusokat, switch-case szerkezetre. Jól működik!
Következő: »»   1147 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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