 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pet Nov 10, 2006 2:15 pm Naslov sporočila: |
|
|
Glitch je napisal/a: |
Kako to mislis: "fina v teoriji".
Moja vezava ne potrebuje toliko uporov in deluje tudi, ce pritisnes katerokoli kombinacijo tipk (vseh moznih je tukaj 16). |
Ti predpostavljas, da se vsi signali takoj (v neskoncno kratkem casu po pritisku/spustu tipke) postavijo na zeljeno vrednost in tram umirijo, da so vsi upori idealni, itd. Vse potencialne tezave je v praksi potrebno kar najbolj minimizirati, to je pa tezje narediti z upori razlicnih vrednosti (kjer grejo tudi odkloni pri izdelavi lahko v razlicni smeri, za razliko od ene serije enakih uporov, kjer so ponavadi v isto smer), tezje je najti tocno razmerje uporov (sploh ce je vmes vec tipk kot le stiri) - to velja tudi ob izbiri iz E96 ...
V teoriji so tako 1K, 2K, 4K, 8K, 16K, 32K itd. +/- enaka relativna napaka vedno v isto smer upori fina zadeva, v praksi pa ne obstajajo. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Pet Nov 10, 2006 2:47 pm Naslov sporočila: |
|
|
Khm...
Se enkrat, pa upostevam se napako upornosti. Vhodna impedanca AD je vecja 1000 ohmov.
Standardna lestvica (1000, 2000, 3900, 8200) in zaokrozeno na 4 decimalke. Za 1500 sem res malce prehiteval.
Vse tipke:
- 2,1535 V
R4 odprt:
- 2,1028 V
Napaka pri R4 (namesto 8200 dam 9100, kar znese 12% razlike !!!)
Vse tipke:
- 2,1487 V
Worst case razlika je tako: 0,0459 V
10 bitni AD z odbitima spodnjima bitoma ima resolucijo ca. 13mV. Mar se ti ne zdi, da je tudi ob taki drasticni spremembi upornosti dovolj za detekcijo spremembe. Saj misliva enako in ne zahtevava absolutne tocnosti ampak rezultate znotraj nekih vrednosti, ki za 12% spremembo enega upora plesejo znotraj 4 bitov (dva odbita plus dva za spremembo upornosti)?
Kot sem rekel, ce 10 bitni AD z omejeno resolucijo na 8 bitov ni zmozen takih meritev in da smo se bolj prepricani, z dodatnim povprecenjem rezultatov, pa ... |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Pet Nov 10, 2006 2:53 pm Naslov sporočila: |
|
|
Sokrat je napisal/a: |
Ti predpostavljas, da se vsi signali takoj (v neskoncno kratkem casu po pritisku/spustu tipke) postavijo na zeljeno vrednost in tram umirijo, da so vsi upori idealni, itd. |
Opa! To kaj jaz predpostavljam? To ti predpostavljas, ne jaz. Kje pise o tej predpostavki: hitrost signalov? Govoris o popolnoma drugih stvareh.
Prosim no. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pet Nov 10, 2006 3:13 pm Naslov sporočila: |
|
|
To je bila premisa, postavljena na vrhu teme (ne gre za hipoteticne modele fizike za osnovno solo, ki naj bi delovala na papirju, ampak delujoco izvedbo, ki naj bi funkcionirala v praksi - vsaj tako sem jaz razumel vprasanje). Ce ponudis resitev, tako premiso implicitno sprejmes, mar ne ?
Poanta mojih pripomb je v tem, da namesto dveh bitov odmeta (od 8-bitnega odcitka) dobis z vrednostmi uporov blizje idealnim tudi precej boljsi odcitek (ranga manj kot 1 bit). Napako uvedes tako z vrednostmi, ki so ze vnaprej razlicne od idealnih, potem pa se z razlicno napako med serijami uporov (za kar bi sicer moral opraviti matching). Tako prihranjeno dodatno locljivost lahko uporabis za kontrolo in/ali odpravo napak, do katerih bo zaradi prej omenjenih vplivov prihajalo. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pet Nov 10, 2006 3:15 pm Naslov sporočila: |
|
|
Upore vrednosti 1 2 4 8..... se da lepo sestaviti iz normalnih vrednosti, vezano v serijo (dva upora). Na vezju ali na ceni se dodaten upor po bitu skoraj ne pozna.
2k= 1k +1k
4k= 2k2 + 1k8
8k= 4k7 + 3k3
16k= 15k+1k
32k= 22k+10k
in tako naprej
Jur |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Pet Nov 10, 2006 3:41 pm Naslov sporočila: |
|
|
Sokrat, ce bi dobro prebral sporocila v tej temi bi videl:
- prva shematika je slaba, kaj slaba, popolnoma napacna, zato sem podal pravilno, nesmiselno se je pogovarjati o napacni shematiki,
- vezje deluje tudi z razlicno kombinacijo pritiskov,
- neobcutljiva na tolerance uporov, celo vec, dovoljuje upornosti izven toleranc
- podal sem standardne upornosti,
- 2 bita odbijes od 10 bitov in ne 8 bitov (v zadnjem sporocilu si napisal "namesto dveh bitov odmeta (od 8 bitnega odcitka). Ta odbitek je posledica predpostavke, da je 10bitni AD bolj slabe sorte in sumi v rangu 2 bitov (to se da resiti s kaksnim povprecenjem, ampak ok).
Se enkrat sem preveril razporeditev uporov, ki ima z R5 = 1000 nelinearno karakteristiko. Z zmanjsanjem R5 (recimo 150 ohmov), karakteristika postane linearna (prej mocno nelinearni potek), zmanjsa se tudi vpliv vhodne impedance AD pretvornika in suma. Amplitude so res majhne glede na mozen razpolozljiv obseg, vendar popolnoma v okviru merljivosti, saj je korak med pritiski bolj nedvoumno locljiv. |
|
Nazaj na vrh |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Pet Nov 10, 2006 5:07 pm Naslov sporočila: |
|
|
No saj ni tako hudo...
Če primerjamo obe vezji hitro vidimo pri čem smo:
R-2R je linearna in ima resolucijo pri 4 tipkah 1/16, torej en korak je 6.25% merilnega območja.
Druga verzija pa, če upoštevamo zaradi nelinearnosti najslabšo kombinacijo (51mV) ima zaradi nelinearnosti najmanjši korak le 1.5% merilnega območja.
Pri R-2R verziji preprosto vzamemo le prve 4 bite meritve ADCja in dobimo kombinacijo! Pri drugi verzijo pa moramo narediti tabelo s 17 vrednostimi in rezultat primerjati glede na vrednosti v tabeli (računanje je preveč zamudno).
Če upoštevamo toleranco uporov teoretično izgubimo še 0.5% merilnega območja. Upoštevati moramo še morebitno spremembo upornosti pri spajkanju, staranje, napako ADCja, temperaturno odvisnost, motnje...
Doma na mizi obe verziji seveda delujeta. Pa vendar je vezje R-2R veliko bolj zanesljivo. Če bi sedaj naredili 1000 enih in drugih vezij in spremljali njihovo zgodovino bi hitro videli razliko v realnem zivljenju. Recimo, da imaš takšno tasteturo zelo veliko v rokah, tako kot TV daljinec. Prah, umazanija in pot z dlani bi imela veliko večji vpliv na samo delovanje.
Moj zaključek je, da ne bi uporabil niti ene niti druge variante vezja, temveč bi rajši uporabil mikrokontroller z večjim številom nogic.
LP GJ |
|
Nazaj na vrh |
|
 |
igor_k Član

Pridružen-a: Pon 19 Jul 2004 11:44 Prispevkov: 1011 Aktiv.: 4.27 Kraj: Rače
|
Objavljeno: Pet Nov 10, 2006 5:27 pm Naslov sporočila: |
|
|
GJ je napisal/a: |
Moj zaključek je, da ne bi uporabil niti ene niti druge variante vezja, temveč bi rajši uporabil mikrokontroller z večjim številom nogic. |
 |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pet Nov 10, 2006 6:29 pm Naslov sporočila: |
|
|
Jur: tvoje stevilo uporov je priblizno enako R-2R, tezava s toleranco pa ostane.
Glitch: nisva se razumela - ti vrzes stran od 10-bitnega odcitka 4 spodnje bite (oz. 2 od osmih), ker namerno uvedes tako veliko napako z izbiro komponent.
Kakorkoli ze ... si zmagal, ti kar naredi po svoje. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Nov 10, 2006 11:48 pm Naslov sporočila: |
|
|
igor k. je napisal/a: |
GJ je napisal/a: |
Moj zaključek je, da ne bi uporabil niti ene niti druge variante vezja, temveč bi rajši uporabil mikrokontroller z večjim številom nogic. |
 |
Ok na tole bom vsekakor odgovoril. V ostalo debato se nisem vtikal. Prilagam tudi programček, ki sem ga na hitro spisal ter poskusil na testni plošči. Uporabil sem PIC16F88 ter 4 tipke s katerimi vklapljkam ter izklapljam dva izhoda. Vzeti so klasični upori, ki sem jih vzel s predačka, pri testiranju sem jih tudi zamenjal z drugimi. (zaradi morebitnega odstopanja) a je stvar delala brez spremembe programa. Tipke sem poskusil dati tudi na ca 10m konec kabla. Zadeva dela brez težav.
Osebno vidim pri taki vezavi tudi kar nekaj prednosti. Seveda zavisi, zakaj bo zadeva uporabljena. Vzamimo recimo, da bomo ta način uporabili, za povezavo med alarmno centralo ter tipkovico. Vemo, da mora biti tipkovnica v vsakem primeru oddaljena od centrale, zaradi morebitne sabotaže. V mojem primeru bi za povezavo porabil le dve (3 žice - v tem primeru bi imel tudi kontrolo sabotaže) Povezavo bi brez težav spravil 10-20 metrov neposredno na mikrokontroler brez kakih vmesnikov. V primeru, da bi želel tipke čitati digitalno, bi v najboljšem primeru (12 tipk) porabil 7 pinov. V tem primeru bi bilo potrebno tipke čitati sekvenčno. Vsak, ki je to kadarkoli poskušal pa ve, da se zaradi same kapacitivnosti vodnikov dokaj hitro pojavijo težave, če je razdalja malo daljša. Poleg tega je tak način bisveno bolj občutljiv na motnje.
Koda: |
;------------------------------------------
;testni program za 16F88
;ad vhod kot uporabljen za priklop tipk
;
;------------------------------------------
;
; VCC
; +
; |
; .-.
; | |
; .-------------. | |10k
; | | '-'
; | | |
; | | |
; | | RA0 |
; | +-o---------+-----+----+----+----+
; | | | | | |
; | |RB0 | | | |
; | +-------+ o | o | o | o |
; | |RB1 | |=| |=| |=| |=|
; | +--+ + o | o | o | o |
; | | V -> V -> | | | |
; | | - - .-. .-. .-. .-.
; | | | | | | | | | | | |
; | | | | | | | | | | | |
; | | .-. .-. '-' '-' '-' '-'
; '-------------' | | | | 10k | 6k8| 4k7| 2k7|
; | | | | +----+----|----+
; '-' '-' ===
; | | GND
; +----|
; ===
; GND
list P=16F88
#include "p16f88.inc"
#define UPOR1 .128
#define UPOR2 .105
#define UPOR3 .83
#define UPOR4 .55
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_ON & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_OFF & _WDT_OFF & _XT_OSC
cblock 0x20
TMP,WTMP,STMP,AD_REZULTAT
endc
org 0x0
goto GLAVNI
org 0x04
goto PREKINITEV
org 0x05
;--------------------------------------
;prekinitvena rutina
;--------------------------------------
PREKINITEV
movwf WTMP
swapf STATUS,W
movwf STMP
clrf STATUS
btfsc INTCON,TMR0IF
goto TMR0_IRQ
KONEC_P
swapf STMP,W
movwf STATUS
swapf WTMP,f
swapf WTMP,W
retfie
TMR0_IRQ
bcf INTCON,TMR0IF
call AD_MERITEV
movwf AD_REZULTAT
goto KONEC_P
;----------------------------
;procedura izvede AD meritev
;----------------------------
AD_MERITEV
bsf ADCON0,GO
btfsc ADCON0,NOT_DONE
goto $-1
movf ADRESH,w
RETURN
GLAVNI
bsf STATUS,RP0
clrf TRISB
movlw .1
movwf ANSEL ;RA0 analogni vhod
movlw b'11000010'
movwf OPTION_REG ;preddelilnik za TMR0 z notranjim virom clocka 1/16
bcf STATUS, RP0
movlw b'01000001'
movwf ADCON0 ;vklop AD meritve na kanalu 0
movlw b'10100000'
movwf INTCON
clrf PORTB
movlw 0xff
movwf AD_REZULTAT
call PREVERI_TIPKE
goto $-1
;----------------------------------
;procedura preverja stanje ADvhoda
;----------------------------------
PREVERI_TIPKE
movlw 0xff
subwf AD_REZULTAT,w
btfsc STATUS,Z ;je tipka sploh pritisnjena?
return ;ne
movlw UPOR4
call PREVERI
btfsc STATUS,C
GOTO TIPKA4
movlw UPOR3
call PREVERI
btfsc STATUS,C
GOTO TIPKA3
movlw UPOR2
call PREVERI
btfsc STATUS,C
GOTO TIPKA2
movlw UPOR1
call PREVERI
btfsc STATUS,C
GOTO TIPKA1
KONEC
movf AD_REZULTAT,w
sublw 0xff
btfss STATUS,Z
goto KONEC
return
TIPKA1
bsf PORTB,0
goto KONEC
TIPKA2
bcf PORTB,0
goto KONEC
TIPKA3
bsf PORTB,1
goto KONEC
TIPKA4
bcf PORTB,1
goto KONEC
;--------------------------------------
;procedura preveri, če stanje
;doblejno v W ustreza stanju izmerjenem
;stanju
;procedura vrne postavljen C bit če
;če rezultat usteza
;--------------------------------------
PREVERI
movwf TMP
decf TMP,w
subwf AD_REZULTAT,w
btfss STATUS,C
return ;rezultat je manjsi od dobljenega v W
incf TMP,f
movf AD_REZULTAT,w
subwf TMP,w
return
end ;EOF
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Sob Nov 11, 2006 10:53 am Naslov sporočila: |
|
|
Silvo je napisal/a: |
Ok na tole bom vsekakor odgovoril. V ostalo debato se nisem vtikal. Prilagam tudi programček, ki sem ga na hitro spisal ter poskusil na testni plošči. |
Nihče ni trdil, da se takšno vezje ne deluje. Za moje pojme pa deluje premalo zanesljivo.
Če bi že delal odaljeno tasteturo mi 4 kombinacije verjetno ne bi zadostovale.
Torej bi rabil vsaj še 2 dodatni žici za skupaJ 12 tipk. Pravtako je dobro, da tisti ki tipka vsaj sliši svoj pritisk, pa tudi osvetlitev tastature v mraku je dobrodošla.
Vsekakor bi za tastaturo jaz raje vzel manjši mikroprocesor z UART-jem. Rabil bi le 3 vodnike: 5V, GND in komunikacija. Komunikacija bi bila halfdupleks.
Aha še to...
Vezje ne more delovati zadovoljivo, ker...
Ima tvoj programček v prekinitveni rutini skrit neugoden bug!
Koda: |
PREKINITEV
movwf WTMP ;Shranimo W register toda v katero banko ???
swapf STATUS,W ;Swap-amo Status register v W register
movwf STMP ;RP0 in RP1 morajo biti obvezno zbrisana preden shranimo W
clrf STATUS ;Prepozno W registe je bil shranjen v eno izmed 4 bank
|
Delovalo bi le v primeru, da je adresa registrov WTMP in STMP večja ali enaka od 070h. Ravno iz tega namena so na adresi od 070h pa do 07Fh registri preslikani v vse banke.
Ostalo nisem več preverjal..
LP GJ |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Nov 11, 2006 12:08 pm Naslov sporočila: |
|
|
Citiram: |
Torej bi rabil vsaj še 2 dodatni žici za skupaJ 12 tipk. Pravtako je dobro, da tisti ki tipka vsaj sliši svoj pritisk, pa tudi osvetlitev tastature v mraku je dobrodošla. |
Tipk bi brez skrbi lahko obesil gor kakih 50. V danem primeru se preverja -+/1 vrednost od idealne vrednosti.
Citiram: |
Delovalo bi le v primeru, da je adresa registrov WTMP in STMP večja ali enaka od 070h. Ravno iz tega namena so na adresi od 070h pa do 07Fh registri preslikani v vse banke. |
Tole drži. Gre za napako, ki lahko naredi kar nekaj sivih las. V danem primeru zadeva sicer dela čisto normalno, kajti po vklopu prekinitve sem skozi v bank0. Običajno napovem dve seriji registrov. Prva se začne na 0x20... druga na 0x70. Tole je bilo napisano čisto rutinsko seveda nepravilno v koliko bi v nadaljevanju koristil kake registre z drugih bank. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Nov 11, 2006 12:30 pm Naslov sporočila: |
|
|
Prilagam še del sheme enega montitorja na katerga sem naletel pred časom, ter je imel na zelo podoben način rešeno komunikacijo med tipkami ter CPU.
 _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Sob Nov 11, 2006 4:58 pm Naslov sporočila: |
|
|
Silvo je napisal/a: |
Prilagam še del sheme enega montitorja na katerga sem naletel pred časom, ter je imel na zelo podoben način rešeno komunikacijo med tipkami ter CPU. |
No saj to je to o čemer govorim..
Avtor sheme bi lahko, če bi bilo po vaše vse tipke krmilil preko enega ADC vhoda.
Privarčeval bi na enem enem pinu in 100p kondenzatorju. Vendar se je očitno zavedal kaj dela in je raje uporabil dva pina.
Čeprav kot vidim tole vezje ne bi šlo skozi EMC teste saj bi skoraj 100% (odvisno od izvedbe tipk) padlo na testu 'elektrostatic discarge'. Po standardu IEC801-2 mora prenesti elektronika +-8KV statičnega preboja na ohišje naprave oziroma tipko.
Aha še tole Silvo...
Kar se tiče takšnih nadležnih napakic, ki si jo storil je to zato ker še vedno uporabljaš MPASM absolute code model namesto relocated code model.
Res da moraš uporabljati linker skript, ki ga moraš predhodno popraviti da sploh dela ker so priloženi v večini hroščati.
Toda, ko napišeš enkrat delujoč makro ga potem lahko uporabljaš v vseh družinah PIC16XXX. Hitro in zanesljivo!
Spodaj napisan primer kode pove vse..
Koda: |
list r = dec ;Desetiško je prednastsvljeno
processor xxxxxxx
include "P16xxxxx.inc"
__config _HS_OSC & _WDT_ON
udata 0x20
Tmp res 1
;
;MACRO INTERRUPTS FOR PIC16XXX
;
udata_shr
MemW res 1
MemStatus res 1
InitInt macro
movwf MemW ;Save MemW; MemW is present in all memory banks
movfw STATUS ;Save status in W
clrf STATUS ;Set bank bits to 0
movwf MemStatus ;Save Status
endm
;
ExitInt macro
movfw MemStatus
movwf STATUS ;Restore Status
swapf MemW,f
swapf MemW,w ;Restore W
retfie
endm
;
;eMACRO INTERRUPTS FOR PIC16XXX
;
;
; Program start
;
Reset_ code 0x0000
clrf INTCON
clrf STATUS
clrf Tmp
goto InitMCPU
;
Int_ code 0x0004
InitInt ;macro
;
; Tvoja interrupt koda
;
ExitInt ;macro
code
InitMCPU
;
; Tvoja programska koda
;
... |
LP GJ |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|