I2C mezi atmega16 a attiny2313

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
vasek125
Příspěvky: 132
Registrován: 13 říj 2005, 00:00

#16 Příspěvek od vasek125 »

Tak nastal velký problém. Četl jsem, že atmega16 má 2 samostatné USART zařízení, kdežto podle datasheetu to vypadá na jedno, které teď využívám je komunikaci s PC. TO už asi nepůjde použít ke komunikaci se slave že?
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#17 Příspěvek od Andrea »

vasek125 píše:Tak nastal velký problém. Četl jsem, že atmega16 má 2 samostatné USART zařízení, kdežto podle datasheetu to vypadá na jedno, které teď využívám je komunikaci s PC. TO už asi nepůjde použít ke komunikaci se slave že?

To sis asi spletl s atmega162, ta má dva USARTy, mega16 má jen jeden. Pokud ho používáš pro komunikaci s PC a mcu je jako slave, tak asi použít nepůjde.
Uživatelský avatar
vasek125
Příspěvky: 132
Registrován: 13 říj 2005, 00:00

#18 Příspěvek od vasek125 »

Hm, takže stejně budu muset použít i2c, respektive twi, jak tomu říkají u atmega.
Uživatelský avatar
vasek125
Příspěvky: 132
Registrován: 13 říj 2005, 00:00

#19 Příspěvek od vasek125 »

Co tohle: http://todbot.com/arduino/sketches/GPSWiiUI/twi_funcs.h ? To by mohlo fungovat ne?
Zirafka
Příspěvky: 819
Registrován: 20 srp 2006, 00:00

#20 Příspěvek od Zirafka »

Andrea píše:RS-232 neumožňuje multipoint komunikaci, má jen dva stavy log.1 -12V a log.0 +12V, oba jsou dominantní, takže nějak nechápu, jak to máte zapojené.


Když to neumožňuje, tak to naše zařízení asi opravdu nefunguje ;-)

Je to zapojené takto:

U počítače je spojené Tx a Rx a dále se to vede jedním drátem k lokálním jednotkám systému. U nich je také spojené Tx a Rx a celá komunikace běží po tom jednom drátu. Všechna zařízení jsou spojená paralelně, čemuž se v zabezpečovací technice říká "multipl".

Počítač se opakovaně dotazuje lokálních jednotek a ty jen poslouchají. Když se dotáže, tak dotazovaná jednotka odpoví, ty ostatní stále mlčí. Když chce jednotka odpovědět, tak si zkontroluje, jestli někdo jiný nevysílá a pak sama začne.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#21 Příspěvek od Andrea »

Variola píše:
Andrea píše:RS-232 neumožňuje multipoint komunikaci, má jen dva stavy log.1 -12V a log.0 +12V, oba jsou dominantní, takže nějak nechápu, jak to máte zapojené.


Když to neumožňuje, tak to naše zařízení asi opravdu nefunguje ;-)

Je to zapojené takto:

U počítače je spojené Tx a Rx a dále se to vede jedním drátem k lokálním jednotkám systému. U nich je také spojené Tx a Rx a celá komunikace běží po tom jednom drátu. Všechna zařízení jsou spojená paralelně, čemuž se v zabezpečovací technice říká "multipl".

Počítač se opakovaně dotazuje lokálních jednotek a ty jen poslouchají. Když se dotáže, tak dotazovaná jednotka odpoví, ty ostatní stále mlčí. Když chce jednotka odpovědět, tak si zkontroluje, jestli někdo jiný nevysílá a pak sama začne.

No ale to není RS-232 8-)
RS-232 neumí "mlčet", umí jen + nebo - 12V. A když spojíme např. 5 RS-232 vysílačů, které "mlčí" +12V a jeden který "mluví" -12V, co vznikne?
Zirafka
Příspěvky: 819
Registrován: 20 srp 2006, 00:00

#22 Příspěvek od Zirafka »

To záleží na tom, který vysílač je silnější a také na jejich vnitřních odporech.

Až budu mít čas a náladu, můžu mrknout do přesných schémat a něco ti z nich naskenovat.
Uživatelský avatar
Bernard
Příspěvky: 3654
Registrován: 27 kvě 2005, 00:00

#23 Příspěvek od Bernard »

Asi by se muselo těch +12V dávat bias odporem a -12 spínat (dominantně) tranzistorem, zkrátka otevřený kolektor. A kdyby ještě Slave poslouchal co sám vysílá, podobalo by se to na nějakou nesymetrickou odrůdu (nebo zrůdu?) CAN. V tom případě bez UARTu.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#24 Příspěvek od ZdenekHQ »

To už se dá rovnou předělat na RS485.

Jinak předpokládám, že oni tu RS232 provozují na TTL úrovni, tudíž to není RS232 a tam to (nejspíš) fungovat bude.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
vasek125
Příspěvky: 132
Registrován: 13 říj 2005, 00:00

#25 Příspěvek od vasek125 »

Tak jsem našel hezký připravený kód zde: http://www.atmel.com/dyn/products/app_n ... ily_id=607. Upravil jsem ho pro avr-gcc a úspěšně zkompiloval. Jedná se konkrétně o příklad: "Using the USI module as a I2C slave". Myslím, že to slouží jen pro přenos jednoho bajtu. Jak se pomocí toho dá přenášet příkaz(text)?
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#26 Příspěvek od Andrea »

vasek125 píše:Tak jsem našel hezký připravený kód zde: http://www.atmel.com/dyn/products/app_n ... ily_id=607. Upravil jsem ho pro avr-gcc a úspěšně zkompiloval. Jedná se konkrétně o příklad: "Using the USI module as a I2C slave". Myslím, že to slouží jen pro přenos jednoho bajtu. Jak se pomocí toho dá přenášet příkaz(text)?

Slouží to pro přenos kolika bajtů chceš. Je tam i příklad použití.
Uživatelský avatar
vasek125
Příspěvky: 132
Registrován: 13 říj 2005, 00:00

#27 Příspěvek od vasek125 »

Supr, tak už komunikuju. Musel jsem ale vypnout interní pull-upy a dát vnější. Proč nemohu na atmega16(i2c/twi master) nastavit interní pull-upy, respektive mohu, ale pak to nefunguje? Podle dokumentace to možné je i při použití TWI.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#28 Příspěvek od Andrea »

vasek125 píše:Supr, tak už komunikuju. Musel jsem ale vypnout interní pull-upy a dát vnější. Proč nemohu na atmega16(i2c/twi master) nastavit interní pull-upy, respektive mohu, ale pak to nefunguje? Podle dokumentace to možné je i při použití TWI.

Asi komunikuješ rychle, interní pull-upy mají 20-50 kOhmů a to stačí jen pro nízké rychlosti a malé kapacitní zatížení sběrnice. Kolik máš ty externí pull-upy a jak rychle komunikuješ?
Uživatelský avatar
vasek125
Příspěvky: 132
Registrován: 13 říj 2005, 00:00

#29 Příspěvek od vasek125 »

S interními prošel občas jen 1. příkaz/komunikace, pak ani ťuk, jelo to cca na 100kHz, teď tam mám externí 3k3 odpory a zvedl jsem rychlost na cca 400kHz a naprosto bez problémů.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#30 Příspěvek od Andrea »

100kHz/400kHz je hodně, to je maximum standardní I2C. Kdybys jel na 5kHz, tak by ty interní pull-upy asi stačily, tedy pokud nekomunikuješ přes 10m plochého kabelu :)
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“