Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   190 / 1319
(#) watt válasza bladika hozzászólására (») Ápr 17, 2008 /
 
LED-ekkel meg kéne vizsgálnod, azaz körül kéne határolnod azt a területet, ahol elakad a program. Egy ilyen jellegű hibát nem hiszem, hogy külső szemlélő meg tud találni, még ötlet szinten sem(bár van itt egy két varázsló, ki tudja! :heureka: )
(#) bladika válasza watt hozzászólására (») Ápr 17, 2008 /
 
nem tudom mit értesz az alatt hogy elakad, meg hogy ezt hogy lehetne LEDekkel! De ha azt érted alatta hogy kifagy, akkor tuti nem fagy ki fut tovább minden! A probléma hogy reset után az első int okoz megszakítást de a többi már nem!
(#) bladika válasza watt hozzászólására (») Ápr 17, 2008 /
 
De most rájöttem valamire! működik, csak nem elég gyorsan! A megszakítások között 5-10 másodpercnek kell eltelnie, hogy mind1ik megszakítást okozzon. De hát így meg soros portot 19.2kbps en kicsit nehéz
(#) potyo válasza bladika hozzászólására (») Ápr 17, 2008 /
 
Akkor csak valami szoftverhiba lehet
(#) kobold válasza bladika hozzászólására (») Ápr 17, 2008 /
 
5-10 másodpercenként tudsz csak egy megszakítást fogadni??? Valahová nem kóborol el a programod az interrupt-rutinból, vagy nem hülyül be egy késleltetés pl. egy véletlenül beírt regiszter miatt?
(#) potyo válasza bladika hozzászólására (») Ápr 17, 2008 /
 
Közben eszembe jutott valami, de az előzőt már nem tudom módosítani.

Én nem késleltetéssel csinálnám, hanem időzítéssel (mondjuk eleve nem szeretem a késleltetéseket). Alaphelyzetben egy Timer elő van készítve, hogy fele annyi időnként okozzon megszakítást, mint amennyi egy bitidő, de a Timer NEM fut. Amikor megjött az INT megszakítás, akkor elindítani a Timert. A Timer megszakításban olvasni a lábat, növelni egy számlálót, illetve átállítani a Timer periódusidejét a bitidővel megegyezőre. Így minden Timer megszakításkor beolvasod az aktuális bitet. Először a startbitet, majd sorban a többit, és a végén a stopbitet. Hogy melyik bitnél tartasz éppen, azt a számlálóból tudod. Ha ez a számláló elért 10-re, akkor megvolt a stop bit is, újra félperiódusra elő kell készíteni a Timert, törölni a számlálót és engedélyezni az INT megszakítást, illetve jelezni a főprogramnak, hogy megjött az adat.
(#) bladika válasza potyo hozzászólására (») Ápr 18, 2008 /
 
a timeres dologot hanyagolnám a járható út a késleltetős, hogy miért azt most hagy ne...
Viszont még 1 dolog: konkrétan egy siemens c35i t kötöttem a pic re az okoz bármi gondot hogy a pic 5V a telo 3V ?
(#) potyo válasza bladika hozzászólására (») Ápr 18, 2008 /
 
Okozhat, de nem biztos hogy okoz. Ha a pic a 3V-os jelet tudja venni 1-nek, akkor jó. A telefon bemenete valószínűleg tolerálja az 5V-ot.
(#) bladika válasza potyo hozzászólására (») Ápr 18, 2008 /
 
a telefon bemenet az most nem lényeg az tökéletesen működik, az le van korlátozva 3V ra egy ellenállással meg egy Zennerel mert ha 5 voltot kap akkor nincs térerő, de most nem is ez a lényeg!

(#) bladika válasza potyo hozzászólására (») Ápr 18, 2008 /
 
köszönöm a segítséget de rá leltem higy nem pices probléma van a telo okozza a gondot de még nem jöttem rá hogyan, mert ha lehúzom a telót és én magam húzogatom földre csak egy darab kábellal akkor a megy! szóval passz
(#) potyo válasza bladika hozzászólására (») Ápr 18, 2008 /
 
Akkor gyanús, hogy nem elég a 3V a pic bemeneti lábán. Mondjuk nem csoda, az RX láb Schmitt-trigger bemeneti pufferrel rendelkezik, 5V tápnál akár 4V-ra is szükség lehet, hogy logikai 1-nek vegye. Ha lehet, vedd lejjebb a pic tápját olyan 3-3,5V környékére, vagy valami más illesztést ki kell találni.
(#) watt válasza potyo hozzászólására (») Ápr 18, 2008 /
 
Nekem a siemens-el simán mennek a soros portok...
(#) trudnai válasza bladika hozzászólására (») Ápr 18, 2008 /
 
bladika,

Ilyen egy soros beemelesekbol nem sokat tudunk kihamozni, honnan derul ki ebbol, hogy hogyan lepsz ki az ISR-bol? Honnan deul ki milyen configokat hasznalsz? Honnan derul ki hogy oldottad meg a context savinget? Honnan deul ki hogy jo bankot valaszottal-e ki az INTCON-odnak? Es amugy milyen PIC ez?
(#) watt válasza trudnai hozzászólására (») Ápr 18, 2008 /
 
Teljesen igazad van, kivéve abban, hogy az INTCON minden bankban elérhető. De a lényegen ez nem változtat, kevés az input!
(#) trudnai válasza watt hozzászólására (») Ápr 18, 2008 /
 
Hat igen, OP nem kozli a PIC tipusat, automatan mar elo sem veszem az adatlapot (hisz melyiket is?!) es akkor mar automatan at sem gondolom, hogy az INTCON egy ilyen.

Amugy nem tudom mit sporolnak meg azzal vagy mit ernek el azzal, hogy a projectet eltitkoljak es varjak a segitseget? En olvasgatom a piclistet meg a Microchip forumot is rendszeresen, erdekes modon nem szokas titkolozni. Ha a project maga olyan amit nem lehet kozze tenni akkor irnak pelda alkalmazast ami az adott elvarasoknak megfeleloen kellene hogy mukodjon es ami jol szimulalja a problemat igy a tobbiek ra tudnak nezni, hogy itt meg ott ezt es azt csinald es igy mindenki boldog: A kerdezo a problema megoldasat adoptalni tudja a szuper titkos projectjebe, es a kerdezo is a problemara tud osszpontositani nem talalgatni meg konyorogni hogy "hadd oldjam mar meg legysziii"

Na most harapos a hangulatom, add ide a kisujjad es leharapom a kezed
(#) nemgyuri hozzászólása Ápr 19, 2008 /
 
Üdv. mindenkinek
Készitettem 1 lakásfűtésvezérlést 16f628-al, 2x16-os LCD, 4vezérlőgomb+reset, 2db ds1820 hőmérsékletszenzor, van "benne". Megszakitásról megy az óra+a 7 nap, napi 5 hőmérsékletet tud variálni. EEPROM-ban tárolom a hőmérsékleti és idő infókat, ezek reset után (3 üzemmód) módosithatók.
Gondom "csak" az, hogy néhány hetente kiakad. kb 2x a megszakitás ment tovább, mert reset után tudta, hogy mennyi az idő. Túl nagy tapasztalatom nincs a PIC-ekel, eddig csak 5 holmit készitettem, MPLAB-al teszteltem ott jó volt, a stack miatt módositanom is kellet rajta.
Köszi, várom a jótanácsokat
(#) watt válasza nemgyuri hozzászólására (») Ápr 19, 2008 /
 
A szenzorokat milyen hosszú vezetékkel kötötted be a PIC-be?
A másik, hogy a program ismerete nélkül nem fog tudni segíteni senki! Egy jó program nem fagy le, ez tuti!

Ezen felül neked is a LED-es hibakeresést, vagy esetleg egy adatgyűjtő csatlakoztatását javaslom, ami figyelné, hogy hol akad el a program. Adatgyűjtőnek jó egy PC, amire RS232-vel viszed a fontos adatokat a kritikus pontok után. (óra, hőmérés stb.) De ismétlem, mi nem tudunk segíteni, ha nem láthatjuk a progit.

Esetleg a rajz is jól jöhet(zavarszűrés kérdések stb.).
(#) szilva válasza nemgyuri hozzászólására (») Ápr 19, 2008 /
 
Idézet:
„mert reset után tudta, hogy mennyi az idő.”


Ezt hogy kell érteni? Az időt rendszeresen eltárolod az EEPROM-ban? Ha igen, nem írod túl sűrűn au EEPROM-ot?

Valóban az van, amit watt is írt, hogy valamilyen módszerrel (a legjobb LED-ekkel, netán valami debug infót kiírni az LCD-re) be kellene határolni, hogy hol akad el a program. Az olyan rutinok esélyesek, ahol valamilyen perifériával kommunikálsz, és ennek során valamilyen állapotot kell megvárni. Ha valami elektromos zavar miatt megsérül a kommunikáció, előfordulhat, hogy a várt állapot sosem következik be.

Az elektromos zavarvédettség megfelelően van kialakítva?
(#) trudnai válasza nemgyuri hozzászólására (») Ápr 19, 2008 /
 
Udv nemgyuri,

Tegnap mar leharaptam valakinek a fejet

Szoval ahhoz hogy segiteni lehessen kellene nemi info. Pl mit ertesz az alatt, hogy "kiakad"? Kapcsrajz+forras nelkul kb meg vagyunk love, es segitseg nyujtas helyett vaktaban puffogtatunk szunyogokra gepagyuval... lehet veletlan eltalaljuk a szunyogot persze

Az en lovesem, ami nyilvan nem a problema megoldasa, de tipikusan ilyenek gyors elsimitasahoz jo (hisze epp erre talaltak ki): Kapcsold be a WDT-t, mikor "nem akad ki" akkor ugye hivogasd a CLRWDT utasitast, mikor "kiakad" akkor meg ugy intezd, hogy ne hividjon meg, ezaltal ha a hiba par hetente fellep max resetalodik a pic es megy tovabb - mar feltetelezve, hogy nem mas aramkori problemak vannak)
(#) nemgyuri válasza watt hozzászólására (») Ápr 19, 2008 /
 
Köszönöm a fejmosásokat. Kapcs.rajzot most nem tudok adni, mert csak papiron van(ha még megvan), a lábkiosztás a progiban. -fütés.asm- . A "kiakad" alatt azt értettem, hogy a fűtésvezérlés leáll és az LCD-n nincs változás.
A belső szenzor kb 1,5m míg a külső kb 7m-es kábelen van. A táp egy 220/12 ?4W? -7805 pufferelkó+kerámiakondi, a PIC táplábak mellett + kondi.
A doboz miatt 3 nyákon drótokkal összekötve.
A teszt volt nekem is a legnagyobb gondom, mert nem tudom, hogy hogyan csatlakozhatnék még erre a holmira.

FUTES.ASM
    
(#) watt válasza nemgyuri hozzászólására (») Ápr 19, 2008 /
 
Okés!
Javaslom menjünk sorjában.
Első körben ezt az egy vonalas digit távadót gondolom a ludasnak. Kérdéseim:
1. Olvastál valahol arról, hogy mekkora a max. kábelhossz?
2. Nem volt még olyan, hogy véletlenül bekapcsolt a vezérlő, holott nem volt oka?

Azt gyanítom, hogy a hosszú kábelen zavarjel jön be, és a hibás adattal nem tud mit kezdeni a programod.

Még a progit nem volt időm megnézni, de először ezt a részt kéne lecsekkolni, mert ha egy program hetekig megy, akkor valószínű, hogy inkább ilyen kommunikációs problémák okozzák a hibát. Az a 7 méter biztosan nem ajánlott hossz, de még a 1,5m-is soknak tűnik, de lehet hogy tévedek!(5V-os digitális jeleket nem szokás 20cm-nél hosszabb kábeleken vezetni, ahhoz már illesztővonalak kellenek)
(#) watt válasza nemgyuri hozzászólására (») Ápr 19, 2008 /
 
Az első gondok a programodban. Annak ellenére, hogy ha ez lenne a hiba, akkor nem értem, hogyan megy hetekig, viszont hogy nem jó az biztos. Ez pedig a megszakításban a regiszterek eltárolása. Erről már sokszor írtunk másoknak is, nézd meg mi a különbség a helyes és a Te megoldásod között, figyelmen kívül hagyva azt a részt, ami a tiedben nincs is. Kíváncsi vagyok rájössz e, hogy miért kell így csinálni:

  1. MEGSZAK
  2.                 MOVWF   AKKU_TEMP                       ; MENTÉSEK
  3.                 SWAPF   STATUS,W
  4.                 MOVWF   STATUS_TEMP
  5.                 CLRF    STATUS
  6.                 MOVF    PCLATH,W
  7.                 MOVWF   PCLATH_TEMP
  8.                 CLRF    PCLATH
  9.                 BCF             STATUS,IRP
  10.                 MOVF    FSR,W
  11.                 MOVWF   FSR_TEMP
  12.  
  13. ;....... lekezelés....
  14.  
  15.         ; KILÉPÉSI PONT              
  16. MEG_VEG
  17.                 MOVF    FSR_TEMP,W
  18.                 MOVWF   FSR
  19.                 MOVF    PCLATH_TEMP,W
  20.                 MOVWF   PCLATH
  21.                 SWAPF   STATUS_TEMP,W
  22.                 MOVWF   STATUS
  23.                 SWAPF   AKKU_TEMP,F
  24.                 SWAPF   AKKU_TEMP,W    
  25.                 RETFIE                                          ; MEGSZAKITÁS VÉGE


Továbbá néztem a hőmérő beolvasási rutint, úgy láttam, hogy nincs hibakezelése. Tévedek?
(#) potyo válasza watt hozzászólására (») Ápr 19, 2008 /
 
Kicsit rákerestem, és egy rakás példaprogramot láttam ugyanezzel a rosszul megírt mentéssel. Érdekes, hogy a kilépésnél jól van megírva, míg belépésnél nem.
(#) watt válasza potyo hozzászólására (») Ápr 19, 2008 /
 
Igen, ezt én is észrevettem.
Nem tudom, hogy a mentéskor előbb állítódik-e a STATUS, vagy utána. Ha utána, akkor még lehet jó is. Mindenesetre nem szép, és nem a gyári ajánlás szerinti a megoldás, még ha nem is ez a baj.
(#) trudnai válasza nemgyuri hozzászólására (») Ápr 19, 2008 /
 
Csak gyorsan rakukkantottam a kodra, tuzetesebben nem neztem ugyan meg, de van jopar valtozo amik ugyanarra a ram helyre vannak definialva - nem tudom ez igy jo-e vagy sem? Azonkivul a programban vannak kozvetlen ram cimre hivatkozasok is, nem tulsagosan szerencses az igy. Javasolnam, hogy a valtozokat cblock-ba deiniald, ugy konyebb, vagy relokalhato koddal es linker scripttel kellene megcsinalni es "res"-el lefoglalni a helyet nekik.

Azonkivul jobb lenne ha logikai egysegekre lenne bonta, es nem egy nagy gigantikus file lenne a forras. Pl EEPROM rutinok egy EEPROM.INC -ben, vagy ASM-ben es rendesen relokalhatoan linkelni stb.

Valahogy a loggolast meg kellene oldani, valoszinuleg rajonnel arra is hol "akad ki" a program. Azt ugyanis meg mindig nem tudjuk, hogy egy signalra var es ezert "beragad" vagy ISR kezelesi gondok vannak stb. Majd ha lesz idom jo lenne tudni hogy lehetne szimulalni egy "felgyorsitott kornyezetben" szoval a par het akar par percre osszezsugorodva talan elohozza a problemat (pl fsosc gyorsitasaval ha igazi kornyezetben teszteled).
(#) nemgyuri válasza watt hozzászólására (») Ápr 19, 2008 /
 
Köszi a gyors reagálásokat!
BCF STATUS,IRP -re gondoltál?? Egyenlőre nem látom az igazi hibát, de biztosan van. PCLATH-ot is menteni kell? ez nekem új volt. Mindenesetre kijavitom, de az eredmény csak hetek múlva derülnek ki.
A kábelhosszak 10m-ig elvileg nem okoznak gondot, bár az előzetes teszteknél volt olyan tapasztalatom, hogy a ds1820 szenzor egy 20cm-es szalagkábelen volt és hibás olvasások voltak, de csak akkor amikor a jelvezeték melletti szálon -lezáratlanul- volt mindenféle inpulzus.(az egyik PIC láb LCD vezérlése)
Hibakezelés valóban nincs a hőmérőbeolvasásnál, de úgy gondoltam, hogy a max. hiba az lehet, hogy 3sec. időre feleslegesen bekapcsolja a fűtést, vagy ki. Tudom trehány vagyok, bocsi.
(#) watt válasza nemgyuri hozzászólására (») Ápr 19, 2008 /
 
Ez csak egy példa, ami mindere kiterjedően ment. Nem feltétlenül kell mindent, de ártani nem árt.

Aztán nem a IRP-re gondoltam, hanem a STATUS elmentésére. Azt eleve SWAP-al kell, mert a MOVF állítja a STATUS Z bitet, ami hibás viszatéréshez vezethet. Ez simán okozhat lefagyást.

Arra nem válaszoltál, hogy mit írnak a távadó kábelhosszára.
Az nem jelent semmit, hogy kipróbáltad, és ment 10méteressel is! Ez szerintem nem erre lett kitalálva. Van aki szerint az USART-ot is össze lehet kötni illesztő nélkül 10méterig, de ez teljesen bizonytalan. Pont elég, ha kéthetente lefagy tőle az egész hálózat....

Nem ragadhat bele a hőfok beolvasásánál a rutinba ha nem jön be bit aminek be kéne jönnie?

(#) nemgyuri válasza watt hozzászólására (») Ápr 19, 2008 /
 
Valószinüleg megvan az ok, köszi az ötletet.
A szerkentyü most is megy és így tudtam produkálni a "leállást" azzal, hogy néhányszor kihúztam a hömérséklet szenzorok csatlakozóit. Jó időben történő kihúzásnál "lefagy". Ezt biztosan meg kell oldanom, legkésöbb a következő fűtési szezonig. A kábelhosszt mintha az adatlapból böngészetem ki, legalábbis így emlékszem.
A STATUS Z bitre nem gondoltam.
Nagyon köszönöm mindenki segítségét, nem gondoltam volna, hogy ennyi segitséget kapok, pláne ilyen gyorsan.
Mégegyszer köszi.
(#) watt válasza nemgyuri hozzászólására (») Ápr 19, 2008 /
 
Idézet:
„tudtam produkálni a "leállást" azzal, hogy néhányszor kihúztam a hömérséklet szenzorok csatlakozóit.”

Szuper, akkor fülöncsíptük!

Idézet:
„A kábelhosszt mint ha az adatlapból böngészetem ki, legalábbis így emlékszem.”

Értem. Akkor ez egy nagyon jó érzékelő! Ha esetleg megtalálod az erre vonatkozó részt, bemásolhatnád, mert engem is érdekelne akkor az eszköz! Én nem találtam az adatlapban ilyet hirtelen...

Idézet:
„A STATUS Z bitre nem gondoltam.”

Gondoltam!
Egyébként ettől függetlenül valószínűleg nem ez okozza a hibát, mint ahogy azt már az elején említettem...


Idézet:
„Nagyon köszönöm mindenki segítségét,”

Öröm volt együtt dolgozni!

Kérlek majd jelezd, ha már stabilan műkszik!


(#) trudnai válasza nemgyuri hozzászólására (») Ápr 19, 2008 /
 
Problemak amit a kodben felfedeztem:

BCF STATUS,IRP ;Bank 0,1
BSF STATUS,RP0 ;Bank1
bsf PIE1,TMR1IE

IRP indirekt cimzeseknel jatszik szerepet, ebben az esetben nincs jelentosege - ha PR1 eppen jol allt akkor szerencsesen mukodik a rutin...

Indul1 -nel a nap nevu valtozo inicializalatlan indulaskor, es annak erteket beteszed DSZ-be... Ha szerencsed van akkor ez 0...

Azonkivul ha

movlw 0x7 ;1-hétfő.....7-vasárnap
movwf nap

Amugy ez igy nem lenne egyszerubb?

  1. ujra
  2.         call    LCDLINE1
  3.         clrf    T1H           ; Temp1 holds start of message address
  4. Orabe_
  5.         call    Tabla1
  6.         call    LCDBYTE       ; Display character
  7.         incfsz  T1H,f         ; Point to next character
  8.         goto    Orabe_
  9. Valasz1:


Ez is azt hiszem egyszerubb lenne igy:
  1. Nap_ell
  2.         movf    nap,w
  3.         btfsc   STATUS,Z
  4.         goto    NEMJO  ; 0 volt...
  5.         andlw   ~0x07
  6.         btfsc   STATUS,Z
  7.         goto    JO      ; felso bitek nullak ugyhogy 7 es 1 kozott van...
  8. NEMJO


Van benne sok ilyen amin jocskan lehetne egyszerusiteni. Namost lehet erre azt mondod nem egyszerusiteni akarod hanem mukodokepesse tenni, de ha egy kod egyszeru es atlathato akkor a mukodese is konyebben garantalhato velemenyem szerint.

A fuggvenyek es kodreszletek ele tegyel megjegyzeskent un. fuggveny fejleceket, es akkor megintcsak jobban lehet latni mi tortenik, mi hol kezdodik, mi az ami ki van tesztelve, mi az ami nem stb... pl ehelyett:
  1. ;       EEPROM olvasás (W-ben olvasandó cim--eredmény a W-ben)
  2. EE_OLV:
  3.         BCF     STATUS,RP0      ;BANK 0
  4. ;       MOVF    EECIM,W         ;EECIM(tartalma)-->W
  5. ;       MOVWF   EECIM           ;W(tart.)-->regiszterbe
  6.         BSF     STATUS,RP0      ;BANK 1
  7.         MOVWF   EEADR           ;olvasási cim
  8. ;       BSF     STATUS,RP0      ;BANK 1
  9.         BSF     EECON1,RD       ;EEPROM- olvasás
  10. ;       BCF     STATUS,RP0      ;BANK 0
  11.         MOVF    EEDATA,W
  12.         BCF     STATUS,RP0      ;BANK 0
  13.         RETURN


valami ilyesmit tudnek elkepzelni:
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;  EE_OLV
  3. ;;  ------
  4. ;;      Megadott cimrol kiolvas egy erteket az EEPROM-bol
  5. ;;
  6. ;;  BEMENET
  7. ;;      W       olvasandó cim
  8. ;;  KIMENET
  9. ;;      W       kiolvasott ertek
  10. ;;  ATALLITJA
  11. ;;      STATUS,RP0
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13. EE_OLV:
  14.         BCF     STATUS,RP0      ;BANK 0
  15. ;       MOVF    EECIM,W         ;EECIM(tartalma)-->W
  16. ;       MOVWF   EECIM           ;W(tart.)-->regiszterbe
  17.         BSF     STATUS,RP0      ;BANK 1
  18.         MOVWF   EEADR           ;olvasási cim
  19. ;       BSF     STATUS,RP0      ;BANK 1
  20.         BSF     EECON1,RD       ;EEPROM- olvasás
  21. ;       BCF     STATUS,RP0      ;BANK 0
  22.         MOVF    EEDATA,W
  23.         BCF     STATUS,RP0      ;BANK 0
  24.         RETURN
  25. ;--------------- End-Of-EE_OLV ---------------



Következő: »»   190 / 1319
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