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   514 / 1216
(#) Pet91 válasza Pet91 hozzászólására (») Ápr 13, 2014 /
 
sikerült átállítani a belső rezonátort 8mhz-re, de még mindig nem jó, és az adatlap szerint ez a maximális freki (16f690). hogyan szokták ezt csinálni?
(#) danydosster válasza ktamas66 hozzászólására (») Ápr 13, 2014 /
 
most így adtam meg TRISIO = 0b00100000;
de semmi, ugyan az
(#) danydosster válasza ktamas66 hozzászólására (») Ápr 13, 2014 /
 
Esetleg lehet gond az áramkörrel?
Ez erről az oldalról néztem: LINK
(#) icserny válasza Pet91 hozzászólására (») Ápr 13, 2014 /
 
Idézet:
„ez a kód a felfutó élen a byteOUT változó i-edik bitjét küldi el. azonban nagyon nem működik a dolog... hogyan kéne ezt?”
Például hardveres támogatással SPI módban.

Szoftveres kezeléssel inkább assemblyben kellene (legalábbis ezt a részt).

Egyébként a programrészletben, amit küldtél, nem látom, hogy valaki léptetné az i változót.
(#) cross51 válasza danydosster hozzászólására (») Ápr 13, 2014 /
 
Nem tudom nálam működik igaz simulátorban nincs itthon 12f675-m, nem tudom, hogy te mivel fordítasz nekem ennyi változtatás kellet bele:
  1. void feher() {
  2.      GPIO = 1;
  3.      __delay_ms(f);
  4.      GPIO = 0;
  5.      __delay_ms(f);
  6. }
  7. void voros() {
  8.      GPIO = 2;
  9.      __delay_ms(v);
  10.      GPIO = 4;
  11.      __delay_ms(v);
  12. }

De ez XC8-l lett fordíttatva.
(#) danydosster hozzászólása Ápr 13, 2014 /
 
Én microC pro val csinálom! De valami nagyon nem jó lehet mikor
átírtam hogy GPI1 et vegye figyelembe mint input akkor furcsa mód a kapcsoló jól működött
Fel és le kapcsolgatta a ledet. De nem értem hogy miért van ez. Lehet hogy mással kellene fordítanom a programot mert ez nem egészen azt csinálja amit kellene?
(#) cross51 válasza danydosster hozzászólására (») Ápr 13, 2014 /
 
Esetleg a CONFIG biteket próbáld így elhelyezni:
  1. #pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
  2. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  3. #pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
  4. #pragma config MCLRE = OFF      // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
  5. #pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
  6. #pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
  7. #pragma config CPD = OFF

hátha az intosc részen van a baj mert a GPIO5 az a clkin külső oszcillátornál.
(#) danydosster válasza cross51 hozzászólására (») Ápr 13, 2014 /
 
Nem akarja az igazságot.
Esetleg megoldható, hogy a forrást lefordítod és a hex kódot visszaküldöd?
Hátha azzal lenne a gond. Vagy az áramkörrel akkor minden rendben?

  1. #pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
  2. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  3. #pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
  4. #pragma config MCLRE = OFF      // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
  5. #pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
  6. #pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
  7. #pragma config CPD = OFF
  8.  
  9. #define v 500
  10. #define f 700
  11.  
  12. void feher() {
  13.      GPIO = 1;
  14.      delay_ms(f);
  15.      GPIO = 0;
  16.      delay_ms(f);
  17. }
  18. void voros() {
  19.      GPIO = 2;
  20.      delay_ms(v);
  21.      GPIO = 4;
  22.      delay_ms(v);
  23. }
  24.  
  25. void main() {
  26.  
  27.   GPIO = 0;
  28.   CMCON = 7;
  29.   TRISIO = 0;
  30.   TRISIO.GP5 = 1;
  31.  
  32.   while(1) {
  33.            if (GPIO.GP5 == 1) voros(); else feher();
  34.   }
  35.  
  36. }
(#) cross51 válasza danydosster hozzászólására (») Ápr 13, 2014 /
 
Nekem amint látod mind kettő működik a kapcsolás szerint +hex próbáld meg vele.
(#) danydosster válasza cross51 hozzászólására (») Ápr 13, 2014 /
 
JÓ!! Átkapcsolja szépen csak a forrás biztos más mert nekem ugye 3 led van neked pedig csak 2. Az én forrásomat át tudod fordítani?

Mivel írod a programot, illetve mivel fordítod?
A hozzászólás módosítva: Ápr 13, 2014
(#) cross51 válasza danydosster hozzászólására (») Ápr 13, 2014 /
 
3 LED? Én 2 ledet olvastam de egyébként a felület MPLAB X IDE a fordító meg XC8.
(#) danydosster válasza cross51 hozzászólására (») Ápr 13, 2014 /
 
Aham. Tudod egy vasúti sorompót akarok szimulálni.
Két vörös felváltva villog, vagy ugye a fehér villog.
(#) cross51 válasza danydosster hozzászólására (») Ápr 13, 2014 /
 
Tessék így sorompó ként működik. Csatoltam a HEX file-t is meg a C file-t is.
(#) danydosster válasza cross51 hozzászólására (») Ápr 13, 2014 /
 
Nagyon szépen köszönöm!!!!
Frankón működik!!
Be kell szereznem a szükséges programokat, hogy megfelelően tudjak majd programozni!
Mégegyszer köszönöm szépen!!!
(#) philips100 hozzászólása Ápr 14, 2014 /
 
Sziasztok,

Segítséget kérnék PIC témában.PT4115 led meghajtó dim lábát szeretném PIC-vel vezérelni.
A pic 12F629 lábait össze lehet közvetlen kötni a PT4115 dim lábával?Kell-e valamiféle csatoló elem:pl ellenállás vagy tranzisztor.
A kapcsolás alapja itt található:http://www.enide.net/webcms/?page=power-pic-rgb-irda
Köszi a segítséget.
(#) eSDi válasza philips100 hozzászólására (») Ápr 14, 2014 /
 
Üdv!

Igen közvetlenül összeköthető. Sima logikai bemenet.
(#) philips100 válasza eSDi hozzászólására (») Ápr 14, 2014 /
 
Szia,

Köszömöm a válaszod.
(#) Kapagerenda hozzászólása Ápr 14, 2014 /
 
Hello!

16F887 microchippel szeretnék vezérelni egy relét. A tápfeszültségekkel kapcsolatban lenne egy kérdésem. A microchip 5 V-ot a relé 12 V-ot igényel a működéshez. Egy darab 12 V os trafóval üzemeltethetem mind a kettőt egyszerre? A microchipphez a feszültséget természetesen egy feszültség regulátoron keresztül juttatnám ami a 12 V-ot 5 V ra alakítaná. A relé pedig kapná direktben a 12V-ot.
Előre is kösz
(#) brato válasza Kapagerenda hozzászólására (») Ápr 14, 2014 /
 
Igen, lehet üzemeltetni, de a relét egy tranyón keresztül hajtsd meg.
(#) don_peter hozzászólása Ápr 15, 2014 /
 
Uraim, Piccolo projektből tanulva és felhasználva részeit megírtam az SPI memória ki és beolvasást.
Szépen működik is a dolog, de egy valami nem hagy nyugodni ez pedig az union16-os típus definíció.
Tudom hogy ki lehet majd váltani a ledefiniált adatstruktúrát, nem is azzal van bajom hanem azzal, hogy nem értem a működését.

Mutatom:
Típusdefiníció:
  1. /*- UNION -*/
  2. typedef union _union16 {
  3.   unsigned char word;
  4.   struct {
  5.     unsigned char hi_byte;
  6.         unsigned char lo_byte;
  7.   };
  8. } union16;


Ez eddig rendben is van.
Aztán jön a függvény:
  1. void memRead25LC256(union16 MemAddr, uint8 *pbuf) {
  2.   uint8 i;
  3.   waitFor25LC256();                         //Várunk, ha az EEPROM elfoglalt
  4.   SLAVE_ENABLE();
  5.   spi_io(CMD_READ);                         //Adatblokk olvasása
  6.   spi_io(MemAddr.hi_byte );
  7.   spi_io(MemAddr.lo_byte);
  8.   for (i=0; i < BLKSIZE; i++) {
  9.     *pbuf++=spi_io(0x00);                   //Olvasunk, de valamit akkor is küldeni kell!
  10.   }
  11.   SLAVE_DISABLE();
  12. }


A meghívás pedig így:
  1. ReadAddr.word = 0;                        //A memória 0 címétől kezdünk
  2.  
  3.   memRead25LC256(ReadAddr,buf);         // olvasás
  4.   for (i = 0;i<BLKSIZE; i++) {
  5.         usb_cdc_putc(buf[i]);
  6.   }
  7.   ReadAddr.word += BLKSIZE;             //Memória cím léptetése
  8.  
  9.   memRead25LC256(ReadAddr,buf);         // olvasás
  10.   for (i = 0;i<BLKSIZE; i++) {
  11.         usb_cdc_putc(buf[i]);
  12.   }
  13.   ReadAddr.word += BLKSIZE;             //Memória cím léptetése


A BLKSIZE tartama 32 tehát elvileg 32bájtonként lépked előre és olvassa ki a következő 32bájtot a memóriából.
2 dolog zavar össze.

1. amikor növeljük ReadAddr.word BLKSIZE-vel akkor az adatstruktúrában lévő változók egyforma értéket kapnak?
Tehát így történik az érték átadás?:
ReadAddr.hi_byte += BLKSIZE;
ReadAddr.lo_byte += BLKSIZE;

Léptetésnél miként változik az értékük?
Mindig 32-vel nagyobb lesz a hi és a lo érték is?
Vagy a ReadAddr.lo_byte hogy kap értéket? Ezt nem értem.

2. ha beolvastunk 32bájt adatot akkor a léptetésnél nem 33-tól kellene kezdenünk?
Hiszen a 32-iket már beolvadtul előtte..

Az utolsó kérdésem az már csak, hogy tényleg tiszta legyen.
A memória címzéseket számokba adjuk meg decimális számokba (vagy bájtokba), tehát, ha azt adom meg hogy 123-tól írjon be 10bájt-ot akkor ha ezt a részt ki akarom olvasni így kell megadnom: ReadAddr.hi_byte = 123;
ReadAddr.lo_byte = 133;
Kérlek rázzátok gatyába, hogy nekem is tiszta legyen...Köszi
A hozzászólás módosítva: Ápr 15, 2014
(#) nedudgi válasza don_peter hozzászólására (») Ápr 15, 2014 /
 
A cím 16 bites, ami 2 bájtból áll össze. A hi_byte a 16 bites szó felső 8 (magasabb helyiértékű 8) bitje, a lo_byte az alacsonyabb helyiérték.
A hozzászólás módosítva: Ápr 15, 2014
(#) icserny válasza don_peter hozzászólására (») Ápr 15, 2014 /
 
Az union azt jelenti, hogy ugyanhhoz a memóriaterülettel többféle módon is hozzá lehet nyúlni. Szavanként, bájtonént, bitcsoportonként vagy bitenként.

Idézet:
„Tehát így történik az érték átadás?:
ReadAddr.hi_byte += BLKSIZE;
ReadAddr.lo_byte += BLKSIZE;”
Nem. A lo_byte inkrementálódi, a hi_byte pedig csak akkor, ha átvitel van (tehát csak minden 256-ik esetben).

Idézet:
„2. ha beolvastunk 32bájt adatot akkor a léptetésnél nem 33-tól kellene kezdenünk?”
Ha a sorszámozás 0-nál kezdődik, akkor a 32-es sorszámú már a 33-ik.
(#) don_peter válasza nedudgi hozzászólására (») Ápr 15, 2014 /
 
Tehát a címzés 16bites (2x8) vagy is hexánban lehet a legjobban megadni.
Ha 1bájtot akarok kiolvasni a memória elejéről akkor így nézne ki?
0x00FF ez 16bites bináris ábrázolásban : 00000000 11111111
A 00-tól FF-ig történik a beolvasás?

ReadAddr.word kezdő értéke 0x0000 lesz

Tehát ha jól értem akkor a
ReadAddr.hi_byte = 0x00; //magasabb helyi érték 15-8-ig
ReadAddr.lo_byte = 0xFF; //alacsonyabb helyi érték 7-0-ig
Lesz 1 bájt beolvasása esetén?

A lo_byte értéke léptetésnél emelkedik 1bájt hexális értékkel és a hi_byte pedig csak akkor emelkedik 1bájt hexális értékkel, ha megtörtént az 1bájt beolvasása.
Jól értelmezem?

Ez icserny-nek is válasz.
Illetve a sorszámozásnál benéztem a nullát így ez teljesen világossá vált.
A hozzászólás módosítva: Ápr 15, 2014
(#) don_peter válasza don_peter hozzászólására (») Ápr 15, 2014 /
 
Közben rájöttem, hogy teljesen rossza amit írtam és így továbbra sem értem miként történik a címezés.
A hozzászólás módosítva: Ápr 15, 2014
(#) nedudgi válasza don_peter hozzászólására (») Ápr 15, 2014 /
 
Pedig nem egészen rossz amit írtál.
A cím növekedése: 0x00FF, 0x0100, 0x0101 =255,256,257 stb.
(#) don_peter válasza nedudgi hozzászólására (») Ápr 15, 2014 /
 
Közben tovább agyaltam és rájöttem, hogy nekem nem kell megadnom mettől meddig akarok olvasni.
Nekem csak a kezdő címet kell megadjam (ahonnét kezdem az olvasást) ami 16bites, mind ezek után a for() ciklusban megadott ez esetben "BLKSIZE = 64" változó tartamáig fog kiolvasást végezni.
Tehát nekem csak a kezdő címet kell megadjam és, hogy hány bájtot akarok olvasni.. Ennyi.
A léptetés pedig annyi bájtonként történik amekkora szeletett egyszerre ki akarok olvasni.
Puff neki.
Jól mondom? Igazoljatok vissza nehogy rossz irányban kezdjek el haladni.
Köszi.
(#) nedudgi válasza don_peter hozzászólására (») Ápr 15, 2014 /
 
Valószínűleg így van, de én a C-hez nem értek. Ezt döntse el más.
(#) don_peter hozzászólása Ápr 15, 2014 /
 
Sraco, lenne egy buta kerdesem.
25lc640-es memoria ic-t rendeltem, es eszembe jutott a bovites lehetseges modjai.
Ezt vagy ezen ic-ket lehet ugy parhuzmba kotni, hogy a kapacitasuk osszeadodjon?
Tehat ne keljen chip select lab, cimzessel lehetne elerni a kovekezo 64KB memoria teruletet.
(#) nedudgi válasza don_peter hozzászólására (») Ápr 15, 2014 /
 
Nem lehet. Egyszerűb, bölcsebb megoldás szerintem félretenni, és egy olyan alkalommal felhasználni, amikor elég.
As SPI-vel szemben az I2C memória használata előnyösebb lehet, ha nem látjuk a fejlesztés végét. A szoftver minimális módosításával, buszrendszerű hardverfelépítéssel a kontroller több memóriacsipet tud kezelni. SPI esetén minden egyes, a buszra kötött periféria egy külön (engedélyező) lábat igényel a kontroller erőforrásaiból.
A hozzászólás módosítva: Ápr 15, 2014
(#) don_peter hozzászólása Ápr 15, 2014 /
 
Boven eleg a 64 csak erdekelt a dolog, ha netan logot terveznek a kesobiekben.
Akkor spi es chip select a megoldas.
Egyelore az I2C meg nem megy bar gondolom nem sokkal komplikaltabb mint a soros.

Mas: elmeletben egy 4*4-es gombsorral hogyan tudnek legegyszerubben szoveget kiirni egy lcd kijelzore?
Illetve azt utana valtozoba eltarolni?
Következő: »»   514 / 1216
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