Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   80 / 118
(#) tomat5 válasza sysy hozzászólására (») Aug 29, 2012 /
 
Köszi a gyors választ.

Hiába változtatom a fuse-t mclr->nomclr az eredmény mindig ugyanaz.

Névtelen.png
    
(#) nicsakegy hozzászólása Aug 31, 2012 /
 
Kedves emberek,

Ha a CCS.ben a következőt írom: #define ketto 1+1,
akkor a fordító az "1+1", vagy a "2" értéket helyezi el a kódban?
(#) potyo válasza nicsakegy hozzászólására (») Aug 31, 2012 / 1
 
Az attól függ, hogy milyen környezetben lesz a ketto a kódban. Mert ha pl. ezt írod, hogy a=b*ketto, akkor annak az eredménye végül az lesz, hogy a=b*1+1 vagyis a=b+1. Ha viszont úgy csinálod, hogy
#define ketto (1+1), akkor mivel zárójelben van, így a kódba az fog kerülni, hogy a=b*(1+1), ami tényleg a=b*2 lesz. És ekkor a fordító tényleg egy kettest tesz oda, mivel az (1+1) az mindig kettő.
(#) sysy válasza nicsakegy hozzászólására (») Aug 31, 2012 / 1
 
A #define utasítás az egy makró, vagyis sima szöveg belyettesítést végez el, Tehát a makró hívásánál képzeld a "ketto" szöveg helyére az "1+1" szöveget. Ezt fogja lefordítani a fordító.
(#) sysy válasza tomat5 hozzászólására (») Aug 31, 2012 /
 
Kipróbáltam és az MPLAB 8.86 / CCS 4.134 verziók mellett szépen működik. Ha nem írod bele a #fuses sorba az MCLR szöveget, akkor lehet, hogy az alapértelmezett értéket fogja befordítani neked. Ha szerencsés vagy, akkor lesz reset funkciód.
(#) tomat5 válasza sysy hozzászólására (») Szept 3, 2012 /
 
Szia
Köszi a segítséget, kipróbáltam de semmi. Azóta nem működik jól a mióta áttértem WIN7-re.
Az MPLAB-om 8.85 a CCS pedig 4.114. Próbálok frissíteni aztán majd meglátjuk.
(#) ldjanos hozzászólása Szept 4, 2012 /
 
Sziasztok!

Egy kis segítséget szeretnék kérni az alábbi problémához:

Attempt to create a pointer to a constant

if(fatopen(fileName, "a", &stream) != GOODEC)

fatputs("\r\n", &stream);

strcat(dir, "/");

if(fatopen(fileName, "r", &stream) != GOODEC)

Szerintem az idézőjelben levő adatokkal van a probléma de nem tudom hogy mi. A fordító mindig a második idézőjel utáni karakterre mutat.

Köszi a segítséget.
(#) icserny válasza ldjanos hozzászólására (») Szept 5, 2012 /
 
A CCS-hez értők szerint az ex_fat.c elején van egy olyan globális beállítás, hogy
  1. #device PASS_STRINGS = IN_RAM

Ez azt mondja, hogy RAM-ban történik az adatok átadása. Ha viszont direktben írod be az "r" paramétert, azt a fordító a ROM-ban szeretné elhelyezni. Erre utal az "Attempt to create a pointer to a constant" üzenet. Ez a Harvard felépítés diszkrét bája...

Ha megtalálod a programodban a fenti direktívát, akkor vedd ki!
(#) ldjanos válasza icserny hozzászólására (») Szept 5, 2012 /
 
Igazából az volt a baj, hogy az én kódomban nem volt benne, mert ráparázott, hogy nagyon messze van a header file-tól, ezért kivettem...
És csak így fogadta el:
#include <18F2550.h>
#device PASS_STRINGS = IN_RAM

Mostmár sikeresen lefordul, az SPI-on a jelek megvannak, már csak a szintillesztő IC hiányzik és jön az első próba.

Köszönöm a segítséget!
(#) vicsys hozzászólása Szept 9, 2012 /
 
Janikukac! Írd le pontosan, mit is szeretnél.
(#) janikukac válasza vicsys hozzászólására (») Szept 9, 2012 /
 
Na szóval: Szeretném komolyabbra venni a PIC mikrovezérlők programozását C nyelven, PIC CCS fordítóval. Nagyon tetszik a kurzusod Vic, de sajnálom, hogy nem folytattad több mint egy éve.
Szeretnék magyar leírást valahonnan CCS-hez, vagy legalább sok programot amiben minden meg van magyarázva magyarul . Rendelkezésemre áll: PK2 Debug express csomag a fejlesztővel természetesen, 28lábú házi készítésű fejlesztő Vilmosd féle, 1-2 mikrovezérlő. Már írtam 2-3 programot Vic C kurzusa alapján, legutóbb egy önállóan elkészített Knight-Rider villogót a Debug Express panelra. Az a lényege, hogy lépeget 50ms-ként a LED-sor, és ez ismétlődik.

Szóval várom a sok-sok jó tanácsot, hogyan tovább. Ezt elég ovodás szinten kéne elmagyarázni, mivel elég nehezen értem meg a dolgokat(szerintem legalábbis) Mondjuk gyors fejlődést nem várhattok, kezdődik a suli, nekem max hétvégén lesz most már időm programozni, meg emellett tanulni kell, meg van forrasztani való is mindig.
(#) vicsys válasza janikukac hozzászólására (») Szept 9, 2012 /
 
Segítünk. (Remélem, hogy a sok profi nevében is szólhatok)

Nos, konkrétan mit szeretnél? Valami nyomógombot emlegettél...
(#) janikukac válasza vicsys hozzászólására (») Szept 9, 2012 /
 
Köszönöm!
Igen. Van az új programom, a bizonyos Knight Rider, és szeretném azt is megtanulni, hogy mit kell a programba beillesztenem ahhoz, hogy pl a demo boardon lévő nyomógombot lenyomom, csak akkor menjen a led csóva, vagy a trimmer potit hogyan tudom lekezelni, hogy ha tekerem , a sebesség változzon.
(#) vicsys válasza janikukac hozzászólására (») Szept 9, 2012 /
 
Nézd át a demopaneled. Elvileg kell lennie egy felhúzó ellenállásnak a lábon és ezt a lábat a kapcsoló húzza le testre. Így 2 állapot érhető el: Ha a kapcsoló nincs lenyomva, akkor a PIC lábát közel tápfeszre húzza fel az felhúzó ellenállás. Ekkor a láb értéke 1 lesz. Ha lenyomod a gombot, akkor ugyanezt a lábat lehúzza testre. Ekkor a láb értéke 0 lesz. Most már csak a láb állapotát kell figyelni:
  1. If (input (PIN_A3)==0) //A3 bemeneten lévő gomb le van nyomva?
  2. {
  3. // ha megadott feltétel igaz, akkor a kapcsok közötti részt
  4. //hajtja végre
  5. //ha nem igaz a feltétel, akkor kihagyja, mint ha
  6. //ott sem lenne. Pl.:
  7. output_high (PIN_C0);
  8. }
  9.  
  10. //Szebb megoldás a tagadó feltétel:
  11. If (!input (PIN_A3) ) //Az A3 bemenet, nem magas?
  12. {
  13. //ez ugyanaz mint előbbinél
  14. }

Ha nyomógombot használsz, figyelni kell a prellegésre is.
(#) vicsys válasza vicsys hozzászólására (») Szept 9, 2012 /
 
Egy kis magyarázat:
Az input szócska a láb irányát adja meg. Az if (angol ha vagy azonban) szócska, maga feltétel figyelés. PIN_A3 pedig a PIC A portjának a 3. tagja. (egy egy port, általában 1 bájtos és 0-tól 7-ig van számozva). A == operátor pedig az egyenlőség vizsgálat. Ha csak egy darab = jel lenne, az merőben más, mert az értékadás lenne. Magyarázat:
kutya=3; // a kutya nevű változó értéke innentől három lesz
kutya=1+4; //a kutya nevű változó értéke innentől öt lesz
kutya==5; // a kutya nevű változó értéke, egyenlő 5-tel vagy nem?
...
(#) janikukac válasza vicsys hozzászólására (») Szept 9, 2012 /
 
Huh, köszönöm mind a 2 leírást. Eléggé érthető, főleg a kutyás rész elmond mindent.
Így van, van a nyomógombom. Rá van kötve egy 1k-s ellenállás, ami az RB0-ra van kötve, valamint van egy 10k-s, az pedig a +V feszültségre csatlakozik.
Most jön a láb figyelése, ami szerintem akkor így kell kinézzen, hogy :
  1. If (!input (PIN_B0) )
  2. { //A program, tehát a parancssor a LED-ek működéséhez
  3. }


Jól értelmezem? Annyira nem is bonyolult, ha jól írtam, akkor élesben is tesztelni fogom. Gondolom a potméteres már bonyolultabb, mert ott már biztos van analóg/digitál konverzió.
(#) janikukac válasza janikukac hozzászólására (») Szept 9, 2012 /
 
Kipróbáltam az előbbi ötletem alapján, lefordította, hibát nem jelzett, de nem akar működni. Csak akkor rakom be a C filet,ha nem a gondolat menetemben lesz a hiba, hiába nem akarom az oldalt előre teletömni.
(#) subi válasza janikukac hozzászólására (») Szept 9, 2012 /
 
Szia!
Az if -s programrészed valójában ekkor fut le, ha a B0 port nulla értékű. Csak azt kellene megnézned, hogy bemenetnek van e setupolva a B port. Egyébként 'kutya' (ha már az a szemléltetés volt használva) kötelessége működni.
Üdv.
Subi
A hozzászólás módosítva: Szept 9, 2012
(#) janikukac válasza subi hozzászólására (») Szept 9, 2012 /
 
Igazad van, ezt elfeljtettem megnézni, mert még ilyet sose csináltam. A konfigurálásnál mindig máshogy van kapcsolva egy-egy láb..
A hozzászólás módosítva: Szept 9, 2012
(#) janikukac válasza janikukac hozzászólására (») Szept 9, 2012 /
 
Sajnos nem jó. A B0 Inputon volt, meg kipipáltam, hogy a PULLUP-ot engedélyezze (ha jól értem a felhúzást), de semmi. Nem működik a program. Hibát megint nem dob ki. Így néz ki a program, belinkelem, hátha itt van a gond.
  1. #include "D:\PIC Programozásaim\demoboard+pic16f887\natrajder3\nyomogombhelyes.h"
  2.  
  3.  
  4. void main()
  5. {
  6.  
  7.    port_b_pullups(TRUE);
  8.    setup_adc_ports(NO_ANALOGS|VSS_VDD);
  9.    setup_adc(ADC_OFF);
  10.    setup_spi(FALSE);
  11.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  12.    setup_timer_1(T1_DISABLED);
  13.    setup_timer_2(T2_DISABLED,0,1);
  14.    setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
  15.    setup_oscillator(OSC_4MHZ);
  16.  
  17.    // TODO: USER CODE!!
  18.  
  19. If (!input (PIN_B0) )
  20. {
  21. while(1)
  22. {
  23.   Output_High (PIN_D0);
  24.   Delay_ms(50);
  25.   Output_Low (PIN_D0);
  26.   Output_High (PIN_D1);
  27.   Delay_ms(50);
  28.   Output_Low (PIN_D1);
  29.   Output_High (PIN_D2);
  30.   Delay_ms(50);
  31.   Output_Low (PIN_D2);
  32.   Output_High (PIN_D3);
  33.   Delay_ms(50);
  34.   Output_Low (PIN_D3);
  35.   Output_High (PIN_D4);
  36.   Delay_ms(50);
  37.   Output_Low (PIN_D4);
  38.   Output_High (PIN_D5);
  39.   Delay_ms(50);
  40.   Output_Low (PIN_D5);
  41.   Output_High (PIN_D6);
  42.   Delay_ms(50);
  43.   Output_Low (PIN_D6);
  44.   Output_High (PIN_D7);
  45.   Delay_ms(50);
  46.   Output_Low (PIN_D7);
  47.   Output_High (PIN_D6);
  48.   Delay_ms(50);
  49.   Output_Low (PIN_D6);
  50.   Output_High (PIN_D5);
  51.   Delay_ms(50);
  52.   Output_Low (PIN_D5);
  53.   Output_High (PIN_D4);
  54.   Delay_ms(50);
  55.   Output_Low (PIN_D4);
  56.   Output_High (PIN_D3);
  57.   Delay_ms(50);
  58.   Output_Low (PIN_D3);
  59.   Output_High (PIN_D2);
  60.   Delay_ms(50);
  61.   Output_Low (PIN_D2);
  62.   Output_High (PIN_D1);
  63.   Delay_ms(50);
  64.   Output_Low (PIN_D1);
  65.  
  66. }
  67. }
  68. }
(#) subi válasza janikukac hozzászólására (») Szept 9, 2012 /
 
Nos először is, ha a port egyik kimenetét, mondjuk a B0 -t szeretnéd belső felhúzó ellenállással tápra kapcsolni, akkor 'port_b_pullups(0x01);' utasítás elég. Amennyiben mondjuk a B0 és B1 -t akarod felhúzni, akkor a 'port_b_pullups(0x03);' utasítás kell, és így tovább.....

A másik, nem látom igazából a B0 -t setupként bemenetnek állítani. Én ezt javaslom: set_tris_b(0b00000001). Így most, a B0 egyedül bemenet. Értelem szerűen a többi port is átállítható.
A hozzászólás módosítva: Szept 9, 2012
(#) kissi válasza subi hozzászólására (») Szept 9, 2012 /
 
Szia !

Ha egy portláb kimenetnek van állítva, akkor nem működik a felhúzóellenállás ( felesleges fogyasztást okozna! )! Ennek csak bemenetnek definiált lábnál van értelme ( lehet, hogy így gondoltad, de Janinak pontosan kell leírni, mert még kezdő és elbizonytalanodik, ha ellenkező dolgokat olvas vagy hall!).

Steve
(#) janikukac válasza subi hozzászólására (») Szept 9, 2012 /
 
Rendben, köszi. Akkor a programban pontosan mit változztassak, és hogyan? Mit hova írjak?
(#) janikukac válasza kissi hozzászólására (») Szept 9, 2012 /
 
Így van, köszi!
(#) szitko válasza janikukac hozzászólására (») Szept 9, 2012 /
 
A konfigtól eltekintve, szerintem jól működik a programod, csak kb 1 mikrosecundumod van arra, hogy megnyomd a gombot. Figyeltél arra amit vicsys írt az "if"-ről? Most azt csináltad a programban, hogy először megvizsgálod a gombot, és hanem teljesül a feltétel, vége a programnak. Ha azt akarod, hogy várja meg a gombnyomást, használd az if helyett a while utasítást.
(#) janikukac válasza szitko hozzászólására (») Szept 9, 2012 /
 
Jaj, most már egyáltalán semmit sem értek.
(#) subi válasza janikukac hozzászólására (») Szept 9, 2012 /
 
Esetleg így módosíthatnád a programodat

az előző részek maradnak....

set_tris_b(0b00000001); // B0 -bemenet
port_b_pullups(0x01); // B0 felhúzva

while(1)
{
If (!input (PIN_B0) )
{
ide rakod a programodat.........
}
delay_ms(300); // egy kis várakozás
}
(#) mps válasza janikukac hozzászólására (») Szept 9, 2012 /
 
Hogy értsd is pontosan: amit Te csináltál az az init rész után megnézi, hogy nyomva van e a gomb, ha igen akkor elkezdi a ciklust, ha nem akkor átugorja és a program végét jelző end-re ugrik, onnan pedig nincs tovább. Amit Subi írt neked, az pedig a cikluson belül figyeli a gombot, így ha nincs megnyomva akkor újra és újra "megnézi", ha meg van nyomva akkor megcsinálja amit kell neki, majd ha végzett egy ciklussal újra megnézi a gombot és ha meg van nyomva... vagy ha nincs megnyomva... Remélem érthető voltam
(#) janikukac válasza subi hozzászólására (») Szept 9, 2012 /
 
Most működik már. A set_tris.. és a port_b.. nem használtam, mert azokat már konfiguráltam. Az volt a gond az egészben, hogy nem tudtam, hogy a while függvényen belül, vagy a while függvényen kívül kell hogy legyen a nyomógomb beállítása. A várakozásra semmi szükség, mert így nem tud a programom úgy futni, ahogy szeretném, mert megáll.
Mindenkinek köszi, egy lépéssel előrébb vagyok.
Üdv!
(#) janikukac válasza mps hozzászólására (») Szept 9, 2012 /
 
Így igen, mivel közben megoldódott a gond.
Következő: »»   80 / 118
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