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   930 / 1207
(#) ktamas66 válasza kriszrap hozzászólására (») Ápr 17, 2017 /
 
Nem tudom melyik az 595 blink lába, talán az OE, de az nagyimpedanciásba viszi a kimeneteket. PWM helyett teszteld teljes fényerőn és teljes kioltással. Úgy jól működik? A PWM freki és a multiplex freki milyen viszonyban van egymással?
(#) nagym6 válasza Bakman hozzászólására (») Ápr 17, 2017 /
 
Nagy áramnál jócskán leesik a béta, hátha itt a gond. Én kizárólag a BC337-40 et használom, sokkal jobb bétájú nagy áramnál.
kriszrap: szkóppal mérhetnéd, hogy a BC337 kollektora nyitáskor leesik-e legalább kb. 0,2V ig.
(#) kriszrap válasza ktamas66 hozzászólására (») Ápr 17, 2017 /
 
BC337-40 használom
Idézet:
„teszteld teljes fényerőn és teljes kioltással.”
Bázist felhusztam 5v ra Tökéletes(teljes fényerő) akkor és tesre is akkor(semmi) vagy is jól müködik igy.

Idézet:
„A PWM freki és a multiplex freki milyen viszonyban van egymással?”

Ezt nem értem. inkább belinkelem a pwm kódját:
  1. void alap(){
  2.  
  3.   TRISA=0;
  4.   PORTA=0;
  5.   TRISA.F0=1;
  6.  
  7.   ANSELA.ANSA0=1;
  8.   PWM2_Init(10000);
  9. }
  10. void main() {
  11.   int ertek=0,fenyero=0;
  12.   alap();
  13.   PWM2_start();
  14.   while(1)
  15.   {
  16.   ertek=ADC_Read(0);
  17.   if(ertek>204)fenyero=255;
  18.   else if(ertek>195)fenyero=220;
  19.   else if(ertek>190)fenyero=200;
  20.   else if(ertek>180)fenyero=160;
  21.   else if(ertek>160)fenyero=120;
  22.   else if(ertek>150)fenyero=80;
  23.   else if(ertek>140)fenyero=40;
  24.   else if(ertek<130)fenyero=20;
  25.   PWM2_Set_Duty(fenyero);
  26.   }
  27. }

szerk.:
Sajnos szkópom most döglöt meg(
A hozzászólás módosítva: Ápr 17, 2017
(#) Hp41C válasza kriszrap hozzászólására (») Ápr 17, 2017 /
 
Milyen PIC? Mit csinál a PWM2_Init(10000)?
(#) kriszrap válasza Hp41C hozzászólására (») Ápr 17, 2017 /
 
PIC10f322 PWM2_Init(10000) khzet állítottam be.
(#) ktamas66 válasza kriszrap hozzászólására (») Ápr 17, 2017 /
 
A pic-kel húzattad fel/le a bázist? Mivel nem tudom az órajelet nézd meg van-e ilyenkor 8 bit a PWM felbontása (nem tudom a C függvény skálázza-e a megadott értéket). Az AD értéke jól kerül beolvasásra? Tesztelheted fixen beírt értékekkel.
(#) Hp41C válasza kriszrap hozzászólására (») Ápr 17, 2017 /
 
Tegyük fel, hogy a PIC10F322 a belső 16MHz -es órajel generátorról jár. A 10kHz -es PWM frekvenciához az Fosc /4 -et 400 -zal kell leosztani, de a PR2 -vel csak 256 -ig lehet. Így a TMR2 előosztóját valószínűleg 1/4 -re állítja, a PR2 -t pedig (100-1) -re. 4MHz / 4 / 100 = 10kHz. Ha a PR2 értéke 99 akkor a kitöltés nem lehet ennél nagyobb.
Idézet:
„If the pulse width value is greater than the period the assigned PWM pin(s) will remain unchanged”
(#) Hp41C válasza Hp41C hozzászólására (») Ápr 17, 2017 /
 
Pontosítás: Ha a PR2 értéke 99 akkor a PWMxDCH értéke nem lehet ennél nagyobb.
(#) kriszrap válasza Hp41C hozzászólására (») Ápr 17, 2017 /
 
16mhzen belsö órajel generátroról megy a pic. Vagy is vegyem vissza a khzet? mondjuk 5khzre??

ADC 256 felbontású amugy igen jól olvassa be az adatokat.
(#) Hp41C válasza kriszrap hozzászólására (») Ápr 17, 2017 / 1
 
Szegény, jóhiszemű segítő esete a különféle magas szintű nyelvekkel...
Nem rendelkezik mindenki, minden olyan magas szintű nyelvvel, amihez kérdés tesznek fel a topikban. Egyes dolgokat csak a kérdező tud leellenőrizni...

Nézd meg, mit állít be az PWM2_Init(10000); és a PWM2_Set_Duty(fenyero);.
Amennyiben az utóbbi a fenyero két alsó bitjét a PWM2DCL 7. és 6. bitjébe teszi, akkor PR2 99 értéke mellett megvalósítható a PWM2_Set_Duty(220), hiszen 220 / 4 = 55.
(#) Hujikolp hozzászólása Ápr 18, 2017 /
 
Üdv!

I2C olvasási problémám van. Az írás működik, reagál rá a slave.

  1. I2C_Master_Start();     // busz használatba vétele
  2. I2C_Master_Write(0b10000010);   //cím
  3. I2C_Master_Write(0x00);          //belső regiszter, amiből olvasni szeretnék
  4. I2C_Master_RepeatedStart();   //ismét start
  5. I2C_Master_Write(0b10000011);    // megmondom a slave-nek, hogy olvasni szeretnék
  6. I2C_Master_Read(0);                      // olvasok
  7. I2C_Master_Stop();    //busz elengedése, de nem sikerül elengedni!!!!!!!!!!!


az olvasási függvény:
  1. unsigned short I2C_Master_Read(unsigned short a)
  2. {
  3.     unsigned short temp;
  4.     TRISC = 0b00011000;  // I2C port bemenetre állítása adat fogadása miatt
  5.     I2C_Master_Wait();
  6.     RCEN = 1;                       //Enables Receive mode for I2C
  7.     I2C_Master_Wait();
  8.     temp = SSPBUF;                  //Read data from SSPBUF
  9.     I2C_Master_Wait();
  10.     ACKDT = 0;          //(a)?0:1;                //Acknowledge bit
  11.     ACKEN = 1;                      //Initiates Acknowledge sequence
  12.     TRISC = 0x00;      // visszaállítom kimenetnek további adat küldés miatt
  13.     return temp;
  14. }


a busz lezáró, ahol megakad a kód (máshol a 'wait()' nem akad el, gördülékenyen továbbmegy )
  1. void I2C_Master_Stop()
  2. {
  3.     I2C_Master_Wait();     // itt akad be, de csak ennél, a többi helyen nem
  4.     PEN = 1;                    //Initiate stop condition
  5. }

itt pedig a várakozó függvény:

  1. void I2C_Master_Wait()
  2. {
  3.     while ((SSPSTAT & 0x04) || (SSPCON2 & 0x1F));   //Transmit is in progress
  4. }


Olvasás után miért nem tudja lezárni? Miért érzékelheti, hogy még menne az adat?
Amit használok: PIC18F4620 és amit vezérlek: PCA9685. Felhúzó ellenállások vannak. 7 bites a cím.
(port villogtatással jutottam el eddig, hogy ott áll meg a kód. Az olvasott adatot megtudom jeleníteni a lezárás előtt.)
A hozzászólás módosítva: Ápr 18, 2017
(#) ktamas66 válasza Hujikolp hozzászólására (») Ápr 18, 2017 /
 
Nem vagyok szentül meggyőződve, hogy a TRIS regisztereket neked kell-e piszkálni, de ha igen, akkor az SCL-nek kimenetnek kell maradnia.
(#) Hujikolp válasza ktamas66 hozzászólására (») Ápr 18, 2017 /
 
Ezért tettem: (170. oldalon van)
Idézet:
„The user must configure these pins as inputs or outputs through the TRISC<4:3> bits.


Szerk: Köszönöm, valószínűleg itt volt a probléma! Töröltem őket, s úgy tűnik, hogy megoldotta, továbbfut! mehetek aludni
A hozzászólás módosítva: Ápr 18, 2017
(#) eSDi válasza Hujikolp hozzászólására (») Ápr 18, 2017 /
 
Üdv!

Nekem is volt hasonló problémám, sajnos már nem emlékszem pontosan, hogy miből adódott. Nekem az lett a megoldás, hogy az Interrupt Flag-et figyelem az SSPSTAT helyett. A többi kábé ugyan ez. És igen a portot nem kell piszkálni, azt intézi magától.
(#) kriszrap hozzászólása Ápr 18, 2017 /
 
Idézet:
„Nézd meg, mit állít be az PWM2_Init(10000); és a PWM2_Set_Duty(fenyero);.
Amennyiben az utóbbi a fenyero két alsó bitjét a PWM2DCL 7. és 6. bitjébe teszi, akkor PR2 99 értéke mellett megvalósítható a PWM2_Set_Duty(220), hiszen 220 / 4 = 55.”

Ezt hogy tudnám le chekolni??
(#) Hujikolp válasza Hujikolp hozzászólására (») Ápr 18, 2017 /
 
Megtaláltam a hibát! 2-ő is volt.
1:
  1. ACKDT = (a)?0:1;  // rossz szintaktika
  2. ACKDT = (a==0?0:1);  // jó szintaktika

2:
A PCA9685 adatlapjában van, hogy az utolsó olvasás után NEM szabad ACK bitet küldeni, én meg mindig küldtem. A kódban a forszírozott ACKDT=1; után már jó lett. ACKDT: Acknowledge Data bit (Master Receive mode only), 1 = Not Acknowledge Ezután néztem utána kicsit annak a 3 operandusú műveletnek, s így lett jó!
A hozzászólás módosítva: Ápr 18, 2017
(#) usane válasza kriszrap hozzászólására (») Ápr 18, 2017 /
 
Belenézel az adott fordító, esetedben ha jól sejtem mikroC belső függvényeinek működésébe.
(#) Hp41C válasza Hp41C hozzászólására (») Ápr 18, 2017 /
 
Mégiscsak itt van a kutya elhantolva...
Idézet a Mikro C impulzusszélesség modulátor függvénykönyvtárának leírásából:
Idézet:
„Sets PWM duty ratio. Parameter duty takes values from 0 to 255, where 0 is 0%, 127 is 50%, and 255 is 100% duty ratio. Other specific values for duty ratio can be calculated as (Percent*255)/100.”

A fentieket figyelembe véve valószínű, hogy csak a 8 bites magas helyiértékű regisztert írja...
(#) kissi válasza usane hozzászólására (») Ápr 18, 2017 /
 
Úgy tudom az nem publikus ... !
(#) usane válasza kissi hozzászólására (») Ápr 18, 2017 /
 
Igen én is, de ha jól látom Hp41C már megtalálta a döglött ebet.
(#) don_peter válasza Hujikolp hozzászólására (») Ápr 18, 2017 /
 
Nem feltétlen kell a zárójel sem.
  1. ACKDT = a==0 ? 0 : 1;
Vagy
  1. ACKDT = a ? 1 : 0;
Utóbbinál, ha a==1, teljesül a feltétel.
A hozzászólás módosítva: Ápr 18, 2017
(#) Udvari Zsombor hozzászólása Ápr 18, 2017 /
 
Segítséget kérnék! A használni kívánt billentyűzetből
- zöld
- citromsárga
- piros
- fekete (barna?)
színű erek jönnek ki és ezek közül melyik a clock, data, plusz, mínusz???
(#) zenetom válasza Udvari Zsombor hozzászólására (») Ápr 18, 2017 /
 
Egy kérdés:

05a.jpg
    
(#) Udvari Zsombor válasza zenetom hozzászólására (») Ápr 18, 2017 /
 
Azért kérdeztem, mert 5V tápfesz az már mindenhol van, ahol lennie kell, de csak kijelző háttérfény van, a PIC felprogramozás elvileg sikeres, de nem áll fel a billentyűzet (bekapcsoláskor villanniuk kellene egyet a LEDjeinek), így nem ír a kijelzőre! Tehát melyik kábelszín melyik?
(#) Gabó válasza Udvari Zsombor hozzászólására (») Ápr 18, 2017 / 1
 
Kérdés! Mi a hópihének vágtad le a csatlakozót, mielőtt kimérted volna a színeket, hogy melyik melyik? Csatlakozó lábkiosztás megtalálható a neten pl....
- piros +táp
- fekete (barna?) GND
A másik kettőt sakkozd ki

Ha meg mered kérdezni mi az a GND...
A hozzászólás módosítva: Ápr 18, 2017
(#) Elektro.on válasza Udvari Zsombor hozzászólására (») Ápr 18, 2017 /
 
Esetleg google?
Bővebben: Link
A hozzászólás módosítva: Ápr 18, 2017
(#) Udvari Zsombor válasza Gabó hozzászólására (») Ápr 18, 2017 /
 
Arra jutottam, hogy
- zöld = plusz
- piros = mínusz
- barna = data
- citromsárga = clock
kötéssel folyamatosan világít a billentyűzet három LEDje, amint feszültség alá kerül! Mit kötök még mindig rosszul?
(#) kriszrap hozzászólása Ápr 18, 2017 /
 
Idézet:
„Mégiscsak itt van a kutya elhantolva...
Idézet a Mikro C impulzusszélesség modulátor függvénykönyvtárának leírásából:

Idézet:
„Sets PWM duty ratio. Parameter duty takes values from 0 to 255, where 0 is 0%, 127 is 50%, and 255 is 100% duty ratio. Other specific values for duty ratio can be calculated as (Percent*255)/100.”

A fentieket figyelembe véve valószínű, hogy csak a 8 bites magas helyiértékű regisztert írja..”

Vagy is mit kellcsinálnom hogy jól müködjön?
(#) Gabó válasza Udvari Zsombor hozzászólására (») Ápr 18, 2017 /
 
Meg van még a levágott vége? Ha igen, mérd ki az alapján melyik szín mi a lábkiosztás alapján.
(#) Hp41C válasza kriszrap hozzászólására (») Ápr 18, 2017 /
 
El kellene indítani a szimulációt, meg kellene nézni milyen értéket állít be a PWM2_init(10000) a PR2 -be. Továbbá meg kellene tudni milyen értéket állít be a PWM2_Set_Duty(20) és PWM2_Set_Duty(255) a PWM2DCH regiszterbe.

Avagy:
A PMW -et 1600000 / 4 / 256 = 15625 Hz frekvenciára állítani, ekkor a TMR2 előosztója 1/1 lesz és a PR2 pedig 255. A kitöltés 0 és 255 között állítható.
A hozzászólás módosítva: Ápr 18, 2017
Következő: »»   930 / 1207
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