Fórum témák
» Több friss téma |
Szia!
Melyik MpLab -ot használod? A 8.89 -est? Akkor a zip -ben levő ESR.mcp állományra kattintva indítsd el az MpLab -ot. Aztán a Build ikonnal fordítható...
Na ezt a problémát megoldottam, de jöt újjabb
LED fényerejét szeretném szabályozni. Két byte-ot küldök a PIC-nek, elsőben az utasítás van, másodikban pedig, hogy mekkora legyen a led fényereje. A PIC-ben a programrészlet:
A gépen pedig egy trackbar értékét küldöm:
Ugyebár a 3 jelzi, hogy PWM beállítás jön, és a következő 8 bit pedig a pwm értéke. A probléma az, hogy ha állítgatom a trackbart, akkor egyszer csak lefagy a programom. Működni működik egy darabig, állítódik a LED fényereje, azonban egyszercsak lefagy. Valami más módszert kellene alkalmaznom esetleg?
A program közben folyamatosan beolvassa egy AD konverter értékét. Arra gondolok, hogy összeakad, amikor küldené a PIC az adatot, akkor küldené a gép is... Lehetséges ez? Nem találok megoldást, hogyan tudom megnézni éppen nem-e fogad a port adatot.
8.89-es mlpab-om van amit te küldtél az hiba nélkül fordítom, én F10-el csináltam, csak nem úgy sikerült a változtatás mint ahogy én képzeltem nem jó a mérték egység azt szerettem volna változtatni.
Meg még olyan hiba van a progiban, hogy ESR értéket egyáltalán nem mér.
Szia köszi a program átírást jó lett a program csak a mérték egységgel kell majd eljátszanom. Kondi mérés az tökéletes, de ellenállást nem mér, de szerintem ez már valami áramköri hiba lehet.
A hozzászólás módosítva: Márc 4, 2013
HI-TECH PICC fordítóról áttértem MCC18-ra. Több forrásfájllal dolgozok. Például van egy header állományom, amiben a program változóit gyűjtöm. A HI-TECH-ben minden olyan állományba betettem ezt a headert, amiben szükség volt valamelyik változóra. Az a módszer sajnos nem működik az MCC18-ban, mert ha berakom több állományba, akkor azt mondja, hogy többször van definiálva a változó. Valaki meg tudná mondani, hogy hogyan lehet ebben is több forrásfájllal dolgozni úgy, hogy van közös header fájl is?
Szerk.: Csatoltam egy példát. Ha használni akarom az LCD_Driver.c-ben a valtozok.h-ban definiált változót (237. sor), sehogy nem jön össze. A hozzászólás módosítva: Márc 4, 2013
Hali! Én is hasonlóan csinálom mindenhol. Elég ha amiben mondjuk a main van annak az elejére includolod be. Ezután jön a többi. Úgy képzeld el, olyan a hatás mintha azokat oda írtad volna ahol be van csatolva.
Sziasztok!
Van egy négyszögjel generátorom, aminek a kimenete alapból 5V-ra van húzva. Ennek a jelét szeretném számolni a pic timer1 moduljával counter módban. Hogyan tudnám ezt megtenni? Sajnos akárhogyan állítgatom a T1CON-t, nem számolja a jelet. Timer0-val viszont tökéletesen működik. Az lenne a baj, hogy a TMR1 értéke csak magas szintre nő eggyel, de nekem sajnos alacsony szintű jelek jönnek? Hogyan tudnám megoldani?
Nehéz így válaszolni, hogy nem raksz be kódot.
Az éllel nem lehet olyan gond, hogy egyáltalán nem számol, csak nem akkor lép amikor kezdődik a jel hanem amikor vége van, hiszen ha valami fentről lemegy, ahhoz, hogy újra lemenjen fel is kell mennie. Tehát egy ciklus alatt lesz egy amikor magasról alacsonyra csökken, majd alacsonyról magasra vált. Amúgy itt egy elég jó leírás(ha nem ismernéd még):Bővebben: Link
HI-TECH-ben ez működik is így, itt nem. Ha az LCD_Driver.h-t a main.c-be rakom csak be, akkor az LCD_Driver.c nem látja a hozzá tartozó .h-ban lévő dolgokat. Ha mindkettőbe berakom, az se jó neki.
Esetleg megpróbálhatnád azt, hogy az LCD_Driver.h elejére és végére beteszed ezeket a sorokat:
Ez elvileg kivédi a többszörös includolást, de nem vagyok benne biztos, hogy így is jó lesz. Nekem kicsit rossz programfelépítésre utal az, ahogy ezt szeretnéd csinálni. Ha az kell, hogy egy változó több forrásfájlból elérhető legyen, akkor az egyik fájlban megadod normál módon, a másik (többi) fájlban pedig létrehozod ugyanazon a néven, csak elé teszel egy extern szócskát. Ebből tudni fogja, hogy azt a változót valahol máshol találja.
A linket köszi, már olvasom is. A külföldi oldalakat már feltúrtam, hátha mond ez is némi újat.
Az idevágó rész valami ilyesmi:
Köszönöm, a második megoldással működik. Viszont akkor továbbmegyek, hogy tudom használni több .c állományban az egy .h-ban mondjuk egy elnevezett kimenetet? Pl. ezt:
Szerk.: A függvényhívás működik több állományban. A hozzászólás módosítva: Márc 5, 2013
Csinálsz egy másik .h fáljt, abba teszed az elnevezést, azt bedig beincludolod minden olyan forrásodba, ahol szükség van rá. A microchip demo programoknál erre való a HardwareProfile.h nevű fájl. Ebben semmi más nincs, csak az ilyesmik.
Azt szeretném még kérdezni, hogy az a programban látod-e, hogy a "c" portokon 3,4,5 porton stabil 5 voltot kel, hogy kiadjon mivel szerintem itt valami vezérelt dolog kéne mivel egy 4066-os ic kapcsolgatná műveleti erősítőket.
még nem tudtam kipróbálni másik ic-vel de ma megteszem.
Milyen frekvenciát akarsz vele számoltatni?
Mi fagy le? Nem a kommunikáció ( tegyél egy led be-kikapcsot minden bejövő adatnál és meglátod! ) ?!
Steve
Ennek a szenzornak a jelét szeretném mérni:
Bővebben: Link
Megcsináltam úgy, hogy csak akkor küldjön a PIC adatot, ha én kérek tőle. Így működik!
És abszolút nem számol ,vagy össze vissza ad valamit ?
Nem lehet hogy a kiolvasás végén törölni kellene a timmert, mert szerintem így nem ad kiértékelhető eredményt.Csak folyamatosan pörög körbe körbe,a kiolvasás pillanatától függ éppen mit mutat ,az átfolyt mennyiséghez majdhogynem semmi köze a kapott számnak.
Sajnos egyáltalán nem mér. A program egyébként nem ez, csak kivágtam egy részt belőle és átfogalmaztam 1-2 dolgot, hogy kiragadva is értelmezhető legyen.
Úgy tudok valami mérésfélét kicsikarni belőle, ha a jeladót lecsatlakoztatom, a pic lábát lehúzom földre(3K6), majd a pic lábát egy egyszerű vezetékkel elkezdem felváltva a +5V és GND között kapcsolgatni. Ilyenkor sikerül 4-5-ig elszámolnia, de semmi több. Az FM2 értéke egyébként nem törlődik, hanem folyamatosan hozzáadódik, egy plusz jel lemaradt a kódból. Kicsi lenne az ellenállás? Esetleg túl nagy?
Szia! Visszatértem az encoder megszakításra, most kondikkal jó lett. Viszont még mindig van egy kérdésem, amit egyszerűen nem értek. Ha ugye pollingos módszert használok, akkor mindig figyelnie kell a procinak a lábakat, és csak akkor írja ki az lcd-re az értékeket, ha odaért a program, viszont megszakításnál flag-ot adok meg, azt is csak a főprogramba tudom feldolgozni, tehát ezt is figyelnie kell mindig, és csak ha odaér, akkor írja ki lcd-re. Tehát azt sehogy nem tudom megoldani, hogy bármit is csinál a pic, bárhol is tart a program, ahogy megszakítást kap az encoderről azt azonnal ki is írja az lcd-re (mert ugye semmilyen lcd kiiratást nem enged a megszakítás procedure-ban)?
Szia!
A kulcs szerintem az "azonnal" szavon van: mit értesz ezen? Ha a főhurok 0,1s-ként lefut, akkor egy kiírás szerintem "azonnal" látható lesz! Mit csinálsz a főprogramban, ami annyira blokkolja, hogy a megszakításból kapott jelzést csak sokára tudja feldolgozni ( várakozni nem kell a főprogramban számoltatással, azt a megszakításban elintézed egy változó csökkentésével és ha "lefogyott" nullára, akkor megcsinálod a hozzátartozó feladatot! ) ! Steve
Köszi a választ. Ez igazából csak elméleti kérdés, nálam nincs ilyen probléma, csak ha olyan program lenne, vagy akkor olyan hosszú feladat nincs elvileg ahol ilyen probléma lehetne?
Ha viszont így van, akkor miért használnak inkább megszakítást az encoderhez, ha a pollingos módszerrel is ugyanolyan hamar odaér a program?
Oké, átfogalmazom a kérdésemet.
Itt a kód:
A problémám az, hogy ha NE555-tel ráküldök az RB6(T1CKI) lábra egy négyszögjelet, akkor gyönyörűen megszámolja a felfutó éleket. Ha viszont rákötöm ezt: Bővebben: Link, akkor egyáltalán nem számolja a felfutó éleket. Elvileg egzakt négyszögjelet állít elő a szenzor. Mi lehet a hiba? Miért nem hajlandó számolni? A hozzászólás módosítva: Márc 5, 2013
Csak hirtelen néztem a szenzorra, azt az R* felhúzó ellenállást betetted?
Igen. TMR0-val az RA4(T0CKI) lábon szépen számolja is az éleket, csak a TMR1 nem akarja.
|
Bejelentkezés
Hirdetés |