Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   393 / 1320
(#) watt válasza delmur82 hozzászólására (») Jan 19, 2009 /
 
Honnan tudod, hogy előbb nem kapcsolja ki a LED-et, csak utána kapcsolja be? Ez a tesztrutin nem azt csinálja amit szeretnél szerintem! A LED mindenképpen ki fog gyúlni!

  1. movlw  0xac
  2.   movwf  KIMENO                ; read config
  3.   bsf    RST
  4.   call  SEND                 ; parancs elküld
  5.   call  RECEIVE           ; elméletileg veszi az adatokat a DS1620 regiszteréből
  6.   bcf    RST
  7.   btfsc  BEJOVO_TEMP,7      ; DONE bit
  8.   Innen el kéne ugrani!
  9.   bsf    LED


de ez még egyszerűbb:
  1. ....
  2.   bcf     LED
  3.   btfsc  BEJOVO_TEMP,7      ; DONE bit
  4.   bsf    LED
  5.   ....

A LED csak akkor éghet, ha a 7. bit H
(#) delmur82 válasza watt hozzászólására (») Jan 19, 2009 /
 
igaz.

így már ok. A 1shot bitre 1- et jelez. Viszont a DONE bitre 0 -t converzió után. MAgyarul a SEND jó lehet mert a 1SHOT bitet 1 - be billenti. Viszont a RECEIVE is jó mert a vétel után BEJOVO_TEMP 0. bitje is 1 be áll ami azt jelzi hogy történik változás a vétel előtti állapothoz képest (BEJOVO_TEMP mindig nullázva van RECEIVE elején.). Akkor hogy a DONE nem áll egybe csak azt jelentheti hogy a START_CONVERT valahogy nemjó amellett hogy a SEND jó és a RECEIVE is. Hú ehez már késő van. Már zsibbadok.
(#) skeletornb hozzászólása Jan 20, 2009 /
 
Gyors átfutottam a fórumot, google barátomat is segítségül hívtam, de nem találtam meg amit kerestem, tehát kérdezek.

Mennyiben hiúsíthatja meg az égetést a monitor közelsége? Gyakorlatilag, most nálam kereszttűzben van a számítógép tápjával. Mellékeltem egy kis vázlatot, hogy hogyan. A "kitolt" cd-tálcával szemléltettem a tájolást, továbbá a számítógépen nincs rajta a burkolata sem. (azért van így, hogy a téli időszakban ne párásodjon le, ha nincs bekapcsolva huzamosabb ideig, mivel a rajzon is látható falak hidegfalak.)

Azért kérdezek, ilyen egyszerűt, mert megépítettem 2 égetőt is. De nem tudok düllőre jutni.

Az első a WPB18, terveztem neki nyákot, oly módon, hogy egyenesen az égető a portba dugható, ICSP-nek 10cm-es réz drótokat használtam. Az Oshonnak a programjával probáltam. 7407-es meghajtóIC-vel. PICnek pedig 16f876A-t is és 16f628-t is próbáltam.

Másik programozónak az Oshon saját égetőjét építettem meg, ezt pontsávos próbanyákra. 7cm-es printer kábel, plusz szintén 10cm-es ICSP vezetékek, tömör rézből. 7404-es meghajtóIC-vel. Ugyanazokat a PIC-eket próbáltam égetni, mint a másik égetővel. Szintén az Oshon programjával.

A programban mindig a meghajtóIC-nek megfelelő beállításokat futtattam, később már kísérleteztem is, hátha jó lesz. Az ICSP vezetékeket UTP-kábelből bányásztam. Külső tápot használtam mind a két esetben, 16v-ból nyertem ki 78xx-es stabkockákkal a megfelelő feszültséget.

A tünetek mind a két esetben ugyanazok, olvasáskor 3FFF-et kapok, írás után, ha visszaolvasom szintén 3FFF-et ír ki. Teljes lefordított programmal nem próbáltam még, mindig 0100h-ik címre beírtam 1111-et, gondolom, ha ez így működik akkor rendes programmal is menni fog.

Sajnálom, hogy egy egyszerű kérdésből ekkora problémát csinálok, de ha véletlen mégsem a monitor a vétkes, akkor vagy a számítógép portja a hibás, vagy el kellene gondolkodnom azon, hogy pályát tévesztettem.

előre is köszönettel: Balázs.

U.I.: Az ENIAC-os poén jó volt

alaprajz.PNG
    
(#) watt válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
Jó úton haladsz! Próbáld ki, hogy az 1SHOT-ot nem állítod 1-be, majd ismét állítsd be. Ha a csekkolás követi az akciót, akkor az írás olvasás rendben van.

Ha ez megvan, akkor a konverziós parancs után tegyél be egy feltételes ciklust, amiből akkor lépj ki, és gyújtsd be a LED-et, amikor a DONE 1 lesz. Ha nem lép ki a ciklusból(LED sötét marad), akkor meg kell keresni miért! Valami ilyesmi kell majd az időzítések helyére:

  1. DONE_NO_OK
  2.         movlw  0xac
  3.         movwf  KIMENO           ; read config
  4.         call  SEND              ; parancs elküld
  5.         call  RECEIVE           ; Status olvasása
  6.         btfss  BEJOVO_TEMP,7    ; DONE bit
  7.         goto   DONE_NO_OK
  8.         bsf    LED
  9.         ;ha eddig eljut, akkor ki lehet olvasni a hőmérsékletet.


az RST vonalat nem kezeltem le, a példában...
(#) delmur82 válasza watt hozzászólására (») Jan 20, 2009 /
 
Egyszerűen nem.
Már kikapcsoltam a START_CONVERT és a READ_TEMP részeket is. Azok sem zavarnak. Csak a DS1620 beállítás részt vizsgálom. Csak annyit hogy a 1SHOT tényleg 1 lessz e ha azt állítom be. De sajnos mindig 1. Ha 0 - át küldök neki akkor is 1.
(#) trudnai válasza skeletornb hozzászólására (») Jan 20, 2009 /
 
Idézet:
„Mennyiben hiúsíthatja meg az égetést a monitor közelsége?”


A gyors valasz: A mostani monitorok (ertsd 10 evnel nem oregebb...) mar eleg jo arnyekolassal birnak. Igy is van nyilvan valamennyi szorasuk, de ha rendelkeznek a megfelelo minositesekkel kicsi az eselye, hogy Csernobilkent viselkednek. A programozohoz vezeto kabeleknek nyilvan minel rovidebbnek kell lenniuk, hogy minel kevesebb zajt szedjenek ossze a kornyezetukbol, es az sem artalmas, ha csavart erparakat alkalmaz az ember (pl UTP Cat-5 vagy Cat-6 kabelek ereit). Ezenfelul az aramkornek megfelelo zajszuressel kell rendelkeznie, hogy a fellepo EMI-ket kiszurje. De ezen felul nem szabadna, hogy ez gondot okozzon velemenyem szerint.
(#) trudnai válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
En azt nem ertem ebben az egeszben, hogy Watt altal beidezett kodban a CLK-t alacsonyra allitjak, majd olvasas, majd magasra allitjak. A Te kododban pedig CLK-t magasra allitod, majd olvasas, majd alacsonyra allitod tehat epp az ellenkezoje - de lehet tevedek, epp csak ra pillantottam es ez szurt szemet.
(#) delmur82 válasza trudnai hozzászólására (») Jan 20, 2009 /
 
Melyik kódot nézted mert volt már fent pár verzió.
A CLK a SENd és a RECEIVE rutinokban van először alacsonyra majd magasra állítva.
(#) szilva válasza skeletornb hozzászólására (») Jan 20, 2009 /
 
Én nem hinném, hogy a monitor bármit is befolyásolna. Mérd végig egy multiméterrel az áramkörödet valamelyik program hardverteszt menüpontjában. Ha a megfelelő feszültségek a megfelelő helyeken nem jelennek meg a teszt során, akkor annak meg kell keresni az okát. Akár még a printerport is lehet ludas, pl. lehet, hogy nem mindegy, milyen típusúra van állítva a BIOS-ban.
(#) delmur82 válasza watt hozzászólására (») Jan 20, 2009 /
 
Tudom hogy ez így van ajánlva de akkor sem értem:
Hogy a fenébe kerül bele a BEJOVO_TEMP - be az érték?
  1. RECEIVE
  2.         MOVLW   D'8'
  3.         MOVWF   COUNT
  4.         CALL    DATA_HIGH                                       ; bemenetre kapcsolás
  5.         CLRF    BEJOVO_TEMP
  6. RECEIVE_
  7.         BCF     CLK
  8.         BCF     STATUS,C
  9.         BTFSC   DAT
  10.         BSF     STATUS,C
  11.         RRF     BEJOVO_TEMP,F
  12.         CALL    VARJ2
  13.         BSF     CLK
  14.         DECFSZ  COUNT,F
  15.         GOTO    RECEIVE_
  16.         RETURN

Ha a DAT 1 - vagyis érkezik egy magas bit aminek ugye mindig a BEJOVO_TEMP 0. bitjére kéne kerülnie (hiszen jobbra forgatás után igy lenne helyes), - szoval STATUS, C 1- re áll ugye. Majd forgatjuk BEJOVO_TEMP - et. DE a BEJOVO_TEMP csak nullákból fog állni nem?
(#) szilva válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
Hahó! Olvasgatom a DS1620 adatlapját, minden regiszterre azt írja, hogy 9 bites. Az nem baj, hogy Te ebben a RECEIVE rutinban 8 bites adatot olvasol? Gondolom, a SEND-ben is 9 bitesként kellene küldeni az adatot, vagy nem?
(#) delmur82 válasza szilva hozzászólására (») Jan 20, 2009 /
 
Nem mert az elküldött parancsszavak csak 8 bitesek, a CONFIG regiszter is csak 8 bites. Az olvasás pedig úgy van megoldva hogy először kiolvassa az LSB - t (8 bit)
majd kiolvassa az FSB - t (8 bit). igaz ennek csak az első bit- je az érdekes a többi mindig nulla.Igaz meg lehetett volna irni 9 ciklusosra is csak akkor figyelni kéne hogy a 8. bit után mentse le egy regiszterbe, majd a kilencediket egy másikba. Az eredmény ugyanaz.
(#) trudnai válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
Idézet:
„Melyik kódot nézted mert volt már fent pár verzió.”


Fogalmam sincs, elkezdtem visszafele menni lapozgatva a PIC mierteket es ahol lattam csatolmanyt Toled azt nyitottam meg - de lehet egy regebbit sikerult, es nem vettem eszre azota mar kuldtel ujabb kodot.

Na, most megtalaltam az ujabb verziot - ugy latszik mar ket korty kave is jot tesz a szememnek
(#) szilva válasza szilva hozzászólására (») Jan 20, 2009 /
 
Pontosítom magam: a STATUS regiszter írásakor/olvasásakor 8 bitet ír. Azt sehol nem találom, hogy a parancsok milyen hosszúak.
(#) szilva válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
Igen, már látom a szövegben, hogy a 2x8 bit is elfogadott módszer a 9 bites adatok továbbítására. A RST-t minden kommunikáció előtt/után billented?
(#) trudnai válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
Idézet:
„Ha a DAT 1 - vagyis érkezik egy magas bit aminek ugye mindig a BEJOVO_TEMP 0. bitjére kéne kerülnie (hiszen jobbra forgatás után igy lenne helyes), - szoval STATUS, C 1- re áll ugye. Majd forgatjuk BEJOVO_TEMP - et. DE a BEJOVO_TEMP csak nullákból fog állni nem?”


Nem. Veszed az elso bitet, gyakorlatilag bele forgatod a BEJOVO_TEMP legfelso bitjebe (BEJOVO_TEMP,7). Mivel ezt a muveletet 8x vegzed el, a legvegen a legelsonek bejovo bit lecsuszik a BEJOVO_TEMP,0 poziciora. Magyaran a BEJOVO_TEMP nyilvan csak akkor lehet csupa nulla, ha a bejovo adatfolyam is csupa nullat mutatott.

Amugy egy kis 'trukk' : Amikor a DAT portjat magas impednanciara allitod, akkor "TRISA,0" -t irsz. Ha a fejlesztes kozben megvaltoztatod a portot, akkor konyebb lenne szerintem szinkronizalni a kodot, ha oda is egyszeruen "DAT" -ot irnal - hiszen a bankolas miatt ugy is a PORTA a TRISA-ra fog mutatni...

A masik, hogy az ISR vektoron egy GOTO-t latok ugyanarra a pontra ahova a reset vektor is ugrik. Ez igy nem jo, ha nem akarod az interruptokat kezelni, akkor egy RETFIE-t kell oda tenni (marmint ha biztos-ami-zicher elven le akarod kezelni az interruptokat.

Amit meg csinalhatsz debughoz: A BEJOVO_TEMP-et egy-az-egyben kirakod egy PORT-ra amin 8 db LED-et hajtasz meg, igy lesz egy binaris keped arrol mi jott be - ott megakasztod a PIC-et, es latni fogod mit valaszolt, az jonak tunik-e avagy csupa nulla stb...
(#) delmur82 válasza szilva hozzászólására (») Jan 20, 2009 /
 
igen.

Bár igy van a programban:

BSC RST
write
read
BCF RST

gondolom igy jó
(#) szilva válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
Igen, így jónak kellene lennie az én logikám alapján is, meg amit az adatlap ír, talán az alapján is.

Nemrég, amikor a DS1821-gyel szenvedtem, ott is belefutottam abba, hogy nem elég a kommunikáció elején egy "reset-present"-tel iniciálni, hanem minden művelet előtt kell. Ha jól olvasom az adatlapot, akkor itt is így kell lennie, azaz RTS fel, parancs ki, adat ki vagy be (ha van), RST le; és a következő parancsnál ugyanez.
(#) delmur82 válasza szilva hozzászólására (») Jan 20, 2009 /
 
Az a mérgesítő hogy már csak a SEND meg a RECEIVE van benne szinte meg az inicializáló. Csak annyit kéne csinálnia hogy belerakok 8 bitet a regiszterébe és megvizsgálom hogy mondjuk a 0. milyen. De nem az amit beleírok. A rutinoknak menniük kell már több helyen megnéztem. mégis mintha a BEJOVO_TEMP fölvenne értékeket de nem jókat. és mindig ugyanazokat függetlenül mit küldök neki. PL a BEJOVO_TEMP,0 mindig 1 lessz, a BEJOVO_TEMP,7 pedig mindig 0, bármit írok bele.

Ez a vizsgáló rutinom:
  1. movlw   0xAc
  2.         movwf   KIMENO
  3.         bsf             RST
  4.         call    SEND
  5.         BCF             RST
  6.         CALL    VARJ
  7.         BSF             RST
  8.         call    RECEIVE
  9.         bcf             RST
  10.         btfss   BEJOVO_TEMP,0
  11.         goto    JA
  12.         bsf             LED
  13.         GOTO    ELEJE
  14. JA
  15.         BCF             LED
(#) trudnai válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
De a BEJOVO_TEMP-et valtoztatod a RECEIVE-ben...
(#) delmur82 válasza trudnai hozzászólására (») Jan 20, 2009 /
 
A RECEIVE elméletileg beleteszi a BEJOVO_TEMP - be a DS1620 STATUS regiszter bitjeinek értékeit. persze hogy változik.(8 szor). RRF BEJOVO_TEMP,F

Mi a hiba???
  1. LIST P=16F628A
  2.                 #INCLUDE P16F628A.inc
  3.  
  4. ;konfigurálás
  5.                 __CONFIG  _CP_OFF & _WDT_OFF & _PWRTE_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT
  6.  
  7. ORG     0x00           
  8.         GOTO    START
  9.  
  10.  
  11.         CONSTANT BASE = 0x20    
  12. ;maga a programhoz kell
  13.         #DEFINE CLK     PORTA,3                         ; CLOCK
  14.         #DEFINE DAT     PORTA,2                         ; DATA
  15.         #DEFINE RST             PORTA,4                         ; RESET
  16.         #DEFINE FUTES   PORTA,1                         ; FŰTÉS
  17.         #DEFINE LED             PORTA,6                         ; FŰTÉSJELZŐ LED
  18.  
  19. ;Változóblokk
  20.         CBLOCK BASE+d'1'
  21.                                 COUNT                                   ;számláló
  22.                                 KIMENO
  23.                                 BEJOVO1
  24.                                 BEJOVO2
  25.                                 BEJOVO_TEMP            
  26.        
  27.         ENDC
  28.  
  29. ;Include fájlok (a modulok)
  30.         #include "E:\Munka\forumra\modules\m_bank.asm"
  31.         #include "E:\Munka\forumra\modules\m_wait.asm"
  32.  
  33. START
  34.         BSF     STATUS, RP0                             ; Select Bank 1
  35.         MOVLW   b'10000001'                                     ; PORTA 0 és 7. bit bemenet (gombok) többi kimenet
  36.         MOVWF   TRISA
  37.         CLRF    TRISB                                           ; PORTB ÖSSZES KIMENET
  38.         BSF             PCON,OSCF                                       ; Belső oscillátor 4 Mhz (OSCF=1), 37 Khz (OSCF=0)
  39.         BCF     STATUS, RP0                                     ; Bank0
  40.         MOVLW   07H                                                     ; PIC16F628 - nál kikapcsolja a komparátort
  41.         MOVWF   CMCON
  42.         CLRF    PORTA
  43.         CLRF    PORTB
  44.  
  45. ;A DS1620 konfigurálása
  46.                         ; 76543210
  47.         ;parancs: 00001100  ;write config
  48.         ;adat   : 00000001      ; 1SHOT mode
  49.         MOVLW   0x0c
  50.         MOVWF   KIMENO
  51.         BSF     RST                                                     ; engedélyezés
  52.         CALL    SEND                                            ; elküldeni a paranacsot
  53.         MOVLW   b'00000000'    
  54.         MOVWF   KIMENO
  55.         CALL    SEND                                            ; elküldeni az adatot
  56.         CALL    VARJ
  57.         BCF     RST                                                     ; tiltás
  58.         WAIT    D'200'
  59.  
  60. ELEJE
  61.  
  62. movlw   0xAc
  63.         movwf   KIMENO
  64.         bsf             RST
  65.         call    SEND
  66.         call    RECEIVE
  67.         bcf             RST
  68.         btfss   BEJOVO_TEMP,0
  69.         goto    JA
  70.         bsf             LED
  71.         GOTO    ELEJE
  72. JA
  73.         BCF             LED
  74.                                                                                         GOTO    ELEJE
(#) potyo válasza skeletornb hozzászólására (») Jan 20, 2009 /
 
Nekem amíg a CRT monitorom volt, addig is így teszteltem.

DSC00037.JPG
    
(#) trudnai válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
Akkor viszont nem ertem ezt a kerdest:

Idézet:
„Az a mérgesítő hogy már csak a SEND meg a RECEIVE van benne szinte meg az inicializáló. Csak annyit kéne csinálnia hogy belerakok 8 bitet a regiszterébe és megvizsgálom hogy mondjuk a 0. milyen. De nem az amit beleírok. A rutinoknak menniük kell már több helyen megnéztem. mégis mintha a BEJOVO_TEMP fölvenne értékeket de nem jókat. és mindig ugyanazokat függetlenül mit küldök neki. PL a BEJOVO_TEMP,0 mindig 1 lessz, a BEJOVO_TEMP,7 pedig mindig 0, bármit írok bele.”


Szoval a RECEIVE-et megvaltoztatod, hogy mondjuk csupa 1-est irjpon bele, es megsem lesz benne csupa 1?
(#) delmur82 válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
fenébie kicsit hosszú lett.
(#) trudnai válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
Te, az a ket ASM amit beinkludalsz mit csinal? Azt ha meg tudnad mutatni, mert mindig hivogatod a RECEIVE-ben a WAIT makrot es lehet az tesz be neki?
(#) delmur82 válasza trudnai hozzászólására (») Jan 20, 2009 /
 
Aza agond akár 1 - et akár 0 - át küldök mindig egy lessz:
  1. MOVLW   0x0c
  2.         MOVWF   KIMENO
  3.         BSF     RST                                                     ; engedélyezés
  4.         CALL    SEND                                            ; elküldeni a paranacsot
  5.         MOVLW   b'00000000'    
  6.         MOVWF   KIMENO
  7.         CALL    SEND                                            ; elküldeni az adatot
  8.         CALL    VARJ
  9.         BCF     RST                                                     ; tiltás
  10.         WAIT    D'200'


A CALL SEND elküldi a KIMENO tartalmát
(#) delmur82 válasza trudnai hozzászólására (») Jan 20, 2009 /
 
késleltetés lenne. Ez előre meg volt írva

m_wait.asm
    
(#) szilva válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
Nade: az RST-t a kommunikáció előtt fel kell emelni, és a legvégén kell leengedni. Ha jól látom, Nálad a 0xAC command byte után le lesz húzva, ami adatlap szerint megszakítja a kommunikációt. Szerintem így kellene:

RST high
SEND 0xA2
RECEIVE
RST low

(#) delmur82 válasza szilva hozzászólására (») Jan 20, 2009 /
 
Nos én is így csinálom csak előtte a paranscot berakom a KIMENO - be mert a SEND rutin ebbőla regiszterből küld adatokat. De a CALL SEND előtt én is felhúzom:
BSF RST és csak a bit vizsgálat előtt eresztem BCF RST
(#) szilva válasza delmur82 hozzászólására (») Jan 20, 2009 /
 
Itt a kommunikáció már jónak tűnik, ha a SEND és RECEIVE jól dolgozik. (Viszont azt nem tudom, nem állítódik-e el esetleg a kiválasztott bank valamelyik hívott rutinnál.) A másik, ami érdekes lehet, hogy a CONFIG/STATUS regiszter az adatlap szerint tartalmaz két fix bitet, lehet, hogy azokat meg kellene tartani olyan állapotban, ahogy az adatlap írja.
Következő: »»   393 / 1320
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