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   72 / 118
(#) szuperman válasza sysy hozzászólására (») Ápr 20, 2012 /
 
És a ledet hova kössem?
(#) vilmosd válasza szuperman hozzászólására (») Ápr 20, 2012 /
 
Haat.. A PWM kimenetre. (adatlap) Termeszetesen a TRISB megfelelo bitjet kimenetnek kell allitani.
(#) sysy válasza _vl_ hozzászólására (») Ápr 20, 2012 /
 
vilmosd-nek válaszoltam, aki állítgatta a kitöltést.
szuperman pedig örülni fog, hogy valamit csinál a programja.
Ő nemhogy a fényerőt nem bírja a kívánt értékre beállítani, hanem a program sem működik.
Tehát nem olyan egyszerű az élete, hogy beállítja a fényerőt, oszt jóvan.
(#) szuperman válasza vilmosd hozzászólására (») Ápr 20, 2012 /
 
Na azt megtaláltam ,hogy a 9 es láb a kimenete. Illetve azt is ,hogy a 3. bitet kell 1 re állítani, de ,hogy?
(#) szuperman válasza sysy hozzászólására (») Ápr 20, 2012 /
 
Sikerült beállítanom. Még mindig semmit nem csinál.

  1. #Byte TRISB=0b00000100
  2.  
  3. void main(void){
  4.  
  5. long  DUTY;
  6.  
  7.   while(TRUE)
  8.   {
  9.      delay_ms(10);
  10.      set_pwm1_duty(++DUTY&0x03FF);
  11.   }
  12.  
  13. }
(#) vilmosd válasza szuperman hozzászólására (») Ápr 20, 2012 /
 
Szoval tobb problema van . Eloszor is a Byte Trisb sornal meg kell adni a TRISB regiszter cimet. Masodsorban amikor egy portlabat kimenetnek szeretnel allitani, akkor a TRISB vonatkozo bitjet "0" (!!!) szintre kell allitani. Ajanlanam az egesz PIC-ezest az adatlapok tanulmanyozasaval kezdeni. Ja es melle ASM programnyelv induloban.
  1. #BYTE tris_b = 0x86
  2.  
  3.  
  4. tris_b=0b11111011; //TRISB.2 OUT
(#) szuperman válasza vilmosd hozzászólására (») Ápr 20, 2012 /
 
A led most sem világít. Viszont a pwm fölött lévő lábon (8) fesz van. Ha oda kötöm a ledet akármit állítok akárhova szimplán világít.
(#) vilmosd válasza szuperman hozzászólására (») Ápr 20, 2012 /
 
Szoval Mea Culpa. A tris_b=0b11110111; a helyes megoldas, mert a RB3/CCP1 a PWM kimenete. De ez kiderul az adatlapbol, csak en nem emlekeztem a 16F628-nal melyik a PWM lab.
(#) szuperman válasza vilmosd hozzászólására (») Ápr 20, 2012 /
 
Végülis mind 1 mert nem működik. Én már nem érteme zt az egészet. Csináltam egy ilyet:
  1. while(true){
  2.       for(i=0; i<100; i++){
  3.          output_high(PIROS);
  4.          delay_ms(i);
  5.          output_low(PIROS);
  6.          delay_ms(125-i);
  7.       }
  8.       for(i=0; i<100; i++){
  9.          output_high(PIROS);
  10.          delay_ms(100-i);
  11.          output_low(PIROS);
  12.          delay_ms(i+25);
  13.       }
  14.    }

Ezzel szépen működik a fényerő váltás. Csak villog a led. Mi a gond? Túl gyors a led vagy mi?
(#) vilmosd válasza szuperman hozzászólására (») Ápr 20, 2012 /
 
Csak ugy halkan megkerdeznem, hogy egyaltalan berugtad a PWM csatornat? Mert ugye a program elejen be kell allitani a labak iranyat, inicializalni kell a hasznalando periferiat, be kell ugye loni a PWM kivant frekijet, i tak dalse... Amennyiben ezek hianyoznak, nem fog mukodni a PWM. Biztosan mukodik kulonben mert en mar sok PWM-es kutyut csinaltam, es volt koztuk 16F628 is. Esetleg a komplett programot ha mellekelned, akkor tobbet lehetne mondani.
(#) sysy válasza szuperman hozzászólására (») Ápr 21, 2012 /
 
Ezt próbáld ki:

  1. #include <16F628A.h>
  2.  
  3. #FUSES NOWDT                 // No Watch Dog Timer
  4. #FUSES PUT                   // Power Up Timer
  5. #FUSES INTRC_IO              // Internal RC Osc, no CLKOUT
  6. #FUSES NOBROWNOUT            // No brownout reset
  7. #FUSES NOLVP                 // No low voltage prgming
  8.  
  9. #use delay(int=4MHz)
  10.  
  11.  
  12. void
  13. main()
  14. {
  15. long  DUTY;              // kitöltési tényező 16bites
  16.  
  17.    setup_comparator(NC_NC_NC_NC);       // no parator
  18.    setup_ccp1(CCP_PWM);                         // CCP1 -> M
  19.    set_tris_b(0b11110111);                       // CCP1 - output
  20.    setup_timer_2(T2_DIV_BY_4,255,1);     // kb. 1000Hz
  21.  
  22.   while(TRUE)// forever loop
  23.   {
  24.      delay_ms(5);                                       // kitöltés változási sebessége
  25.      set_pwm1_duty(++DUTY&0x03FF);    // DUTY maszkolása 10bit-re és inkrementálása
  26.   }
  27.  
  28. }


Ennek működnie kell.
(#) sysy válasza sysy hozzászólására (») Ápr 21, 2012 /
 
Nem tudom miért esik szét a code...
(#) szuperman válasza sysy hozzászólására (») Ápr 21, 2012 /
 
Történnie kellene valaminek, mert nálam semmit nem csinál ez a program. Csak le húzza a földre a ledemet és jó éjszakát ott is marad.
(#) p_istvan válasza szuperman hozzászólására (») Ápr 21, 2012 /
 
Szervusz!
A leddel van ellenállás sorbakötve kötve?
(#) szuperman válasza p_istvan hozzászólására (») Ápr 21, 2012 /
 
IGEN. 240ohm -os
(#) whalaky válasza sysy hozzászólására (») Ápr 22, 2012 /
 
Ha ennyi a kód, akkor teljesen jól működik...
Amit nem látok, hogy a dutty hol kap értéket?.
(#) sysy válasza whalaky hozzászólására (») Ápr 22, 2012 /
 
Mivel itt nem fontos a kezdőérték, a program előveszi a megadott RAM memóriacímről a bekapcsoláskor beállt értéket és inkrementálja, majd visszaírja. Mindegy mi volt előzőleg ott, most egyel nagyobb lett ez a szám.
És így tovább.
(#) Balagemann2031 hozzászólása Ápr 23, 2012 2 /
 
Sziasztok! Tudna nekem küldeni valaki CCS progit, vagy linkelni egy letölthetőt? Láttam hogy a topikban régebben be lett linkelgetve elég sokszor, de sajnos nem működnek a linkek Megköszönném!
(#) icserny válasza Balagemann2031 hozzászólására (») Ápr 23, 2012 /
 
Fórumszabályzat tiltja a warezolást!
Nem kell lopni, vannak ingyenes C fordítók is (HiTec C, MPLAB XC)!
(#) Balagemann2031 válasza icserny hozzászólására (») Ápr 23, 2012 /
 
Nem feltétlenül kalóz progit kértem, csak egy linket ahol akár demo is letölthető....azért köszi!
(#) trudnai válasza Balagemann2031 hozzászólására (») Ápr 23, 2012 / 1
 
Software Downloads-ra kattintva lathatod miket lehet letolteni toluk!

Bővebben: Link

Amugy mielott ilyeneket kerdezel erdemes ezt a modszert kiprobalni, sokkal gyorsabban talalod meg a valaszt, mintha rank varnal:

Google a baratod!
(#) icserny válasza Balagemann2031 hozzászólására (») Ápr 23, 2012 / 1
 
A demo letöltése itt: http://www.ccsinfo.com/downloads.php
(#) Balagemann2031 válasza icserny hozzászólására (») Ápr 23, 2012 /
 
Köszönöm! Egyébként használtam a google-t, de biztosra akartam menni, ezért kérdeztem. Köszi mindkettőtöknek a linkeket!
(#) pontazok hozzászólása Máj 3, 2012 /
 
Sziasztok.

18F4550-re írok programot, de nem nagyon tudom hogy hogyan kéne a kódba beleírni hogy a data eeprom milyen címeken helyezkedik el.
Na de mutatom is.
Van egy ilyen deklaráció hogy,

#rom 0xf00000={1,2,3,4,5}

Ez persze nem 4550-hez van. Valaki nem tudja hogy kéne átírnom ezt a részletet? A datasheet-ből kell kilesni hogy az eeprom memóriák hogyan helyezkednek el, de én nem nagyon tudom.

Van a CCS-nek egy "device editor tool"-ja. Ott azt írja, hogy itt kezdődik az eeprom: 00F00000. De a számokat a kapcsos zárójelben módosítsam?

A válaszokat előre is köszönöm!
(#) sysy válasza pontazok hozzászólására (») Máj 3, 2012 / 2
 
Nem jól értelmezed a rom és az eeprom fogalmát. Az eeprom mindíg az 0x00 címtől kezdődik és a hossza mondjuk tart 0xFF ig, ha 256byte az eeprom kapacitása. Ha írni akarsz az eepromba akkor ezt az utasítást használd:
write_eeprom(cím,adat);
Ha olvasni akarsz belőle, akkor ezt:
változó=read_eeprom(cím);
ahol a "cím" egy valós eeprom cella címe.
Vagy használhatsz előre deklarált címeket is pl.

#define Mentes 0x10

write_eeprom(Mentes,adat);
változó=read_eeprom(Mentes);

Remélem érthető voltam.
(#) icserny válasza pontazok hozzászólására (») Máj 3, 2012 / 1
 
Azt mondják az okosok, hogy így kell:
  1. #pragma romdata eedata_scn=0xf00000
  2. rom unsigned char eedata_values[8] = {0, 1, 2, 3, 4, 5, 6, 7};

Bővebben: Link
(#) icserny válasza sysy hozzászólására (») Máj 3, 2012 /
 
Szerintem félreértetted a kérdést. Szerintem a fordítóval előállított a HEX fájlban szeretné ez EEPROM-ot megcímezni és adatokkal feltölteni.
(#) sysy válasza icserny hozzászólására (») Máj 3, 2012 /
 
Most hogy mondod, lehet, hogy valóban ezt szeretné elérni.
Majd megerősíti a kedves kérdező, vagy pontosít.
(#) whalaky válasza pontazok hozzászólására (») Máj 4, 2012 / 2
 
A #rom 0x020000 = {1, 2, 3, 4, 5} lényege, hogy az eeprom-ba írja az 0x01 0x02 0x03 0x04 0x05 adatokat, mégpedig a 0x020000 címtől kezdve.
Persze ennek feltétele, hogy a 0x020000 valóban az EEPROM területre mutasson amit neked kell biztosítani.

Mivel a CCS volt oly kedves és rendelkezésedre bocsájtott pár függvényt, a dolog igazán leegyszerűsödik. Ha nem tudod biztosan az EEPROM kezdő címét, vagy netán újrahasznosítható kódot akarsz készíteni ez is megoldható a CCS jóvoltából valahogy így.
  1. #define _EEPROM_     getenv( "EEPROM_ADDRESS" )
  2.  
  3. #rom _EEPROM_ = { 1, 2, 3, 4, 5 }
  4. #rom _EEPROM_ + 0x20 = { "TVMACI", 0 }

azaz az _EEPROM_ makróval definiálod az EEPROM kezdőcímét, így bármilyen MCU-ra fordítható lesz a program, persze csak ha van EEPROM-ja.
A fenti példa az EEPROM 0. byte-tól beírja a 0...5 értéket, a 32. byte-tól kezdve pedig beírja a "TVMACI" karaktertömböt a lezáró 0-vak együtt.

Ha jól emlékszem a 4550 EEPROM címe 0x020000, ez ugyan az mint a
  1. #rom 0x020000 = { 1, 2, 3, 4, 5 }
  2. #rom 0x020020 = { "TVMACI", 0 }

A dolog kiválóan működik mindaddig amíg van EEPROM és nem akarod túlcímezni. Ez tulajdonképpen csak a program hordozhatóságát segíti, egyenlőre ne szokj rá ha nem indokolt, inkább szorgalmasan tanulmányozgasd az adatlapot, az előrébb visz!

Remélem így már érted!
(#) pontazok válasza whalaky hozzászólására (») Máj 4, 2012 /
 
A CCS fordító "help"-jében néztem hogyan is kell használni a data EEPROM-ot és ekkor láttam hogy van egy #ROM deklaráció. Most reggel kipróbáltam ennek a deklarációnak az elhagyásával, azaz csak írtam egy tetszőleges memóriacímre meg olvastam(write_eeprom(),read_eeprom() ) és működik.
Azt hittem a #rom deklaráció kötelező, de akkor úgy tűnik, hogy nem.
Köszönöm a válaszokat mostmár legalább tudom mire jók ezek a deklarációk.
Következő: »»   72 / 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