- Select registers size (M=2 kell, abban elfér 16 bit)
- Choose subroutines (M_AD, D, MSUB, M-MUL)
- Kattints a Get Code gombra!
Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Túl egyszerű?
Van egyszerűbb:
Ne zavarjuk össze! Ez majd a következő lépcső...
Ill. ha valami oknal fogva a Z-t nem akarod bantani:
de ezt porton ill SFR-eken pl nem celszeru alkalmazni...
Na mindegy mostmar, ezzel megjobban ossze zavartam szegenyt
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?
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ű!
Még szerencse, hogy nem ezzel kezdtük! Így sorban adagolva remélhetőleg hasznára válhat, és nem csak neki!
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.
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!)
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
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ó.
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?
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.
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?
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.
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.
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)??
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.
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...
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.
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
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.
Egy kis összefoglaló táblázat: Bővebben: Link
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.
Akkor valószínűleg az égetőd nem jó. Azért ilyen könnyen nem szokták a PIC-ek sem feladni!
Idézet: „hogy kezelem én azt le, mikor a PIC 8 bittel dolgozik??Hogy végzem el a műveletet??” 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!
Ü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?
Az ERED-be 00001111-nek kéne lennie, de ahelyett 00000001-van. :eek2: [i] |
Bejelentkezés
Hirdetés |