Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   124 / 153
(#) c27 válasza Lamprologus hozzászólására (») Márc 12, 2016 /
 
Próbáltam, de nem működik. Nem ír ki semmilyen számot. Ha benne hagyom a °C akkor csak annyit, ha nem akkor a szám helye üres. Bár én nem LCD_putc-t használok, hanem user_putc de ettől függetlenül működnie kéne.
Egyébként jobb is lenne ha működne, mert jelenleg csak a tizedespont utáni értékeket tárolom a táblázatban és van 5-6 if függvény amivel vizsgálom mikor milyen számot kell elé írni + a tizedespont, ami kicsit zavaró és felesleges.
A változóm unsigned char volt de átírtam unsigned intre, de úgy sem jó.

A másik gondolom, hogy még mindig nem jöttem rá miért kell a POT1-nek unsigned int-nek lennie a char helyett. Csak nem működik unsinged charral a fentebb említett hiba még mindig fennáll.
A hozzászólás módosítva: Márc 12, 2016
(#) foxi63 válasza c27 hozzászólására (») Márc 12, 2016 /
 
esetleg itoa () függvény és ezután bebiggyeszted a pontot és sztringként kiírod.
(#) c27 válasza foxi63 hozzászólására (») Márc 12, 2016 /
 
Az itoa-t nem ismerem, majd megnézem, de jobb lenne ha működne a printf-el ez a tizedes kiírás, hátha a kolléga meg tudja mondani mit rontottam el.
(#) Kovidivi válasza c27 hozzászólására (») Márc 13, 2016 /
 
Neked kellene utánanézni pontosan, hogy a printf függvény hogyan működik... Szerintem.
A hozzászólás módosítva: Márc 13, 2016
(#) potyo válasza c27 hozzászólására (») Márc 13, 2016 /
 
POT1 azért kell, hogy unsigned int legyen, mert a C mindig annyi biten képzi az eredményt, ahány bitje a legszélesebb operandusnak van. Két 8 bites szám szorzatát ezért 8 biten képzi, ezzel gyakorlatilag levágva a felső 8 bitjét az eredménynek. Ezért vagy eleve a POT1 kell, hogy 16 bites legyen, vagy helyben kell castolni 16 bitesre.
A hozzászólás módosítva: Márc 13, 2016
(#) c27 válasza potyo hozzászólására (») Márc 13, 2016 /
 
Oh, így már világos. Kösz!

Akkor már csak a printf-es problémát kellene megoldani.
(#) c27 válasza benjami hozzászólására (») Márc 13, 2016 /
 
Most néztem még meg az excel tábládat, kb én is így csináltam a lényege, hogy a kíván érék százszorosával számolsz, de valahogy kiíratni így is ki kell a tizedespontot én erre lennék kíváncsi.
(#) Wezuv válasza c27 hozzászólására (») Márc 13, 2016 /
 
Írsz rá egy rutint...
A hozzászólás módosítva: Márc 13, 2016
(#) benjami válasza c27 hozzászólására (») Márc 13, 2016 /
 
Én mindig 'frame buffer'-t szoktam használni az LCD-hez, ott meg csak odébb kell pakolni 1-2 karaktert, utána meg a pontot beletenni.
(#) c27 válasza benjami hozzászólására (») Márc 13, 2016 /
 
Mindegy megoldottam printf-en belül ezzel:
printf("%d.%02d", POT_2/100, POT_2%100);
Most már csak optimalizálni kéne a programot, amin lehet gyorsítani, bár még lehet így is jó lenne, sajnos nem tudom hogy lehet szimulálnia program futását C18-ban, nem fogalmam sincs milyen gyors a progi. A disassemblyt még nem néztem.
A hozzászólás módosítva: Márc 13, 2016
(#) foxi63 válasza c27 hozzászólására (») Márc 14, 2016 /
 
debugger->settings órajelet beállítani és ezután break pontokat teszel a program bizonyos részeire és méred az időt . ( stopWatch)
A hozzászólás módosítva: Márc 14, 2016
(#) c27 válasza foxi63 hozzászólására (») Márc 14, 2016 /
 
Kösz.
(#) c27 válasza foxi63 hozzászólására (») Márc 14, 2016 /
 
Sajnos akadt egy kis problémám a debug-al. Elindítom, majd nyomok egy szünetet és nem látom a zöld nyilat, hol jár. Ha nyomom a lépkedést lépked valamerre, de hogy éppen hol jár azt nem mutatja. Valami nincs jól beállítva?
(#) kissi válasza c27 hozzászólására (») Márc 14, 2016 /
 
A C-ben beírt egy utasítás gépi kódban általában több...ott lépked ( megláthatod, ha a disassembly ablakot nézed ! ), vagy használj F8-at a lépkedésre és akkor 1-1 utasítást "lelép" !
A hozzászólás módosítva: Márc 14, 2016
(#) c27 válasza kissi hozzászólására (») Márc 14, 2016 /
 
Disassembly: !Source not found, file: E:/3.46/pic18-lt/cxx-framework/src/traditional/delays/d10ktcyx.asm
(#) kissi válasza c27 hozzászólására (») Márc 14, 2016 /
 
View --> Disassembly Listing ( MPLAB IDE-nél, MPLABX-nél nem tudom ! ) !
(#) c27 válasza kissi hozzászólására (») Márc 14, 2016 /
 
Megtaláltam, de ott sem lépked és a zöld nyilat még mindig nem látom.
Ráadásul jó hosszú kódot generált majdnem 10x annyi mint c-ben.
A hozzászólás módosítva: Márc 14, 2016
(#) kissi válasza c27 hozzászólására (») Márc 14, 2016 /
 
Pedig ott már kell, hogy lépkedjen, ha jó a projekted !
(#) c27 válasza kissi hozzászólására (») Márc 14, 2016 /
 
Akkor valami nem stimmel. Lefordulni lefordul és proteusban működik.
(#) Hp41C válasza c27 hozzászólására (») Márc 15, 2016 /
 
Idézet:
„Elindítom, majd nyomok egy szünetet és nem látom a zöld nyilat, hol jár.”

Ha magas szintű nyelven végzed a nyomkövetést, a beépített eljárásokat és függvényeket nem tudod nyomkövetni. Ekkor néhányszor addj ki "lépés" parancsot. Ha az optimalizálás be volt kapcsolva a fordításkor, a kódban rendszertelenül fog lépkedni a nyomkövetés, de előbb - utóbb eljut a keresett sorra. Célszerűbb a vizsgálni kívánt sorra töréspontot tenni.
(#) Wezuv válasza c27 hozzászólására (») Márc 15, 2016 /
 
Ilyen akkor is szokott lenni, ha pl. nem törölsz egy megszakítás jelet és beragad egy megszakításba, vagy a megszakítás indoka állandóan él(soros port, timer stb). Elvileg a megszakításban kéne forognia, még sem azt látom az X-ben. Biztosan sok időt tölt a megszakításhoz szükséges mentések, visszatöltések között a szál és azt nem mutatja...
(#) usane hozzászólása Márc 16, 2016 /
 
Üdv!

Továbbra is az a kérdésem, meg tudom e oldani valahogy, ha SFR tömböt szeretnék létrehozni, pl:
PWM_DC[] = { OC1R, OC2R, ..., OC6R }
?
Próbáltam többféle képpen, de nem sikerült az értéket átadni az SFR-nek.
Megoldható ez valahogyan?
A hozzászólás módosítva: Márc 16, 2016
(#) Hp41C válasza usane hozzászólására (») Márc 16, 2016 /
 
Szerintem nem lehet így tömböt csinálni belőlük. Esetleg egy mutató tömb, aminek elemei az SFR -ekre mutatnak...
(#) foxi63 válasza usane hozzászólására (») Márc 16, 2016 /
 
Idézet:
„Próbáltam többféle képpen, de nem sikerült az értéket átadni az SFR-nek.”



Mivel a FSRx eleve egy memóriára mutató regiszter, ezért csak mutatót tudsz neki átadni.
Ha valahol van egy char tomb[10] tömböd, akkor dekralálsz egy függvényt:
void blabla( char * mut);

megvalósítás:
void blabla(char* mut)
{
FSR0=(unsigned int) mut;
// itt már használhatod a FSR0 az adott címre mutat
}
meghívása:
blabla(&tomb);
üdv.: Foxi
(#) c27 hozzászólása Márc 16, 2016 /
 
Fel szeretném venni a pwm frekvenciát 20-25kHz közé, de hiába a PTMRPS=1 (prescale) így is 20kHz-nél 250 25kHz-nél 200-ig kell elszámolni, így 50 egység marad 5000Hz-re én pedig legalább 10Hz-es léptékkel szeretném állítani a kimeneti frekvenciát egy potival.
Erre van megoldás? Csak az up/down count mód lenne jó nekem, de akár hogy gondolkodok még a 8 bites adc-t sem tudom kihasználni nemhogy a 10-est. Ennyit tudna a 18F4431?
A hozzászólás módosítva: Márc 16, 2016
(#) potyo válasza usane hozzászólására (») Márc 16, 2016 /
 
Fejből valami ilyesmivel próbálkoznék:
  1. unsigned char * PWMDC [] = { &OC1R, &OC2R, ... };

Használata meg így:
  1. *PWMDC[2] = 235;
(#) foxi63 válasza c27 hozzászólására (») Márc 16, 2016 /
 
Szia!
Nemegészen értem..

Powerpwm modul 14bit áll rendelkezésre, nem pedig 8.
A hozzászólás módosítva: Márc 16, 2016
(#) foxi63 válasza c27 hozzászólására (») Márc 16, 2016 /
 
utána néztem, és igen de a ppwm modul motorvezérlésre lett kitalálva oda meg jó ez.
(#) killbill válasza potyo hozzászólására (») Márc 17, 2016 /
 
volatile unsigned char *
(#) c27 válasza foxi63 hozzászólására (») Márc 17, 2016 /
 
Nem teljesen arra akarom használni, de mindegy. Most már ez van.
Ha mehetne 80MHz-ről akkor egész jó lenne.
Következő: »»   124 / 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