Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Nincs trükk. Definiáld a kellő lábakat: Bővebben: Link
Rendben, átnézem. Lesz még hozzá DS18B20 is, az meg '1 wire' kommunikációs. Meglesem Te hogy csináltad meg anno (gondolom nem ccs-ben)
És elérhető a c forrás is? A cikkben csak az asm fájlt találtam, én meg még csak ccs c-ben garázdálkodom
![]() ![]()
Üdv!
A nokia 3310 kijelző nem I2C-vel működik, hanem SPI-vel, amit meg tudsz írni szoftveresen is. A hozzászólás módosítva: Nov 18, 2013
Jogos! Összekevertem az rtc modullal, az az I2C-s.
Na akkor lesz itt már 3 féle kommunikáció ![]() Plusz még rs232 is, mert egy gsm modulon is kommunikálok, ha nagyon merül vagy ha csak szimplán le akarom kérdezni az adatokat. Az sms meg 7 biten kódol, de ezt már megírtam 2003-ban a szakdolgozatomban. Csak elő kell kotorni ![]()
Na, ezért érdemes tervezni, építkezés előtt. Ha nem össze-vissza válogatsz, akár 2-4 lábon keresztül is megoldhattad volna az összes kommunikációt
Terveztem!
1, mit szeretnék megvalósítani 2, mi van meg hozzá (hardver) ![]() Természetesen jobban is meg lehetne oldani, de itt egy kicsit a tanulás is cél! Szabad láb meg van bőven szerencsére.
Na, lesz itt szakmai tapasztalat bőven! Majd írd meg légy oly szíves a tapasztalataidat.
Én különösen a belső refrencia (16F688) használatára lennék kíváncsi mint AD ref, mert vagy rosszul olvastam a dokumentációt, vagy félreértettem valamit. Előre is köszönöm.
Rendben! De nem használom a belső referenciát, az egy mellékvágány volt csak az A/D pontosítására.
Idézet: „Terveztem! 1, mit szeretnék megvalósítani 2, mi van meg hozzá (hardver)” Ez tetszik! 1. Szeretnék egy oda-vissza játszós atomreaktort, ami csokipudingot főz reggel és behozza a kávém. 2. Nincs hozzá semmi 3. Belevágok! ![]() Idézet: „oda-vissza játszós” Levehető előlapos is legyen, nem? ![]()
A második pont nem egészen igaz, neki volt hozzá ez-az
![]()
Helló,
CCS 5.015, RTOS, PIC18F87k22, FUSES NOWDT. A probléma a következő: a PIC hébe-hóba újraindul, a restart_cause() szerint WDT_TIMEOUT van, de a saját kódunkban nem használjuk a watchdog timert. Találkozott valaki már hasonlóval? Lehetséges az, hogy az RTOS-nak a belső működése váltja ki valami miatt?
Sziasztok! Akkutöltőt építek 16F819-es pic-kel, de máa a feszkijelzésnél vannak gondjaim. Az ADC által mért értéket átkonvertáltam mv-okra, osztottam ezerrel, akkor megvan az egész volt, aztán modulud osztással a maradék. Az LCD-re íráskor viszont van egy olyan problémám, hogy a tizedespont után a maradék elejéről az értékes nullák eltűnnek, ezért pl 2.015V helyett 2.15V-ot ír ki. Hol a hiba, mellékelem a forráskódot, a válaszokat előre is köszönöm.
A 3db int16 helyett akár egy float-ot is használhatnál és nem kellene konvertálni/szétbontani.
Float-tal még nem volt dolgom, tudnál valami linket, esetleg példaprogit mutatni, hogy azzal hogyan kell dolgozni?
Elvileg a "%0d"-nek kellene a bevezető nullákat megtartani. Ez C standard, de nem próbáltam ki.
Bővebben: Link A hozzászólás módosítva: Nov 24, 2013
Nézd meg ezt:
Sziasztok!
WDT-el akadt egy kis gondom 18F4550 procin. Környezet: MPLAB 8.90 + CCS 4.016. Annyit szeretnék, hogy legyen WachDog, de a program egy részén szeretném letiltani, majd később újra engedélyezni. Kód elején:
Majd nem sokkal később (még mielőtt WDT lejárna):
Illetve, amikortól akarom, hogy legyen:
Ennek ellenére a PIC újraindul azon a szakaszon, ahol elvileg ki kellene lennie kapcsolva. Csak akkor tudom elkerülni a folyamatos újrainulást, ha eleve az elején kikapcsolom:
..de akkor ugye nincs WDT, amit pedig szeretnék, hogy legyen. Köszönöm az ötleteket! Ádám A hozzászólás módosítva: Nov 28, 2013
Szia!
Hát a WatchDog már csak ilyen ![]() Ezért csak a tok programozásánál módosíthatod a beállítását, később már csak újbóli programozással ![]() A hozzászólás módosítva: Nov 28, 2013
Fordítva kell felülni a paripára! Ha a konfigurációs bittel letiltod a Watchdog timert, akkor onnantól a WDTCON regiszter SWDTEN bitjével lehet ki-be kapcsolgatni. Mint például ebben a mintaprogramban (PICCOLO projekt a honlapomon). Ha a konfigurációs biteknél engedélyezetd, akkor a szoftveres vezérlés letiltásra kerül.
Hogy mindehhez a setup_wdt() hogyan viszonyul, azt én nem tudom. Utóirat: a PIC18F4550-nél WDTCON-nak csak a legalsó bitje van implementálva, tehát ennyi is megteszi:
A hozzászólás módosítva: Nov 28, 2013
Miért kell ki-be kapcsolgatni? Ha van delay-ed ami keresztbe tenne, azt ki lehet iktatni
pl.:
Köszönöm a válaszokat!
Akkor összefoglalom: elvileg a WDTCON bittel tudom ki-be kapcsolni a WatchDog-ot, de az az általános nézetetek, hogy ne kapcsolgassam, mert ha eltéved a program, véletlen kikapcsolja a WTD-ot (ha épp ahhoz a sorhoz ugrik) és utána fagy ki.. ez jogos. Viszont amit nem értek, hogy mire is megoldás a:
C-ben nem vagyok nagy pro, csak ilyen balf*sz programokat szoktam írni, és én eddig úgy tudtam, hogy a fenti kód a proci CPU-órajelét állítja be, tehát ha ide beteszem a RESTART_WDT argumentumot, az nekem mire is jó? Vagy én nem értem a válaszokat (ez a valószínűbb), vagy Ti nem értitek még a problémámat. A helyzet az, hogy van egy szaunavezérlő, ahol nem akarom, hogy legyen WDT az elején, amíg a felhasználó beállítja a szaunázási paramétereket, de utána, amikor elindítja a fűtést, már legyen, nehogy lefagyjon a kontroller behúzott relék mellett és 310 fokosra fűtse a szaunát, mondjuk ha ott hagyják. Amúgy azért nem akarom az elején a WTD-ot, mert azt a hő-szabályozást is megvalósító timer3 által okozott interrupt-rutinban resetálom, és a szaunázási paraméterek beállításakor ennek még nem kéne futnia (hiszen akkor elindulna a fűtés idő előtt), ennek okán letiltom az interruptokat az elején. Persze lehetne egy másik timer interrupt-rutinjában resetálgatni a WDT-t, de sajnos minden timert felhasználtam már másra hasonlóan a timer3-hoz, és azoknak sem kellene futni az elején. Vagyis van még a timer2, amik lehetne használni, de azt nem tudom felkonfigurálni, mert valamiért nem fordul le ![]() Tulajdonképpen az is jó nekem, ha megmondjátok, hogy a timer2-t adott CCS verziószám mellett hogy kell konfigolni. Köszönöm a segítséget! Ádám A hozzászólás módosítva: Nov 28, 2013
Egy olyan lehetőséget képzelek, hogy csinálok egy flag-et, ami azt jelzi, hogy már túl vagyunk-e a paraméterbeállításokon. A timer3 megszakítás-rutinjában pedig:
if(flag==0), akkor csak a WDT-t nullázza, a hő-szabályozást ne végezze el, ha pedig if(flag==1), akkor a WDT-is resetálja meg a szabályozást is végezze el. Kicsit favágó, de működhet. Azért szívesen veszek továbbra is minden választ/ötletet. Kössz! Ádám A hozzászólás módosítva: Nov 28, 2013
Mivel a WDT működése abban rejlik, hogy avatkozzon be ha a programod (látszólag) "áll". Mivel lehet paraméterezni a WDT-t, elképzelhető, hogy a WDT értéke kisebb, mint pl. egy delay. Amit írtam, pont ennek kiváltására van. Ne adjon resetet egy hosszabb állásnál.
A programodat kell úgy írni, hogy alapesetben flag-ekkel operáljon és a pollingozásnál se legyen "leállás". A timerek használata kézenfekvő lehet, de az esetek nagyrészében elég az egy timer, amit menet közben átkonfigurálhatsz, az adott részfeladat elvégzéséhez.
Akkor ennek fényében nekiesek újra. Menni fog. Köszönöm!
|
Bejelentkezés
Hirdetés |