Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Bele drotoztak az EXE-be ott De figyi, szerintem rakeresel a neten, hogy "cpp.exe download windows" es biztos talalsz egy valaggal elore leforditva
Van egy a C32-ben is, de nem műkszik vele. Azért rákeresek egyre, ha az elegendő. Hogy fog együttműködni a fordítóval az előfordító? Nem látom át, hogy an működhet ez?
Rákerestem. Minden, csak nem egyértelmű találatok... Ha rájöttél, hogy melyik lenne jó, és működik is nálad, akkor kérlek majd jelezd!
Sziasztok!
Nem tejesen az aktuális témához kapcsolódó probléma, de számomra teljesen érthetetlen. Írtam egy programot egy PIC16F877-re Ccs-C -ben mely egy RC szervo motort vezérel", ez tökéletesen sikerült is: a szervo szépen forgott oda ahova kellett. Ezek után átírtam a progit egy 16F628A-ra (ezzel szereném majd vezérelni valójában). De ezen az uC-n már nem ment minden olyan jól: a szervó "rángatva" fordul ill. sokszor mintha nem találná a helyét. Azért sem értem, hogy mi lehet a baj mivel a programon annyi változtatást csináltam, hogy átírtam a PIC nevét és a lábkiosztást. Itt a progi: Idézet: „ #include <16F628A.h> #zero_ram #fuses HS, NOWDT,NOPROTECT,NOPUT,BROWNOUT,NOLVP #define SERVO PIN_B3 #define LED PIN_A2 #use delay(clock=10240000) int16 second; // sec int16 period; // periodus int16 dutycycle; // '1' -es jel hossza int16 ms; //milisec int16 qs; // 100 mikro sec (servohoz) int16 us; //100 mikro sec int16 min; // perc int16 pc; // temp enum inter { lowtohigh=0, hightolow=1 } allapot=hightolow; #int_TIMER0 void TIMER0_isr() { //*********** idő számlálás ************ us++; qs++; if (us==10) {ms++; us=0;pc++;} if(ms==1000) {ms=0; second++;} if(second==60){second=0;min++;} //************************************** //******* Szervo **************** if((allapot==1 )&& (qs==(period - dutycycle))){ output_bit(SERVO,1); allapot=0; qs=0;} if(allapot==0 && qs==dutycycle){ output_bit(SERVO,0); allapot=1; qs=0;} } //******************************* //****** Initcializálás **************- void inits(){ output_toggle(LED); //LED kapcsolás allapot =1; // "lent" kezdjük a szervó jelet period=250; //periódus hossza dutycycle=10; // high szint hossza //********** Setup ***********- set_tris_a(0x02); //A porton LED helye kimenet set_tris_b(0); //B port kimenet setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); //TMR0 setup //********* Megszakítés engedélyezések **************- enable_interrupts(INT_TIMER0); //TMR0 megszakítás eng. enable_interrupts(GLOBAL); //Global Interruptsot bekapcs } void main(){ inits(); //inits fv. while(1){ // végtelen ciklus if(pc==1000 ){ // 1000ms = 1s-enként váltja a szervó az irányát pc=0; if(dutycycle==20){ dutycycle=10; } else { dutycycle=20; } output_toggle(PIN_A2); // minden váltásnál a LED is "vált" } }” Előre is köszi a válaszoakt!
Na ezt meg én nem tudtam hogy makróban a paraméterrel lehet külön a linker-el matekolni...
Na ha ez működik akkor nagyon patent... Hol találtad ezt leírva?
Nem találtam ilyesmit(alig van példa a neten ASM-ban, minden C-ben van!), kipróbáltam és bejött.
Találtam egy szkópot, ami asm-ban van(dsPIC304011). Az include-olást tanultam belőle( .extern, külső rutin elérése *.inc fájlban), da van még néhány jó rész benne, csatoltam, hátha segítek vele. (Full verzió miből? Lehet, hogy ezt privátban kéne...)
Szerintem legegyszerubb ha leszeded a gcc-t ill az egesz MinGW eszkozt a MinGW oldalrol. Probaltam kiherelni, vegulis a cpp.exe es a cc1.exe kellene hozza, de 1.8MB es igy nem szeretnem csatolni.
Nyílván csonkol, hozzá kell adni 0.5-et a csonkolás előtt. Ha egészekkel számol, akkor meg ki kell számoltatni a 10-szeresét, ahhoz adni 5-öt és utána tizedelni. Elég gány, de így lehet a csonkolásból kerekítést csinálni.
Ha nem titok, hogy hol van az a szkóp, akkor beírnád az elérhetőségét? Kicsit megnézegetném, hogy hogyan is működik.
Sziasztok!
A következő problémával fordulok hozátok: Építettem egy órát PIC16F628A-val és SN7448-al. A PICbe a vicsys által közétett bináris óra programját égettem be. Az óra méri az időt szóval működik valamennyire viszont a számokat pont fordítva írja ki mint ahogy kéne. Szóval a hétszegmenses kijelzőkön 1 helyett egy "E" betűt lehet látni. A képen az óra éppen azt akarja kiírni hogy 13:25 pont fordítva világítanak a szegmensek. Mit lehetne vele tenni hogy normálisan jelezze az időt? Válaszokat előre is köszönöm. Üdv! Levii
vagy átírni a pic progiját, hogy negálva küldje ki a a jeleit, vagy hardveresen negálni, pl tranyókkal, vagy más kijelzőt használni, tehát ha ezek közös katódosak akkor közös anódosokat.
bár a bináris órát i snagy kihívás egyeseknek leolvasni, hát ezt se sokkal könnyebb... maradjon így, csak te fogod tudni mennyi az idő
Mivel egy BCD dekódert használ a kapcsolás, ezért a programot nem tudod átírni. Marad az, hogy a megfelelő kijelzőket használsz, a jelenlegi nem megfelelők helyett. (nem tudom milyen kell, de az ellenkezője van most bennt. (anódos <-> katódos)
Köszi a választ neked is és báddzsónak is, közös anódos kijelzőket használok.
Valószínűleg akkor így marad. Üdv!
trudnai!
Neked sikerült már analog stimulust készíteni? (dsPIC30F2020 ADM30, nem tudom ez számít-e ezügyben)
Használj CD4543 meghajtót, ott ki lehet választani, hogy katódos vagy anódos a kijelződ.
Már én is néztem de ahhoz új nyák kéne ellenben a 7446 és a 7448 között csak az a különbség hogy anódos vagy katódos a lábkiosztásuk teljesen egyforma szóval szerintem ki lesz cserélve.
Bocsi az offért, megéri ezzel foglalkozni? A gyári cucc demo panellal, garanciával 5e+fa.
Ez az: Bővebben: Link
Nekem kb 2000 alatt jött ki Szilva klónja. Szerintem megéri, ha mást nem vésztartaléknak
Sziasztok
Lenne megint egy kérdésem: ICD2 használatához a PGC,PGD lábakat (PORTB<6:7>) kimenetnek,vagy bemenetnek kell konfigurálni? köszi.
ICD2 használatához nem kell a lábakat konfigurálni, mert az ICD állapot olyan nulladig típusú állapot.
Semmi dolgod vele igazából. Rárakod az ICD-t betartva azt a pár dolgot amit ír a microchip az ICD2 poszteren és kész. Megy minden magától.
EZ a kijelző milyen rajta? Az ok hogy valami 128x64-es de egyenlőre nem jöttem rá hogy milyen grafikus vezérlő ez itten benne...
Érdemes lehet megcsinálni szerintetek?
Milyen kijelztől beszélsz?
Hogyha arra gondolsz ami a linken van akkor oda van írva hogy Idézet: .„1x Lumex LCM-S12864GSF Graphic LCD (or similar 128x64 GLCD with KS0107/KS0108 controller)” Üdv!
Köszi.
Igazából megy,nincs vele gond,csak tudni akartam hogy amikor beállítom a TRISB-t akkor mit írjak bele.Kimenetnek konfiguráltam.
Jó van na... Tök fáradt vagyok. Ilyenkor felületes is sajna....
Igazából az a legjobb hogy ha nem csak programozni hanem debuggolni is akarod, akkor jobb ha az az 2 lábat el is felejted. Persze lehet használni, de én nem szeretem keverni a dolgokat. Tökmindegy mindek konfigurálod. Nem számít.
Én se úgy írtam mint valami szemrehányást, remélem nincs harag...
Nem, tényleg nincs semmi harag. Csak teljesen kész voltam mint a mateklecke. Ilyenkor jobb lenne aludni, de én csak húzatom magam még egy kicsit. És látod ez az eredménye. Abszolute no problem. Még jó is volt a hír.
7446 vagy 7447 jó lesz oda. Viszont azt érdemes tudni, hogy a 46 és 47 elég fura, egyenes szárú 6-ost és 9-est generál, ha a jobban megszokott, behajlított szárú számokat akarsz, akkor 74246 vagy 74247 kell.
|
Bejelentkezés
Hirdetés |