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   765 / 1210
(#) icserny válasza Zso839 hozzászólására (») Márc 25, 2016 /
 
Nem kell semmi, a MAX7219 a meghajtó.
(#) Zso839 válasza icserny hozzászólására (») Márc 26, 2016 /
 
Nagyszerű.
Köszönöm szépen a segítséget!
(#) lastewer hozzászólása Márc 27, 2016 /
 
Sziasztok!

Egy Pic18f4520-asal szeretnék megvalósítani egy olyat , hogy ha a bemenő feszültség 12.0V alatt van , akkor lekapcsolja az egyik lábát.

De ugye a bemeneti feszültség a méréshez max 5V lehet , kellene egy feszültségosztó.
Ezt autóban szeretném felhasználni , tehát 15V is lehet a fesz , amit szét kéne osztani , tudna valaki segíteni egy kicsit a feszültség osztásában , illetve a méréshez?
A hozzászólás módosítva: Márc 27, 2016
(#) Pali79 válasza lastewer hozzászólására (») Márc 27, 2016 /
 
(#) lastewer válasza Pali79 hozzászólására (») Márc 27, 2016 /
 
Köszönöm , már megtaláltam én is. De viszont nem tudok összehasonlítani 2 értéket , miért ?

  1. unsigned long int ADC_Value,  Kg, Voltage, Newton, Pa, mmHg;
  2. char *display_v = "0.000";
  3.  
  4.  ADC_Value = ADC_Read(2);         //take value from AN2
  5.    Voltage = 5000 * ADC_Value / 1023;    //change back to decimal
  6.  
  7.  
  8.  
  9.    display_v[0] = Voltage /1000 +48 ; //add 48 to get the ASCII char value
  10.    display_v[2] = (Voltage /100)%10 +48;
  11.    display_v[3] = (Voltage /10)%10 +48;
  12.    display_v[4] = Voltage %10 +48;
  13.    
  14.  
  15.    if(display_v > 4.07)   {  Lcd_Out(2, 1, "Fesz:");  Lcd_Out(2,8,display_v); Lcd_Chr(2,13,'V');  }


Tehát ha a display_v értéke nagyobb mint 4.07 , akkor kiírja a többit , de ez mindig kiírja. Miért lehet ez ?
(#) Hp41C válasza lastewer hozzászólására (») Márc 27, 2016 /
 
display_v egy karakterláncra mutató mutató (pointer), a címe meg nagyobb, mint 4.

Miért nem a Voltage változót vizsgálod:
A Voltage változód értéke 5V esetén 5000, 0V esetén 0.
  1. if (Voltage > 407)   {  Lcd_Out(2, 1, "Fesz:");  Lcd_Out(2,8,display_v); Lcd_Chr(2,13,'V');  }
(#) lastewer válasza Hp41C hozzászólására (») Márc 27, 2016 /
 
Elírtad az értéket : 407 = 4070 , működik , köszönöm szépen!
(#) lastewer hozzászólása Márc 28, 2016 /
 
Sziasztok!

Csináltam egy programot , de nem azt csinálja amit én szeretnék . Ha kisebb a fesz mint 12.2V , akkor villogtatja a B0-ás lábán lévő ledet , ha nagyobb , akkor folyamatosan világít. Ezzel nincs is semmi gond.A B1-es lábat pedig akkor kapcsolnám be , ha nagyobb a fesz mint 12V , de valamiért folyamatosan kattogtatja a relét (Leddel tökéletes). Lenne valakinek ötlete , hogy miért?

  1. // ------------------------------ Main (Főprogram) ----------------------------------------------------------- //
  2.     void main() {
  3.       cnt = 0;                    // Számláló kezdő értéke 0
  4.       TRISB =   0;                // PORTB kimenetre állítva
  5.       TRISD =   0;                // PORTB kimenetre állítva
  6.      
  7.       Lcd_Init();        // Initialize LCD
  8.       Lcd_Cmd(_LCD_CLEAR);             // CLEAR display
  9.       Lcd_Cmd(_LCD_CURSOR_OFF);        // Cursor off
  10.      
  11.       initTimer();
  12.           PORTB.F1 = 1;
  13.       while (1)
  14.       {
  15.      
  16.         ADC_Value = ADC_Read(2);               //AN2 -es láb értékének lekérése
  17.         Voltage = 5000 * ADC_Value / 1023;    //change back to decimal
  18.  
  19.          display_v[0] = Voltage /1000 +48 ; //add 48 to get the ASCII char value
  20.          display_v[2] = (Voltage /100)%10 +48;
  21.          display_v[3] = (Voltage /10)%10 +48;
  22.          display_v[4] = Voltage %10 +48;
  23.  
  24.          if(Voltage >= 4066) // Ha nagyobb vagy egyenlő a feszültség , mint 12.2V (4066 + 34 = 0.1 V -ot emel)
  25.          {  
  26.             Lcd_Out(1, 1, "Akumlator toltes oke");
  27.             Lcd_Out(2,8,display_v);
  28.             Lcd_Chr(2,13,'V');
  29.             PORTB.F1 = 1;
  30.             PORTD.F1 = 1;
  31.          }
  32.          if(Voltage < 4066) // Ha kisebb a feszültség mint 12.2V
  33.          {
  34.             Lcd_Out(1, 1, "Kimenet lekapcsolva");
  35.             Lcd_Out(2,9,display_v);
  36.             Lcd_Chr(2,14,'V');
  37.             PORTB.F1 = 0;
  38.             PORTD.F1 = 0;
  39.             if (cnt >= 10000)    // 10000 * 0.1 ms = 1 mp
  40.             {
  41.                       PORTB.F0 = ~PORTB.F0;   // B lábak villogtatása
  42.                       cnt = 0;                // Számláló reset
  43.             }
  44.  
  45.          }
  46.  
  47.  
  48.  
  49.  
  50.  
  51.      
  52.      
  53.      
  54.       }
  55.     }


Olyan mintha nem tudna visszamenni az előző feltételhez ebből , de viszont a led folyamatosan kezd el világítani , tehát mégis csak bele megy :

  1. if(Voltage < 4066) // Ha kisebb a feszültség mint 12.2V
  2.          {
  3.             Lcd_Out(1, 1, "Kimenet lekapcsolva");
  4.             Lcd_Out(2,9,display_v);
  5.             Lcd_Chr(2,14,'V');
  6.             PORTB.F1 = 0;
  7.             PORTD.F1 = 0;
  8.             if (cnt >= 10000)    // 10000 * 0.1 ms = 1 mp
  9.             {
  10.                       PORTB.F0 = ~PORTB.F0;   // B lábak villogtatása
  11.                       cnt = 0;                // Számláló reset
  12.             }
A hozzászólás módosítva: Márc 28, 2016
(#) Csirkefej válasza lastewer hozzászólására (») Márc 28, 2016 /
 
Nem néztem a programot mert ezt kéne előbb tisztázni szerintem:

Idézet:
„valamiért folyamatosan kattogtatja a relét (Leddel tökéletes)”


Relé hova van kötve?
(Leszopja az áramot és leesik a fesz, akkor meg kikapcsol aztán nincs relé és vissza?)
(#) lastewer válasza Csirkefej hozzászólására (») Márc 28, 2016 /
 
A B1-es lábra van kötve közvetlenül, egy ilyen : Relé
(#) Csirkefej válasza lastewer hozzászólására (») Márc 28, 2016 /
 
Nem az IC lábára gondoltam. Hanem az áramkörben hova van kötve.
Attól, hogy az IC lábán van, még megszívhatja az áramot aminek következtében leesik a feszültség.
Akkor meg ugye az IC érzékeli hogy kisebb lett a feszültség 12 voltnál és ahogy kell - lekapcsolja a relét.
Akkor megint felmegy a fesz és visszakapcsol. Kattog.
Ebben az esetben a kattogás a jó működés.
Ha ledet kötsz a helyére - ahogy írtad, akkor kisebb áramot vesz fel, nem esik a fesz - nem viillog.
(#) lastewer válasza Csirkefej hozzászólására (») Márc 28, 2016 /
 
Csináltam egy videót róla.Letöltés Először 12.2V-nál nagyobb feszt kap, majd lehúzom és ráteszem testre. (Ez a 12.2 le van osztva ,nem közvetlen kapja meg)

Ekkor elkezd villogni ugye , mert kisebb mint 12.2V , de ha vissza teszem , akkor nem váltja vissza a relét , de viszont a villogás ahogy kell megszűnik.

Az a kérdés miért nem váltja vissza a relét? (A relé üresen van , nincs rákötve semmi)
A hozzászólás módosítva: Márc 28, 2016
(#) pajti2 válasza lastewer hozzászólására (») Márc 28, 2016 /
 
Ahova feltöltötted, ingyenesen csak lassú sebességgel tölti le. A youtube miért nem volt jó?
(#) lastewer válasza pajti2 hozzászólására (») Márc 28, 2016 /
 
Köszi hogy szóltál , nem is figyeltem ... Megy youtube-ra. Youtube link
A hozzászólás módosítva: Márc 28, 2016
(#) pajti2 válasza lastewer hozzászólására (») Márc 28, 2016 /
 
Még valami. A videón a kapcsrajzot skubizni nem éppen funny. Akad esetleg egy kézileg megrajzolt ábra róla mobiltelefonnal befotózva, vagy egy bármilyen béna paintbrush rajz? Akármelyik jobb lenne. Az esztétikát tojd le, csak legyen róla közérthető rajz. Sok esetben míg rajzolod és utána összehasonlítod az épített kapcsolással, már kiderül, hogy mi van elszúrva.
(#) lastewer válasza pajti2 hozzászólására (») Márc 28, 2016 /
 
Mellékeltem a kapcs rajzot .

kapcs.jpg
    
(#) lóri válasza lastewer hozzászólására (») Márc 28, 2016 /
 
Nem tudom, de mintha tranzisztorral kéne relét kapcsoltatni.
(#) kistee válasza lóri hozzászólására (») Márc 28, 2016 /
 
Igen, úgy illik.
(#) lastewer válasza lastewer hozzászólására (») Márc 28, 2016 /
 
Szerintem megvan miért nem megy , mert ha:

PORTB.F1 = 1; akkor a kimeneten 4.78V - van.
PORTB.F1 = 0; akkor a kimeneten 3V - van.
A hozzászólás módosítva: Márc 28, 2016
(#) Hp41C válasza lastewer hozzászólására (») Márc 28, 2016 /
 
Ha a kontroller lába nincs bekötve sehova és ilyen feszültségeket mérsz, akkor rossz a konroller RB1 lába.
Ha a kontroller lába be van kötve valahová és ilyen feszültségeket mérsz, akkor a külső áramkör vagy összeköttetés (zárlat) kényszeríti a feszültséget. Pl.: Ha egy LED van a port lábra kötve, ami a Vdd -re kapcsolódik, akkor a LED árama túlterheli a portot, nem tud kialakulni az alacsony szint.
(#) pajti2 válasza lastewer hozzászólására (») Márc 28, 2016 /
 
Azt a relét lehetne pontosítani egy kicsit a rajzon?

Egy relének átlag van valamilyen kapcsolója is, de ami most érdekel bennünket, az a vezérlő tekercs bekötése. Itt egy példa relé ábrázolásáról: Relé áramköri rajza, de mindenki megérti úgy is, ha tekercset kirajzolsz, és ami azt illeti, még szemléletesebb a behúzó tekercs konkrét ábrázolása: relé a kapcsrajz jobb oldalán. Ami pedig a többiek által javasolt kapcsolás technikát illeti, teljesítmény erősítés végett leginkább ilyen kötést alkalmazunk: relé meghajtás példa.

És ami árthat a mikrovezérlőnek, külön arra a diódára hívnám fel szíves figyelmedet párhuzamosan a relével záró irányban bekötve. Az oka, hogy az induktivitás aktív taggá változik, ha megszűnik rajta az áram, és ellentétes feszültséggel "visszacsap". Azt használják ki például a személygépjárművek gyújtógyertyáinál a 12 V-ból 25 kV feszültséget előállítani. Tud az fájni egy pic-nek, ha úgy alakul.

De mindenek előtt pontosítani kellene a megadott kapcsrajzot, hogyan van bekötve a relé tekercs, és hogyan a kapcsolója - ha ugyan az be van kötve bárhová.
A hozzászólás módosítva: Márc 28, 2016
(#) lastewer válasza pajti2 hozzászólására (») Márc 28, 2016 /
 
Egy Ilyen relé modult használok , amire adok testet meg +5V-ot és egy kapcsolt feszt ami nagyobb , mint 2v és máris behúz.

Viszont azt vettem észre , ha nem a leosztott 12V-ból veszem az 5V-ot , referencia fesznek a pichez , akkor minden tökéletesen működik.

De akkor ezekszerint nem jól osztottam le a 12V-ot ( 2 db 10k ellenállás sorba kötve meg egy 10k testre húzva) ? Tápnak egy régi scanner tápot használok , lehet az a gond?
A hozzászólás módosítva: Márc 28, 2016
(#) lastewer válasza pajti2 hozzászólására (») Márc 28, 2016 /
 
Ezen az elven osztottam le a 12V-ot : Link
(#) Hp41C válasza lastewer hozzászólására (») Márc 28, 2016 /
 
Idézet:
„Viszont azt vettem észre , ha nem a leosztott 12V-ból veszem az 5V-ot , referencia fesznek a pichez , akkor minden tökéletesen működik.”

Ezt úgy kellene értelmezni, hogy a PIC tápfeszültségét is a 12V leosztott pontjára van kötve?
Jobb lenne, ha a PIC Vdd tápfeszültségét egy 7805 stabilizátorral állítanád elő a +12V -ból. Csak a mérőjelet vedd a feszültségosztóról.
(#) pajti2 válasza lastewer hozzászólására (») Márc 29, 2016 / 1
 
A linkből az alicdn.com linkkel nem tudok mit kezdeni. Kellene az az oldal, ahol vásároltad. A legközelebbi link, amit felkutatni tudtam, az ez:
Kereskedelmi link

Vélhetőleg a kereskedő oldalán ott lesz a kapcsolási rajza is, amire szükségünk van, amiatt kérdezem.

Mint az előző esetben is, nem a vizuális információ érdekelne bennünket, hanem a kapcsrajz. Amikor egy ilyen modult kézbe veszel, annak fel kell kutatni a kapcsolási rajzát, és tudnod kell, melyik kivezetési pontnak milyen kapcsolata van a modullal, hova illeszkedik azon a kapcsrajzon. Ha nincs meg a kapcsolási rajz egy elektronikáról, akkor vagy vizuálisan újra rajzoljuk, vagy nem vásároljuk meg azt a terméket. Egy elektronikai modul a felderíthető kapcsolási rajza nélkül gyakorlatilag lopott cucc a szakmai valós értékhez képest.

Amíg nem tudunk róla bővebbet, nem tudunk ezen a kérdésen biztosan lépni tovább. A pic-ek világa alapvetően elektronika, mindig az elektronika az elsődleges. A fejlesztésedben a szoftveres problémával kicsit előre szaladtál, és hátra hagytál a egy technológiai adósságot az elektronikában, amit ideje lenne kifizetni.
(#) usane válasza lastewer hozzászólására (») Márc 29, 2016 /
 
Idézet:
„Viszont azt vettem észre , ha nem a leosztott 12V-ból veszem az 5V-ot , referencia fesznek a pichez , akkor minden tökéletesen működik.”


Ohm törvény, terhelt és terheletlen feszültség osztó meg hasonlók, rémlik valami?
Nézz egy kicsit utána. A feszosztó osztása a terhelés függvényében változik.
Tedd be azt a 7805-öt amit Hp41C fórumtárs ajánlott.
(#) lastewer válasza Hp41C hozzászólására (») Márc 29, 2016 /
 
7805 satibilizátorral kapja a vdd tápfeszt a pic és csak a mérőjel van a leosztottból. A probléma megoldódott , a hibát a táp okozta , autóban tökéletesen működik ahogy kell.

Köszönöm szépen a segítséget mindenkinek !
(#) elektroszala válasza (Felhasználó 15355) hozzászólására (») Márc 29, 2016 /
 

Ez királynak tűnik. Köszönöm!
(#) elektroszala hozzászólása Márc 29, 2016 /
 
Üdvözletek!

Kevéske szabimból 3 órát rabolt el a következő probléma:
Pic18f26k22, 16MHz belső óra. uart1 -et használnék 2400 baud-on, de nem tudom 4800 alá vinni. Az uart1 -et C blokkból konfigoltam (csatolva, flowcode-ban készült). A jelenség, hogy teljesen mindegy milyen értéket írok SPBRGh1 -be, nem változik a sebesség. A csatolt képen FF van SPBRG1-nek , így ~ 4800 baud.
Ehhez kapcsolódik a másik kérdésem is: ha jól értelmezem az a datlapot, 16 megán még tudni kellene a 2400 Baud -ot, 8 bites brg -vel is. Vagy nem?
A hozzászólás módosítva: Márc 29, 2016

c.jpg
    
(#) Hp41C válasza elektroszala hozzászólására (») Márc 29, 2016 / 2
 
BRG16 = 1, BRGH = 0: Baud = FOSC/[16 * (n+1)] ebből
n = FOSC/(16 * Baud) - 1 = 16000000 / 16 / 2400 = 416.667 -1 = 415.667
Ha n = 415, azaz 0x19F, a Baud = FOSC/[16 * (n+1)] = 2403.84615. Az eltérés : 0.16026%

PIC Baud Calculator
A hozzászólás módosítva: Márc 29, 2016
Következő: »»   765 / 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