Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   462 / 1320
(#) szigetivan válasza icserny hozzászólására (») Ápr 17, 2009 /
 
De figyu, ha ez jó eredményt ad nekem, amit már feljebb is írtam
para = (ADRESH<<8)+ADRESL;
akkor miért akarjuk ezt erőltetni, mikor nem ezzel van gond?
para =((unsigned long)ADRESH<<8) + ADRESL;
leellenőriztem és para=para-400 -al nekem most 89, ami szerint para-ba jól belekerül az ADRESH és ADRESL értéke.

vagy szereinted az a hiba és nem itt?
humidity = 0.1590492671*para - 31.20521173;>>>>
(#) Mate12345 válasza Mate12345 hozzászólására (») Ápr 17, 2009 /
 
Hogy ne mondja senki, hogy nem próbálkozok:

  1. org 0
  2.   nop
  3.   goto          Start
  4.   nop
  5.   nop
  6.   nop
  7. HeadISR:
  8.   movwf     W_Save
  9.   movf      STATUS,w
  10.   movwf     STATUS_Save
  11. ISR:
  12.   movf          RCREG,w
  13.   movwf         byte ;Most elvileg a W-ben és a byte-ban van a kiírandó jel
  14.   call          SendChar
  15. ExitISR:
  16.   movf      STATUS_Save,w
  17.   movwf     STATUS
  18.   swapf     W_Save,f
  19.   swapf     W_Save,w
  20. retfie
  21. Start:
  22.   bsf       STATUS,RP0     ; select Register Page 1
  23.   clrf      TRISA              
  24.   movlw     b'00001111'
  25.   movwf     TRISC    
  26.   bcf       STATUS,RP0     ; back to Register Page 0
  27.  
  28.   bcf       STATUS,RP0     ; address Register Page 2
  29.   bsf       STATUS,RP1    
  30.   movlw     0x0           ; we want all Port A pins Analoga
  31.   movwf     ANSEL
  32.   bcf       STATUS,RP0     ; address Register Page 0
  33.   bcf       STATUS,RP1
  34.  
  35.   ;A soros port beállítása
  36.   bsf           RCSTA,CREN
  37.   bsf           RCSTA,SPEN
  38.   bcf           TXSTA,SYNC
  39.   ;A soros port megszakítása
  40.   bsf           PIE1,RCIE
  41.   bsf           INTCON,GIE
  42.   bsf           INTCON,PEIE
  43.  
  44.   call      Init
  45.  
  46.   goto          $


Elvileg a SendChar-ral (Ez biztosan működik) el kellene küldenie egy karaktert az LCD-nek, amit a soros porotn keresztül kap, de nem csinál semmit. (Hiba nélkül fordul. A paramétereket deklaráltam)
(#) icserny válasza szigetivan hozzászólására (») Ápr 17, 2009 /
 
Idézet:
„De figyu, ha ez jó eredményt ad nekem, amit már feljebb is írtam para = (ADRESH<<8)+ADRESL; akkor miért akarjuk ezt erőltetni, mikor nem ezzel van gond?”


Ha szíveskednél elolvasni az assembly listát, akkor látnád, hogy a fenti sor mire fordul:
  1. ;       para = (ADRESH<<8)+ADRESL;
  2.         CLRW
  3.         BCF   0x03,RP0
  4.         BCF   0x03,RP1
  5.         CLRF  para+1
  6.         BSF   0x03,RP0
  7.         ADDWF ADRESL,W
  8.         BCF   0x03,RP0
  9.         MOVWF para


Ez gyakorlatilag a para = ADRESL; utasításnak felel meg, ADRESH pedig mintha ott sem volna. Csak ezért erőltettem, de felőlem hagyhatod így is...
(#) szigetivan válasza icserny hozzászólására (») Ápr 17, 2009 /
 
Hm köszi most már értem, hogy miért írtad ezt annyiszor és beismerem, megint igazad volt
(#) szigetivan válasza icserny hozzászólására (») Ápr 17, 2009 /
 
Hát nehezen de úgy tűnik Icserny kitartó munkájával sikerült megoldani ezt a hihetetlen problémát
Most nálam bent a szobában 25 fok van és 46% páratartalom

Még1x köszi nagyon!

És megőrít ez a fordító!
(#) Mate12345 hozzászólása Ápr 17, 2009 /
 
Én meg szenvedgetek magamban.

Azt hiszem, megvan a hiba. Nem állítottam be 9600 baud-ra.

És nem is tudom, hogy hogy kell. Egy PIC16F690-em van, ami a beépített oszcillátorát használja. Ezt hogy kéne konfigolnom, hogy jó legyen? Mit csináljak, hogy a soros port 9600 baud-dal menjen?

(A gond ott van, hogy nem tudom, háby herzen pörög a kristály és azt se, hogy hol tudom megnézni. De egy tapasztalt kolléga nézzen rá az assembly-kódomra is!)
(#) szigetivan válasza Mate12345 hozzászólására (») Ápr 17, 2009 /
 
Szia!

Idézet:
„Mit csináljak, hogy a soros port 9600 baud-dal menjen?”

BSF 0x03,RP0
BCF 0x03,RP1
BSF 0x98,BRGH
; SPBRG = 25; // Set 9600 baud for 4 MHz oscillator
MOVLW .25
MOVWF SPBRG
(#) watt válasza drywater hozzászólására (») Ápr 17, 2009 /
 
Azt mi is nagyon jól látjuk, hogy csak ilyen kevés kondi van(írtam is), ezért mondtuk, hogy kell minden IC-re a lehető legközelebb a lábakhoz.

A nyák furatgalvanizált?
(#) icserny válasza szigetivan hozzászólására (») Ápr 17, 2009 /
 
Most akkor mi a nyerő tipp? 1, 2 vagy X?

Hogy áll a páratartalom szenzor hőfokkompenzálása? Arra is van egy szép formula az adatlapban.
(#) icserny válasza Mate12345 hozzászólására (») Ápr 17, 2009 /
 
Idézet:
„A gond ott van, hogy nem tudom, hány herzen pörög a kristály”

Ebből ne csinálj magadnak gondot! Nincs is kristály... A belső oszcillátor RC időzítésű (azért pontatlan).
(#) szigetivan válasza icserny hozzászólására (») Ápr 17, 2009 /
 
Nyerő tipp az 1-es megoldás volt. Bár az X-en még gondolkozom
Páratartalom szenzor hőfokkompenzálásán pontosan mit értesz?
(#) Mate12345 válasza icserny hozzászólására (») Ápr 17, 2009 /
 
Azért remélem, annyit nem téved, hogy ezt ellehetetleníti.

Még mindig nem működik.

Itt a kód:

  1. nop
  2.   goto          Start
  3.   nop
  4.   nop
  5.   nop
  6. HeadISR:
  7.   movwf     W_Save
  8.   movf      STATUS,w
  9.   movwf     STATUS_Save
  10. ISR:
  11.   movf          RCREG,w
  12.   movwf         byte ;Most elvileg a W-ben és a byte-ban van a kiírandó jel
  13.   call          SendChar
  14. ExitISR:
  15.   movf      STATUS_Save,w
  16.   movwf     STATUS
  17.   swapf     W_Save,f
  18.   swapf     W_Save,w
  19. retfie
  20. Start:
  21.   bsf       STATUS,RP0     ; select Register Page 1
  22.   clrf      TRISA              
  23.   movlw     b'00001111'
  24.   movwf     TRISC    
  25.   bcf       STATUS,RP0     ; back to Register Page 0
  26.  
  27.   bcf       STATUS,RP0     ; address Register Page 2
  28.   bsf       STATUS,RP1    
  29.   movlw     0x0           ; we want all Port A pins Analoga
  30.   movwf     ANSEL
  31.   bcf       STATUS,RP0     ; address Register Page 0
  32.   bcf       STATUS,RP1
  33.  
  34.   ;A soros port beállítása
  35.   bsf           RCSTA,CREN
  36.   bsf           RCSTA,SPEN
  37.   bcf           TXSTA,SYNC
  38.   ;A soros port megszakítása
  39.   bsf           PIE1,RCIE
  40.   bsf           INTCON,GIE
  41.   bsf           INTCON,PEIE
  42.   ;Baud rate
  43.   bsf       STATUS,RP0
  44.   bsf           TXSTA,BRGH
  45.   ;bcf          BAUDCTL,BRG16
  46.   ;clrf         SPBRGH
  47.   movlw         .25
  48.   movwf         SPBRG
  49.   bcf       STATUS,RP0
  50.  
  51.   call      Init
  52.  
  53.   goto          $


Valami tipp vagy hiba?
(#) icserny válasza szigetivan hozzászólására (») Ápr 17, 2009 /
 
Idézet:
„Páratartalom szenzor hőfokkompenzálásán pontosan mit értesz?”


A páratartalom-érzékelőd kimenő feszültsége - sajnálatos módon - a hőmérséklettől is függ. Ezért, ha már úgyis méred a hőmérsékletet, akkor korrekcióba lehetne venni.További részletek az adatlapon.
(#) benjami válasza szigetivan hozzászólására (») Ápr 17, 2009 /
 
esetleg még egy verzió:
  1. union
  2. {
  3.   struct
  4.   {
  5.     unsigned char l;
  6.     unsigned char h;
  7.   };
  8.   unsigned int i;
  9. } para;
  10.  
  11. para.l = ADRESL;
  12. para.h = ADRESH;
  13.  
  14. ... = para.i; // 16 bites elérés
(#) icserny válasza Mate12345 hozzászólására (») Ápr 17, 2009 /
 
Idézet:
„Valami tipp vagy hiba?”

Nem értem, hogy miért szenvedsz programmegszakítással, amíg anélkül sem működik?

Egyébként meg nem szeretek vég nélküli, bcf status,rp0 meg bsf status,rp1 utasításokkal tűzdelt assembly listákat olvasni.

Biztosan a lustaság teszi, de ha egy próbaprogramot gyorsan össze akarok ütni, akkor nálam így néz ki a soros port kezelése:

Idézet:
„#use delay(clock=6144000)
#use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B5,bits=8)


utána meg:
printf("formátum",változó);
... osz't jónapot.
(#) szilva válasza szigetivan hozzászólására (») Ápr 17, 2009 /
 
Egész számokkal számolva különösen a számolások közben bekövetkező csonkolásokra nagyon kell figyelni. Ezért mindig az adott szóhosszon a maximálisan kifejezhető értékek közelébe kell pl. egy szorzatot "méretezni".

Ha a következő képlet kiszámolása a cél: hum = 0,1590492671 * para - 31.20521173
, akkor azt én egész számokkal a következő módon közelíteném meg:

- a fenti képlet így is írható: hum = para / 6,28736 -31.20521173
- para értéke 0-1023 közti érték, mivel az a 10 bites A/D-ból származik
- ebből következően 64-gyel megszorozva még éppen belefér az előjel nélküli 16 bites hosszba
- ha para-t 64-gyel szorzom, akkor az osztót is ennyivel kellene szorozni, azaz hum = para * 64 / 402,39104 - 31,2
- ezt egészekre egyszerűsítve a következő adódik: hum = para * 64 / 402 - 31

Nomost ez a legutolsó már egész barátságos, a hum értéke (ha jól értettem, amit korábban írtál) egész százalékban lesz (0...100). Ha pl. tizedszázalékos felbontást akarsz, akkor az osztót tizedére csökkentve és az offsetet tízszeresére növelve (hum = para * 64 / 40 - 312 )a hum a tizedszázalékos érték tízszeresét fogja tartalmazni, természetesen egészekben (0...1000).
(#) Mate12345 válasza icserny hozzászólására (») Ápr 17, 2009 /
 
Nekem a kód asm-ben kell. A megszakításokkal meg nincs gondom. Általában vígan használom őket. Nem hiszem, hogy itt azzal lenne a gond. Inkább valami mással. Csak nem tudom, mivel...
(#) szilva válasza Mate12345 hozzászólására (») Ápr 17, 2009 /
 
A 690 adatlapjában nézd meg az oszcillátorról szóló fejezetet. Valahol egészen biztosan le van írva benne, hogy ha INTRC-t választasz ki a konfigurációban, akkor milyen frekvenciával indul RESET után. Lehet, hogy az oszcillátor frekvenciáját kiválasztó regiszter (OSCCON?) leírásában fogod megtalálni azt, hogy melyik bitállás a default a RESET után. Ha jól emlékszem, akkor egyébként 4MHz ez az érték.
(#) szilva válasza Mate12345 hozzászólására (») Ápr 17, 2009 /
 
A megszakításodban van egy sendchar, amit nem látok az idézett kódban. Ha esetleg az vár valamire, akkor az nem biztos, hogy túl jó ötlet a megszakításon belül. De persze könnyen lehet, hogy nem ez a baj.
(#) potyo válasza benjami hozzászólására (») Ápr 17, 2009 /
 
Én így írnám:
  1. unsigned para;
  2. *((unsigned char*)((&para)+1))=ADRESH;
  3. *((unsigned char*)(&para))=ADRESL;
(#) trudnai válasza icserny hozzászólására (») Ápr 17, 2009 /
 
Integer propagation-t talan be kellene allitani - nem tudom ki volt az aki kikapcsolta... Meg hat mikor megkerdeztem mi a teszt adat 485-t volt a valasz, en azt hittem szigetivan ledebuggolta vagy leszimulalta - na mindegy, csak faj, hogy egy ilyen piti problemaval ennyit kell kuzdeni
(#) benjami válasza potyo hozzászólására (») Ápr 17, 2009 /
 
Ez nagyon tetszik . Azt hittem valami bonyolult kódot csinál belőle, de nem. A C18-as két movff-el megoldotta.
(#) Mate12345 válasza szilva hozzászólására (») Ápr 17, 2009 /
 
Az csak annyit csinál, hogy a work tartalmát elküldi egy LCD kijelzőre. Egy saját függvény, de érdektelen. A gond az, hogy nem lép be a megszakításba se...
(#) Mate12345 válasza Mate12345 hozzászólására (») Ápr 17, 2009 /
 
Az egyébként normális, hogy a PIC TX lábán veszültséget mérek? (logikai 1-et ad ki.)
(#) szilva válasza Mate12345 hozzászólására (») Ápr 17, 2009 /
 
Aha. Nézem a 690 adatlapot, és nekem valahogy nagyon úgy tűnik, hogy nem egy lapon van pl. az RCSTA és a TXSTA, sőt a PIE1 sem a nulláson lakik. Magyarul nem is azokat a regisztereket írod, amelyikeket szeretnéd. Miért olyan nehéz a BANKSEL makrót használni?
(#) szilva válasza Mate12345 hozzászólására (») Ápr 17, 2009 /
 
Az igen, mert a soros vonal alapállapotban logikai 1. A start bit lesz egy logikai nullás bit.
(#) szigetivan válasza icserny hozzászólására (») Ápr 17, 2009 /
 
Köszi, most már értem mire gondolsz
(#) szigetivan válasza szilva hozzászólására (») Ápr 17, 2009 /
 
Köszi szépen Szilva, ez hasznos infó volt
(#) trudnai válasza szilva hozzászólására (») Ápr 17, 2009 /
 
Azt hiszem amugy az EUSART-tal rendelkezo PIC-eknel lehet invertalni, de kulon kell kerni - most csak halvanyan emlekszem ilyesmire, remelem nem irok marhasagot
(#) Mate12345 válasza szilva hozzászólására (») Ápr 17, 2009 /
 
Nem tudtam, hogy van ilyen. Igazad van. Ez is hiba volt. Köszi.
Átírtam. Most ilyen (csatolva).

De valami még mindig nem jó...
Következő: »»   462 / 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