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   526 / 1210
(#) mrobi válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
Milyen hibaüzenetet ír ki?
(#) usane válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
Idézet:
„Próbáltam Assembly-ben és C-ben is”

Ezt nem értem, ugyanis a cikkben csak C kód van ASM nincs.
És sokat segítene a hibaüzenet is.
(#) erik1193 válasza mrobi hozzászólására (») Máj 20, 2014 /
 
ezt írja :/
(#) erik1193 válasza usane hozzászólására (») Máj 20, 2014 /
 
Assembly kódot máshonnan szedtem,de bezártam,és sajnos nem találom,a funkciója elvileg ugyan ez volt
(#) usane válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
Azt hiszem elég egyértelmű a hiva. Nézd azt a 2 errort.
A cikkben pic16f876-ra van írva te meg 16F690-re fordítottad.
A 16F690-nek nincs LVP configja, és B0 kimenete sem a B porton.
töröld a NOLVP-t a fuses végéről, és a B0-t írd át olyan port kimenetre amilyen van a PIC-en:
8. oldal
A hozzászólás módosítva: Máj 20, 2014
(#) erik1193 válasza usane hozzászólására (») Máj 20, 2014 /
 
Mit lehet tenni ilyenkor? Az egyetlen ami eszembe jutott,csak az volt hogy kicseréljem a header fájlt.
(#) mrobi válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
Mint már említették az LVP-t vedd ki. A PIN_B0 helyére pedig írj be RB0-át!
(#) usane válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
Van neki RA0-RA5, RB4-RB7, RC0-RC7 lábai, és olyat válassz ahol nincs analóg funkció.
RA5, RB6,RB7,RC4 vagy RC5.
Nem RB0-t. Mondtam hogy nincs B0 portja.
Itt soroltam miket irhat. Pl: PIN_B6
A hozzászólás módosítva: Máj 20, 2014
(#) erik1193 válasza usane hozzászólására (») Máj 20, 2014 /
 
Ezek alapján siekrült végre lefordítani,és beégetni,köszönöm szépen de a LED csak nem villog,még csak nem is világít :/

A demo panelon a C-porton vannak a LED-ek, azt is írtam be.
A hozzászólás módosítva: Máj 20, 2014
(#) usane válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
Azon a lábon van a LED amit beírtál?
Ha RB6 akkor a 11-es láb.
A hozzászólás módosítva: Máj 20, 2014
(#) erik1193 válasza usane hozzászólására (») Máj 20, 2014 /
 
RC2-re megy egy LED,azt írtam be, így:

  1. #include <16f690.h>
  2. #zero_ram
  3. #fuses HS,NOWDT,NOPROTECT,NOPUT,BROWNOUT
  4. #use delay(clock=12000000)
  5. main(){
  6.         while(true){
  7.                 delay_ms(1000);
  8.                 output_toggle(PIN_C2);
  9.         }


(de így sem jó :/ )
A hozzászólás módosítva: Máj 20, 2014
(#) vilmosd válasza CHrissDock hozzászólására (») Máj 20, 2014 /
 
Idézet:
„Valaki tudna nekem segíteni egy asm fájl át írásában ami jelenleg közös anódos 7 szegmenses kijelzőhöz van és nekem közös katódoshoz kellene.....?”
Ez a kapcsolas kozos katodos kijelzot hasznal.
Ps: Latod ha eloszor felraksz minden infot akkor nem ket nap a megoldas.
(#) usane válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
Nos, akkor vissza a kezdetekhez.
Ahhoz, hogy egy mikrokontrollerben menjen a szoftver, kel neki táp, ez ugye gondolom be van állítva, hogy a PICkit adja neki a tápot, ha fel tudtad programozni. Ezen kívül kell neki órajel.
Nem ismerem ezt a demópanelt, de kép alapján nem látok rajta kvarcot, a programban meg az van bállítva "HS".
Azt is át kell állítani ha igí akarod kipróbálni. HS helyett INTOSCIO, és az OSCCON regiszterben is be kell állítani az órajelet. Viszont az max 8MHz, akkor a delay függvény órajele sem stimmel.
CCS-t mindjárt megnézem, hogy állítja az órajelet.
(#) erik1193 válasza usane hozzászólására (») Máj 20, 2014 /
 
Rendben,köszönöm
(#) vilmosd válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
  1. #fuses HS,NOWDT,NOPROTECT,NOPUT,BROWNOUT
  2. #use delay(clock=12000000)

Milyen oszcit hasznalsz? A programban 12 MHz kvarc van irva, tehat ezt kell haszalni. Probald meg atirni erre:
  1. #fuses INTRC_IO,NOWDT,NOPROTECT,NOPUT,BROWNOUT
  2. #use delay(clock=4000000)
(#) usane válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
  1. #include <16f690.h>
  2.     #zero_ram
  3.     #fuses INTRC_IO,NOWDT,NOPROTECT,NOPUT,BROWNOUT
  4.     #use delay(clock=8000000)
  5.     main(){
  6.             setup_oscillator(OSC_8MHZ);
  7.             while(true){
  8.                     delay_ms(1000);
  9.                     output_toggle(PIN_C2);
  10.             }
  11.     }


Nincs CCS-em feltelepítve, de remélem így jó lesz.
A hozzászólás módosítva: Máj 20, 2014
(#) erik1193 válasza usane hozzászólására (») Máj 20, 2014 /
 
sajnos nem :/

Idézet:
„Executing: "C:\Program Files\PICC\Ccsc.exe" "main.c" +FM +DF +LN +T -A +M +Z +Y=9 +EA
*** Error 79 "main.c" Line 10(13,14): Expect }
1 Errors, 0 Warnings.
Build Failed.
BUILD FAILED: Tue May 20 13:06:20 2014





Az előbb történt egy kis elírás,módosítva
A hozzászólás módosítva: Máj 20, 2014
(#) usane válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
Bocs, csak másoltam. javítva.
(#) erik1193 válasza usane hozzászólására (») Máj 20, 2014 /
 
így már lefordítja,de beégetés után most sincsen eredmény :/
(#) usane válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
Mit mondtam? Olyan port kell amin nincs analóg funkció. Ezeken van. Na sebaj, kikapcsoljuk.
  1. #include <16f690.h>
  2.         #zero_ram
  3.         #fuses INTRC_IO,NOWDT,NOPROTECT,NOPUT,BROWNOUT
  4.         #use delay(clock=8000000)
  5.         main(){
  6.                 setup_oscillator(OSC_8MHZ);
  7.                 setup_adc( ADC_OFF );
  8.                 while(true){
  9.                         delay_ms(1000);
  10.                         output_toggle(PIN_C2);
  11.                 }
  12.         }
(#) erik1193 válasza erik1193 hozzászólására (») Máj 20, 2014 /
 
működik,én gépeltem el a programot,köszönöm szépen a segítséget!
(#) mrobi válasza usane hozzászólására (») Máj 20, 2014 /
 
Bocsánat a félre vezetésért. Én csak a header fájlt néztem meg, és abban definiálva van a teljes B port. A lábkiosztását nem néztem meg.
(#) usane válasza mrobi hozzászólására (») Máj 20, 2014 /
 
Semmi gond, viszont nem lehet definiálva, mert akkor nem hiányolta volna a fordító.
Vagy lehet, hogy a teljes port az van, de bitenként nincs. Nem tudom megnézni. nincs ccs könyvtáram. C18-at meg xc8-at haszálok abban csak RB4-től RB7-ig van.
(#) mrobi válasza usane hozzászólására (») Máj 20, 2014 /
 
Félig meddig igazad van. A PORTB-n mind a nyolc bit definiálva van. A TRISB-n csak a felső négy bit. Gondolom innen tudta a fordító.
(#) KaiserA válasza Hp41C hozzászólására (») Máj 20, 2014 /
 
Szia!

Addig eljutottam már, mikor alapesetben, rátettem a delejt a panelra, akkor az LCD kiejlző felső sorában megjelentek teli karakterek, és addig eljutottam hogy ezeket siekrült eltünteni, de még mindig nem szólalt meg a kijelző. Az aláábi módon néz ki az LCD.C fájlom.
  1. #include "LCD.h"
  2. #include <plib.h>
  3.  
  4. #define RS LATFbits.LATF1
  5. //#define RW LATGbits.LATG13
  6. #define EN LATEbits.LATE0
  7.  
  8. #define DB0 LATFbits.LATF0
  9. #define DB1 LATDbits.LATD7
  10. #define DB2 LATDbits.LATD6
  11. #define DB3 LATDbits.LATD5
  12. #define DB4 LATDbits.LATD4
  13. #define DB5 LATDbits.LATD3
  14. #define DB6 LATDbits.LATD2
  15. #define DB7 LATDbits.LATD1
  16.  
  17. void setupLCD()
  18. {
  19.    
  20.     //Register pins
  21.     TRISFbits.TRISF1 = 0;
  22.     //TRISGbits.TRISG13 = 0;
  23.     TRISEbits.TRISE0 = 0;
  24.  
  25.     //Data pins
  26.     TRISFbits.TRISF0 = 0;
  27.     TRISDbits.TRISD1 = 0;
  28.     TRISDbits.TRISD2 = 0;
  29.     TRISDbits.TRISD3 = 0;
  30.     TRISDbits.TRISD4 = 0;
  31.     TRISDbits.TRISD5 = 0;
  32.     TRISDbits.TRISD6 = 0;
  33.     TRISDbits.TRISD7 = 0;
  34.    
  35.     //WAIT 20ns
  36.     wait();
  37.  
  38.     EN = 0;
  39.  
  40.     LCDcommand(0, 0,0,1,1,1,0,0,0); //initialize 2 lines
  41.  
  42.     //LCDcommand(0, 0,0,1,1,0,0,0,0);
  43.     //LCDcommand(0, 0,0,1,1,0,0,0,0);
  44.     //LCDcommand(0, 0,0,1,1,1,0,0,0);
  45.     //LCDcommand(0, 0,0,0,0,1,0,0,0); //blank screen without clearing
  46.  
  47.     LCDcommand(0, 0,0,0,0,0,0,0,1); //clear screen
  48.     LCDcommand(0, 0,0,0,0,0,1,1,0); //cursor moves right
  49.  
  50.     LCDcommand(0, 0,0,0,0,1,1,0,0); //restore screen
  51.    
  52.     //LCDWriteString("Hello", 1, 1);
  53.     //LCDWriteString("World!", 2, 1);
  54.     //LCDClear(0);
  55.     //LCDWriteString("a", 1, 1);
  56.     //LCDWriteString("b", 2, 1);
  57. }
  58.  
  59. void LCDWriteChar(char c)
  60. {
  61.     LCDcommand(1, c>>7&1, c>>6&1, c>>5&1, c>>4&1, c>>3&1, c>>2&1, c>>1&1, c&1);
  62. }
  63.  
  64. void LCDWriteString(char *str, int row, int col)
  65. {
  66.     row--;
  67.     col--;
  68.     LCDcommand(0,1,row,0,0,col>>3&1,col>>2&1,col>>1&1,col&1);
  69.  
  70.     while(*str)
  71.     {
  72.         LCDWriteChar(*str);
  73.         str++;
  74.     }
  75. }
  76.  
  77. void LCDClear(int line)
  78. {
  79.     switch(line)
  80.     {
  81.         case 1:
  82.             LCDWriteString("                ", 1, 1);
  83.             break;
  84.         case 2:
  85.             LCDWriteString("                ", 2, 1);
  86.             break;
  87.         default:
  88.             LCDcommand(0,0,0,0,0,0,0,0,1);
  89.     }
  90. }
  91.  
  92. void LCDcommand(int command, int d7, int d6, int d5, int d4, int d3, int d2, int d1, int f1)
  93. {
  94.     //0 for command, 1 for data.
  95.     RS = command;
  96.    
  97.     DB0 = f1;
  98.     DB1 = d7;
  99.     DB2 = d6;
  100.     DB3 = d5;
  101.     DB4 = d4;
  102.     DB5 = d3;
  103.     DB6 = d2;
  104.     DB7 = d1;
  105.  
  106.     EN = 1;
  107.  
  108.     wait();
  109.  
  110.     EN = 0;
  111.  
  112.     wait();
  113.  
  114. }
  115.  
  116. void wait()
  117. {
  118.     int i = 0;
  119.     for (i; i<10000; i++)
  120.     {
  121.     }
  122. }


A program init és main függvénye pedig így:

  1. int init()
  2.                         {
  3.  
  4.  
  5.                     //JTAG kikapcsolás, mert 64 tűs IC-nél resetkor a RB10-RB14 lábak JTAG- hoz lesznek konfigolva nem rendes IO-k
  6.                     mJTAGPortEnable(0);
  7.                
  8.                     //LED1 TRIS (lásd HardwareProfile.h)
  9.                     mPORTESetPinsDigitalOut(BIT_6);
  10.                     LED_OFF(LED1);
  11.                         mPORTESetPinsDigitalOut(BIT_5);
  12.                     LED_OFF(LED2);
  13.                         mPORTESetPinsDigitalOut(BIT_7);
  14.                         LED_OFF(LED3);
  15.  
  16.                         //GOMB
  17.                         mPORTESetPinsDigitalIn(BIT_3)
  18.        
  19.                                 mPORTFSetPinsDigitalIn(BIT_1);
  20. //mPORTFClearBits(BIT_1);
  21.         mPORTDSetPinsDigitalIn(BIT_1);
  22. //mPORTDClearBits(BIT_1);
  23.         mPORTDSetPinsDigitalIn(BIT_2);
  24. //mPORTDClearBits(BIT_2);
  25.         mPORTDSetPinsDigitalIn(BIT_3);
  26. //mPORTDClearBits(BIT_3);
  27.         mPORTFSetPinsDigitalIn(BIT_4);
  28. //mPORTDClearBits(BIT_4);
  29.         mPORTDSetPinsDigitalIn(BIT_5);
  30. //mPORTDClearBits(BIT_5);
  31.         mPORTDSetPinsDigitalIn(BIT_6);
  32. //mPORTDClearBits(BIT_6);
  33.         mPORTDSetPinsDigitalIn(BIT_7);
  34. //mPORTDClearBits(BIT_7);
  35.         mPORTFSetPinsDigitalIn(BIT_0);
  36. //mPORTDClearBits(BIT_0);
  37.         mPORTESetPinsDigitalIn(BIT_0);
  38. //mPORTEClearBits(BIT_0);
  39.        
  40.                         }
  41.  
  42.  
  43. //MAIN
  44.  
  45. int main()
  46.                 {
  47.                 //SYSTEMConfigPerformance(SYS_FREQ);
  48.                 SYSTEMConfig(SYS_FREQ, SYS_CFG_ALL); //Inicializalas
  49.                  
  50.        
  51.  
  52.                     init();
  53.                         setupLCD();
  54.        
  55.  
  56.  
  57.                 while(1)
  58.                                 {
  59.                                        
  60.                                                        
  61.                                                 LED_TOGGLE(LED1);
  62.                                         DelayMS(330);
  63.                                                 LED_TOGGLE(LED2);
  64.                                         DelayMS(20);
  65.                                                 LED_TOGGLE(LED3);
  66.                                                 DelayMS(20);
  67.  
  68.                                                 LCDWriteString(" VALAMI JELENJEN MEG ", 1, 1);
  69.                        
  70.                                        
  71.                                                 }
  72.  
  73.  
  74.                                 }


Az a baj, hogy a kijelzpn még mindig nem jelenik meg semmi. Addig végre eljutottam hogy a kjelző legalább üres. Tudom ,hogy már mindnet leírtál, csak nem vagyok vmi ultra jártas a programozásban. Ránézésre, tudsz vmit segíteni, hogy a z LCD.c kódban még mit kellene csinálni?
A hozzászólás módosítva: Máj 20, 2014
(#) usane válasza KaiserA hozzászólására (») Máj 20, 2014 / 1
 
Nem látom, hogy ezeket az időzítéseket betartottad volna. Az írásnál és olvasásnál is vannak várakozási idők amiket nem ártana betartani.
(#) Hp41C válasza KaiserA hozzászólására (») Máj 20, 2014 / 1
 
Nem azt csinálod, amit írtam...
(#) Birs Alma hozzászólása Máj 20, 2014 /
 
Sziasztok!
Szeretnék némi segítséget kérni. A PIC egy lábán kellene észlelnem, hogy egy vezeték feszültség alatt van-e. A vezetékben a feszültség 18 és 6 volt között változhat, de pusztán azt kellene érzékelnem, hogy nem 0. Hogyan kellene a vezetéket a PIC lábára kötnöm? Köszönöm. L.
(#) mps válasza Birs Alma hozzászólására (») Máj 20, 2014 /
 
Pl. egy ellenálláson át, amit megfogsz egy 4,7V-os zenerrel.
(#) Birs Alma válasza mps hozzászólására (») Máj 20, 2014 /
 
Az mit jelent, hogy "megfogsz"?
Következő: »»   526 / 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