Fórum témák

» Több friss téma
Fórum » MSP430 mikrovezérlők
 
Témaindító: gomzito, idő: Ápr 21, 2006
Témakörök:
Lapozás: OK   92 / 139
(#) szitko hozzászólása Jan 15, 2013 /
 
Sziasztok.

Ha engedélyezem a WDT-t "örkutya módban", akkor 32ms-ként ki kell adjam a "WDTCTL = WDTPW + WDTCNTCL;" parancsot?
A hozzászólás módosítva: Jan 15, 2013
(#) icserny válasza szitko hozzászólására (») Jan 15, 2013 /
 
Igen, 1 MHz SMCLK és maximális (15 bites) leosztásnál 32,767 ms alatt túlcsordul a WDT, ha közben nem törlöd.
(#) szitko válasza icserny hozzászólására (») Jan 15, 2013 /
 
Szeretném az "agyonbonyolított" programomban bekapcsolni a WDT-t, ha valami oknál fogva elakad valahol a program, indítsa újra. De.... az újraindítás előtt el kéne menteni pár nagyon fontos változó értékét a flash-be. A mentéssel nincs problémám, de azt nem tudom, hogy állítsam be a WDT-t, hogy ezt megcsinálja nekem.
Ha beállítom a WDT-t, hogy megszakítást okozzon és ott menteném az adatokat, akkor ha a program épp egy másik megszakításban akad el, soha nem jut el a WDT megszakításig. Vagy a WDT megszakítás máshogy működik? Vagy csak én nem értek valamit? Ha viszont engedélyezem a WDT-t, és, feltételezzük a 32ms-ot, 32ms-ként törlöm, akkor a "hibánál" nem lesz mentve semmi, mert resetel, mielőtt tudnák menteni.
(#) sunyeb hozzászólása Jan 15, 2013 /
 
Emlékeim szerint a WDT-nek nagyobb a prioritása a többi program megszakításénál. Ha RESET-re konfig-olod, akkor imho mindenképp végrehajtódik. Viszont ilyen beállítás mellett szerintem nem tudsz egyéb utasításokat végrehajtani a reset előtt. Nagy időveszteség lenne ha a "fontos adatokat" folyamatosan a flash-ben tárolnád és abból dolgozna a program? Vagy a korlátozott számú újraírhatóság miatt aggódsz? Ha nagy hülyeségeket írtam bocs' ne vedd készpénznek, valaki hozzáértő majd megmondja a tutit
(#) icserny válasza sunyeb hozzászólására (») Jan 15, 2013 /
 
Idézet:
„Emlékeim szerint a WDT-nek nagyobb a prioritása a többi program megszakításénál.”
Megszakításként, sajnos, nem egészen. Lásd adatlap Table 5.-ben!
Timer1 és Comparator A+ leelőzi. Ennek ellenére én ezzel próbálkoznék (mármint a WDT megszakítással).

Egyébként a WDT-hez az ACLK órajel is hozzárendelhető, így lényegesen hosszabb türelmi időszak is beállítható. (Ha nincs kristály, akkor VLO-t engedélyezni kell!)
A hozzászólás módosítva: Jan 15, 2013
(#) szitko válasza sunyeb hozzászólására (») Jan 15, 2013 /
 
Idézet:
„Nagy időveszteség lenne ha a "fontos adatokat" folyamatosan a flash-ben tárolnád és abból dolgozna a program?”

Igen.
Idézet:
„Vagy a korlátozott számú újraírhatóság miatt aggódsz?”

Igen.
A program "hosszútávra" készül, és az állandó flash újraírás, nemcsak "sok" időbe telik, hanem, hamar kihasználnám az újraírhatóság korlátait.
(#) szitko válasza icserny hozzászólására (») Jan 15, 2013 /
 
Idézet:
„Ennek ellenére én ezzel próbálkoznék”

Összedobtam egy programot, amiben engedélyeztem a WDT megszakítást. Csináltam egy "fals" hardveres i2c rutint megszakítással. Úgy csináltam meg, hogy az i2c olvasási rutinnál leálljon a program a megszakításban. Vártam, de nem ment be a WDT megszakításba.

Az a legnagyobb problémám, hogy a program elég sok időt tölt a különböző megszakítási rutinokban, és ha ott akad el, akkor..... nem ér semmit az "őrkutyus".
(#) icserny válasza szitko hozzászólására (») Jan 15, 2013 /
 
Idézet:
„Az a legnagyobb problémám, hogy a program elég sok időt tölt a különböző megszakítási rutinokban, és ha ott akad el, akkor...”
... akkor az a program rosszul van megtervezve. Megszakításba nem szabad blokkoló várakozásokat rakni.

A WDT megszakítás használatának feltétele, hogy a megszakításokból visszatérjen a program, s a WDT-nál magasabb prioritású megszakításjelző bit ne "ragadjon be". Ha nem ilyen a programod, akkor csak a WDT reset jöhet számításba, akkor viszont gond lesz a mentéssel.
(#) kissi válasza szitko hozzászólására (») Jan 15, 2013 /
 
Idézet:
„De.... az újraindítás előtt el kéne menteni pár nagyon fontos változó értékét a flash-be.”
Bocs, ha nem jól értem és esetleg nem jót mondok, de PIC-ezek jellemzően ! Ott a WDT újraindítás miatt "nem mennek tönkre" a változók értékei, csak az SFR regiszterek értékei állnak alapállapotba, pl. adatirány regiszter, hiszen a tápfeszt nem veszed el! Induláskor meg tudom nézni, hogy mi okozta a RESET-et ( gondolom itt is ) és annak megfelelően cselekszem ! Úgy gondolom, hogy itt is megtalálod újraindítás után a menteni kívánt változóidat ( ha meg be-kimenetekről beszélünk, annak csinál árnyékregisztert folyamatosan!
Steve
A hozzászólás módosítva: Jan 15, 2013
(#) szitko válasza icserny hozzászólására (») Jan 15, 2013 /
 
Idézet:
„Megszakításba nem szabad blokkoló várakozásokat rakni.”

Ha ez blokkoló várakozásnak számít:
Egy RTC megszakítást idéz elő (port_2), és a megszakításban kezelem le az LCD rutinokat is (óra kiírása). Miután kiírta az LCD-re az időt, kiszáll a megszakításból.
Akkor tényleg rosszul írtam meg a programot.
(#) sunyeb hozzászólása Jan 16, 2013 /
 
Esetleg az nem megoldás, hogy nem használod a Timer1-et, csak a Timer 0-t, akár counter változókkal? Annál viszont a WDT prioritása nagyobb.
Amúgy le van az valahol (összefoglalva) egzaktul írva, hogy mi történik resetkor? Mi veszik el, mi nem, milyen regiszterek állítódnak mire, stb...
(#) szitko válasza sunyeb hozzászólására (») Jan 16, 2013 /
 
Egyenlőre a szívinfarktus határán mozgok, mert egy egyszerű WDT törlést nem tudok megcsinálni.
1.:A program indításánál kikapcsolom a WDT-t :WDTCTL = WDTPW + WDTHOLD;
2.:Miután mindent beállítottam (port, stb), engedélyezem:WDTCTL = WDTPW + WDTSSEL; // VLO
Eddig minden a "nagy könyv" szerint megy, és a szimulációs ablakban úgy állnak a WDT bitjei, ahogy a parancsot kiadtam.
De, ahogy kiadom a WDT törlés parancsot, tehát '1'-be állítom/állítanám a WDTCNTCL bitet, abban a pillanatban resetel a mikrovezérlő, holott törölnie kéne a számlálót.
De nem adom fel, úgyis megoldom valahogy.

Ja. Használd a válasz gombot, mert így elég nehéz kibogarászni, hogy kinek írsz. Köszi!
(#) sunyeb válasza szitko hozzászólására (») Jan 16, 2013 /
 
Do not try to set only the WDTCNTCL bit either, as follows:

WDTCTL_bit.WDTCNTCL = 1; // Crashes

This causes a reset because it violates the password protection. Maybe the watchdog is not
quite so simple after all.

Nem lehet, hogy nálad is ez a gond? Mármint, hogy a WDTCNTCL bitet birizgálod PW nélkül?
(#) szitko válasza sunyeb hozzászólására (») Jan 16, 2013 /
 
Nem hiszem, bár most már semmiben nem vagyok biztos.
A teljes parancs: WDTCTL = WDTPW + WDTCNTCL; // WDT törlése

Az az érdekes, hogy igazából a WDT "eredeti (Watchdog mód)" funkciójáról alig találni valamiféle komolyabb leírás.
(#) VaZso8 válasza szitko hozzászólására (») Jan 16, 2013 /
 
Komolyabb leírás: MSP430x2xx Family User's Guide

A WDC watchdog módban egy PUC (Power-UP Clear)-t indikál (ha a WDT lejárt vagy nem megfelelő értéket kapott a felső (PW) bytera /05Ah/).

Tehát az a kérdés, hogy PUC hatására mi történik a RAM-ban lévő adatokkal és mennyire tudod ezt újra használni. Úgy gondolnám, hogy mivel végig tápfeszen van és nem láttam, hogy írná a törlést, az megmarad...

Több helyen ír ilyesmiről, pl.

Digital I/O Registers szekció (341. oldal):
Initial state oszlop - Reset with PUC vagy Unchanged.

Ez alapján pl. P1, P2 kimenet nem változik meg, persze szinte minden mást újra kell konfigurálni.

Egy másik oldalon pl azt írják, hogy
- Néhány C fordító automatikusan tartalmaz kódot, ami törli a RAM-ot PUC esetén (ez a jó, ha tudod kategória)
- Ha WDT okozta, az normál körülmények között változatlanul hagyja a RAM-ot.
Habár ha processzor crash miatt járt le, nincs módja megtudni, mit csinált a RAM-mal a processzor a watchdog resetet megelőzően.
- WDT security megsértés: általában programhiba vagy processzor crash okozza.
Ne bízz a RAM-ban. (Ill. az egyéb, súlyosabb hibák esetén sem.)
(#) szitko válasza VaZso8 hozzászólására (») Jan 16, 2013 /
 
Idézet:
„Komolyabb leírás.....”

Helyett: Komolyabb leírás!
Ezzel kellett volna kezdenem.
Mindenesetre köszi.
Maradva az előzőkben felvetett hibánál (WDT számláló törlése), odáig eljutottam, hogy ha a WDT a VLO-t használja, nem fogadja el a számláló törlő parancsot, hanem a parancs kiadásával rögtön reset lesz. Viszont ha az SMCLK-t használja, minden rendben megy.
Idézet:
„persze szinte minden mást újra kell konfigurálni.”

Ez lenne a célom hiba esetén. A "szerkezet" egy folyamatosan változó hőmérsékletű helyre lesz beépítve, természetesen az alkatrészek tűrésén belül változik a hőmérséklet, és ha valamiért megállna a program futása, elég nagy galibát okozna.
(#) mechanika hozzászólása Jan 16, 2013 /
 
Sziasztok!


Tömören az eddigiek, amik meg vannak:
1. ledek fényerejét szabályozom három funkcióval: +, -, és magától erősödő fény, amelyek közül három bemenet nyomógombjával lehet választani.
2. Icserny iránymutatása alapján a beállított fényerőt három különböző portra tudom irányítani.
3. a program alapját a: 8_2. lista: a pwm_led program adja.

További három dologra lennék kíváncsi az igen lassan haladó projektemmel kapcsolatosan:
1.
A ledek az idejük nagy részében nem világítanak, ezért gondoltam, hogy ekkor (amikor idx==0) aludhatna lpm4-ben az uc, energiatakarékosság végett.
Viszont teljesen elvesztem a dologban...
A kód bizonyára bőven tartalmaz sallangokat...

  1. #include "io430.h"
  2. #include "stdint.h"
  3. #include "intrinsics.h"
  4. uint16_t idx = 0;            // Index a kitöltési tényezők számításához
  5. uint16_t next_sqr = 0;       // A következő négyzetszám
  6. uint16_t sqr_step = 1;       // Új növekmény a négyzetszámok kiszámításához
  7. uint16_t new_ccr1 = 1;       // A kitöltési tényező
  8. volatile int jelzo = 0;      // Jelző a főprogram irányításához
  9.  
  10. int main(void) {
  11.          WDTCTL = WDTPW|WDTHOLD;    // Letiltjuk a watchdog időzítőt
  12.          BCSCTL1= CALBC1_1MHZ;      // A gyárilag kalibrált 1 MHz
  13.          DCOCTL= CALDCO_1MHZ;       // DCO frekvencia beállítása
  14.          
  15.          P1REN |= (BIT3 + BIT4 + BIT5 + BIT7);   // fehúzó ell. bekapcs
  16.          P1OUT |= (BIT3 + BIT4 + BIT5 + BIT7);   // Vcc-re
  17.          P1DIR &= ~(BIT3 + BIT4 + BIT5 + BIT7);  //P1.3 legyen digitális bemenet
  18.  
  19.          P2SEL = 0;    
  20.  
  21.          P2DIR = 0;
  22.          P1SEL = 0;
  23.          P1DIR = 0;
  24.          P1SEL |= BIT6;             // P1.6 Timer_A TA1 kimenete legyen
  25.          P1DIR |= BIT6;             // P1.6 (LED2) kimenet legyen
  26.          
  27.          P1IES |= ( BIT4 + BIT5 );             // P1.x lefutó élre érzékeny
  28.          P1IFG &= ~( BIT4 + BIT5 );            // P1.3 IFG törlése
  29.          P1IE |= ( BIT4 + BIT5 );              // P1.3 interrupt engedélyezése
  30.          
  31.          TACCR0 = 9999;             // PWM frekvencia = 1 MHz/10000 = 100 Hz
  32.          TACCR1 = 0;                // TACCR1(= fényesség) induló értéke
  33.          TACTL = TASSEL_2 |         // Timer_A forrása SMCLK legyen
  34.                       MC_1|         // Felfelé számlálás TACCR0-ig
  35.                      TACLR;         // A számlálót töröljük
  36.          TACCTL1 = OUTMOD_7|        // Reset/set amikor TAR=TACCR1, vagy =0
  37.                        CCIE;        // Megszakítás, ha a számlálás TACCR1-hoz ér
  38.          __low_power_mode_0();      // LPM0 mód: MCLK=ki, GIE=be
  39.  
  40. }
  41.  
  42. //--- TACCR1 megszakítás kiszolgálása ---------------------------------
  43. #pragma vector=TIMER0_A1_VECTOR
  44. __interrupt void ta1_isr(void) {
  45.  
  46.  
  47.  
  48.         if (!(P1IN & BIT7)){             // kimenet választás
  49.             jelzo++;                     // következő állapotba vált
  50.         if(jelzo>2) jelzo=0;
  51.  
  52.  
  53.         switch(jelzo) {
  54.           case 0:
  55.                 P2SEL = 0;
  56.                 P2DIR = 0;
  57.                 P1SEL = 0;
  58.                 P1DIR = 0;
  59.                 P1SEL |= BIT6;             // P1.6 Timer_A TA1 kimenete legyen
  60.                 P1DIR |= BIT6;             // P1.6 kimenet legyen
  61.           break;
  62.           case 1:
  63.                 P1SEL = 0;
  64.                 P1DIR = 0;
  65.                 P1DIR |= BIT2;             // P1.2 kimenet legyen
  66.                 P1SEL |= BIT2;             // P1.2 Timer_A TA1 kimenete legyen
  67.           break;
  68.           case 2:
  69.                 P1SEL = 0;
  70.                 P1DIR = 0;
  71.                 P2DIR |= BIT6;             // P2.6 kimenet legyen
  72.                 P2SEL |= BIT6;             // P2.6 Timer_A TA1 kimenete legyen
  73.      
  74.           break;
  75.     }  
  76.     __delay_cycles(500000);                // Pergésmentesítő
  77.     }
  78.  
  79.          TACCTL1 &= ~CCIFG;         // A megszakítási jelzőbit törlése
  80.          while(TAR <= new_ccr1);    // Várunk, amíg TAR nagyobb lesz,
  81.                                     // mint az új kitöltés
  82.          TACCR1 = new_ccr1;
  83.          new_ccr1 = next_sqr ;    // Az új kitöltési tényező
  84.  
  85.          if (!(P1IN & BIT4) && (idx<9900)) {
  86.            
  87.            idx++;
  88.            next_sqr += 1;
  89.            
  90.          }
  91.          if (!(P1IN & BIT3) && (idx>0)) {
  92.            if (idx<100){
  93.            idx--;
  94.            next_sqr -= 1;
  95.            }
  96.            else {
  97.            idx -= 10;
  98.           next_sqr -= 10;
  99.  
  100.           }
  101.          }
  102.    if (!(P1IN & BIT5) ) {
  103.           while(idx<9900 && (P1IN & BIT3) && (P1IN & BIT4) && (P1IN & BIT7)) {
  104.        
  105.               idx++;
  106.               next_sqr += 1;
  107.               TACCR1 = new_ccr1;
  108.               new_ccr1 = next_sqr ;
  109.               __delay_cycles(3000);
  110. }
  111. }
  112.    
  113.         if (idx==0) {
  114.          
  115.  
  116.           __low_power_mode_4();    // Alvás a következő gombnyomásig
  117. }
  118. }
  119. #pragma vector=PORT1_VECTOR
  120. __interrupt void Port_1(void)
  121. {
  122.     P1IFG &= ~( BIT4 + BIT5 );            // P1.3 interrupt jelzőbit törlése
  123.   __low_power_mode_off_on_exit(); //Felébresztjük az alvó CPU-t
  124. }


A további 2 dologról csak az lpm4 megoldása után kérdeznék...
Minden segítséget szívesen fogadok.
A hozzászólás módosítva: Jan 16, 2013
(#) icserny válasza mechanika hozzászólására (») Jan 17, 2013 /
 
Azt hiszem, hoyg a program megérett arra, hoyg kihajítsd és az egészet újragondold. Ne a meglevő kódot próbáld toldozgatni, hanem előbb funkcionális blokkokban gondolkodva tervezd meg papíron az egészet!

Mindenestre megszakításban sem késleltetést, sem altatást nem szabad csinálni. A P1SEL = xxxx; típusú beállításokat pedig mellőzni kellene a lehetséges mellékhatások miatt. Meg kell szokni, hogy mindig csak azokat a biteket változtasd, amelyeket kell, különben a program későbbi bővítésénél meglepetések érhetnek!

Amit most a megszakításokban csinálsz, annak 90 %-át a főprogramban kellene végrehajtani, s akkor esetleg az LPM4-et is meg tudnád oldani.

Ha a nyomógombokat megszakításban akarod kezelni, akkor ott elég konstatálni, hogy melyik gomb okozott megszakítást (be kell állítani egy változót), s a főprogramot kell felébreszteni.

Én a főprogramban kezelgetném az összes csatornaváltást, és a kitöltési tényező nyomógombbal történő változtatást is. (Ez utóbbi lehetővé tenné azt is, hogy a főprogram eldöntse azt is, hogy melyik módban altassa magát).

Nyomógomb pergésmentesítésére nem szabad a megszakításba késleltetést rakni. Ha periodikus megszakításban mintavételezed a nyomógombot, akkor a pergésmentesítés módja az legyen, hogy:
1. módszer: nem minden ciklusban nézel rá, hanem csak minden n-edikben (be kell vezetni egy számlálásra használt változót).
2. módszer: minden ciklusban ránézel, de csak akkor veszed komolyan, ha egymás után n-szer ugyanazt az állapotot láttad.
(#) mechanika válasza icserny hozzászólására (») Jan 17, 2013 /
 
Köszi!

Régóta áltattam magam, hogy jó ez így csak egy kicsit kell rajta csiszolni...
Régen elölről kellett volna kezdeni.

Még egyszer köszönöm az építő kritikát, este nekilátok!
(#) mechanika válasza icserny hozzászólására (») Jan 17, 2013 /
 
Ebben az esetben viszont, hogy ne toldozgatás legyen, a másik két dolgot is előadom:

1. a ledek bekapcsolva felejtése ellen úgy védekeznék, hogy amennyiben kb.: 1 órán keresztül nem érkezik külső megszakítás (nem nyomnak meg nyomógombot ) a led fényereje lemegy 0-ra és jöhet a lpm4.
Ilyen hosszú idő méréséhez mit érdemes használni, őrkutyát, vagy egy külön számlálót kelle elindítani??

2. a tápfeszültség vizsgálatát szeretném megoldani úgy, hogy az egyik gomb hosszan történő megnyomása esetén megvizsgálnánk az áramforrás feszültségét és eldöntenénk, hogy egy érték felett, vagy alatt van-e (esetleg azt, hogy három sáv melyikébe esik a mért érték), majd az eredményt a megfelelő színű led jelezné.

Hála a legújabb cikkednek, amit megint csak megköszönök, azt a kérdést nem kel feltennem, hogy ez lehetséges-e, (csak azt hogy hogyan tudom ezt megvalósítani?).

Az eddigi segítséged utólag, az elkövetkezőt pedig előre is megköszönöm!
A hozzászólás módosítva: Jan 17, 2013
(#) DecebaL válasza mechanika hozzászólására (») Jan 17, 2013 /
 
  1. P1DIR &= ~(BIT0+BIT1+BIT2+BIT3);                 //digitális bemenet
  2.  P1OUT |= (BIT0+BIT1+BIT2+BIT3);
  3.  P1REN |= (BIT0+BIT1+BIT2+BIT3);                  //pullup
  4.     delay_ms(250);
  5.  P1IE  |= (BIT0+BIT1+BIT2+BIT3);                   //interrupt enabled
  6.  P1IES |= (BIT0+BIT1+BIT2+BIT3);                 //Hi/lo edge
  7.  P1IFG &= ~(BIT0+BIT1+BIT2+BIT3);             // IFG cleared


Nagyon sokat kínlódok a belső ellenállás felhúzással, hol működik hol nem. Nem tudok rájönni mi a bibi.
A fenti kód 10-ből 2 szer nem húzza fel.
(#) icserny válasza mechanika hozzászólására (») Jan 17, 2013 /
 
Idézet:
„Ilyen hosszú idő méréséhez mit érdemes használni?”
Számlálót.

Idézet:
„a tápfeszültség vizsgálatát szeretném megoldani”
A belső 2,5 V-os referencia használata mellett lehet mérni a tápfeszültség felét a 11. (belső) csatornában. Az ADC10MEM-ből kiolvasott értéket kell egy vagy két küszöbértékhez hasonlítani. Az if feltételvizsgálatokat kell végiggondolni:
1. Ha a felső küszöbnél nagyobb, vagy egyenlő, akkor 1. sáv
2. Ha a felső küszöbnél kisebb, és az alsó küszöbnél nagyobb, vagy egyenlő, akkor 2. sáv
3. Ha az alsó küszöbnél kisebb, akkor 3. sáv
A lényeg az, hogy minden szám tartozzon valahová és egyik érték se tartozzon két sávba.
(#) icserny válasza DecebaL hozzászólására (») Jan 17, 2013 /
 
Miből gondolod, hogy pont ezekkel a sorokkal van baj? Ha a 7. sor után teszel egy töréspontot, ott kimutatható a hiba? Ha nem, akkor valahol máshol babrálsz bele a P1OUT regiszterbe (én jártam már így!).
(#) DecebaL válasza icserny hozzászólására (») Jan 17, 2013 /
 
Ez az, hogy nincs hiba. Már mindent kiszedtem az alábbi kóddal tesztelem csak. Amikor nem húzza fel akkor ha kézzel megérintem akkor is létrejön a megszakítás.
  1. main(void){
  2.  
  3.     WDTCTL = WDTPW + WDTHOLD;        // Stop watchdog
  4.     P1DIR &= ~(BIT0+BIT1+BIT2+BIT3);
  5.     P1OUT |= (BIT0+BIT1+BIT2+BIT3);
  6.     P1REN |= (BIT0+BIT1+BIT2+BIT3);
  7.     __delay_cycles(20000);
  8.     P1IE  |= (BIT0+BIT1+BIT2+BIT3);               // interrupt enabled
  9.     P1IES |= (BIT0+BIT1+BIT2+BIT3);               //edge
  10.     P1IFG &= ~(BIT0+BIT1+BIT2+BIT3);            //cleared
  11.     _EINT();
  12.     P1DIR |= BIT6;                            // Set P1.6 to output direction
  13.     P1OUT &= ~ (BIT6);
  14.  while (1){
  15. }
  16. }
  17.  
  18. #pragma vector=PORT1_VECTOR
  19. __interrupt void Port_1(void)
  20. {
  21. P1OUT^=BIT6;
  22. __delay_cycles(1000);
  23. }
(#) szitko hozzászólása Jan 17, 2013 /
 
Sziasztok.
Sok-sok olvasgatás után, sikerült működésre bírnom a WDT-t "őrkutya" módban. Tökéletesen működik, még a számlálótörlés is.
De... A WDT számláló törlését úgy oldottam meg, ami nem biztos, hogy jó, hogy beállítottam egy Timert XY időre, és ott törlöm a WDT számlálót. Viszont a logika szerint, így csak akkor működik az "őrkutya", ha a program valamelyik megszakításban akad el, mivel ha nem megszakításban akad el, akkor a Timer, amiben a WDT számláló törlés van, mindenképp megszakítást okoz, és törli a számlálót.
Ezt, hogy lehet kiküszöbölni?

Egyébként a WDT törléssel az volt a baj, hogy én a VLO-t használom, és törlésnél ezt nem adtam meg.
A roszz:
WDTCTL = WDTPW + WDTHOLD; // stop WDT
.....
WDTCTL = WDTPW + WDTCNTCL + WDTSSEL; // WDT enable, WDT=VLO
....
WDTCTL = WDTPW + WDTCNTCL; // clear WDT
A jó:
Ugyan ez, csak az utolsó sornál:
....
WDTCTL = WDTPW + WDTCNTCL + WDTSSEL; // clear WDT
(#) Fizikus válasza szitko hozzászólására (») Jan 17, 2013 /
 
Nem tudom hogy ezt keresed-e, de en csak ezt talaltam:
Eclipse Plugin
A hozzászólás módosítva: Jan 17, 2013
(#) szitko válasza Fizikus hozzászólására (») Jan 18, 2013 /
 
Köszi.
Valami ilyesmit kerestem. Felraktam a Plugin-t, Juno alá, és első "ránézésre" egész jónak tűnik. Ha lesz egy kis időm megnézem "közelebbről" is.
(#) szitko hozzászólása Jan 18, 2013 /
 
Egy kis érdekesség.

MSP430 fülbevaló.
(#) icserny válasza szitko hozzászólására (») Jan 18, 2013 /
 
Kíváncsi vagyok a tapasztalataidra! Nekem az nem tetszett a leírásban, hogy az mspdebug miatt nem lehet fenn a Texas eszközmeghajtó, a külön telepítendő meghajtó viszont nem kezeli a soros porti kommunikációt. Ha ez tényleg így van, akkor számomra felejtős a dolog. Bővebben: Link
(#) szitko válasza icserny hozzászólására (») Jan 18, 2013 /
 
Igen, olvastam én is. Egyenlőre azzal küzdök, hogy a 64 bites win alá, normálisan fel"varázsoljam" (mindig valami hibába botlok). Igaz, ki van emelve, hogy 32 bites verzió, de az nem jelent semmit. Ha nem megy megpróbálom a 32 bites gépemen, csak azt nem találom (hogy tud egy lakásból eltűnni egy Netbook? ).
Következő: »»   92 / 139
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