Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   342 / 1319
(#) szilva válasza szigetivan hozzászólására (») Nov 17, 2008 /
 
Pl. itt le van írva mindkettő lényege:

Bővebben: Link

(#) watt válasza mrfencer hozzászólására (») Nov 17, 2008 /
 
  1. CLRW  ;w=0
  2. XORWF  REG,W
  3. BTFSS  STATUS,Z

Túl egyszerű?
(#) potyo válasza watt hozzászólására (») Nov 17, 2008 /
 
Van egyszerűbb:
  1. MOVF REG, F
  2. BTFSS STATUS, Z
(#) watt válasza potyo hozzászólására (») Nov 17, 2008 /
 
Ne zavarjuk össze! Ez majd a következő lépcső...
(#) trudnai válasza potyo hozzászólására (») Nov 17, 2008 /
 
Ill. ha valami oknal fogva a Z-t nem akarod bantani:
  1. INCF    REG,f
  2. DECFSZ  REG,f

de ezt porton ill SFR-eken pl nem celszeru alkalmazni...
(#) trudnai válasza watt hozzászólására (») Nov 17, 2008 /
 
Na mindegy mostmar, ezzel megjobban ossze zavartam szegenyt
(#) szigetivan válasza szilva hozzászólására (») Nov 17, 2008 /
 
Oke, köszi.

Odáig eljutottam, hogy az A/D konverziót megcsináljam, de az ebből kapott bináris 10 bites értéket még mindig nem tudom visszaalakítani és számolni vele ahogy kell a már leírt képlet szerint 8 biten. Majd a végén decimálisként kiküldjem a soroson keresztül....Ötlet?
(#) mrfencer válasza trudnai hozzászólására (») Nov 17, 2008 /
 
Watt válaszát felfogtam, potyoét kapisgálom, trudnaiét nem értem
Köszönöm a segitséget, most birkózok vele kipurcanásig!

Ja és igen, túl egyszerű!
(#) watt válasza trudnai hozzászólására (») Nov 17, 2008 /
 
Még szerencse, hogy nem ezzel kezdtük! Így sorban adagolva remélhetőleg hasznára válhat, és nem csak neki!
(#) watt válasza szigetivan hozzászólására (») Nov 17, 2008 /
 
Idézet:
„Majd a végén decimálisként kiküldjem a soroson keresztül....Ötlet?”

Teljesen mindegy hogy küldöd, csak a program ami fogadja értelmezni tudja az értéket.
Egyébként nem tudom hogy akarsz egy 10 bites számot 8 biten értelmezni? Azzal a felbontást csökkented, akkor meg nem kell a 10 bit.
(#) watt válasza mrfencer hozzászólására (») Nov 17, 2008 /
 
Remek, akkor hasnáld potyo-ét, mert az a korrekt! Nézd meg a MOVF utasítás milyen STATUS biteket állít, és teljesen világos lesz a miért!
Aztán nézd meg a INCF és a DECFSZ utasítások mire jók és milyen STATUS biteket állítanak. Akkor rájössz mit értett trudnai az alatt, hogy "ha nem akarjuk a Z-t bántani!"

Ja és ami nagyon fontos! Szimuláld le a megoldásokat! (ha nem tudod használni a szimulátort, kérdezz!)
(#) icserny válasza szigetivan hozzászólására (») Nov 17, 2008 /
 
Idézet:
„Ta=(Vout-Vo)/Tc=(Vout-0,5)/0,01= ___ [V]”


A mértékegység természetesen [oC], mivel a V-vel már egyszerűsítettünk a (Vout-Vo)/Tc hányados képzésekor...
Idézet:

Hogy tudnám ezt megvalosítani assembly-ben?”

Nyögvenyelősen, hiszen tizedestörtekkel akarsz számolni,
ráadásul Vout értékét is számolnod kell, hiszen

Vout = Aout * Vref / 1023

ahol
Aout az ADC-ből kiolvasott 0-1023 közötti szám
Vref a referencia feszültség, amit az ADC kap
(#) watt válasza trudnai hozzászólására (») Nov 17, 2008 /
 
Van ám egy kis bibi ezzel, mert ha a Z-t nem akarod bántani és a bejövő érték FF, akkor nem sikerült a szándék. Ha FF értéke kizárható, akkor a megoldás jó.
(#) szigetivan válasza watt hozzászólására (») Nov 17, 2008 /
 
Lényeg: a uC A/D konvertere automatikusan a beérkező adatot bináris 10 bitre alakítja

"The converter
generates a 10-bit binary result via successive
approximation and stores the conversion result into the
ADC result registers (ADRESL and ADRESH)."

Ebből a bináris 10 bites számból szeretnék kivonni egy konstansot, egészen pontosan a 0,5 decimális értéket. Ezt hogyan kell csinálnom a uC-vel?
(#) szilva válasza watt hozzászólására (») Nov 17, 2008 /
 
  1. INCFSZ   REG,f
  2.       NOP
  3.       DECFSZ  REG,f


És így?
(#) icserny válasza szigetivan hozzászólására (») Nov 17, 2008 /
 
Itt találsz egy kész projektet assembly forrással. Nézd meg, de szerintem könnyebb háromszor megírni, mint egyszer megérteni.
(#) szilva válasza szigetivan hozzászólására (») Nov 17, 2008 /
 
Még mindig az a véleményem, hogy előbb olvass, és tisztázd, hogy mi is a feladat! Szerinted hogy néz ki a 0.5 a PIC-ben? És mit fogsz elérni vele, ha a 10 bites számból (ami csak egy arányt mutat a Vref és a mérendő analóg jel között, nem abszolút értéket) kivonod?
(#) icserny válasza szigetivan hozzászólására (») Nov 17, 2008 /
 
Idézet:
„Ebből a bináris 10 bites számból szeretnék kivonni egy konstansot, egészen pontosan a 0,5 decimális értéket.”


Alapvető tévedésben vagy! A beolvasott 10 bites szám nem voltban van mérve, ennélfogva nem is 0,5-öt kell kivonni belőle. Ha pontosan 5 V a referencia, akkor a legnagyobb 10 bites szám (1023) felel meg 5 V-nak. A 0.5V pedig ennek a tizede, azaz 102,3 lesz, ezt kell levonni.
(#) watt válasza szilva hozzászólására (») Nov 17, 2008 /
 
Trükkös! Ez már jó! Csak akkor érdemes ezt használni, ha a Z-t mindenképpen békén kell hagyni, mert egyébként ugyanúgy 3 programsor.
(#) szigetivan válasza icserny hozzászólására (») Nov 17, 2008 /
 
okés,h.a 10bites szám nem V-ban van, de hogy kezelem én azt le, mikor a PIC 8 bittel dolgozik??Hogy végzem el a műveletet??Azt értem,h.0,5V miért lesz annyi amennyi.
én csak a képletet akarom megírni, de azt nem értem,h.az A/D által kiadott 10 bites értékkel,h.végzem el a műveletett (pl: a 0,5 azaz a 102,3 kivonását)??
(#) watt válasza szigetivan hozzászólására (») Nov 17, 2008 /
 
Ha jól gondolom ez egy olyan hőmérő, amelyik feszültséget ad ki(ha nem, az sem számít, egy a lényeg...).
Ha igen, akkor meg kell nézni, hogy melyik a két végállapota a feszültségnek és az milyen hőmérséklethez tartozik(n0V...mV ; -n°C...+m°C) . Ha ez megvan, akkor hozzá kell "kalibrálni" a referencia feszültséget a fesztartományhoz. Érdemes olyan referencia feszt használni, ami osztható 1024-el!(4096V pl. ) de akkor a hőmérőből kijövő feszt is át kell alakítani erre a tartományra (0...4096mV) egy OPA-val.
Másik megoldás, hogy állítható referenciafeszt használsz, amit pontosan ráállítasz a hőmérőből kijövő maximális feszültségre. Ekkor a hőmérséklet tartományod 1024-ed részekre lesz felosztva.

Nos én többek között ezért sem használok feszültség kimenetű eszközöket, ha van más lehetőség is.
(#) szilva válasza szigetivan hozzászólására (») Nov 17, 2008 /
 
Erre írtam, hogy előbb talán nézz utána, hogyan szokás számokat ábrázolni egy mikroprocesszoros rendszerben! Azt tudod, hogy ha 8 bites számokról lenne szó, akkor például szorozni, osztani hogyan kellene? Mert ugye ilyen is lesz a számolásban, az már csak hab a tortán, hogy valószínűleg nem lesz elég a 8 bit a számokra, amikkel dolgoznod kellene...
(#) watt válasza szigetivan hozzászólására (») Nov 17, 2008 /
 
Felejtsd el a tört számokat addig, amíg rá nem vagy rákényszerülve, és itt nem vagy!
Gondold végig, hogy hogyan ábrázolódik a 10 biten a számod! Ezután egyértelmű, hogy ezt csak két bájton lehet lekezelni. Ha a bájtokat a megfelelő helyiértéken kezeled és az átviteleket is lekezeled, akkor megvan a megoldás a műveletekre.
(#) tams hozzászólása Nov 17, 2008 /
 
hello
pic 16f84A 04/p és 04I/P között mi a különbség.
köszi
én az előbbit vettem dcf77-es órához. Jó lesz?
üdv
(#) szilva válasza tams hozzászólására (») Nov 17, 2008 /
 
Jó kell, hogy legyen, az "I" csak az "Industrial" kivitelre utal, ami a működési hőmérséklet-tartományt határozza csak meg (létezik még "E" azaz "extended" kivitel is). Gondolom, hogy a jelölés nélküli az "I"-vel azonos, de egyébként teljesen lényegtelen az óra szempontjából.
(#) Szárnyas válasza tams hozzászólására (») Nov 17, 2008 /
 
Egy kis összefoglaló táblázat: Bővebben: Link
(#) tams hozzászólása Nov 17, 2008 /
 
köszönöm a felvilágosítást!!!!
Egyébként egy ilyen pic tönkremegy könnyen?? csak mert már van otthon 2 de egyiket se tudtam programozni és már arra gyanakszok, hogy tönkrement maga a pic. és mégegyszer megpróbálom egy újjal.
(#) Norberto válasza tams hozzászólására (») Nov 17, 2008 /
 
Akkor valószínűleg az égetőd nem jó. Azért ilyen könnyen nem szokták a PIC-ek sem feladni!
(#) icserny válasza szigetivan hozzászólására (») Nov 17, 2008 /
 
Idézet:
„hogy kezelem én azt le, mikor a PIC 8 bittel dolgozik??Hogy végzem el a műveletet??”


  1. Select registers size (M=2 kell, abban elfér 16 bit)
  2. Choose subroutines (M_AD, D, MSUB, M-MUL)
  3. Kattints a Get Code gombra!


Hogy megkönnyítsem az életedet, egy kicsi átdolgoztam a képletedet. Először is döntsd el, hogy mennyi lesz Vref. Ha 100 fok fölé nem kell menni, akkor 1,5 V az optimális érték, ezt vettem alapul.

Ha i-vel jelölöm az ADC-ból kiolvasott 10 bites számot, akkor:

T=(Vout-Vo)/Tc = (1,5*i/1023-0,5)/0,01
Most bővítsünk 102400-nel!

T = (150*i*1024/1023 - 50*1024)/1024

A 150*1024/1023-at veheted 150-nek is (ez kb. 0.1 fok hibát okoz), ekkor:

T=(150*i-50*1024)/1024

Ha finomkodni akarsz, akkor a 150*1024/1023 kettő (negatív) hatványai szerint sorbafejthető:

150*1024/1023 ~ 150+1/8+1/64+1/128+...

azaz:

(150*i+i/8+i/64+i/128-1024*50)/1024)

Így már gyakorlatilag századfokra pontos a konverzió - ami talán túlzás is, hiszen a mérés nincs ilyen pontosságú.

Ebben a képletben az a frankó, hogy az összes osztás jobbra léptetéssel megoldható, tehát nem kell osztó rutint írni!
(#) mrfencer válasza watt hozzászólására (») Nov 18, 2008 /
 
Üdv!
Leakadtam. Irtam egy kis progit a xor-ra, de nem az az eredmény jön ki, amit szeretnék. Már vagy egy órája irogatom át, de valami nem stimmel. Segitnétek?
  1. PROBA   equ     20h
  2. TEST    equ     21h
  3. ERED    equ  22h
  4.  
  5. start  
  6.         clrw
  7.         movlw   b'11111111'
  8.         movwf   PROBA
  9.         movlw   b'11110000'
  10.         movwf   TEST    ; F beirása W be
  11.         movlw   TEST    ; W irása a TEST-be
  12.         xorlw   PROBA   ; xor müvelet a PROBA     tartalmával, az eredmény a W-be kerül
  13.         movlw   ERED    ; W irasa ERED-be
  14.        
  15.  
  16.         goto    start
  17. ;
  18.         end


Az ERED-be 00001111-nek kéne lennie, de ahelyett 00000001-van. :eek2: [i]
Következő: »»   342 / 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