Stránka 2 z 3

Napsal: 17 čer 2009, 09:56
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?

Napsal: 17 čer 2009, 10:01
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.

Napsal: 17 čer 2009, 10:37
od vasek125
Hm, takže stejně budu muset použít i2c, respektive twi, jak tomu říkají u atmega.

Napsal: 17 čer 2009, 10:48
od vasek125
Co tohle: http://todbot.com/arduino/sketches/GPSWiiUI/twi_funcs.h ? To by mohlo fungovat ne?

Napsal: 17 čer 2009, 11:00
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.

Napsal: 17 čer 2009, 11:01
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?

Napsal: 17 čer 2009, 12:29
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.

Napsal: 17 čer 2009, 22:24
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.

Napsal: 18 čer 2009, 09:46
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.

Napsal: 19 čer 2009, 17:01
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)?

Napsal: 19 čer 2009, 17:51
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í.

Napsal: 20 čer 2009, 11:49
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.

Napsal: 20 čer 2009, 11:55
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š?

Napsal: 20 čer 2009, 12:14
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ů.

Napsal: 20 čer 2009, 12:24
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 :)