forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Čidlo tlaku SMD500, komunikace přes I2C, kalibrace

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052
 
Zbyyna
Účastník
Účastník


Založen: 11.10.2010
Příspěvky: 11
Bydliště: Praha

PříspěvekZaslal: 19 říjen 2010, 17:00    Předmět: Čidlo tlaku SMD500, komunikace přes I2C, kalibrace Citovat

Ahoj,
chtěl bych vás poprosit o pomoc, protože si nevím rady. Nyní se snažím přijít na kloub čidlu tlaku SMD500. Toto čidlo je od firmy BOSCH a obsahuje sběrnici I2C. Principem měření tohoto čidla je PIEZO sensor, který přes ADC převodník má vyslat svůj údaj. Tento údaj se má pote kalibrovat přes kalibrační koeficienty, jenž má SMD500 uloženo v paměti PROM.

Nejdříve si tedy pokouším tyto koeficienty vyčíst, což se mi daří celkem úspěšně (jsou velice podobné příkladovým hodnotám z DS), nicméně když se pokouším vyčíst údaj z převodníku ADC, dostanu hodnotu 11111111 10000000, což je nesmyslné číslo, které se opět vůbec nemění. Sběrnici po každém ACK uvolňuji, čidlo rozumí příkazům (posílá ACKy) a když odpojím krystalový oscilátor, jenž taktuje ADC, tak se objeví samé nuly (což by mělo být v pořádku, poněvadž ADC není taktován).

Obávám se, že je čidlo rozbité, pokud nedělám nějakou obr pitomost Sad Přikládám muj ASM soubor, muzete mi prosim nekdo poradit?

Diky moc

Arrow administrator: přejmenováno z "Cidlo tlaku SMD500"



cidloSMD500.asm
 Komentář:

Stáhnout
 Soubor:  cidloSMD500.asm
 Velikost:  5.72 kB
 Staženo:  544 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Zbyyna
Účastník
Účastník


Založen: 11.10.2010
Příspěvky: 11
Bydliště: Praha

PříspěvekZaslal: 20 říjen 2010, 13:41    Předmět: Citovat

Tak jsem to zkousel nejak predelat a opravdu nevim, kde by mohla byt chyba. Doba SCL=1 je 7us, SCL=0 je 10us, tzn. ze se do parametru I2C vejdu v pohode.
Jediny co me napada, je, ze cidlo chce nejdriv vycist koeficienty a pote hned udaj z prevodniku, ale je to dost pochybny.
Pritom cidlo posila ACK hned pri prvnim adresovani, tzn. ze v zapisu na I2C by chyba byt nemela.
Kdyz ctu ze sbernice, tak nejdriv vezmu bit z I2C presunu do C a zarotuju zasobnikem. Dam puls na SCL a toto opakuju 8x.Poté uvolnim sbernici, dam ACK, jestlize jde o 1.cteny BYTE, jinak necham sbernici uvolnenou a potvrdim pulsem na SCL.
Nevidite nekdo nejakou chybu? Budu moc vdecny za jakoukoliv pripominku..
Diky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 20 říjen 2010, 19:15    Předmět: Citovat

Koukals na str.9 na způsob čtení výsledku AD?
Je tam nejprve "prázdný zápis" na nastavení adresy registru a hned na to restart komunikace, tentokrát ovšem jako čtení. Máš toto správně?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Zbyyna
Účastník
Účastník


Založen: 11.10.2010
Příspěvky: 11
Bydliště: Praha

PříspěvekZaslal: 21 říjen 2010, 1:02    Předmět: Vycteni udaje z SMD500 Citovat

Ja mylim, že ano.. Toto je cast kodu z hlavni smycky..

call START
mov A,#0EEh
call ZAPISI2C

mov A,#0F6h ;Adresa registru hodnoty UP
call ZAPISI2C ;Zapis read registru

call START ;RESTART

mov A,#0EFh
call ZAPISI2C ;Zapis ADRESY MODULU-Cteni

clr poslednibyte
call READSMD
mov P_H,A
setb poslednibyte
call READSMD
mov P_L,A
call STOP

A toto jsou subrutiny, jenz jsou volany..

ZAPISI2C:
mov R7,#8
DALSBIT:
rlc A ;rotuj bit do C
mov SDA,C ;vystav bit ACC.7 na SDA

setb SCL ;SCL=1 Hodiny
mov B,#CEKANI
djnz B,$
clr SCL ;SCL=0
mov B,#CEKANI
djnz B,$

djnz R7,DALSBIT ;další bit?
setb SDA ;uvolneni sbernice pro ACK

setb SCL ;SCL=1 Hodiny ACK
mov B,#CEKANI
djnz B,$
jb SDA,$
clr SCL ;SCL=0
mov B,#CEKANI
djnz B,$

RET


READSMD:
mov R7,#8
MSB: mov C,SDA
rlc A

setb SCL ;SCL=1 Hodiny
mov B,#CEKANI
djnz B,$
clr SCL ;SCL=0
mov B,#CEKANI
djnz B,$

djnz R7,MSB
setb SDA
jb poslednibyte,JEPOSL
clr SDA ;ACK

JEPOSL:
setb SCL ;SCL=1 Hodiny
mov B,#CEKANI
djnz B,$
clr SCL ;SCL=0
mov B,#CEKANI
djnz B,$

setb SDA
ret

Je to takhle mozne?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Zbyyna
Účastník
Účastník


Založen: 11.10.2010
Příspěvky: 11
Bydliště: Praha

PříspěvekZaslal: 21 říjen 2010, 16:41    Předmět: Citovat

Hlavně mě zaráží, že když přečtu správně (alespoň doufám, hodnoty F1-F4 se podobají katalogovým hodnotám), že by byla chyba ve čtení, protože jak říkáš, dám prázdný zápis, kde nastavím adresu registru čtení, třeba F8 a vyčtu pohodlně F1. Opravdu nevim, co s tim je.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Zbyyna
Účastník
Účastník


Založen: 11.10.2010
Příspěvky: 11
Bydliště: Praha

PříspěvekZaslal: 28 říjen 2010, 18:09    Předmět: Citovat

Tak čidlo bylo špatné. Dostal jsem jiné a to bezi. Tak kdyby to nekomu delalo tu samou chybu, at vi o co jde:-)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052 Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)