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   865 / 1210
(#) kissi válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Az nem jó ! A config beállításod alapján a RESET lábat HASZNÁLOD, azaz, ha ide testet adsz, akkor áll a proci és visszaállítja a regisztereit alapállapotba ! A mostani beállítás mellett kell a felhúzó ellenállás!
(#) kriszrap válasza kissi hozzászólására (») Okt 16, 2016 /
 
Pedig mukodik az animacio amit irtam bele......
Es a resetlabat(mclr) felhvanhuzva most nezem .....
(#) kissi válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Az animáció ( szimuláció ) nem foglalkozik a hardverbeállításokkal ( config-al ) !

szerk: vagy animáció alatt valami LED-es fényjátékot értettél ?!
A hozzászólás módosítva: Okt 16, 2016
(#) kriszrap válasza kissi hozzászólására (») Okt 16, 2016 /
 
Naa van felhuzó ellenállás Igen ledes fényjátékot Müködik az rendesen meg minden csak beolvasni nem tudod a láb státuszát.

Szerk.:
  1. OSCCON.SCS1=1;
  2.     OSCCON.SCS0=0;

Lassú a fényjáték !!!
Másik sajnos nem oldotta meg a problémám

  1. OSCCON.SCS1=1;
  2.     OSCCON.SCS0=0;
  3.     OSCCON.IRCF0=1;///Internal Oscillator Frequency Select bits, 16MHz
  4.     OSCCON.IRCF1=1;
  5.     OSCCON.IRCF2=1;
  6.     OSCTUNE.PLLEN=1; // 4x PLL
  7.    
  8.     TRISA = 0;
  9.     TRISB = 0;
  10.     TRISC = 0;
  11.     TRISD = 0;
  12.     TRISE = 0;
  13.    
  14.     TRISE.TRISE1=1;
  15.     TRISE.TRISE2=1;
  16.    
  17.     LATA = 0;
  18.     LATB = 0;
  19.     LATC = 0;
  20.     LATD = 0;
  21.     LATE = 0;
  22.  
  23.     ANSELE.RE1=0;
  24.     ANSELE.RE2=0;
  25.  
  26.  
  27.   while(1)
  28.   {
  29.           if(PORTE.RE1 ==1) // ha megnyomom a gombot akkor + felét zárja a gomb
  30.            {
  31.            switch(jatek)
  32.            {
  33.            case 1:jatek1();break;
  34.            case 2:jatek2();break;
  35.            case 3:jatek3();break;
  36.            //case 4:jatekVU();break;
  37.            default:jatek=1;
  38.            }
  39.            }
  40.   }
A hozzászólás módosítva: Okt 16, 2016
(#) kissi válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Ha megy a fényjáték, akkor a config bitek nagyjából biztos rendben vannak ( belső oszc. jó beállítás, MCLR rendben !) !

A programodban hol állítod a jatek változót ( alapból!), illetve előtte milyen jatekx fv-t indítottál el ?!
(#) kriszrap válasza kissi hozzászólására (») Okt 16, 2016 /
 
Amikor deklarálom a változot 1 értéket kap pl az 1 játék kodja:
  1. void jatek1()
  2. {
  3.   int k,j,szin=0;
  4.   megszakitas=0;
  5.   for(k=1;k<=4;k++)
  6.   {
  7.      if(k>2) szin=5;
  8.      for(j=0;j<100;j++)
  9.      {
  10.       elsosor(1,1,1,1,1,1,szin+1);
  11.       masodiksor(1,1,1,1,1,1,szin+2);
  12.       harmadiksor(1,1,1,1,1,1,szin+3);
  13.       negyediksor(1,1,1,1,1,1,szin+4);
  14.       otodiksor(1,1,1,1,1,1,szin+5);
  15.       if(megszakitas==1)break;
  16.      }
  17.      for(j=0;j<100;j++)
  18.      {
  19.       elsosor(1,1,1,1,1,1,szin+2);
  20.       harmadiksor(1,1,1,1,1,1,szin+3);
  21.       otodiksor(1,1,1,1,1,1,szin+4);
  22.       if(megszakitas==1)break;
  23.      }
  24.      for(j=0;j<100;j++)
  25.      {
  26.       elsosor(1,1,1,1,1,1,szin+3);
  27.       masodiksor(1,1,1,1,1,1,szin+3);
  28.       harmadiksor(1,1,1,1,1,1,szin+3);
  29.       negyediksor(1,1,1,1,1,1,szin+3);
  30.       otodiksor(1,1,1,1,1,1,szin+3);
  31.       if(megszakitas==1)break;
  32.      }
  33.      for(j=0;j<100;j++)
  34.      {
  35.       elsosor(1,1,1,1,1,1,szin+4);
  36.       harmadiksor(1,1,1,1,1,1,szin+3);
  37.       otodiksor(1,1,1,1,1,1,szin+2);
  38.       if(megszakitas==1)break;
  39.      }
  40.      for(j=0;j<100;j++)
  41.      {
  42.       elsosor(1,1,1,1,1,1,szin+5);
  43.       masodiksor(1,1,1,1,1,1,szin+4);
  44.       harmadiksor(1,1,1,1,1,1,szin+3);
  45.       negyediksor(1,1,1,1,1,1,szin+2);
  46.       otodiksor(1,1,1,1,1,1,szin+1);
  47.       if(megszakitas==1)break;
  48.      }
  49.      for(j=0;j<100;j++)
  50.      {
  51.       negyediksor(1,1,1,1,1,1,szin+1);
  52.       harmadiksor(1,1,1,1,1,1,szin+3);
  53.       masodiksor(1,1,1,1,1,1,szin+5);
  54.       if(megszakitas==1)break;
  55.      }
  56.      for(j=0;j<100;j++)
  57.      {
  58.       harmadiksor(1,1,1,1,1,1,szin+1);
  59.       harmadiksor(1,1,1,1,1,1,szin+2);
  60.       harmadiksor(1,1,1,1,1,1,szin+3);
  61.       harmadiksor(1,1,1,1,1,1,szin+4);
  62.       harmadiksor(1,1,1,1,1,1,szin+5);
  63.       if(megszakitas==1)break;
  64.      }
  65.      for(j=0;j<100;j++)
  66.      {
  67.       masodiksor(1,1,1,1,1,1,szin+1);
  68.       harmadiksor(1,1,1,1,1,1,szin+3);
  69.       negyediksor(1,1,1,1,1,1,szin+5);
  70.       if(megszakitas==1)break;
  71.      }
  72.   }
  73.   if(megszakitas==0) jatek++;
  74.   megszakitas=0;
  75. }
(#) Elektro.on válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Én még az RE1 es port belső felhúzó ellenállásáról érdeklődnék.... Lehet hogy alapból fent van a bemeneted és dzt szeretnéd a nyomógombal felhúzni? Mert így nem sok változást okoz a gomb nyomogatás. Ezért írza nekek korábban talán Attika, hogy test felé húzzon a nyomógomb.
A hozzászólás módosítva: Okt 16, 2016
(#) kissi válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Szerintem próbáld ki a következőt:
  1. while (1)
  2. {
  3. if(PORTE.RE1 ==1) // ha megnyomom a gombot akkor + felét zárja a gomb
  4.   { LED=1; }
  5. else { LED=0;}
  6. }


Írd az elejére és ha ez így megy, akkor keresd meg a programodban a hibát, de ha így mindig csak egy-egy részletet teszel fel, akkor ezt nem igazán jó mazsolázni !
Ez egyébként általában is igaz a programírásra: a programot érdemes részletekben megírni és kipróbálgatni, nem írsz egy "nagyot" és utána csak azt tudod, hogy nem jó ! A hiba helyét be kell határolni, azt pedig könnyen csak kis részletekben lehet !
A hozzászólás módosítva: Okt 16, 2016
(#) Elektro.on válasza kissi hozzászólására (») Okt 16, 2016 /
 
Valóban így van. Ha egyszerre ezernyi hi,alehetőséget visz be , akkor nagyon nehéz megtalálni mi nem jó.
(#) kriszrap válasza Elektro.on hozzászólására (») Okt 16, 2016 /
 
  1. wihel(1)
  2. {
  3. if(PORTE.RE1 ==1)
  4.            {
  5.            oszlopok(1);
  6.            LATB.RB7=1;//led
  7.            LATB.RB6=1;//led
  8.            }else {
  9.            ureskocka();
  10.            }}


Semmit se csinál De ha PORTE.RE1 ---> 0 írom villagit és ha nyomogatom a gombot akor se alszik ki semmi
A hozzászólás módosítva: Okt 16, 2016
(#) kissi válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
A LED-ek mátrixban vannak? Ha igen, akkor engedélyezd a megfelelő oszlopot bittel, ne függvénnyel, a kimenetek legyenek beállítva, valahogy így:
  1. while(1)
  2. {
  3. if(PORTE.RE1 ==1)
  4.            {
  5.            oszlop.bit=1;
  6.            LATB.RB7=1;//led
  7.            LATB.RB6=0;//led
  8.            }else {
  9.             LATB.RB7=0;//led
  10.            LATB.RB6=1;//led
  11.            }}

A while ugye jól volt írva, be is írtad a kódot, nem csak papíron próbáltad ?!

szerk.: a konfiguráció, ANSEL, TRIS persze előtte legyenek beállítva !!!
A hozzászólás módosítva: Okt 16, 2016
(#) kriszrap válasza kissi hozzászólására (») Okt 16, 2016 /
 
Az oszlop az shiftregiszter vezérli.
(#) Elektro.on válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Na most ebből a részletből azt látom, hogy ha RE1 egyenlő 1 el akkor RB 6-7 lábon bekapcsolja a ledet. De ha RE1 egyenlő 0 akkor mi kapcsolja ki? Esetleg ureskocka() fügfényben van ami kikapcsolja?
(#) kissi válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Akkor kapcsold be előtte fixen és próbáld ki, hogy "tuti-e", azaz tudod-e kapcsolni LATB.RB7-et és LATB.RB6-ot, majd írd be a while-os részt a shift.regiszter külön vezérlése nélkül!
(#) Elektro.on válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Még az "oszlopok(1)' függvény tartalma érdekes lehet. Előfordulhat, hogy benne ragad a program, ha abban is van egy végtelen while ciklus.
A hozzászólás módosítva: Okt 16, 2016
(#) kriszrap válasza Elektro.on hozzászólására (») Okt 16, 2016 /
 
Müködik !!
Forasztási baj volt.
Adc _read ugy kell hogy :

ANSELE.ANSB1=1;
ADC_READ(4)

És ennyi??
(#) cross51 válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Én így gondolom:
  1. //ADC CONFIG
  2. ...
  3. //mivel ez MikroC-ben is kell
  4. TRISB.RB1 = 1
  5. ANSELE.ANSB1=1;
  6. ADC_READ(4)

De ha ezek megvoltak már akkor nem szóltam.
bocs, ha nem jó a bit név nem MirkoC-ztem sokat
(#) don_peter válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Én mág használnék pergésmentesítést is:
  1. if(PORTE.RE1 ==1){
  2. while(PORTE.RE1); // Várakozás gomb felengedéséig
  3. ...
  4. }

Ekkor, csak 1szer fut le a programodban a feltétel.
Legalább is, ha 1szer nyomod meg a gombot..

Amúgy a gomb kezelésére használt bemenetet 1db 10K-s ellenállással húzd fel tápra, majd mikor gombot megnyomod, akkor a alacsony szintet vizsgáld. (5v-ot 10k-n keresztül lehúzod test-re a gombbal)
Te most fordítva csinálod..
Így lenne jó:
  1. if(!PORTE.RE1){ // Ha E1 alacsony szintre kerül, akkor gombot nyomtál
  2. while(!PORTE.RE1); // Várakozunk gomb felengedéséig
  3. ...
  4. }


Persze az is jó amit te csinálsz, de lehetnek zavarok amire majd automatizálja magát
A hozzászólás módosítva: Okt 16, 2016
(#) kissi válasza don_peter hozzászólására (») Okt 16, 2016 /
 
Sajnos ezzel nem tudod teljes mértékben megszüntetni a prell-t ( ha ezt akartad ?!), egyébként az ilyen megoldás azért sem jó, mert "blokkolja" a végrehajtást: nem jelentkezik a nyomás eredménye, az ügyfél meg "legyilkolja" a gombot !
(#) Elektro.on válasza kriszrap hozzászólására (») Okt 16, 2016 /
 
Általában egy változó értékét szokták egyenüővé tenni Adc_Read(x) értékével és utána ezel a vál4ozóval dolgoznak tovább.
(#) cross51 válasza kissi hozzászólására (») Okt 16, 2016 /
 
De, azt azért tegyük hozzá, hogy első nekifutásra szerintem mindenki, while-el próbál/próbált prell mentesíteni.
De erre ugye legmegfelelőbb, a megszakítás, ahol ugye lehet IOC, vagy INT pin-el, de így a megszakításban szükség lehet várakozásra, és ugye megszakításba nem szoktunk, nagyon delay-t dobálni.
(szerintem) A legjobb módszer, (kriszrap ez neked is hasznos lehet), pl 20 ms timer minden megszakításba nézzük, hogy megnyomták-e vagy nem, és ha már megnyomták, még mindig nyomva van vagy elengedték.
A hozzászólás módosítva: Okt 16, 2016
(#) kissi válasza cross51 hozzászólására (») Okt 16, 2016 /
 
"Sima" while-al nem tudsz pergésmentesíteni, mert az első rugalmas érintkezéskor már "átmegy" az utasításon a proci, a kezdők sima késleltetést szoktak használni, a gyakorlottabbak pl. eseményszámolást ( hányszor ment át a hurkon a NY lenyomása után!), a "profik" meg megszakításból kezelik le! !
(#) Elektro.on válasza kissi hozzászólására (») Okt 16, 2016 /
 
MikroC -ben pergés mentesítésre van beépített fügvény. De ha sokat használunk belőle gorsan megeszi a memóriát.
(#) kriszrap válasza cross51 hozzászólására (») Okt 16, 2016 /
 
Koszonom mindenki segitseget)))

Annyi meg a kerdesem ha sorra 25 mA folyhat 25 ledre ti milyen elvel keszitenettek el az fenyjatekokat ugy hogy a legjobb fenyerot adjanak a ledek?? ( rem erthetoen irtam nem az erossegem )
(#) kissi válasza Elektro.on hozzászólására (») Okt 16, 2016 /
 
(#) pajti2 válasza kissi hozzászólására (») Okt 16, 2016 / 1
 
A profik nem kezelnek prellt megszakításból, mert tudják, hogy lenyomáskor is / felengedéskor is ugyan úgy pörög mindkét állapot, és képtelenség abból bármit normálisan hámozni ki. Nem nagyobb segítség az interrupt, mint a főciklusból aszinkron állapotgépet pörgetni, ami elteszi az előző stabil állapotot, és számolja, hogy kvarchoz igazított időzítés szerint már legalább 50 msec ideje nem fordult elő a régi állapot, csak az új - na akkor van váltás. Kisebb pic-eken, ahol nem lehet - vagy nem érdemes - gép órát kidolgozni, egyszerűen csak hasra ütni, hogy az az 50 msec kb hány főciklus lefutás lesz, és azt használni helyette.
(#) kissi válasza pajti2 hozzászólására (») Okt 16, 2016 / 1
 
Így is jó, csak ha hozzáírsz a főhurokhoz, akkor "csúszik" a prell mérésed, de "Kinek a pap, kinek a papné" !
(#) benjami válasza pajti2 hozzászólására (») Okt 16, 2016 /
 
Valószínűleg nem bemenetváltozás megszakításra gondolt, hanem időzítőmegszakításra. Én legalábbis mindig időzítőből kezelem a nyomógombokat, és sosincs gondom a prellezéssel (másodpercenként kb. 30 lekérdezést szoktam használni). Egyszer kellett megírnom a gombkezelő függvényeket, amit az adott projecthez csak adoptálni és paraméterezni kell. Megoldható, hogy hasonlóan működjön, mint a számítógép billentyűzete (folyamatos lenyomásnál egy idő múlva beállítható sebességgel ismételjen).
(#) cross51 válasza kissi hozzászólására (») Okt 16, 2016 /
 
Két külön elgondolás, bár mind a kettő titulálható asszinkronosnak.
Mert végül is egy a timer-al egy asszinkron dolgot hozunk létre.

Bár szerintem a főciklusba vizsgálni mindent, nekem sokkal inkább a Visual Studios Event kezelésre, hasonlít, ahol ugye csak az "sw létezik".
PIC-el is meg lehet csinálni biztos, bár ha a hw adja (szerintem) a könnyebb utat akkor értelmetlen lenne bonyolítani.

De abban egyetértek pajti-val, ha már nem is fizikai gombok-ról beszélünk (tapi kijelző) és mér egy rendszer szerű dolog fut a PIC-en, jobb lehet asszinkronosan a fő szálból kezelni a gomb nyomásokat és eventeket meghívni, ha jól tudom a Harmony TFT libje is valami ilyet csinál (vagy próbál csinálni ).
(#) Pali79 hozzászólása Okt 16, 2016 /
 
Urak!
Mi lehet a hiba a mellékelt nyákkal? A Timer1 külső oszcillátorról nem akar menni. Ha kiveszem a pic-ket és beteszem egy próbapanelbe akár ugyanazzal a kristállyal is, ott megy rendesen. Már lesikáltam, körbekapargattam, átvilágítottam, de semmi hibát nem találtam.

Panel.pdf
    
Következő: »»   865 / 1210
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