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   979 / 1203
(#) icserny válasza kriszrap hozzászólására (») Szept 22, 2017 /
 
Ránézésre hibásnak tűnik a logika: akkor is végrehajtásra fut, ha előzőleg nem volt lenyomás. A felengedés vizsgálatánál is nézni kell az előző állapotot.
(#) Elektro.on válasza kriszrap hozzászólására (») Szept 22, 2017 /
 
Szia!

A Mikroelektronika MokroC környezetében van rá külön függvény! Nézd meg a súgóban.

Ennek ellenére én inkább hardveres pergésmentesítést használnék.
(#) silent15 válasza usane hozzászólására (») Szept 22, 2017 /
 
Egyszer volt programozva még próbapanelon, ott minden gond nélkül ment.
(#) kriszrap válasza icserny hozzászólására (») Szept 22, 2017 /
 
Idézet:
„Ránézésre hibásnak tűnik a logika: akkor is végrehajtásra fut, ha előzőleg nem volt lenyomás. A felengedés vizsgálatánál is nézni kell az előző állapotot.
Válasz hozzászólás írása”

Az a probléma ha jól értem hogy ha nem nyomok le semmit se akkor végre hatja a "nyvegrehajt();" fügvényt???
(#) kriszrap válasza Elektro.on hozzászólására (») Szept 22, 2017 /
 
"Button Library"
Pontosan hogy is működik??
(#) icserny válasza kriszrap hozzászólására (») Szept 22, 2017 /
 
Igen. Mellesleg nem tudom, hogy mi mindent csinál a nyvegrehajt() függvény, azt is meg kellene gondolni, hogy érdemes-e azt a megszakításból hívogatni.
A hozzászólás módosítva: Szept 22, 2017
(#) Elektro.on válasza kriszrap hozzászólására (») Szept 22, 2017 /
 
Most mobilról vagyok, de gyöyörű leírása van. Ezt még nem használtam mert inkább a hardverest részesítem előnyben. Ha gép előtt leszek megnézem. Viszont arra biztosan emlékszem, hogy régebben a neten találtam Magyar nyelvű leírást példákkal is.


u.i.
Megnéztem neked a súgót. (Kép alul) paraméterekben megadod a portot, pint, pergés figyelés idelyét és az aktív státuszt.
A hozzászólás módosítva: Szept 22, 2017
(#) kriszrap válasza icserny hozzászólására (») Szept 22, 2017 /
 
  1. void nyvegrehajt()
  2. {
  3.     if(gombbal ==1)
  4.     {
  5.       if(mode==0)mode=1;
  6.       else if(mode==1) mode=0;
  7.       jatek=1;
  8.       megszakitas=1;
  9.     }
  10.     if(gombkozep ==1)
  11.     {
  12.       jatek--;
  13.       megszakitas=1;
  14.     }
  15.     if(gombjobb ==1)
  16.     {
  17.       jatek++;
  18.       megszakitas=1;
  19.     }
  20.     gombjobb=0;
  21.     gombkozep=0;
  22.     gombbal=0;
  23. }

500ms es időzités állítottam be de még mindig perget.... Néha. Tudok v csinálni vele valamit de ahogy észre vettem lenyomáskor csinálja nem elengedéskor. Ötlet trükk??
(#) Elektro.on válasza kriszrap hozzászólására (») Szept 22, 2017 /
 
Egy egyszerű hardveres:

Bővebben: Link
A hozzászólás módosítva: Szept 22, 2017
(#) icserny válasza kriszrap hozzászólására (») Szept 23, 2017 /
 
Lehet, hogy rosszul gondolom, de én így próbálkoznék:
  1. void Interrupt(){
  2.   if (TMR2IF_bit){
  3.     TMR2IF_bit = 0;
  4.     if(!--count)
  5.     {
  6.       count=30;
  7.       if(PORTA.RA4 ==1 || PORTA.RA3 ==1 ||  PORTA.RA2 ==1)
  8.       {
  9.         megszakitas = 1;
  10.         if(PORTA.RA4 ==1 && gombbal==0) {
  11.           gombbal=1;
  12.           mode = !mode;
  13.           jatek = 1;
  14.         }
  15.         if(PORTA.RA3 ==1 && gombkozep==0) {
  16.           gombkozep=1;
  17.           jatek--;
  18.         }
  19.         if(PORTA.RA2 ==1 && gombjobb==0) {
  20.           gombjobb=1;
  21.           jatek++;
  22.         }
  23.       }
  24.       else
  25.       {
  26.         if(PORTA.RA4 ==0 && gombbal==1) gombbal=0;
  27.         if(PORTA.RA3 ==0 && gombkozep==1) gombkozep=0;
  28.         if(PORTA.RA2 ==0 && gombjobb==1) gombjobb=0;
  29.       }
  30.     }
  31.   }
  32. }


Megjegyzések:
1. Normális nyomógomboknál 15 - 30 ms-nál nincs szükség hosszabb pergésmentesítésre.
2. Szerintem logikusabb a nyomógombokhoz tartozó akciókat a lenyomáshoz kötni.
(#) hapci válasza gyoran hozzászólására (») Szept 23, 2017 /
 
Köszönöm a közreműködésed, az átvitel stabilan működik a hw elkötésének korrekciója óta.
(#) kriszrap válasza icserny hozzászólására (») Szept 23, 2017 /
 
Idézet:
„Szerintem logikusabb a nyomógombokhoz tartozó akciókat a lenyomáshoz kötni.”


Azért választottam a felengedéskor történjen az akció mert ha két gombot akkarok lenyomni egyszerre azt könnyeb ellenörizni.
Ha lenyomáskor történne az akció nem lenne idöm a másik gombot lenyomni hogy az történyen amit szeretnék. Vagy erre van megoldás hogy ha lenyomáskor van az akcio és ha két gombotot nyomok egyszerre érzékelje?? Vagy ahogy nézem a kódod alkalmas errre.....
(#) sonajkniz válasza kriszrap hozzászólására (») Szept 23, 2017 /
 
Felengedni sem tudod egyszerre a gombokat.
Én ezt mindíg úgy oldom meg, hogy teszek egy végrehajtás késleltetést mindegyik gombhoz, és a késleltetés lejártakor megnézem, hogy a másik gomb meg van-e nyomva.
(#) kriszrap válasza sonajkniz hozzászólására (») Szept 23, 2017 /
 
Hat a felengedes sorrendje mar mindegy mert amikor megnyomsz egy gombot es meg egy gombot egyszerre akkor be billentek 2 valtozo bitette es akkor hajtom vegre ha mind elvan engedve de sajnos nem valtbe.

Vagy is ha jol ertem ha megnyomok egy gombot es varok xy idot es utanna ranezek megint a gombokra es ha van plusz gomb lenyomas akkor ismet varok xy idot es vegre hajtom. Ha nem volt plusz gomb lenyomas akkor pedig elso varas utan vegrehajtja. Jol ertelmeztem ???
(#) slimcolt hozzászólása Szept 23, 2017 /
 
Sziasztok,

Hozzátok fordulok, mert tanácstalan vagyok. Most próbálom ki életemben először egy PIC ADC modulját (PIC16F1825). A lényeg annyi, hogy ha a konvertálás eredménye nagyobb mint egy meghatározott érték, akkor világít egy led.
Valamiért nem működik, viszont ha debug módban futtatom MPLAB-ban, akkor tökéletesen működik, világít a LED is. Mi lehet a baj szerintetek?


  1. #include <xc.h>
  2. #include "configadc.h"
  3.  
  4. #define _XTAL_FREQ 16000000
  5.  
  6. unsigned int ADC_L;
  7. unsigned int ADC_result;
  8.  
  9. void ADC_measuring (void) //ADC konvertálás
  10. {
  11.     __delay_us(5); //ACQ biztosítása, 1kOhm-os bemeneti impedancia miatt.
  12.         ADCON0bits.GO = 1; //Konvertálás indítása
  13.         while (ADCON0bits.GO); //Várakozás a konvertálás befejezésére, ha végzett a GO bit-et törli.
  14.     ADC_result = ((ADRESH << 8) | ADRESL); //A teljes 10bit-es eredmény tárolva egy 16bit-es változóba.
  15. }
  16.  
  17. void PROBA_MERES (void)
  18.  
  19. {
  20.    
  21.     ADC_L = 300; // -- legalacsonyabb feszültség érték
  22.     ADC_measuring();
  23.            
  24.         if (ADC_result >= ADC_L)
  25.         {
  26.                 LATAbits.LATA4 = 1; //LED bekapcsolva.
  27.         }
  28.         else
  29.         {
  30.                 LATAbits.LATA4 = 0; //LED kikapcsolva.
  31.         }
  32.                
  33. }
  34.  
  35. void main (void)
  36. {
  37. OSCCONbits.IRCF = 0b1111; // 4XPLL kikapcsolva, 16Mhz belso oszcillátor kiválasztva.
  38. TRISA = 0b00101000; // RA3 és RA5 bemenetek.
  39. LATA = 0b00000000; // PORTA kimenetei 0-ra állítva.
  40. ANSELA = 0b00100000; // RA5 analóg bemenet.
  41.  
  42. ADCON0bits.ADON = 1; // ADC bekapcsolva.
  43. ADCON0bits.GO_nDONE = 0;
  44. ADCON0bits.CHS = 0b00101; // AN5 csatorna beállítása (RA5)
  45. ADCON1bits.ADCS = 0b101; // ADC clk Fosc/16
  46. FVRCONbits.FVREN = 1; // FVR engedélyezve.
  47. FVRCONbits.ADFVR = 11; // belső 4.096V ADC ref
  48. ADCON1bits.ADNREF = 0; // - ref beállítás: Vss
  49. ADCON1bits.ADPREF = 11; // + ref beállítás: FVR 4.096V
  50. ADCON1bits.ADFM = 1; // Format beállítás
  51.        
  52.         while(1)
  53.         {
  54.                 PROBA_MERES();
  55.     }
  56. }
(#) slimcolt válasza slimcolt hozzászólására (») Szept 23, 2017 /
 
Na azt hiszem meg van a hiba.....
Milyen balek vagyok Mindjárt kipróbálom..
(#) sonajkniz válasza kriszrap hozzászólására (») Szept 23, 2017 /
 
Nem jól értelmezed.
Ha lejárt a várakozás, megnézed a másik gombot.
Ha nincs megnyomva, akkor az egygombos, ahhoz a gombhoz tartozó rutint, ha meg van nyomva, akkor a kétgombos rutint futtatod le.
(#) ODU hozzászólása Szept 23, 2017 /
 
Sziasztok!

PIC16F684-el kapcsolatban lenne kérdésem. Futófényt készítettem a mikrokontrollerrel. A problémám az, hogy az RC0 és RC1-es lábakra rakott LED-ek nem világítanak. Az adatlapja szerint használható normál I/O lábnak is. Alap esetben a 2. komparátor 2 bemenete ez a 2 láb. Hol írhattam el a programot?
Az inicializálás a következő:
  1. OSCCON = 0b01100101;
  2.         CMCON0 = 0b00000111;    //Bit0-Bit2=111; komparátorok kikapcsolva
  3.         TRISC =  0;
  4.         PORTC =  0;
  5.         TRISA =  0;
  6.         PORTA =  0;
  7.         ADCON0 = 0b10000000;
  8.         ADCON1 = 0b11011111;
  9.         INTCON = 0;
  10.         ANSEL =  0b00000001;       //RA0 analóg bemenet, a többi láb digitális I/O
  11.         CCPR1L = 0;
  12.         PIE1 =   0b00000000;        
  13.         PIR1 = 0;
  14.  
  15. void main(void)
  16. {
  17.     bekapcs();
  18.     while(1)
  19.     {
  20.                 __delay_ms(100);        // kb 10 msenkent mintavetekezzuk
  21.                         RC0=1;
  22.                         RC1=0;
  23.                         RC2=0;
  24.                         RC3=0;
  25.                         RC4=0;
  26.                         RA2=0;
  27.                 __delay_ms(100);        // kb 10 msenkent mintavetekezzuk
  28.                         RC0=1;
  29.                         RC1=1;
  30.                         RC2=0;
  31.                         RC3=0;
  32.                         RC4=0;
  33.                         RA2=0;
  34. ....
A hozzászólás módosítva: Szept 23, 2017
(#) Elektro.on válasza ODU hozzászólására (») Szept 23, 2017 /
 
Szia!
Most mobilról vagyok, nincs előttem adatlap.
Nem lehet, hgy belefutottál egy open collector -os kimenetbe?
(#) ODU válasza Elektro.on hozzászólására (») Szept 23, 2017 /
 
Adatlap szerint nincs különbség az PORTC lábak között, az én értelmezésem szerint. Az érdekesség még az, hogy egy kész program .HEX fájlját programoztam több PIC-be és egyszer világított a 2db LED, egyszer nem (nincs kontakt hiba és egyéb hardveres probléma). Amelyiknél nem világított, ott viszont sehogy nem sikerült rájönnöm, hogy mi lehet a probléma.
(#) bugyi680 válasza ODU hozzászólására (») Szept 24, 2017 /
 
Üdv!
Nekem is hasonló problémám van csak PIC16F877A-val,én is futófényt készítettem és egy láb (led) nem működik(pontosabban a PIC 6. lába).Először azt hittem hogy megöltem a lábat 2 PIC-nél is,harmadjára vettem egy új PIC-et ,de ugyanaz a probléma.Jó lenne ha megoldódna,mert nagyon kéne az az egy láb.
(#) ODU válasza bugyi680 hozzászólására (») Szept 24, 2017 /
 
Az azért nem megy valószínűleg mert open draines az a kimenet.
Idézet:
„RA4/T0CKI bit4 ST Input/output or external clock input for Timer0. Output is open drain type.”
(#) Hp41C válasza ODU hozzászólására (») Szept 24, 2017 /
 
  1. RC0=1;
  2.                         RC1=0;
  3.                         RC2=0;
  4.                         RC3=0;
  5.                         RC4=0;

Túlterhelés és RMW hiba is okozhatja, hogy nem a megfelelő mintázat alakul ki a kimeneteken.
A fenti sorok bit műveletekre (bsf, bcf utasításokra) fordulnak. Ezek a Read-Modify-Write műveletek és az olvasás során a port bemenetek aktuális értékét kapják meg, azon végeznek műveletet és a port kimeneti regiszterébe írják az eredményt.
Túlterhelés: A LED árama miatt egyes kimeneteken nem alakul ki a magas szint beolvasásához szükséges feszültségszint.
RMW hiba: Az előző módosítás hatására létrejövő jelváltás nem jut el addig a szintig, hogy a közvetlenül utána kiadott RWM művelet beolvasása már az új értéket tudja beolvasni.

Mi lenne, ha a biteket egyszerre változtatnánk meg:
  1. PORTC &=0xE0;
A hozzászólás módosítva: Szept 24, 2017
(#) ODU válasza Hp41C hozzászólására (») Szept 24, 2017 /
 
Köszönöm a választ. Gondoltam erre is és ki is próbáltam. Sajnos nem jött be úgy sem. Kb 5 fénysor már kész van. Úgy csináltam, hogy egy tökéletesen működő PIC-ről lemásoltam a HEX fájlt és azt raktam fel a többi PIC-re és 5 ből 2db tökéletes volt, 3db-nál pedig ez a probléma. De tudom, hogy ami jól működött azzal is volt az elején ilyen probléma, de kikapcsoltam a komparátort benne és működött tökéletesen. A történethez hozzátartozik még hogy ebay-ről vásároltam a PIC-eket. Előfordulhat, hogy ennek köze van a hibás működéshez?
A hozzászólás módosítva: Szept 24, 2017
(#) bugyi680 válasza ODU hozzászólására (») Szept 24, 2017 /
 
Mit kell csinálnom hogy működjön az a kimenet is?
(#) ODU válasza bugyi680 hozzászólására (») Szept 24, 2017 /
 
Ha jól értelmezem akkor úgy működik, hogy amikor nyitva van akkor húzza le GND-re a lábat. Tehát a LED negatív lábát kell kötni a PIC kimenetére, a másikra pedig 5Vot vagy amennyit szeretnél, egy ellenálláson keresztül.
(#) bugyi680 válasza ODU hozzászólására (») Szept 24, 2017 /
 
Kipróbáltam, így már működik.
(#) Hp41C válasza ODU hozzászólására (») Szept 24, 2017 /
 
Ha jól értelmezem, van olyan panel - kontroller párod, ami működi és van olyan pár, ami nem működik. Mi történik, ha kicseréld a működő pár és a nem működő pár kontrollerét. Hol jelentkezik a hiba?
(#) Bakman válasza ODU hozzászólására (») Szept 24, 2017 /
 
Idézet:
„ebay-ről vásároltam a PIC-eket. Előfordulhat, hogy ennek köze van a hibás működéshez?”
Nagy a valószínűsége de nem 100 %.
(#) ODU válasza Hp41C hozzászólására (») Szept 24, 2017 /
 
Sajnos már nincs nálam működő palnel-kontroller pár, de kipróbáltam, hogy átrakom a jól működő mikrokontrollert a rosszul működő helyére és a probléma megoldódott, tehát a kontroller programja a rossz, annak ellenére, hogy ugyan az a hex fájl van benne. Közben kipróbáltam egy közvetlenül a Microchiptől vásárolt kontrollerrel is a kódot és ugyan az a helyzet, nem világítanak a LED-ek így nem az ebay-es PIC-ekkel van a baj.
Következő: »»   979 / 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