A privát üzenet rendszerben karbantartásokat végzünk. Lassulások előfordulhatnak!
Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   13 / 153
(#) Algundy válasza icserny hozzászólására (») Márc 8, 2010 /
 
Az alábbi módon deklaráltam:
Ezt egy include fájlként hívom be a programomban

const unsigned char f8x6[ 256 ][ 6 ] =
{
{ 0x00,0x00,0x00,0x00,0x00,0x00 }, // ASCII - 0
{ 0x3E,0x5B,0x4F,0x5B,0x3E,0x00 }, // ASCII - 1
{ 0x3E,0x6B,0x4F,0x6B,0x3E,0x00 }, // ASCII - 2
{ 0x1C,0x3E,0x7C,0x3E,0x1C,0x00 }, // ASCII - 3
.
.
.
{ 0x00,0x3C,0x3C,0x3C,0x3C,0x00 }, // ASCII - 254
{ 0x00,0x00,0x00,0x00,0x00,0x00 } // ASCII - 255
};

Amíg csak kb. 20-30 karaktert deklarálok kiválóan működik, de több karakter esetén a fenti hibát adja ki.
(#) watt válasza Algundy hozzászólására (») Márc 8, 2010 /
 
Azt megnézted, hogy a fordító hová hozza létre az állományt? Nem véletlenül RAM-ba akarja? (Nézd meg amikor 20 karaktert hozol csak létre, hová kerül!)
(#) potyo válasza watt hozzászólására (») Márc 8, 2010 /
 
De, ez biztosan a RAM-ba akarja létrehozni. C18-ban a rom kulcsszót kell valami elé tenni, ha a ROM-ba akarjuk létrehozatni. Tehát:
  1. rom const unsigned charf8x6[256][6]=...


A const nemis lenne lényeges, de inkább maradjon ott, mert akkor a fordító szól, ha felül akarnánk írni. Már persze feltéve, hogy Algundy is a ROM területre akarta a tömböt létrehozni...
(#) Algundy hozzászólása Márc 8, 2010 /
 
Köszönöm a segítséget !

A rom-ot odaírtam és már működik is.
(#) bernardo hozzászólása Márc 10, 2010 /
 
Sziasztok!

Jo regen nem voltam itt, de most szukseg volna segitsegre. Remelem jo helyre irok, de ha nem kerlek szoljatok!

Az lenne a problemam, hogy az allamvizsgamon dolgozom es egy egyszeru menut kellene tervezzek, programozzak egy PIC uc-re, amire sok mas kozott egy LCD is van kotve. A problema az, h nem igazan tudom, h kellene megvalositani egy menut es abban a navigalast gombokkal, marmint tudom, h kellene egy allapotautomatat tervezni, de h konkretan hogyan kellene megoldani azt nem igazan tudom.
Varok minden hozzaszolast!

Udv.
Bernardo
(#) icserny válasza bernardo hozzászólására (») Márc 10, 2010 /
 
Kiindulásnak érdemes megnézni ezeket a hozzászólásokat:
Link1
Link2
Link3
(#) bernardo válasza icserny hozzászólására (») Márc 11, 2010 /
 
Koszi!
Tanulmanyozom a peldaprogramokat!
(#) watt hozzászólása Márc 21, 2010 /
 
Ha deklarálok egy strukúrát (mcc18, 18F) az eeprom címek nevesítéséhez, akkor a fordító nullákat tesz a tárba, de nekem FF kéne. Hogy lehetne egyszerűen megmondani a fordítónak, hogy oda FF-eket tegyen?
  1. rom struct st_Heti_Hofok_SP_Prog
  2.         {
  3.         unsigned char Nap_Ora;
  4.         unsigned char Perc;
  5.         unsigned char Szoba_HoSP;
  6.         };
  7. ......
  8. rom struct st_Heti_Hofok_SP_Prog   Hofok_Program_Tar[140];

Nem sok kedvem van több 100 FF-et beírni, remélem van más megoldás!
(#) icserny válasza watt hozzászólására (») Márc 21, 2010 /
 
rom struct st_Heti_Hofok_SP_Prog Hofok_Program_Tar[140]={0xff,0xff,0xff, .... ,0xff,0xff,0xff};

Így működik, csak rém gusztustalan: 3x140-szer leírni...
(#) szkrep hozzászólása Márc 21, 2010 /
 
Sziasztok!
Egy servo motorra tett távolságszenzorral szeretnék körbenézni.
Lefut amit írtam (48db mozgás történik, és van mérés is), de ahelyett, hogy szépen végig lépkedne, minden 9. mozgással a kezdő állásba tér vissza. Akárhogy számolgatok, elvileg nem csordul túl semmi.
Mi lehet a baj?

  1. #include <16f887.h>
  2. #device adc=10
  3. #fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP
  4. #use delay(clock=20000000)
  5.  
  6. #use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, stream=console) //vagy ez, vagy rádió!! (baud=1200)
  7.  
  8. #include <Math.h>
  9.  
  10.  
  11.  
  12. //Távolságmérés tetszőleges irányba=========================================
  13. int distance (int fok)
  14. {
  15.    int i,j;
  16.    long t,an_input;
  17.    float meres[5];
  18.  
  19.     t=600+(fok*29);          //bal végállás:600+(0*29)  jobb végállás: 600+(48*29)
  20.  
  21.    //Motor pozicionálás
  22.    for(i=0; i<=50; ++i)
  23.    {
  24.    output_high (PIN_C5);
  25.    delay_us (t);
  26.    output_low (PIN_C5);
  27.    delay_us (20000-t);
  28.    }
  29.  
  30.  
  31.  
  32.       //A mérés========================================================================
  33.       for(j=0; j<=4; ++j)               //5db mérést végzünk
  34.       {
  35.       set_adc_channel(0);
  36.       an_input=read_adc();
  37.       meres[j]=(7500/(an_input+20))-6;  // a kimeneti függvény linearizálása (->cm)
  38.       delay_ms(50);
  39.       }
  40.   return( floor ((meres[0]+meres[1]+meres[2]+meres[3]+meres[4])/5));   //az 5 mérés átlagát vesszük, a kapott értéket lefelé kerekítjük,
  41.                                                                        //így int8-at kapunk (->egyszerűbb küldeni rádión)
  42. }
  43.  
  44.  
  45. void main ()
  46. {
  47.   int k;
  48.  
  49.   setup_adc(ADC_CLOCK_INTERNAL);
  50.   setup_adc_ports (sAN0 | sAN1 | sAN2);
  51.   set_tris_b(0);                        
  52.   output_B(0);                    
  53.   set_tris_c(0);
  54.   output_C(0);
  55.   set_tris_d(0);
  56.   output_d(0);
  57.  
  58.   fprintf(console, "Uj meres\n\r");
  59.  
  60.    for(k=0; k<=48; ++k)     //hasraütésre 48 részre osztottam a servo 2 végállása közti utat  
  61.    {
  62.    fprintf(console, "%d: %d\n\r", k, distance(k));
  63.    }
  64.  
  65.   fprintf(console, "Meres vege.\n\r");
  66. }
(#) p_istvan válasza szkrep hozzászólására (») Márc 21, 2010 /
 
Szia!
Nem tudom milyen C fordítód van, de ha itt az "int" 8 bites, akkor a " t=600+(fok*29); " ből a fok*29 bizony túl fog csordulni éppen a 9. foknál!
A fok változót 16 bitesre deklaráld!
Vagy ha nem akkor: t = fok; t *= 29; t += 600;
(#) szkrep válasza p_istvan hozzászólására (») Márc 21, 2010 /
 
Jaigen Sosem veszek észre ilyeneket... Köszi!
(#) watt válasza icserny hozzászólására (») Márc 21, 2010 /
 
Igen, köszönöm, pont ettől akartam megmenekülni. Most úgy oldom meg, hogy az EEPROM-ot nem égetem be...
(#) icserny válasza watt hozzászólására (») Márc 21, 2010 /
 
Idézet:
„Most úgy oldom meg, hogy az EEPROM-ot nem égetem be...”
Igen, elég kézenfekvő megoldás, ha ki van törölve.
(#) poznamokus hozzászólása Ápr 6, 2010 /
 
Sziasztok!

18F4550-hez kérnék linkelési felvilágosítást c-ben. API-t akarok írni, amiben megvan minden függvény, saját könyvtárakban. Egyelőre tesztüzem -> 1 db main-es forrásfájl, 1 db header, ahol mindenféle konstans makró, és 1db egyéb forrásfájl, ahol a függvények vannak most. A headert include-olnám mind a main-es fájlba, mind az api forrásfájlba, de ekkor kiakad a fordító, mivel szerinte ugyanazt két helyen deklarálom. Hibaüzenet:
Configuration settings have been specified for address 0x00300000 in more than one object module. Found in './PIC18F4550_api.o', previously found in './proj1.o'

Gondolom kétszer linkeli a header fájlt, mivel ha az api-ból átrakok mindent a main-es forrásfájlba, gond nélkül fordul minden.
(#) potyo válasza poznamokus hozzászólására (») Ápr 6, 2010 /
 
Tegyél a header fájl elejére ilyet minden más elé:
#ifndef HEADER
#define HEADER

A legvégére pedig:
#endif
(#) icserny válasza poznamokus hozzászólására (») Ápr 6, 2010 /
 
Idézet:
Configuration settings have been specified for address 0x00300000 in more than one object”
A konfigurációs beállításokat csak a főprogramban add meg!
(#) icserny válasza potyo hozzászólására (») Ápr 6, 2010 /
 
Idézet:
„Tegyél a header fájl elejére ilyet minden más elé:”

Nem ez a baja, hanem az, hogy a konfigurációs beállításokat fölöslegesen befordította a PIC18F4550_api.o-ba is. Ez akkor is hiba, ha minden fordítási egységnél csak egyszer csatolja be.
(#) poznamokus válasza icserny hozzászólására (») Ápr 6, 2010 /
 
Köszi, így már értem, leválasztottam a headerből a configot, és működik.
(#) Bell hozzászólása Ápr 12, 2010 /
 
Sziasztok!
Egyszerű szkóp C nyelvű forrását szeretném lefordítani, de nem tudom, melyik fordító kell hozzá.
Ilyenek vannak a forrásban:
// More information on the circuit can be found at:
//http://www.semifluid.com/PIC18F2550_GLCD_Oscilloscope.php
#include <18F2550.h>
#device ADC=10
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(stream=PC, baud=115200, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#include
Az MCC18-nak nagyon nem jön be.
Köszönet!
(#) potyo válasza Bell hozzászólására (») Ápr 12, 2010 /
 
Ez CCS C lesz. Vanis témája, keress rá, abban nézz szét.
(#) vicsys válasza Bell hozzászólására (») Ápr 12, 2010 /
 
Ott van a .hex is...
(#) Bell válasza potyo hozzászólására (») Ápr 12, 2010 /
 
Köszi !
(#) Bell válasza vicsys hozzászólására (») Ápr 12, 2010 /
 
Persze, de pár dolgot meg kell benne változtatni.
(#) jeges hozzászólása Ápr 12, 2010 /
 
sziasztok!
kérdésem lenne hogy valaki foglalkozot e c# nyelven Modbus rs485 protokol
programozásal valaha usb komunikációra pl pic18f4550...2550 re?
(#) ssr81 válasza h482871 hozzászólására (») Ápr 16, 2010 /
 
Hi!
Most tanulok c-t.
a kkvk-on, de érdekel is. eddig gépész voltam, úgyhogy kicsit magas léc. Ha tudnál könyveket adni megköszönném.
Ha még megvannak.
Jó fénymásolásra is.
Nagy segítség lenne.

Előre is köszi a választ.

Kontroller programozása is érdekel, sőt az inkább.
Végül is az a végső cél.
Nékem az atmega 128 at ajánlották. de azzal foglalkozom, amihez van cucc.
előre is köszi a válaszod.
(#) icserny válasza ssr81 hozzászólására (») Ápr 16, 2010 /
 
A PIC kezdőknek topikot ajánlom figyelmedbe. Pl. Ezt, ezt és ezt a beírást.

Könyveket leghamarabb angolul találsz, de magyarul is van ez+az.

Végül, de nem utolsósorban:
Ismerkedés a PIC18 mikrovezérlőkkel: PICCOLO projekt
Mesterkedések PIC24 és dsPIC33 mikrovezérlőkkel: PIC-kwik projekt
(#) user hozzászólása Ápr 17, 2010 /
 
Sziasztok!

Egy mikroc-ben megírt programot szeretnék leszimulálni
pic simulator ide programmal.
Az egyszerűség kedvéért ledes villogtatással akartam kezdeni,de elakadtam. A kontroller egy pic16f877 4mhz-es xt oszcillátorral a projektben.

void main()
{
TRISB = 0 ; // set PORTB as OUTPUT

for(; // forever
{
PORTB = 0xff ; // turn all LEDs ON
Delay_ms(500) ; // wait 500 ms
PORTB = 0 ; // turn all LEDs OFF
Delay_ms(500) ; // wait 500 ms
}
}
A kód le is fordul,de miután a létrehozott hex fájlt megnyitom a pic simulátorban start után a teljes B port magasba megy és az összes led világít és nem villog.
Van valakinek elképzelése a hiba okáról?
(#) vicsys válasza user hozzászólására (») Ápr 17, 2010 /
 
A progit nem ismerem, de nem hexa-ban kellene megadni a TRIS-t? Valami ilyesmire gondolok:
  1. PORTB = 0x00;
  2. TRISB = 0x00;
  3. ...
(#) user válasza vicsys hozzászólására (») Ápr 17, 2010 /
 
Megadtam hex-ben is,de nem segített.
Minden kimenet magasba megy.
Következő: »»   13 / 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