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 Bár mintha a hozzá tartozó topikban azt olvastam volna, hogy már nincs meg, mert más is kérte a régi DS1820 beszerezhetetlensége miatt? Hirtelen annyi az infó, hogy nem tudom mi hol volt és hova tartozik
Ü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ó '1 wire', I2C és SPI is! 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 , nem lehet kikapcsolni, ha egyszer a tok programozásánál bekapcsoltad! Gondold át, hogy mire való: zavar esetén a program rossz helyre ugorva ( ok: a zavarjel miatt a beolvasott utasítás megváltozik! ) kiakadhatna, ilyenkor a WD resetelés újraindítja a rendszert! Ha lenne lehetőség a szoftveres tiltásra, akkor a zavarjel véletlenszerűen pont a WD-t tilthatná le --> üzembiztonság megszűnhetne --> nem megengedhető!!! 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 |