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   763 / 1210
(#) bzumi válasza Pali79 hozzászólására (») Márc 20, 2016 /
 
Köszönöm a választ, van még egy pickem itthon az egy 16f870 annak van belső oszcillátora? az a baj nincsen most kvarcom itthon.
(#) don_peter válasza bzumi hozzászólására (») Márc 20, 2016 /
 
Nem a LED fog leégni
(#) Pali79 válasza bzumi hozzászólására (») Márc 20, 2016 /
 
Annak sincs. De ez benne van ám az adatlapjában! Anélkül semmit sem lehet programozni.
(#) Lamprologus válasza icserny hozzászólására (») Márc 20, 2016 /
 
Ok, ez rendben!

De akkor itt miért látom azt a PIC18F4550-nél hogy Operating Voltage (2V-5.5V) ???

Meg az Androidos PICmicro adatbázis is ezt írja.

18LF ... típust meg nem is találtam egyikben sem ...


Najó ... inkább marad az 5V ...

Ha így oldom meg a szintillesztéseket az jó lesz?

ESP.JPG
    
(#) bzumi válasza Pali79 hozzászólására (») Márc 20, 2016 /
 
na jó, feladtam, alkatrész kell ide látom, nem elég egy led és egy pic akkor holnap elmegyek beszerzési körútra veszek 4Mhz-s kvarcot és akkor újra-próba
(#) Bakman válasza Lamprologus hozzászólására (») Márc 20, 2016 /
 
Az F és LF típusok kb. mindenben egyeznek, kivéve a feszültségkarakterisztikákat, ezért is vagy egy adatlapja a kettőnek. Úgymond "köztudott", hogy alacsonyabb feszültségszinthez az LF jelzésű kell, már ha van belőle ilyen változat. Az összegző adatbázisok erre külön nem térnek ki. Van olyan kontroller, amelyiknél az LF változat max. 3.6 V-ról járatható, az, amelyik 125 °C-t is kibír, pedig max. 48 MHz-en 85 és 125 °C között stb. Magyarán az adatlapot kell átböngészni a kiválasztásnál.
(#) Pali79 válasza bzumi hozzászólására (») Márc 20, 2016 /
 
Meg vegyél hozzá 22 pF-os kerámia kondikat is.
(#) bzumi válasza Pali79 hozzászólására (») Márc 20, 2016 /
 
Okés azt is veszek, ám jó ez a pic cucc sok mindent lehet vele csináltatni meg babrálni
(#) don_peter válasza Lamprologus hozzászólására (») Márc 20, 2016 /
 
Mennyi lábat akarsz szint illeszteni?
Ha csak 1-2-őt akkor ellenállás osztó, ha többet akkor : Bővebben: Link
(#) Pali79 válasza bzumi hozzászólására (») Márc 20, 2016 /
 
Az ám, de szerintem a flowcode-t gondold át.
(#) bzumi válasza Pali79 hozzászólására (») Márc 20, 2016 /
 
Miért, van ami jobb a flowcode-nál esetleg?
(#) Pali79 válasza bzumi hozzászólására (») Márc 20, 2016 /
 
Ha érteni is akarod, hogy mi miért történik akkor az assembly, ez viszont melós, mert a fordító semmit sem csinál meg helyetted.
(#) Hp41C válasza Pali79 hozzászólására (») Márc 20, 2016 /
 
Meg egy zacskó 100nF kerámia kondenzátort tápfeszültség szűrőnek és 10k ellenállást a MCLR és a Vdd közé.
(#) proli007 válasza Sinike hozzászólására (») Márc 21, 2016 /
 
Hello! Azt nem vetted figyelembe, hogy a 7407 nyitott kollektoros kimenetű. A 7414 pedig totempole. Így a PC nem tudja visszaolvasni a jelet a PIC felől az ACK jelet, mert a kimenet fogja a PGD lábat.
A hozzászólás módosítva: Márc 21, 2016
(#) Lamprologus válasza don_peter hozzászólására (») Márc 21, 2016 /
 
2 áramkört kéne illeszteni. egyiket 3,3V-ról 5V-ra a másikat fordítva.
Egyik irányba jó az ellenállás osztó, de a másikba már valami aktív elem kéne ...
(#) nagym6 hozzászólása Márc 21, 2016 /
 
Üdv. Az a problémám, hogy egy Timer-nél kevés a 16 bit osztás. Két Timer-t kellene sorbakötni, megoldható valahogy? Az elsőnek Timer1 lenne jobb, az oszcillátora miatt.
A Pic: Pic18F26K22
Köszönöm.
A hozzászólás módosítva: Márc 21, 2016
(#) ktamas66 válasza nagym6 hozzászólására (») Márc 21, 2016 / 1
 
A legegyszerűbb lenne szoftverből, de ha mindenképpen hardverből szeretnéd, én azt csinálnám, hogy a TMR1 lenne a CCP modul alapórajele Compare módban, a CCP kimeneti lábát már rákötheted valamelyik másik TMR bemenetére.
(#) don_peter válasza Lamprologus hozzászólására (») Márc 21, 2016 /
 
Akkor amit linkeltem az lesz neked jó.
Oda vissza tud illeszteni.
74LVC4245A
(#) nagym6 válasza ktamas66 hozzászólására (») Márc 21, 2016 /
 
A CCP modult még nem tanulmányoztam, de ha így megoldható, ezzel meg tudom oldani.
Köszönöm.
(#) kissi válasza nagym6 hozzászólására (») Márc 21, 2016 /
 
Szia!
Milyen időt szeretnél milyen órajel mellett ?
(#) nagym6 válasza kissi hozzászólására (») Márc 21, 2016 /
 
Szia!
64MHz órajel, 0.001s - 60s időtartományt kell mérni 0.001s felbontással. A 64/4=16MHz a sok, de az meg kell más miatt. A Timer1 saját oszci lassú max. 200kHz.
ktamas66 írta CCP modullal, ezek szerint ez lenne megoldás.
Köszi a választ.
A hozzászólás módosítva: Márc 21, 2016
(#) zenetom válasza nagym6 hozzászólására (») Márc 21, 2016 /
 
És ha 1ms-os megszakítást csinálsz, amiben számoltatsz egy változót? Amit 60000-nél újraindítasz.
(#) nagym6 válasza zenetom hozzászólására (») Márc 21, 2016 /
 
Hardveresen lenne jó megoldani, a program basic, eléggé kötött. A megszakítások basic utasítás lefutása alatt tiltva vannak, a változó számolása nem biztosítható pontosan azonos idő elteltével.
Köszi az ötletet.
(#) ktamas66 válasza nagym6 hozzászólására (») Márc 21, 2016 /
 
Akkor ez valami periódusidő mérés? Ekkora órajel mellett a PWM modul 4kHz-es jelet tud előállítani. Ezt kellene számoltatni egy másik CCP modullal Capture üzemmóddal. Sajnos a 16 bitbe nem fér bele a 60s, tehát a szoftverrel is játszani kell, vagy valami külső eszközzel előállítani 1kHz-es jelet (a PWM jelét osztani 4-gyel), annak számolásánál a 16 bitbe beleférne a 60s.
(#) nagym6 válasza ktamas66 hozzászólására (») Márc 21, 2016 /
 
Igen, periódusidő mérés. Amit először írtál, a CCP segítségével szerintem jó lesz. Tanulmányozom, mert CCP-t még nem használtam, de van leírásom, szerintem boldogulok vele.
Köszi.
(#) Zso839 hozzászólása Márc 21, 2016 /
 
Sziasztok!

3db 4 digites 7szegmenses kijelzőt szeretnék vezérelni PIC-kel. Szerintetek hogyan kellene megoldanom, a szegmensek menjenek a PIC-ről és a digitek valamilyen más IC-ről (pl. cd4017, sn74138, 74hc595, 74hc164,...) legyenek vezérelve, vagy fordítva? Esetleg mindkettő külön IC-ről menjen? A PIC 2*8 portos, ebből 2 portot nyomógomb bemenetre használnék. A kijelzők közös katódosak.
Lehet,hogy rossz kérdés és lehet nem ebbe a fórumba való.
Segítségeteket előre is köszönöm!

Zsolt
A hozzászólás módosítva: Márc 21, 2016
(#) DJozso válasza Zso839 hozzászólására (») Márc 21, 2016 /
 
Szia!
Hát én, úgy oldanám meg hogy mindegyik 4 digites kijelzőt egy PIC vezérelne, mint itt:
4 digit vezérlése. A három PIC-et összekötném egy 4.-ik PIC-cel I2C soros kommonikációval, ez vezérelné a kijelzőket. De ez csak elméletben gondolom.
Viszont, ha már itt vagyok, nekem is lenne egy kérdésem. Hátha az én problémámra is tud valaki okosat mondani. Adott egy HC-SR04 ultrahangos távolságmérő. A pic egy 16f887. A kódom a következő:
  1. #define LED PORTB.F5  // Érzékelés visszajelző led
  2.  
  3. int a;
  4. char txt[] = "000";  //Távolság karakteres változója
  5.  
  6. //Interrupt function will be automatically executed on Interrupt
  7. void interrupt()
  8. {
  9.   if(INTCON.RBIF == 1) {                 //Megszakítás oka (INT bemenet aktivizálódik)
  10.     INTCON.RBIE = 0;                   //Disable On-Change Interrupt
  11.     if(PORTB.F4 == 1)  T1CON.F0 = 1; //If ECHO is HIGH and Timer1 On
  12.     if(PORTB.F4 == 0)                  //If ECHO is LOW
  13.     {
  14.       T1CON.F0 = 0;                    //Stop Timer
  15.       a = ((TMR1H<<8) | TMR1L)/58.82;  //Calculate Distance
  16.       TMR1H = 0x00;                  // Timer alsó felső byteok visszaállítása
  17.       TMR1L = 0x00;
  18.     }
  19.   }
  20.   INTCON.RBIF = 0;                     //Clear PORTB On-Change Interrupt flag
  21.   INTCON.RBIE = 1;                     //Enable PORTB On-Change Interrupt
  22. }
  23.  
  24. void main()
  25. {
  26.   Lcd_Init(&PORTD);
  27.   Lcd_Cmd(LCD_CLEAR);                 // Kijelző törlés
  28.   Lcd_Cmd(LCD_CURSOR_OFF);            // Kurzor kikapcsolása
  29.   TRISB = 0b11011110;
  30.   ANSELH = ANSEL = 0;
  31.   INTCON.GIE = 1;                    //Global Interrupt Enable
  32.   INTCON.PEIE = 1;                   // Perifériás megszakítás
  33.   INTCON.RBIF = 0;                     //Clear PORTB On-Change Interrupt Flag
  34.   INTCON.RBIE = 1;                     //Enable PORTB On-Change Interrupt
  35.   OPTION_REG.INTEDG = 1;         // Felfutó élre aktiálódik a megszakítás
  36.   WPUB = 0;    // Felhúzó ellenállás ki
  37.   IOCB = 0b00010000;  //PORTB.F4 lesz az external interrupt bemenet
  38.   Lcd_Out(1,1,"Keszitette:");
  39.   Lcd_Out(2,4,"By DJozso");
  40.  
  41.   Delay_ms(3000);
  42.   Lcd_Cmd(LCD_CLEAR);
  43.  
  44.   T1CON = 0x10;                //Inancionálása a Timer1 Modulnak , prescale 1:2
  45.   PIR1.TMR1IF = 0;            // clear TMR1IF
  46.   PIE1.TMR1IE  = 1;           // enable Timer1 interrupt
  47.   while(1)
  48.   {
  49.     TMR1H = 0x00;                         //Setting Initial Value of Timer
  50.     TMR1L = 0x00;                         //Setting Initial Value of Timer
  51.     a = 0;          // idő változó nullázása
  52.     PORTB.F0 = 1;                      //TRIGGER HIGH  (Start jel)
  53.     Delay_us(10);                      //10uS Delay
  54.     PORTB.F0 = 0;                      //TRIGGER LOW   (Start jel ki)
  55.     Delay_ms(100);                     //Waiting for ECHO output
  56.     a = a + 1;                         //Error Correction Constant
  57.  
  58.     if(a>2 && a<80)                   //Check whether the result is valid or not
  59.     {
  60. //      IntToStr(a,txt);       // ez volt az eredeti kódban
  61.       txt[0] = a/100+48;        // ezzel helyettesítettem a "IntToStr(a,txt)"
  62.       txt[1] = a%100/10+48;     // ezt ismerem
  63.       txt[2] = a%10+48;
  64. //      Ltrim(txt);       // eredeti kód részlet (MikroC 8.2.0.0-ban nincs ilyen parancs)
  65.       if (a > 70) LED = 0;       // Led vezérlés 70 cm felett kikapcsol
  66.       if (a <= 70) LED = 1;      // alatta bekapcsol
  67.       Lcd_Cmd(LCD_CLEAR);
  68.       Lcd_Out(1,1,"Tavolsag = ");
  69.       Lcd_Out(1,11, txt);
  70.       Lcd_Out(1,15,"cm");
  71.     }
  72.    else
  73.     {
  74.       Lcd_Cmd(LCD_CLEAR);
  75.       Lcd_Out(1,1,"Kivul a hataron");
  76.     }
  77.     Delay_ms(300); //mérés sűrűsége
  78.   }
  79. }

Amit tudok, hogy adni kell egy trigger jelet a szenzornak(10uS), majd az szenzor "echo" lábán addig van logikai 1, amíg az ultrahang "vissza nem ér". Ennek idejét szeretném mérni a Timer1-el. A kód működik csak egy baj van vele, hogy max 80 cm-ig mér, addig viszont elég pontosan. A szenzor papír forma szerint 400 cm-t tud. Arra gondolok, hogy talán valami idő túlcsordulás, vagy számolási hiba. Kérlek benneteket, vessetek már rá egy pillantást. Minden segítséget köszönök.
(#) Bakman válasza Zso839 hozzászólására (») Márc 21, 2016 /
 
12 szegmensre inkább Shift regiszter + szegmens meghajtó (UDN2981).
(#) Zso839 válasza DJozso hozzászólására (») Márc 21, 2016 /
 
Szia DJozso!
Ez még így jól is hangzik, csak a lehető legkevesebb alkatrészből szeretném"kihozni" a kapcsolást. Lehetőleg 1 PIC-kel.
A hozzászólás módosítva: Márc 21, 2016
(#) Zso839 válasza Bakman hozzászólására (») Márc 21, 2016 /
 
Szia Bakman!

A regiszterre én is gondoltam (a 74hc595-ös típusra), kettőt kaszkádba kötve. Illetve volt még egy, a 74138-as ic (szintén kettőt összekötve),az elméletileg már 4/16 -os multiplexer lenne.
Az általad javasolt ic (udn2981) mennyiben különbözik az uln2003-tol? Mert a rajzát nézve hasonló a bekötése.
Következő: »»   763 / 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