Dwa identyczne układy na I2C

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Dwa identyczne układy na I2C

Post autor: M@ciej » 10 gru 2006, 20:34

Mam małe pytanko.

Posiadam dwa identyczne układy (TDA8425) sterowane przez I²C. Będą one wykonywały w tym samym czasie identyczne zadania. Jak wiadomo,kostki te mają stały jeden adres. Sterować je chcę z Atmega8.

Czy można wysyłać do magistrali dane pod jeden adres i odpowiedzą oba układy, czy trzeba stosować jakieś układy przełączajace i sterować każdy z osobna?

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 10 gru 2006, 21:51

M@ciej pisze:Czy można wysyłać do magistrali dane pod jeden adres i odpowiedzą oba układy, czy trzeba stosować jakieś układy przełączajace i sterować każdy z osobna?
Niestety - bez układów przełączających się nie obejdzie...
Sposób takiego podłączenia trzech układów TDA8425 został wykorzystany w "Komputerowym mikserze audio" (kit AVT-2786, publikacja EdW 05/2006)

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 12 gru 2006, 19:01

ale tam chodzilo o sterowanie kazdym ukladem z osobna,tymczasem ja chce sterowac dwoma naraz, wiec pdlaczenie ich wprost do I2C mialoby sęs. Chyba,ze beda jakies konflikty, bo 2 Slave'y zglosza obecność na tym samym adresie w tym samym czasie.

Komutowanie tych ukladow zwiekszy poziom komplikacji programu,a i tak przewiduje krowiasty. Najnowszy Bascom ma juz 4 kb limitu na Demo,a i tak nie wiem,czy mi wszystko wejdzie! C na razie odpada.

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 12 gru 2006, 19:08

M@ciej pisze:ale tam chodzilo o sterowanie kazdym ukladem z osobna,tymczasem ja chce sterowac dwoma naraz, wiec pdlaczenie ich wprost do I2C mialoby sęs. Chyba,ze beda jakies konflikty, bo 2 Slave'y zglosza obecność na tym samym adresie w tym samym czasie.
Po pierwsze - sens, nie "sęs".

Na drugą kwestię już sobie odpowiedziałeś - co prawda częściowo, ale jednak...
Tak, dwa układy odpowiedzą (prawie) jednocześnie. Jak dokładnie się zachowają - nie wiadomo, jednak z prawidłową transmisją będzie to miało niewiele wspólnego...

Co do skomplikowania układu - gdzie je przewidujesz?
Procedura wysłania będzie wspólna, jedynie pojedyńczy bit będzie odpowiadał za układ dołączony do magistrali. I wystarczy do tego również jeden pin uP...
Inna sprawa, że piszesz rozbudowany program w wersji demo BASCOM-a...

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 13 gru 2006, 14:17

Możesz zastosować cmos 4053
po prostu wykorzystaj pętle i wyślij do obydwu to samo
Ostatnio zmieniony 15 gru 2006, 14:22 przez Michał17, łącznie zmieniany 1 raz.

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 13 gru 2006, 17:40

No dobrze,jak nie ma innego wyjścia,to bede komutowal te 2 układy,jak to jest w EdW 9/06, a multiplekser sobie dobiore. Sek w tym,ze mam juz wykorzystane wszystkie wyprowadzenia Atmegi8. Czy pin 1 (reset) tez mozna uzywac domyslnie jako wyprowadzenie?Bo mam wolny.

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 13 gru 2006, 18:02

M@ciej pisze:Czy pin 1 (reset) tez mozna uzywac domyslnie jako wyprowadzenie?Bo mam wolny.
Tak, ale nie będziesz mógł ponownie zaprogramować układu przez ISP...
W przypadku błędu pozostanie Tobie tylko programator równoległy do ponownego zaprogramowania...

Daj może jakiś schemat, i napisz co to za układ ma być - to postaramy się cos wymyślić...


michal17, popraw błędy (morzesz, wykożystaj)

Ciebie, M@ciej, proszę o wstawienie brakujących spacji, no i dodanie "ogonków"...

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 13 gru 2006, 22:53

Dzięki za uwagi, będę się starał pisać bardziej po polsku.

Co do układu: ma być to sterownik do wzmacniacza audio. Ma obsługiwać wyświetlacz LCD 2x16, kilka diod świecących, 8 przycisków, I2C i jeszcze załączać sekwencyjnie poszczególne bloki wzmacniacza, a chodzi tu o: napięcie anodowe i żarzenia buforów, prosty układ miękkiego startu dla trafa toroidalnego (TST250/001) oraz z opóżnieniem załączać głośniki. Musiałem przebudować cały schemat sterownika, gdyż brakowało mi już pinów.

8 przycisków klawiatury podzieliłem na 2 sekcje, przy czym 2-ga sekcja ma jeszcze załączana osobno linię, by je rozróżnić.Klawisze zwierają odpowiednie piny układu do masy.

Sekwencyjne sterowanie załączanim bloków będzie zrealizowane na CD4015, wtedy do sterowania będę musiał użyć tylko 2 pinów. Reszta dla I2C (w takim razie nie 2 a 3 piny) i sterowanie kilkoma diodami. Pod I2C chcę podpiąć jeszcze zegar RTC,by wzmacniacz wyświetlał czas w trybie StandBy, oraz przetwornik PCF8591,by kontrolować temperatury końcówek mocy/lub napięcia zasilania.

Nie podaje na razie schematu,gdyż najpierw chce zaprojektować płytkię. Wiedząc,ze każdy port czy pin można dowolnie skonfigurować, łatwiej jest później na podstawie płytki narysować schemat, niż odwrotnie.

Czy linie portu I2C także można przypisać do dowolnego pinu poprzez instrukcje np.

Config SDA = Portb.3 ?

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 14 gru 2006, 16:36

M@ciej, słuchaj - nie myślałeś może o wykorzystaniu układów na I2C do sterowania załączaniem zasilania? Dość dobre rozwiązanie to układ PCF8574... Także klawiaturę za jego pomoca możesz obsługiwać - ma wyjście INT, które może wymusić obsługę układu z "priorytetowymi" przyciskami...

Przy okazji zaoszczędziłbyś kilka pinów uP...
M@ciej pisze:Czy linie portu I2C także można przypisać do dowolnego pinu poprzez instrukcje np.

Config SDA = Portb.3 ?
W przypadku obsługi programowej - tak. Ale lepiej wykorzystać końcówki "sprzętowe", czyli wbudowany układ TWI (jest odpowiednia biblioteka w BASCOM-ie).

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 14 gru 2006, 17:53

Właśnie dziś wpadłem na ten pomysł, szczególnie, że posiadam gdzieś 2 kostki PCF8574,tak więc cały sterownik byłby na I2C, super! Tak wiec wolne piny zasilałyby (sterowałyby) diody LED, o których mowilem.

Nie rozumiem tylko o co chodzi z tą inną konfiguracją wyjść I2C i biblioteka w Bascomie? Może lepiej zastosuje te oznaczone w nocie katalogowej? Powinny być skonfigurowane domyślnie.

Przy wykonywaniu klawiatury na PCF8574, trzebaby wejścia podciągnąć opornikami do zasilania, czy tak? A co z odkłócaniem styków? Do tej pory stosowałem kondensator 10 nF równolegle do styków przycisku Microswitch. Pytam się aż tyle, bo nigdy nie bawiłem się w takiej skali I2C, jedynie w obrębie Oślej Łączki na AVT 3500.

Postaram sie machnąć jakiś schemacik tego sterownika i go tu zaprezentować.

Pozdrowienia dla wszystkich :)

Michał17
Użytkownik
Posty: 329
Rejestracja: 07 sty 2006, 14:25
Lokalizacja: Łódź

Post autor: Michał17 » 15 gru 2006, 14:25

LCD też możesz pod I2C

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 15 gru 2006, 18:05

Może są wyświetlacze LCD z interfejsem I2C, ja jednak posiadam standardowy, zgodny z HD44780 i będę sterował go bezpośrednio z mikrokontrolera. Atmega8 ma sporo wyprowadzeń, więc nie powinno być problemu. 9 diodami świecącymi też będę sterował bezpośrednio, natomiast cała reszta będzie przez I2C.

Pozdrowienia dla Michala17 i pozostałych Forumowiczów :)

[ Dodano: 2006-12-15, 18:37 ]
Udało mi się naskrobać poglądowy i "odręczny" schemat tego sterownika. Nie umieściłem na nim jeszcze TDA, gdyż nie mam ich jeszcze wpisanego do bibpioteki w programie. Będę je przełączał chyba CD406, bo posiadam takie układy na stanie.

I co Wy na to?
Załączniki
Sterownik.jpg

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 15 gru 2006, 19:25

M@ciej, taka jedna uwaga - sterujesz podświetleniem wyświetlacza z pinu Reset. Czy nie byłoby lepiej sterować wyjściem kanału PWM (dowolny pin OCPxX)? Miałbyś wtedy możliwośc regulacji "jasności" podświetlenia.

I diody też można dać przez jakiś układ pośredniczący (jeśli nie mają "migotać"). Zaoszczędzisz parę końcówek, a i doprowadzenia na "przedni" panel Twojego przedwzmacniacza będą o wiele prostsze (pięć przewodów, zamiast wiązki) - o ile wykorzystasz dodatkowy PCF8574...

Wyjście INT drugiego PCF8574 (ten od klawiatury) możesz również wykorzystać i połączyć z odpowiednim (INT0 lub INT1) wejściem mega8....

Awatar użytkownika
M@ciej
Użytkownik
Posty: 736
Rejestracja: 13 sie 2005, 21:38
Lokalizacja: Szczecin

Post autor: M@ciej » 16 gru 2006, 0:03

Co do wejścia RESET to rzeczywiście,nie popatrzałem i podłączyłem "na pałę",ale to tylko schemat. Nie muszę sterować jasnością podświetlenia. Ono ma się tylko wyłączyć w trybie StandBy. Diody też chyba dam na dodatkowy PCF8574. Jeden przełącznik podłączony jest bezpośrednio do procka i to będzie właśnie Stand By.

Nie rozumiem natomiast znaczenia wyjść INT, do czego służą? Jaki jest cel łączenia ich z wejściami INT0 i INT1 Atmegi?

Zwolniło się kilka końcówek procka. Posiadam także parę układów Holteka (HT12D i HT12E), oraz parę modułów Telekontrollil (PR1 i RR3). Można by zrobić sterowanie pilotem, tylko czy procek zrozumie poziomy sygnałów Holteka? W specyfikacji HT12x jest napisane, że są to poziomy CMOS. Mnie się jakoś nigdy nie udało zmusić układów TTL i CMOS do współpracy, pomimo zasilania ich wspólnym napięciem 5V, chociaż ten problem to sobie jakoś rozwiążę.

Im więcej będzie podpięte pod I2C,tym łatwiej będzie sterować. Będzie jedna procedura nadawcza i jedna odbiorcza dla I2C a reszta to wyłuskiwanie poszczególnych bitów za pomocą operatora AND :P

Zastanowię się nad tym wszystkim jeszcze raz na spokojnie i narysuje schemat finalny, bo jeszcze planowałem komunikacje przez RS232, bo Max232 tez gdzieś mi się wala :)

Pozdro 4 all :)

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 16 gru 2006, 12:25

M@ciej pisze:Nie rozumiem natomiast znaczenia wyjść INT, do czego służą?
Są to wyjścia zgłoszenia przerwania po zmianie stanu na wejściach PCF-a.
M@ciej pisze:Jaki jest cel łączenia ich z wejściami INT0 i INT1 Atmegi?
Wejścia INT0 i INT1 mogą wymusić zgłoszenie przerwania po pojawieniu się odpowiedniego stanu - domyślnie niskiego.
M@ciej pisze:Można by zrobić sterowanie pilotem,
Użyj odbiornika podczerwieni (ja korzystam z SFH5110, czasami też z TFMS5360).
BASCOM ma zaimplementowaną obsługę kodu RC5, używanego w sprzęcie Philips'a (łatwo też można pilota zrobić, bo sam BASCOM daje taką możliwość - choćby na tiny2313)

ODPOWIEDZ