Keresés: 
 Bejelentkezés
Nick:
 
Jelszó:
 
 
 
   
» Elfelejtettem a jelszavamat :'(
» Regisztráció
 Fórum témák
» Több téma
 Frissek
RSS hírforrások
  Hírek.rss
  Fórum.rss
  2012. Máj, 24. Csü
3:31:57
  Jelenleg 59 fő olvassa az oldalt
Fórum » Pontra menő témák » PIC programozása C nyelven, C-Compiler »
PIC programozása C nyelven, C-Compiler  
Témaindító: histu1985, idő: Feb 11, 2006
Témakörök
Mikroprocesszorok » Microchip processzorok
Lapozás Méret:     54 / 58     
(#1148410) speeedfire Válasz • Jan 23, 2012
Meglehet oldani egy rotatry encoderrel azt, hogy:
1. ha tekerem akkor hangerőt szabályoz
2. ha megnyomom a középső gombot akkor mute
3. ha x mp-ig nyomom a középső gombot stand by


(#1148483) kissi válasza speeedfire hozzászólására (#1148410) Válasz • Jan 23, 2012
Persze, csak szoftver kérdése

Mi a kérdésed ?

Steve

(#1148489) trudnai válasza speeedfire hozzászólására (#1148410) Válasz • Jan 23, 2012
Igen, meg lehet oldani vele...

(#1148521) speeedfire Válasz • Jan 24, 2012
Köszi, mindkettőtöknek.
Egyelőre más kérdés nincs.

(#1156806) kepitu Válasz • Feb 2, 2012
Sziasztok!

A mellékelt thermostátokat szeretném kipróbálni.
A HW-es rész megépítés, pr./hex/ Pic-be töltése, beüzemelés nem okoz gondot.
Korábban, tíz-egynéhány évvel ezelőtt próbálkoztam Pic progz.-al, de mivel egy led villogtatásához kb. másfél oldalnyi pr.-ot kellett volna írni, feladtam.
A mellékelt Thm.-ok forrás fileket próbáltam Hex-be konvertálni sikertelenül és itt elfogyott a türelmem.
A mellékelt forrás fileket kérném hex-be fordítani.
Köszönettel: Kepitu
» A fájlok letöltéséhez be kell jelentkezned! «

(#1156989) kepitu Válasz • Feb 2, 2012
Sziasztok!
A mellékelt forrásfile HEX-be fordításához kérnék segítséget.
Köszönettel: kepitu
[url=]Bővebben: Linkhttp://www.guidecircuit.com/Circuit-Microcontroller-Digital-thermostat.htm[/url]

(#1157044) icserny válasza kepitu hozzászólására (#1156989) Válasz • Feb 2, 2012
1. A problémával rossz topikban kopogtattál, mivel köze nincs a C nyelvhez!
2. Ez nem szolgáltatóház. Tanulni viszont szívesen segítünk.
3. A belinkelt helyről letöltött programot át kell nevezni, hogy ne legyen a fájlnévben szóköz, s .asm legyen a kiterjesztése.
4. A CBLOCK sor elejére kell szóköz vagy tabulátor
5. Az MPLAB MPSWIN.exe programja ezután lefordítja, az alapértelmezett beállításokkal (legyen pipával kijelölve a Case Sensitive kérdés!).
» A fájlok letöltéséhez be kell jelentkezned! «

(#1158406) kepitu válasza icserny hozzászólására (#1157044) Válasz • Feb 4, 2012
Köszi a segítséget.
Kezdő vagyok, nem tudhatom hol kell kopogtatnom.
"3. A belinkelt helyről letöltött programot át kell nevezni, hogy ne legyen a fájlnévben szóköz, s .asm legyen a kiterjesztése."
Nem gondoltam, hogy ilyen egyserű, mert alapból asm.-ben van írva, akkor miért txt kiterjesztésben rakja fel a tulaj, talán az ilyen zöldfülüek megtévezstésére mint én vagyok.
Sajnos nem műkszik az ák.
A txt.-ben /forrás/ Pic 628 szerepel én viszont 628A-t használok. Ez okozhat-e problémát?
A kapcs rajzon 4MHz-s rezonátor van, viszont az általad konvertált Hex-el Rc konfigot állít be.
Próbáltam 628A-ra az általad leírtak alapján hex-et készíteni, sikertelenül, sőt ugyanazt sem tudtam produkálni amit felraktál.
Azért köszönöm, további segítséget szivesen veszek.
A Hw. résszel nem gondolnám, hogy probléma lehet, mert egy sima hőmérő és az "EPE LCF METER" megfelelő hex és lábkonfig után rb. műkszik.
Köszi: kepitu

(#1158454) icserny válasza kepitu hozzászólására (#1158406) Válasz • Feb 4, 2012
Idézet:
„Kezdő vagyok, nem tudhatom hol kell kopogtatnom.”
Annyi elvárható egy kezdőtől is, hogy a topik címét elolvassa, a fórumszabályzatról nem is szólva, ami kifejezetten tiltja, hogy egy kérdést több témakörben is feltegyenek.
Idézet:
„miért txt kiterjesztésben rakja fel a tulaj”
Például azért, mert sok tartalomkezelő rendszer korlátozza a feltölthető mellékletek kiterjesztését.
Idézet:
„A txt.-ben /forrás/ Pic 628 szerepel én viszont 628A-t használok. Ez okozhat-e problémát?”
Igen, okozhat. S nem biztos, hogy elég a név átírása, lehetnek hardver eltérések, amelyeket figyelembe kell venni.

(#1158491) kepitu válasza icserny hozzászólására (#1158454) Válasz • Feb 4, 2012
Köszönöm a kioktatást, ezzel is okosabb lettem.
/Mivel első próbálkozásomra mapokon keresztül nem kaptam választ, próbálkoztam másutt./
Az 5X-emen túl sem szégyenlem, ha nálam fiatalabbaktól tanulhatok.
Üdv: kepitu

(#1158531) trudnai válasza kepitu hozzászólására (#1158491) Válasz • Feb 4, 2012
Van egy olyan topic, hogy PIC kezdoknek. Szerintem ott kellene ezt megkerdezni mert itt a C programnyelvvel kapcsolatos kerdeseket varjak es valaszoljak meg a forumtarsak.

(#1158556) kepitu válasza trudnai hozzászólására (#1158531) Válasz • Feb 4, 2012
Ok!
A mellékelt file kiterjesztés miatt gondoltam arra, hogy az itteni Okosok fognak segíteni.
» A fájlok letöltéséhez be kell jelentkezned! «

(#1158580) icserny válasza kepitu hozzászólására (#1158556) Válasz • Feb 4, 2012
A program fejléce szerint "Compiles with B. Knudsen CC5X(Trial version/without optimization)".
Valószínűleg erről a fordítóról van szó. S felhívja a figyelmet, hogy az optimalizálást ki kell kapcsolni, mert kritikus időzítések vannak a programban.

(#1159798) kepitu válasza icserny hozzászólására (#1158580) Válasz • Feb 6, 2012
Köszönöm a segítséget, de az eddigi próbálkozások sikertelenek voltak,
Nem gondolom, hogy kb. 3Pr. nyelvet kellene megtanulnom, mert egy sz.-os thermostátot szeretnék megépíteni és nem hex-ben van a pr.-ja.
Ha mégis valakit érdekel, a köz javára konvertálhatná a pr.-ot, hogy aki tudja hasznosítsa.
Köszi: kepitu

(#1171422) bazs Válasz • Feb 20, 2012
Sziasztok!

Valaki tudna abban segíteni, hogy hogyan kell a 18f2550-es pic-et MPLAB-ba bekonfigurálni ?

Mondjuk egy minta Configgal?

Választok előre is köszönöm!

(#1171437) icserny válasza bazs hozzászólására (#1171422) Válasz • Feb 20, 2012
PIC18F4550 mintát tudok mutatni: itt.

(#1171552) trudnai válasza bazs hozzászólására (#1171422) Válasz • Feb 21, 2012
Nem ertem miert kell ezt a kerdest egyszerre tobb topicban is feltenned?

(#1177197) TakiG Válasz • Feb 28, 2012
Sziasztok!
Tanácsot szeretnék kérni C18 nyelven egy viszonylag összetettebb menükezeléssel kapcsolatban. Úgy szeretném megoldani, hogy minden gombnak, minden menüpontban írok egy-egy függvényt, ami lekezeli az ott épp végrehajtandó műveleteket. Ezeket a függvényeket inicializáláskor beleteszem gombonként 1-1 függvény pointer típusú tömbbe. Majd a gomb megnyomásakor ebből a tömbből az aktuális menü pozícióval indexelve könnyen tudnám hívni az adott függvényeket. Így elkerülhetném a nagy if-else vagy switch case szerkezeteket a gombkezeléskor. Nem tudom érthetően írtam-e le, csatolok egy forrás részletet az elképzelésről, abban talán jobban látszik hogy gondoltam megvalósítani. Gombból csak 4 db lesz, de menüpontból jóval több mint a példában, körülbelül 30, de lehet hogy még több is. Az lenne a kérdésem, hogy ez így mennyire működőképes, szép/ronda, hatékony, vagy memóriapazarló megoldás lenne? Érdemes így belevágni a dologba?
Köszönöm, Gábor
» A fájlok letöltéséhez be kell jelentkezned! «

(#1177345) Stefan válasza TakiG hozzászólására (#1177197) Válasz • Feb 28, 2012
Ilyen megoldást én is használtam, szerintem jobbat nem nagyon lehet kitalálni ennél ilyen helyzetben.

(#1177404) AZoli Válasz • Feb 28, 2012
Sziasztok!

Szeretnék egy unsigned int változót ugyan úgy kezelni mint egy SFR regisztert, tehát bitenként elnevezne külön külön is tudjak rá hivatkozni, (ez megy is, meg volt is már itt szó róla (#804327) ) de hogy tudok az egész 16 bites változóra is hivatkozni?

A PORTD állapotáról szeretnék egy pillanatképet PORTD_T = PORTD, és utána bitekre külön hivatkozni PORTD_Tbits.RDT3
Egy struct -ot létrehoztam ahogy a header -ben láttam, de akkor PORTD_T = PORTD erre hibát ír.
Valahol már erről is volt szó, de nem találom.

(#1177485) Ideiglenes válasza AZoli hozzászólására (#1177404) Válasz • Feb 28, 2012
A megfelelő kulcsszavak? struct és union.
Az SDCC device/include könyvtárában van jónéhány példa.
Itt a 12F629.h állományból idézek:

  1. #define GPIO_ADDR 0x0005
  2.  
  3. extern __sfr  __at (GPIO_ADDR) GPIO;
  4.  
  5. // ----- GPIO bits --------------------
  6. typedef union {
  7.   struct {
  8.     unsigned char GP0:1;
  9.     unsigned char GP1:1;
  10.     unsigned char GP2:1;
  11.     unsigned char GP3:1;
  12.     unsigned char GP4:1;
  13.     unsigned char GP5:1;
  14.     unsigned char :1;
  15.     unsigned char :1;
  16.   };
  17.   struct {
  18.     unsigned char GPIO0:1;
  19.     unsigned char GPIO1:1;
  20.     unsigned char GPIO2:1;
  21.     unsigned char GPIO3:1;
  22.     unsigned char GPIO4:1;
  23.     unsigned char GPIO5:1;
  24.     unsigned char :1;
  25.     unsigned char :1;
  26.   };
  27. } __GPIObits_t;
  28. extern volatile __GPIObits_t __at(GPIO_ADDR) GPIObits;

(#1177587) AZoli válasza Ideiglenes hozzászólására (#1177485) Válasz • Feb 28, 2012
Köszi a gyors választ.
Ennek segítségével már megértettem hogy mi a különbség az union és a struct között, de akár hogy próbálom nem jövök rá hogy enné meg a fordító.

Addig jutottam hogy egy union -on belül kéne létrehoznom egy unsigned int változót, és egy struct -ot a szükséges bitekkel.

Ja és azt nem írtam hogy C30 -ban.

Ezzel mi a baj?
  1. union
  2. {
  3.     struct tagPORTDSbits
  4. {
  5.   unsigned RD0S:1;
  6.   unsigned RD1S:1;
  7.   unsigned RD2S:1;
  8.   unsigned RD3S:1;
  9.   unsigned RD4S:1;
  10.   unsigned RD5S:1;
  11.   unsigned RD6S:1;
  12.   unsigned RD7S:1;
  13.   unsigned RD8S:1;
  14.   unsigned RD9S:1;
  15.   unsigned RD10S:1;
  16.   unsigned RD11S:1;
  17.     }
  18. PORTDSbits;
  19.     unsigned int PORTDS;
  20.   };
  21.  
  22. PORTDSbits.RD3S = 1;
  23.  
  24. PORTDS = 0xAA55;

(#1177618) p_istvan válasza AZoli hozzászólására (#1177587) Válasz • Feb 28, 2012
Szervusz!

A C30-at nem ismerem konkrétan, de ha C-ről van szó, az unionnak nem adtál nevet és az union elemeire is hasonlóan kell hivatkozni mint struktura elemeire:

union_name.PORTDSbits.RD3S = 1;
union_name.PORTDS = 0xAA55;

Az union elemei, ha lehet legyenek egyforma hosszúak a meglepetések elkerülése végett... most pl. 12 és 16 bit.

(#1177635) AZoli válasza p_istvan hozzászólására (#1177618) Válasz • Feb 28, 2012
Szervusz!

Igen C-ről van szó.
Köszönöm, összeállt a kép, működik.

(#1177650) icserny válasza AZoli hozzászólására (#1177587) Válasz • Feb 28, 2012
  1. typedef union _UINT16 {
  2.     uint16 u16;
  3.     struct {
  4.         uint8 u8Lsb;
  5.         uint8 u8Msb;
  6.     };
  7.     struct {
  8.         uint8 u8Bytes[2];
  9.     };
  10.     struct {
  11.         unsigned b0:     1;
  12.         unsigned b1:     1;
  13.         unsigned b2:     1;
  14.         unsigned b3:     1;
  15.         unsigned b4:     1;
  16.         unsigned b5:     1;
  17.         unsigned b6:     1;
  18.         unsigned b7:     1;
  19.         unsigned b8:     1;
  20.         unsigned b9:     1;
  21.         unsigned b10:    1;
  22.         unsigned b11:    1;
  23.         unsigned b12:    1;
  24.         unsigned b13:    1;
  25.         unsigned b14:    1;
  26.         unsigned b15:    1;
  27.     };
  28. } UINT16;

(#1177832) benjami válasza AZoli hozzászólására (#1177404) Válasz • Feb 28, 2012
Kicsit gugliztam, mert engem nem csak a definiálás, hanem a típuskényszerítés része is érdekelt. Pl. ha egy függvényemben char változóként érkezik meg az adat, hogyan férek hozzá annak a bitjeihez anélkül hogy átmásolnám unionos változóba, vagy logikai ésekkel bűvészkednék. Íme a minta:
  1. typedef union
  2. {
  3.   struct
  4.   {
  5.     unsigned bit0:1;
  6.     unsigned bit1:1;
  7.     unsigned bit2:1;
  8.     unsigned bit3:1;
  9.     unsigned bit4:1;
  10.     unsigned bit5:1;
  11.     unsigned bit6:1;
  12.     unsigned bit7:1;
  13.   };
  14.   struct
  15.   {
  16.     char byte;
  17.   };
  18. }UJTIPUS;
  19.  
  20. void teszt(char ch)
  21. {
  22.   static char c;
  23.  
  24. // átmásolós verzió
  25.   UJTIPUS adat;
  26.   adat.byte = ch;
  27.   LATBbits.LATB0 = adat.bit3;
  28.  
  29. // átmásolás nélküli típuskényszerítéses verzió
  30.   LATBbits.LATB1 = ((UJTIPUS*)&ch)->bit6;
  31.  
  32. // C18-on ezt sajnos nem fordítja le 4 utasítássá (ahogy ASM-ben csinálná az ember)
  33.   if(((UJTIPUS*)&ch)->bit7)
  34.     LATBbits.LATB5 = 0;
  35.   if(!((UJTIPUS*)&ch)->bit7)
  36.     LATBbits.LATB5 = 1;
  37.  
  38.   c = ch;
  39. // viszont nem veremben tárolt változónál már igen
  40.   if(((UJTIPUS*)&c)->bit4)
  41.     LATBbits.LATB4 = 0;
  42.   if(!((UJTIPUS*)&c)->bit4)
  43.     LATBbits.LATB4 = 1;
  44. }

Kipróbáltam, a C30 is megeszi. Első körben úgy tűnik ugyanazt a kódot fordítja mintha a union bitjeit használnám (persze csak akkor ha a változó azonos hozzáférésű tárhelyen található: adatmem <-> verem).
Mondjuk ezt a mutatós, címképző operátoros megoldást magamtól ki nem találtam volna

(#1179488) trudnai válasza benjami hozzászólására (#1177832) Válasz • Márc 1, 2012
Pont forditva van mint ahogy azt a kommentben irod, a 'c' valtozo nem a stack-en (veremben) lesz, hanem a sima adat szekcioban, hiszen 'static'-nak deklaraltad. A 'ch' parameter azonban a veremben lesz -- ezert nem tudja azt 4 utasitasban megoldani. Nyilvan FSR-t allitgat es INDF-ekkel eri el a valtozot, bar nem lattam a visszafejtett kodot. A 'c' eseteben erre nincs szukseg hiszem a valtozo helye a forditasi idoben mar ismert.

(#1179969) user Válasz • Márc 2, 2012
Sziasztok!

MikroC-ben próbálok egy pic16f628-siemens m35i telefon közötti kommunikációt megírni,de elakadtam. A pic feladata mindössze annyi lenne hogy ha érkezik egy hívás a vele összekötött telefonra akkor ellenőrizze le a hívószámot,és ha stimmelt akkor rb4-et kapcsolja be.
Beégettem a programot a pic-be,de hívószámtól függetlenül mindig bekapcsolja rb3-at, és rb4-et.
Csinált már valaki bejövő hívószám ellenőrzést mikroc-ben?
» A fájlok letöltéséhez be kell jelentkezned! «

(#1180110) benjami válasza trudnai hozzászólására (#1179488) Válasz • Márc 2, 2012
Igen, a 'c' változót direkt azért deklaráltam staticnak, hogy ne a verembe tegye hanem a sima adat szekcióba. Ezért tudja 4 utasítással megcsinálni. Szerintem jól írtam mert "NEM veremben tárolt" -at írtam rá és ez így is van.

(#1180125) benjami válasza user hozzászólására (#1179969) Válasz • Márc 2, 2012
Ez a programkezdemény igencsak sok sebből vérzik.
A feltételed csak azt vizsgálja hogy GSM_MSG5 változód legelső karaktere igaz-e (ha nem nulla akkor igaz), márpedig a '+' jel asc kódja nem nulla.
Miután a telefonra kiküldöd a számlekérdezést vársz 2,5 másodpercet, ezalatt a telefon már rég válaszolt, de te nem tároltad el a választ sehova. Én a telefonszámnak csak az utolsó 9 számjegyét ellenőrizném, így mindegy hogy +36 vagy 06-ot tesz a szám elejére.

Következő     54 / 58     
 HEStore.hu
 Hirdetés
TrainModules.hu