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   980 / 1203
(#) Hp41C válasza ODU hozzászólására (») Szept 24, 2017 /
 
A MCLR fel van húzva? Töltsd lef ide a hex -et.
(#) slimcolt hozzászólása Szept 24, 2017 /
 
Sziasztok,

Sikerült megírnom egy próba programot a DAC-hoz (PIC16F1825). Működik, de biztosan lehetne ezt sokkal elegánsabban is csinálni, mit javasolnátok?
Valamint a továbbiakban azt szeretném, hogy a DAC értékeit átalakítsam Volt-ra, ezt sajnos nem tudom hogy kellene megvalósítani. Segítenétek?
Később majd ezt az eredményt szeretném kiolvasni UART-on keresztül.

  1. #include <xc.h>
  2. #include "configadc.h"
  3.  
  4. #define _XTAL_FREQ 16000000
  5.  
  6. unsigned long AVG_SUMM;
  7. unsigned int ADC_AVG;
  8. unsigned int ADC_H;
  9. unsigned int ADC_L;
  10. unsigned int ADC_result;
  11.  
  12. void ADC_measuring (void) //ADC konvertálás
  13. {
  14.         __delay_us(5); //ACQ biztosítása, 1kOhm-os bemeneti impedancia miatt.
  15.         ADCON0bits.GO = 1; //Konvertálás indítása
  16.         while (ADCON0bits.GO); //Várakozás a konvertálás befejezésére, ha végzett a GO bit-et törli.
  17.         ADC_result = ((ADRESH << 8) | ADRESL); //A teljes 10bit-es eredmény tárolva egy 16bit-es változóba.
  18. }
  19.  
  20. void ADC_average (void) //ADC eredmények átlagolása
  21. {
  22.         AVG_SUMM = 0;
  23.         unsigned char cnt;
  24.         for (cnt = 0; cnt < 50; cnt++) // 50x végzi el a mérést, majd átlagol.
  25.         {
  26.                 ADC_measuring();
  27.                 AVG_SUMM += ADC_result;
  28.         }
  29.         ADC_AVG = AVG_SUMM / cnt;
  30. }
  31.  
  32. void PROBA_MERES (void)
  33. {
  34.         ADC_H = 500; // 2V -- legmagasabb feszültség érték
  35.         ADC_L = 250; // 1V -- legalacsonyabb feszültség érték
  36.         ADC_average();
  37.    
  38.         if ((ADC_AVG >= ADC_L) && (ADC_AVG <= ADC_H)) // Csak 1 és 2V között világít a LED.
  39.         {
  40.                 LATAbits.LATA4 = 1; //LED bekapcsolva.
  41.         }
  42.         else
  43.         {
  44.                 LATAbits.LATA4 = 0; //LED kikapcsolva.
  45.         }
  46. }
  47.  
  48. void main (void)
  49. {
  50. OSCCONbits.IRCF = 0b1111; // 4XPLL kikapcsolva, 16Mhz belső oszcillátor kiválasztva.
  51. TRISC = 0b00000010; // RC1 bemenet.
  52. TRISA = 0;
  53. LATA = 0;
  54. ANSELCbits.ANSC1 = 1; // RC1 analóg bemenet.
  55. ADCON0bits.ADON = 1; // ADC bekapcsolva.
  56. ADCON0bits.GO_nDONE = 0;
  57. ADCON0bits.CHS = 0b00101; // AN5 csatorna beállítása (RC1)
  58. ADCON1bits.ADCS = 0b101; // ADC clk Fosc/16
  59. FVRCONbits.FVREN = 1; // FVR engedélyezve.
  60. FVRCONbits.ADFVR = 11; // belső 4.096V ADC ref
  61. ADCON1bits.ADNREF = 0; // - ref beállítás: Vss
  62. ADCON1bits.ADPREF = 11; // + ref beállítás: FVR 4.096V
  63. ADCON1bits.ADFM = 1; // Format beállítás
  64.        
  65.         while(1)
  66.         {
  67.                 PROBA_MERES();
  68.     }
  69. }
(#) Elektro.on válasza slimcolt hozzászólására (») Szept 24, 2017 /
 
Ezt egyszerűn megteheted. Az ADC által beolvasott értéket beszorzod az (Uref_max - Uref_min /ADC_felbontás) értékkel.
(#) slimcolt válasza Elektro.on hozzászólására (») Szept 24, 2017 /
 
Köszi!

De én majd decimálisan szeretném kiíratni soros porton keresztül.
Pl, beolvas 250-es értéket, 4.096V-os +vref-nél írjon ki nekem majd 1.000V-ot.
Az UART összehozása meg még egy külön történet lesz nekem... még olyat sem próbáltam
(#) Udvari Zsombor válasza sonajkniz hozzászólására (») Szept 24, 2017 /
 
Itt a fotó, mert privátban nem lehet...

IMG_2756C.JPG
    
(#) kriszrap válasza Elektro.on hozzászólására (») Szept 24, 2017 /
 
Idézet:
„(Uref_max - Uref_min /ADC_felbontás)”
Ezt mikor érdemes használni ezt a képletett??
(#) Elektro.on válasza kriszrap hozzászólására (») Szept 24, 2017 /
 
Hát akkor, ha meg akarsz mérni egy feszültség értéket és eredményként nem arra vagy kívncs, hogy például
835. Hanem egy konkrét értékre. Pl 3,25 Volt.A két példabeli értéket ne kösd össze, mert csak találomra írtam.
A hozzászólás módosítva: Szept 24, 2017
(#) kriszrap válasza Elektro.on hozzászólására (») Szept 24, 2017 /
 
jaa pl egy töltés méröt is lehet csinálni .
Köszönöm .
(#) slimcolt válasza Elektro.on hozzászólására (») Szept 24, 2017 /
 
Most nézem, hogy kétszer is DAC-ot írtam, nem is értem... köszi a kiemelést!
(#) Elektro.on válasza kriszrap hozzászólására (») Szept 24, 2017 /
 
Akár.
Gondolj bele ha a referencia feszültség tartományod 5V, a 10 bites ADC 1024 részre osztja ezt, akkor ha a kapott ADC értéked 1, akkor a mért feszültséged 5/1024 Volt. Ha ADC 143, akkor (5/1024)x143. stb.
A hozzászólás módosítva: Szept 24, 2017
(#) Elektro.on válasza slimcolt hozzászólására (») Szept 24, 2017 /
 
Nincs mit! Sejtettem, hogy csak elírás.
A hozzászólás módosítva: Szept 24, 2017
(#) ODU válasza Hp41C hozzászólására (») Szept 24, 2017 /
 
Persze. MCLR oké. Eredeti terv szerint egy akkumulátor feszültség őr készült az áramkörből. Csak mivel voltak olyan darabok amik nem működtek, így lebutítottam a programot egy villogó LED sorra, hogy minden hibalehetőséget kizárjak. A kész és működő akkuőr .hex-ét csatolom.

akkuor V2.hex
    
(#) jdani hozzászólása Szept 25, 2017 /
 
Üdv. Egy egyedi LED szalag fényerőszabályzót szeretnék építeni. Az hogy most milyen terhelésre, még én se tudom, nem lényeges anynira, Mostfet függő. Készítettem egy programot, ami 16F628Ara van ,,írva,, (folyamatábrás programozással készült), és azt csinálja hogy 0Vtól fokozatosan megy fel a feszültség 5Vig. Hogyan tudnám erre rákötni a LED sort? Fet elé ellenállás, fet lábait hova, stb.
(#) icserny válasza jdani hozzászólására (») Szept 25, 2017 /
 
Mit akarsz kezdeni a 0-5 V feszültséggel? A LED szalagok 12 V-ról mennek. Számomra logikusabbnak tűnik az áram, vagy a kitöltés szabályozása a feszültség változtatása helyett.
(#) Hp41C válasza jdani hozzászólására (») Szept 25, 2017 /
 
LED tápfeszültség - és PIC tápfeszültség - összekötése. Ide csatlakozik a MOS-FET Source elektródája. PIC PWM kimenete egy kis ellenálláson keresztül a MOS-FET Gate -jére megy. A MOS-FET Drein elektródája a LED szalag katódjára, a LED szalag anódja a + LED tápfeszültségre. Arra kell még ügyelni, hogy az impulzus szerűen folyó nagy LED áram ne zavarja a PIC működését. A két táp összekötése a lehető legközelebb legyen a LED tápegységhez, a LED áram külön vezetéken menjen a MOS-FET Source -jéhez.
A hozzászólás módosítva: Szept 25, 2017
(#) bugyi680 hozzászólása Szept 25, 2017 /
 
A PIC16F877A-nak van még több open drain-es kimenete a 6. lábon kívűl?
(#) jdani válasza Hp41C hozzászólására (») Szept 25, 2017 /
 
Az ellenállás 470R volt, fet IRF4905. Pont úgy kötöttem be, mégis állandóan világitott az izzó (ez volt próbára)
(#) Elektro.on válasza bugyi680 hozzászólására (») Szept 25, 2017 /
 
Én úgy látom, hogy csak az RA4 lába az open drain -es.
(#) Elektro.on válasza bugyi680 hozzászólására (») Szept 25, 2017 /
 
Nah a módosított hozzászólásnak csak egy része jelent meg.
A linkelt oldalt nézd át a configod szempontjából.
(#) Hp41C válasza jdani hozzászólására (») Szept 25, 2017 /
 
Lehet, hogy nem indul a programod, a PWM láb nem kimenet. Ha a Gate kör nagy impedanciás, a FET bekapcsolhat a statikus töltés hatására is. A PIC PWM kimenete és a föld közé néhány k -s elleállással megoldható, hogy ne kapcsoljon be a FET, ha a láb még nem kimenet.
(#) usane válasza ODU hozzászólására (») Szept 25, 2017 /
 
Kérdés: Az AN0-án mi lóg? Miért van bekapcsolva?
(#) kriszrap hozzászólása Szept 25, 2017 /
 
Valamiért pereg a PORTA.RA3 bemeneten lévő gomb és a néha a többi is.Miért??
Lehet a kódom hibás kérlek ellőrizéttek.
Müködése annyi hogy ha megnyomunk egy gombot akkor 2. rá néz a gombokra és végre hajta a funciokat. Ha történt gomb lenyomás és felengették akkor Resetelek mindent.

  1. if(!--count)
  2.      {
  3.        count=30;
  4.        if((PORTA.RA4 ==1 || PORTA.RA3 ==1 ||  PORTA.RA2 ==1)&& gomb_periodus < 3)//ha egy gombot megnyomnak megnézzük meiket,CSak 2 periodusig nézzen a gombokra....
  5.        {
  6.            if(PORTA.RA4 ==1 && gombbal==0)gombbal=1;
  7.            if(PORTA.RA3 ==1 && gombkozep==0)gombkozep=1;
  8.            if(PORTA.RA2 ==1 && gombjobb==0) gombjobb=1;
  9.  
  10.        }
  11.        if(gomb_periodus==2)nyvegrehajt();
  12.        if(PORTA.RA4 ==0 && PORTA.RA3 ==0 &&  PORTA.RA2 ==0 && gomb_periodus>1)//ha minden felvan engedve és 1 periodusba vagyunk nullázunk mindent
  13.        {
  14.          gomb_periodus=1;
  15.          gombbal=0;
  16.          gombkozep=0;
  17.          gombjobb=0;
  18.        }
  19.        if((gombbal==1|| gombkozep==1 || gombjobb==1)&& gomb_periodus < 3)gomb_periodus++;//gomb elözmény tartalmaz gomb lenyomást akkor növelünk
  20.        //direk raktambele 3 periodus ha rajta ragadna az ujjam és  nyvegrehajt() eljárást ne hivja meg töbször
  21.      }
  22.  
  23. void nyvegrehajt()
  24. {
  25.     if(gombbal ==1)
  26.     {
  27.       if(mode==0)mode=1;
  28.       else if(mode==1) mode=0;
  29.       jatek=1;
  30.       megszakitas=1;
  31.      
  32.     }
  33.     if(gombkozep ==1)
  34.     {
  35.       jatek--;
  36.       megszakitas=1;
  37.     }
  38.     if(gombjobb ==1)
  39.     {
  40.       jatek++;
  41.       megszakitas=1;
  42.     }
  43.    
  44. }
(#) ODU válasza usane hozzászólására (») Szept 25, 2017 /
 
ADC van bekapcsolva, azon nézem az akkumulátor feszültségét, egy feszültség osztón keresztül. Csak az RA0 csatorna van kiválasztva. Illetve az RA1, RA4 és RA5 lábakon kapcsoló van. Az összes többi láb kimenet. Nem szeretném kiadni a kapcsolási rajzot de bármilyen kérdésre válaszolok.
(#) usane válasza ODU hozzászólására (») Szept 25, 2017 /
 
ok. Akkor teszt céljából kapcsold ki az AD-t azon is és úgy nézd meg mit mutat az a két láb.
(#) ODU válasza usane hozzászólására (») Szept 25, 2017 /
 
Amit korábban linkeltem lebutított villogó áramkört (nem az akkuőrt), abban már ki van kapcsolva és nem történt változás. Még egyszer csak az inicializáló:
  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 =  0;      
  11.         CCPR1L = 0;
  12.         PIE1 =   0b00000000;        // PERIPHERAL INTERRUPT ENABLE REGISTER
  13.         PIR1 = 0;
(#) Udvari Zsombor válasza Udvari Zsombor hozzászólására (») Szept 25, 2017 /
 
Kezdem feladni az egészet!!! Komolyan, ez egyre rosszabbul néz ki!!!
(#) madzagos válasza Udvari Zsombor hozzászólására (») Szept 25, 2017 / 1
 
Először forrasztani kellene megtanulnod. Az első képen a vezető sávokat is összeforrasztottad, ha jól látom.
(#) Firefighter1 hozzászólása Szept 25, 2017 /
 
Nem találtam neki jobb helyet... De mivel végülis PIC-be szánom ezért ide vág!
Soros porton fogadott kb 40-50 karakter hosszuságu Stringet szeretnék "feldarabolni!
sajnos a "mondat" hossza valtozik, igy a bizonyos adatcsoportok nem mindig ugyan ott vannak, ezért a sima helyiértékes darabolást nem tudom alkalmazni! A PIC-re is Flowcode-ba irok programot a C-t meg pláne nem nagyon ismerem, De elég sokat olvastam és jo pár stringfügvényt végogbujtam!

Az adatcsoportok elötti karakterek mindig ugyan azok ( 2 betüből állo "előtag, az adatok pedig szóközzel vannak elválasztva!) AZ / EL / UP / DN

Ugy meg lehet oldani hogy ?:?:

Stringen belül rákeresek az AZ karakterre , az legyen mondjuk a hetedik helyen, akkor tudom hogy az AZ-hoz tartozó adatcsoport a 9 karaktertől kezdődik kimentetem tehát a stringből a 9-x-edik karakterig az adatot.....
és ugyan igy járok el az összes többi adatcsoportnál...
??
(#) Firefighter1 hozzászólása Szept 25, 2017 /
 
Mondjuk igy elméletbe leirni sokkal könnyebb mint végiggurgulázni a c kodot.....
Ja igen, mert valahogy C be szeretném megszülni, mert azt tudom egyszerüen beilleszteni a FLOW-ba
(#) sonajkniz válasza Udvari Zsombor hozzászólására (») Szept 25, 2017 /
 
Én ugyan nem tiltottam le semmit.
Mi több válaszoltam is neked.
Vagy elolvasni sem tudtad amit írtam?
Ezek szerint a te leveledben szereplő [Censored] megjegyzés nem tőled származik?
Következő: »»   980 / 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