Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   49 / 153
(#) netnet.hu hozzászólása Okt 21, 2011 /
 
Helló!

Van egy programom, ami elméletileg egy erősödő, majd egy elhalványodó led-et csinál.
Fel is erősödik, de sajna nem halványul el, hanem egy idő után elkezd vibrálni. Azt hiszem a kivonás környékén lehet valami gond.

Ha valakinek van tippe, azt szívesen fogadom.

  1. // PIC16F690 High Tech C PICkit 2 Low Pin Count Demo board
  2. #include <htc.h>
  3. #define _XTAL_FREQ 8000000
  4. // Config: ext reset, no code protect, no brownout detect, no watchdog,
  5. //         power-up timer enabled, 4MHz int clock
  6. __CONFIG(MCLRE_ON & CP_OFF & BOREN_OFF & WDTE_OFF & PWRTE_ON & FOSC_INTRCIO);
  7.  
  8. void main()
  9. {
  10. OSCCON = 0x72;  // INTRC_8Mhz //
  11. PORTC=0;   //Clear PortC
  12. TRISC=0x00;   //All PortC set to output
  13.  
  14. unsigned long kitoltes = 250;
  15. int irany = 0;
  16. unsigned long nulla = kitoltes;
  17. unsigned long egy = 0;
  18. unsigned long d1;
  19. unsigned long d2;
  20.  
  21. while(1)
  22. {
  23.  
  24. // A programban először 0-nak van egy magas értéke és egy-nek alacson
  25. // a felfutás alatt ez a kettő megváltozik
  26.  
  27.  
  28. RC3 = 0; // Kikapcsolom a ledet
  29. for (d1=0;d1<nulla;d1++)
  30. {
  31. __delay_us(1);
  32. }
  33. RC3 = 1; // Bekapcsolom a ledet
  34. for (d2=0;d2<egy;d2++)
  35. {
  36. __delay_us(1);
  37. }
  38.  
  39. if (nulla==1)
  40. {
  41.  irany = 1;
  42. }//if
  43. if (nulla=kitoltes)
  44. {
  45.  irany = 0;
  46. }//if
  47.  
  48. if (irany==0)
  49. {
  50. nulla--; //Levonok egyet nulla értékéből
  51. egy++; // Hozzáadok egyet egy értékéhez
  52. }
  53. else
  54. {
  55. nulla++; //Levonok egyet nulla értékéből
  56. egy--; // Hozzáadok egyet egy értékéhez
  57. }
  58. }//while
  59. }//main
(#) p_istvan válasza netnet.hu hozzászólására (») Okt 21, 2011 /
 
Szervusz!

Ezt szándékosan írtad így?
"if (nulla=kitoltes){"
Ez értékadás is egyben...
(#) netnet.hu hozzászólása Okt 21, 2011 /
 
Nem, feltételes módnak kéne lennie. dupla egyenlő kell??
(#) zenetom válasza netnet.hu hozzászólására (») Okt 21, 2011 /
 
Igen, így: if (nulla==kitoltes)
Feltételvizsgálatkor mindig dupla egyenlőség kell!
(#) netnet.hu válasza zenetom hozzászólására (») Okt 21, 2011 /
 
Köszönöm, ez volt az egyik hiba, illetve volt egy másik:
Az 53. sorban lévő else helyett egy if kellett és akkor már működik. Mondjuk nem értem, hogy az else-t miért nem ismerte fel.
(#) MPi-c válasza netnet.hu hozzászólására (») Okt 21, 2011 /
 
"else" után csak utasítás vagy utasítás blokk állhat, "else if" után lehet feltételvizsgálat...
(#) Takikaa hozzászólása Okt 23, 2011 /
 
Üdv!

Eddig assemlyben programoztam picet 18f45k20 at és most szeretnék rá állni c-nyelven is a konya féle pic c nyelven könyvet vettem meg és valamiért nem akar működni ha megpróbálnom lefordítani ezt a hibát kapom:

Debug build of project `C:\elso_pic\elso.mcp' failed.

Remélem tud valaki segíteni a header filet is meg a lkr-t is hozzá adtam .

Segítséget előre is köszi !!!!
(#) potyo válasza Takikaa hozzászólására (») Okt 23, 2011 /
 
Nem volt ott még valami hibaüzenet? Másold be az egész Build ablak tartalmát.
(#) watt válasza Takikaa hozzászólására (») Okt 24, 2011 /
 
Tedd fel mit szeretnél lefordítani!
(#) Takikaa válasza potyo hozzászólására (») Okt 24, 2011 /
 
Itt a tlejes hiba ablak :


----------------------------------------------------------------------
Debug build of project `D:\elektro\pic_programok\pic18_rogs\C PROGRAMOK\elso\elso.mcp' started.
Language tool versions: MPASMWIN.exe v5.43, mplink.exe v4.41, mplib.exe v4.41
Preprocessor symbol `__DEBUG' is defined.
Mon Oct 24 13:53:52 2011
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "D:\elektro\pic_programok\pic18_rogs\C PROGRAMOK\elso\elso.mcs".
Clean: Done.
Build aborted. The project contains no source files.
----------------------------------------------------------------------
Debug build of project `D:\elektro\pic_programok\pic18_rogs\C PROGRAMOK\elso\elso.mcp' failed.
Language tool versions: MPASMWIN.exe v5.43, mplink.exe v4.41, mplib.exe v4.41
Preprocessor symbol `__DEBUG' is defined.
Mon Oct 24 13:53:53 2011
----------------------------------------------------------------------
BUILD FAILED


Itt pedig a programom ,csak egy rövidke program:



#include

main ( ) // Főprogram kezdete
{
PORTD = 0xFF; // PORTD-be FF hexadecimális szám mozgatása
}

Köszi előre is a segítséget
(#) icserny válasza Takikaa hozzászólására (») Okt 24, 2011 /
 
C nyelvű programot nem az Assembler-rel kellene fordítani! Rosszul lett megválasztva a nyelvi eszköz (Language Tools).

A forráskód bemásolásakor használd a Kód gombot, mert most nem látható, hogy mit akartál becsatolni az #include direktívával!
(#) Takikaa hozzászólása Okt 24, 2011 /
 
Igen közben rájöttem és újra csináltam a projectet és most is hibát kapok most ezt :

----------------------------------------------------------------------
Debug build of project `D:\elektro\pic_programok\pic18_rogs\C PROGRAMOK\elso\elso.mcp' started.
Language tool versions: mpasmwin.exe v5.35, mplink.exe v4.35, mcc18.exe v3.35
Preprocessor symbol `__DEBUG' is defined.
Mon Oct 24 14:03:23 2011
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "D:\elektro\pic_programok\pic18_rogs\C PROGRAMOK\elso\elso.mcs".
Clean: Done.
Executing: "C:\MCC18\bin\mcc18.exe" -p=18F45K20 "main.c" -fo="main.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
MPLAB C18 v3.35 (evaluation)
Copyright 2000-2010 Microchip Technology Inc.
Days remaining until evaluation becomes feature limited: 57
D:\elektro\pic_programok\pic18_rogs\C PROGRAMOK\elso\main.c:4:Warning [2068] obsolete use of implicit 'int' detected
D:\elektro\pic_programok\pic18_rogs\C PROGRAMOK\elso\main.c:4:Warning [2103] default startup code expects main function declared as 'void main (void)'
Executing: "C:\MCC18\bin\mplink.exe" /l"C:\Program Files\Microchip\mplabc18\v3.40\lib" "C:\MCC18\bin\LKR\18f45k20_g.lkr" "main.o" /u_CRUNTIME /u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"elso.cof" /M"elso.map" /W
MPLINK 4.35, Linker
Copyright (c) 1998-2010 Microchip Technology Inc.
Error - could not find file 'c018i.o'.
Errors : 1

Link step failed.
----------------------------------------------------------------------
Debug build of project `D:\elektro\pic_programok\pic18_rogs\C PROGRAMOK\elso\elso.mcp' failed.
Language tool versions: mpasmwin.exe v5.35, mplink.exe v4.35, mcc18.exe v3.35
Preprocessor symbol `__DEBUG' is defined.
Mon Oct 24 14:03:27 2011
----------------------------------------------------------------------
BUILD FAILED

Itt a program :

#include

main ( ) // Főprogram kezdete
{
PORTD = 0xFF; // PORTD-be FF hexadecimális szám mozgatása
}
(#) Takikaa válasza Takikaa hozzászólására (») Okt 24, 2011 /
 
nem hiszem el most sincs itt az include pedig mikor bemásoltam még ott volt hogy p18f45k20.h
(#) vicsys válasza Takikaa hozzászólására (») Okt 24, 2011 /
 
Talán ha használnád a KÓD gombot a kódrészlet beillesztéséhez. Az asm feliratot meg írd át a TAG-ben C-re.
(#) Takikaa válasza vicsys hozzászólására (») Okt 24, 2011 /
 
Oké eddig nem tudtam mi az, és mi az a TAG?
(#) icserny válasza Takikaa hozzászólására (») Okt 24, 2011 / 2
 
Nincsenek beállítva megfelelően az elérési útvonalak!

C program és a keretéül szolgáló MPLAB projekt létrehozásának lépéseit az MPLAB IDE v8.15a változatával én az alábbiak szerint hajtom végre:

1. A Project menüben válasszuk a Project Wizard-ot, majd a felbukkanó ablakban kattintsunk a Tovább gombra!
2. A Device mezőben válasszuk ki a PIC mikrovezérlő típusát, majd kattintsunk a Tovább gombra!
3. Az Active Toolsuite mezőben válasszuk a "Microchip C18 Toolsuite"-ot, majd Tovább!
4. A Create New Project lapon kattintsunk a Browse (tallózás) gombra, majd keressünk egy alkalmas helyet az új projektnek (pl. C:\PIC18\) és adjunk nevet az új projektnek (pl. ledflash)! Tovább...
5. Nem adunk hozzá forrásállományokat! Tovább...
6. Kattintsunk a Befejezés gombra!

7. A program beírásához a Project menüben válasszuk ki az "Add New File to Project" (új állomány hozzáadása a projekthez) menüpontot, és a felbukkanó ablakban adjuk meg az elérési útvonalat, valamint az új forrásállomány nevét (például legyen a neve ledflash.c, s helyezzük el a C:\PIC18 mappában). Írjuk be a programot!

8. A sikeres fordításhoz az elérési útvonalakat is be kell állítani. A Project menü Build Options -> Project (fordítási opciók az adott projektre vonatkozóan) menüpontban a felugró ablak Directories (Könyvtárak) fülre kattintva a legördülő listában válasszuk ki az Include Search Path (Becsatolások keresési útvonala) nevet, s a New gombra kattintva hozzunk létre egy új bejegyzést (a már meglevő bejegyzést dupla kattintással tehetjük szerkeszthetővé). Ez kell C:\Program Files\Microchip\MCC18\h (feltéve, ha ez a telepítési útvonalunk a C18 fordítóhoz).

Hasonlóan állíthatjuk be a Library Search Path (programkönyvtárak keresési útvonala) esetében is az elérési útvonalat: C:\Program Files\Microchip\MCC18\lib (vagy ahová telepítettük). A Linker Script Path (Linker állományok kereséséi útvonala) most üresen maradhat, hiszen saját linker állományt használunk, megadott helyről.

Figyelem! Mindig ügyeljünk rá, hogy a fordítás megkezdése előtt az MPLAB IDE menüjében a Release (kiadás) módot válasszük ki! A Debug (nyomkövetés) módban lefordított programok a hardveres nyomkövető eszköz (pl. PICkit2, ICD2 stb.) csatlakoztatása nélkül nem fog helyesen működni!

A Projects menüben a Build All vagy Make menüpontra kattintva elindíthatjuk a fordítást. A Build Succeeded üzenet sikeres fordítást jelez. Minden más esetben valami hiba van, s a fordító vagy a linker az Output ablakban kiírja, hogy mi a baja. Az esetleges Warning kezdetű sorok nem hibát jelentenek, csak figyelmeztetnek valamire.
(#) Takikaa válasza icserny hozzászólására (») Okt 24, 2011 /
 
Köszi szépen a segítséget sikerült beállítani !
(#) vicsys válasza Takikaa hozzászólására (») Okt 24, 2011 /
 
A hozzászólás írása ablakban megtalálod a kód gombot. Utána már látod a szögletes zárójelben a szöveget. Na, az tag.
(#) Takikaa válasza vicsys hozzászólására (») Okt 24, 2011 /
 
Közben már megtaláltam köszi !
(#) netnet.hu hozzászólása Okt 24, 2011 /
 
Helló!
Ma kezdek 18f14k22-el.
Van itt egy csomó-csomó dolog, amit nem értek, egyelőre csak lefuttattam egy próbát:
  1. /*
  2.  
  3.  test for pic18F14K22
  4. */
  5.  
  6. #include <p18f14k22.h>
  7.  
  8. //
  9. #pragma config FOSC = IRCCLKOUT   //   Internal oscillator block, CLKOUT function on RA6, port function on RA7
  10. #pragma config PLLEN = OFF// PLL is under software control
  11. #pragma config PCLKEN = ON   // Primary clock enabled
  12. #pragma config FCMEN = ON      //   Fail-Safe Clock Monitor enabled
  13. #pragma config  IESO = OFF       //    Oscillator Switchover mode disabled
  14.  
  15. #pragma config BOREN = SBORDIS   //   Brown-out Reset enabled in hardware only (SBOREN is disabled)
  16. #pragma config BORV = 30       //     VBOR set to 3 V nominal
  17. #pragma config MCLRE = ON    //       MCLR pin enabled, RA3 input pin disabled
  18.  
  19. #pragma config HFOFST = ON  //  HF-INTOSC starts clocking the CPU without waiting for the oscillator to stablize.
  20. #pragma config STVREN = ON  //        Stack full/underflow will cause Reset
  21. #pragma config LVP = OFF     //        Single-Supply ICSP disabled
  22. #pragma config XINST = OFF  //        Instruction set extension and Indexed Addressing mode enabled
  23.  
  24. #pragma config WDTPS = 1024  //  Watchdog Timer Postscale Select bits: 1:1024
  25.  
  26. #pragma config WDTEN = ON  //        WDT on, ignore SWDTEN bit of the WDTCON register
  27.  
  28. #pragma config PWRTEN = ON       //     PWRT enabled
  29.  
  30. #pragma config CPB = ON    //     Boot block (000000-0007FFh) not code-protected
  31. #pragma config CP0 = ON    //     Block 0 (000800-001FFFh) :  code-protected
  32. #pragma config CP1 = ON    //    Block 1 (002000-003FFFh)  code-protected
  33. #pragma config WRT0 = ON  //   Block 0 (000800-001FFFh)  write-protected
  34. #pragma config WRT1 = ON  //    Block 1 (002000-003FFFh)  write-protected
  35. #pragma config WRTB = ON //   Boot block (000000-0007FFh)  write-protected
  36.  
  37. #pragma config EBTR0 = OFF //    Block 0 (000800-001FFFh) not protected from table reads executed in other blocks
  38. #pragma config EBTR1 = OFF //    Block 1 (002000-003FFFh) not protected from table reads executed in other blocks
  39. #pragma config EBTRB = OFF //    Boot block (000000-0007FFh) not protected from table reads executed in other blocks
  40. #pragma config CPD = OFF   //     Data EEPROM not code-protected
  41. #pragma config WRTD = OFF //    Data EEPROM not write-protected
  42.  
  43.  
  44. //
  45. #pragma code InterruptVectorHigh = 0x08
  46. void  InterruptVectorHigh (void)
  47. {
  48.   _asm
  49. //    goto ISR_High //jump to interrupt routine
  50. RETFIE1// return from interrupt, update reg from shadow regs
  51.   _endasm
  52. }
  53.  
  54. //
  55. #pragma code  InterruptVectorLow=0x18
  56. void interrupt_at_low_vector(void)
  57. {
  58.   _asm
  59. //    goto ISR_Low //jump to interrupt routine
  60. RETFIE0// return from interrupt without update reg from shadow regs
  61.   _endasm
  62. }
  63.  
  64. //
  65.  
  66. #pragma code
  67.  
  68.  
  69. void main (void)
  70. {
  71. LATC=0u;
  72. TRISC=0u;// all output
  73.  
  74. OSCTUNE=0b10000000;    // 31K25Hz, PLL disable, zero adjust
  75. OSCCON=0b01100000;    // real sleep, 8MHz int osc, pri clock
  76. OSCCON2=0b00000100;// pri osc ON
  77.  
  78.  
  79. while(1)
  80. {
  81. ClrWdt();
  82. LATC=1u;
  83. Nop();
  84. LATC=0u;
  85. Nop();
  86.  }
  87.  
  88.  
  89. //   End
  90. }
  91. //


Kérdések:
Mi az a PLL és hogyan lesz tőle gyorsabb a PIC? Az instrukciók futtatása lesz gyorsabb?

A WDTPS = 1024 azt jelenti, hogy minden 1024. instrukció után fog resetelni a WDT?

LVP = OFF // Single-Supply ICSP disabled
Ez mibn bfojásolja a felprogramozást üzem közben?

Ezzel tudom menet közben változtatni a frekvenciát? OSCCON=0b01100000; // real sleep, 8MHz int osc, pri clock

És a PLL-t be tudom menet közben kapcsolni?

Az egész config-ot be tudom sűríteni egyetlen sorba &-ekkel?

Köszönöm
(#) vilmosd válasza netnet.hu hozzászólására (») Okt 25, 2011 /
 
Ezekre a kerdesekre az adatlap tanulmanyozasa ad kimerito valaszt, ezek nem C kerdesek. A Config bitek jelentese az adatlapban vanak leirva. A PLL nem mukodik csak kulso oszci, es a belso oszci 8 es 16 MHz beallitasnal. a PLL tulajdonkeppen egy frekvecia tobbszorozo (jelen esetben csak 4x), am bizosithat magasabb frekvenciat mint az alkalmazott oszcillator frekvencia. Tehat 4-16 MHz oszci frekinel tudod jaratni a PIC-et 16-64 MHz kozott. A tobbi kerdest is jol megvalaszolja az adatlap. Erdemes olvasgatni.
(#) Nanu-nanu hozzászólása Okt 30, 2011 /
 
Hello! Egy kis segítséget szeretnék kérni. Egy LCD kijelzővel küzdök, de sehogy sem akar összejönni. Így van kötve:
D4: RD0
D5: RD1
D6: RD2
D7: RD3
E: RC5
RS: RC4
Tud valaki erre vonatkozóan egy üzemképes forráskódot küldeni? Annyi elég, hogy egy szó (pl.:hello) megjelenik a kijelzőn.
Régen programoztam már C nyelven, sajnos sokat felejtettem. Előre is köszönöm!
(#) röntgen válasza Nanu-nanu hozzászólására (») Okt 30, 2011 /
 
Milyen C fejlesztő környezetet használsz?
(#) vicsys válasza Nanu-nanu hozzászólására (») Okt 30, 2011 /
 
Shazbot Mork! Dupla regisztráció, Jack Byrnes? Ejnye!
(#) Nanu-nanu hozzászólása Okt 30, 2011 /
 
Micro C. Miért lennék valakinek a dupla regisztrációja????
(#) vicsys válasza Nanu-nanu hozzászólására (») Okt 30, 2011 /
 
Bővebben: Link
és még az IP címetek is egyezik... Tán rémeket látok? Ha igen, elnézést kérek!!
(#) Nanu-nanu hozzászólása Okt 30, 2011 /
 
Nem látsz rémeket, valóban egy helyen lakunk. De most az eredeti kérdésemre szeretnék értelmes választ kapni.
(#) Moderátor hozzászólása Nanu-nanu hozzászólására (») Okt 30, 2011
 
Véletlenül egy az IP.
Véletlenül egy helyen laktok.
Véletlenül pont egy időben LCD meghajtási problémátok van.
Véletlenül pont a HE kértek segítséget, véletlenül ugyanakkor.
Véletlenül én ezt nem hiszem el.
És még követelőző, rendre utasító a hangnem is.
(#) röntgen válasza Nanu-nanu hozzászólására (») Okt 30, 2011 /
 
Ha megnézed a példa projektjeit, akkor szerintem megtalálod az ihletet hozzá. Ugyanis jól használható az LCD example.
(#) Lucifer hozzászólása Okt 30, 2011 /
 
Egy AVR-es gcc-t használó projektet szeretnék migrálni PIC18F mcc18 alá.

A következő a bajom:
AVR-hez megvannak az alábbi makróim, amik mennek rendesen:
  1. // bit manipulation macros
  2.  
  3. // signals has to be defined in this way: #define LED C,1
  4.  
  5. // usage: sbi(PORT,LED1) or setting data direction: sbi(DDR,LED1)
  6.  
  7. // _BV(a) is a macro which returns the value corresponding to 2 to the power 'a'.
  8.  
  9. #define sbi_(what,x,y) what##x |= _BV(what##x##y) //set bit - using bitwise OR operator
  10.  
  11. #define cbi_(what,x,y) what##x &= ~(_BV(what##x##y)) //clear bit - using bitwise AND operator
  12.  
  13. #define tbi_(what,x,y) what##x ^= _BV(what##x##y) //toggle bit - using bitwise XOR operator
  14.  
  15. #define is_high_(x,y) (PIN##x & _BV(PIN##x##y)) == _BV(PIN##x##y) //check if the y'th bit of register 'x' is high ... test if its AND with 1 is 1
  16.  
  17. #define is_high(p) is_high_(p)
  18.  
  19. #define sbi(what,p) sbi_(what,p)
  20.  
  21. #define cbi(what,p) cbi_(what,p)
  22.  
  23. #define tbi(what,p) tbi_(what,p)
  24.  
  25.  
  26.  
  27. #define set_in_(x,y) DDR##x |= _BV(DD##x##y)
  28.  
  29. #define set_out_(x,y) DDR##x |= _BV(DD##x##y)
  30.  
  31. #define set_in(p) set_in_(p)
  32.  
  33. #define set_out(p) set_out_(p)
  34.  
  35. ...
  36. #define SPI_SSB,2// SPI port
  37.  
  38. #define SPI_SCKB,3// SPI port
  39.  
  40. #define SPI_MOSIB,4// SPI port
  41.  
  42. #define SPI_MISOB,5// SPI port
  43. ...
  44. sbi(PORT, SPI_MISO);


Viszont mcc18 kiakad rájuk. Mondván, hogy macro
  1. 'set_out_' expects 2 arguments, but only 1 found


Annyi lenne a célom, hogy egy kódbázisból tudjak a makenak átadott argumentumok segítségével különböző hardwerekre forgatni. Mindezt úgy, hogy van minden hardwerhez egy adott headerfájl, amit a -D-vel átadott konstans alapján választ ki. Ebben lennének felsorolva a be kimenetek a fentebb említett vagy hasonló formában.
Következő: »»   49 / 153
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