I2C komunikace ATmega16 s ultrazvukovým dálkoměrem SRF08

Zdravím, potřeboval bych s ničím trošec poradit. Chtěl by rozjet I2c komunikaci s Atmegou 16 a ultrazvukovým dálkoměrem SRF08 (zde: shop.snailinstruments.com/index. … cts_id=194). I2C rozhraním nemám ale žádné zkušenosti a obecně s sériovým přenosem jen velmi malé. A ten komunikační protokol se mi zatím zdá složitej jak mlátička. Z hlediska komunikace s SRF08 po i2c by to mělo stejný jako u pamětí EEPROM řady 24xx. Sběrnici I2C jsem trošec prostudoval a došel jsem k závěru že komunikace by měla vypadat nějak takhle:

Zápis:

1.) pošlu START bit
2.) pošlu adresu ultrazvukového dálkoměru SRF08 (ta by měla být 0xE0) poslední bit dám 0 (zápis)
3.) čekám na potvrzení bitem ACK
4.) pošlu adresu registru do kterého budu chtít zapisovat
4.) čekám na potvrzení bitem ACK
5.) pošlu data která chci zapisovat do výše uvedeného registru
6.) opět čekám na potvrzení bitem ACK
7.) pošlu STOP bit

Jestli tady co se týká té komunikace plácám nějaký blbosti tak mě pls opravte. Dále nějak nechápu jak ten dálkoměr může mít adresu 0xE0 když I2C používá 7-mi bitové adresy zařízení. A tohle je evidentně 8-mi bitová.

díky

:arrow_right: administrator: přejmenováno z "i2c komunikace s ultrazvukovým dálkoměrem"

S tymto obvodom som nerobil, ale v zasade:

postup ktory si nacrtol vidim ako spravny. Akurat nikde nevidim nacitanie udajov z dialkomera :slight_smile: To bude asi implementacia casom.
Adresa je 7 bitova. Potom ju vybasobi x2 a v najnizsom bite sa urci, ci sa bude zapisovat, alebo citat. Takze 0xE0 je velmi dobra hodnota :slight_smile:

dík… na čtení je čas ještě neumím ani zapisovat :slight_smile: Takže jestli to dobře chápu tak když budu chtít zapisovat tak odešlu hodnotu adresy 0xE0 (a když číst tak 0xE1)…jo?

cau, tady sem nasel ceskej popis s prikazama :wink: snat se ti to hodi

dík ale tohle už mám nastudovaný. Škoda že tam není moc popsaná ta komunikace. Ale snad když se to stejný jak u pamětí EEPROM řady 24xx by to neměl být problém.

tak zapisovat bych už uměl …ještě se naučit číst z toho a nemá to chybu :slight_smile:

ATmaga 16 má zabudované rozhraní I2C popis je v datashetu k procesor.
Lze ho stahnou na www.atmel.com.
s harwerovým rozharaním se mi to zdá mnohem jednoduší než psát rutiny měmící stav výstupních pinů.

Já používám HW I2C u té ATmegy16. Ale i tak jsem musel napsat nějaký ty rutiny pro komunikaci. No a právě teď hledám nějakou rutinu pro mód MASTER - PŘÍJÍMAČ. Nikde to nemůžu najít. :frowning: :frowning: :frowning:

;-------------------------------------------------
;pro příjem
;-------------------------------------------------
smazáno

hej dík moc. Ještě by potřeboval jak by ta komunikace měla celkově vypadat. Někde jsem viděl že by to mělo být takhle:

  1. pošlu START bit
  2. pošlu adresu zařízení (poslední bit dám zatím 0 čili zápis)
  3. pošlu adresu registru se kterého bude chtít číst
  4. pošlu opět START bit
  5. pošlu adresu zařízení (poslední bit dám 1 čili čtení)
  6. čtu data z daného registru
  7. pošlu STOP bit

Myslíš že to mám dobře?

A co takto strana 187 na spodu a strana 188-190? Z Datasheetu
2466H-AVR-12/03 k ATmega16.
Ak mas datasheet s nejakym inym datumom vydania, tak hladaj text “MAster Receive Mode”.

Ten popis je fakt dost podrobny, ci uz Master-Transmiter, alebo Master-Receiver.
Ak je s tym nejaky problem, zver sa :slight_smile:

tak první problém je že moje znalost ang je na dost blbé úrovni :frowning: . Jo popsaný by to bylo ale spíš by se mi hodili ty rutiny. Ale jako nějaký už mám.Tak to zkusím a uvidím. A myslíš jestli při tom čtení na to jdu dobře? (viz. výše)