Multipleksowanie wyswietlacza i odczytywanie danych z 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!
ODPOWIEDZ
Awatar użytkownika
Kulpina
Użytkownik
Posty: 2040
Rejestracja: 28 lip 2005, 16:57
Lokalizacja: Sanok
Kontakt:

Multipleksowanie wyswietlacza i odczytywanie danych z i2c

Post autor: Kulpina » 17 lut 2010, 21:22

Mam układ z wyświetlaczem 9x7segm. Wyświetlacz nie może migać, ani przestawać świecić przez chwilę, a jednocześnie muszę odczytywać dane z szyny i2c.
Mam więc 2 pytania:
1. Czy szyna 100khz nie powinna czasem zczytać jednego bajtu z układu w czasie <1ms? Bo moja tego nie robi, ale jakoś mi się to nie podoba...

2. Jak inaczej można rozwiązać ten problem? Korzystać z i2c i jednocześnie nie zatrzymać wyświetlacza?

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

Post autor: marcing » 18 lut 2010, 14:11

Kulpina - pytania dwa:
1. Jaki język programowania (chociaż domyślam się, że o C chodzi)?
2. Jaki uP?

Co do sposobu obsługi I2C - możesz zrealizować to w ten sposób, że pod koniec przerwania odpowiedzialnego za odświeżanie wyświetlacza będzie generowany takt dla I2C. Masz wtedy pewność, że nic nie będzie przeszkadzać w generowaniu "obrazu", a jednocześnie poszczególne bity będą wysyłane na szynę danych - nie ma przecież minimalnej prędkości transmisji dla I2C.

Można też wykorzystać sprzętowy interfejs TWI - co jest dosyć prostym rozwiązaniem

Awatar użytkownika
kayron
Użytkownik
Posty: 2079
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 18 lut 2010, 15:14

Jak sterujesz tym AvRem to prawie każdy większy niż Tiny2313 ma sprzętowy I2C na pokładzie. Więc nie bardzo rozumiem problem z tej strony. Na I2C jest sprzętowy sterownik wyświetlacza 4x7seg, który uwalnia cię od problemu odświeżania programowego, bo robi to sam. Jest to kostka SAA1064.

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

Post autor: marcing » 18 lut 2010, 15:30

kayron, SAA1064 nie należy do tanich układów... dużo taniej (a pewnie i lepiej) jest zastosować rejestry szeregowe z wyjściem równoległym (i zatrzaskiem), np. CMOS 4094.

keruseykaryu

Post autor: keruseykaryu » 18 lut 2010, 18:47

marcing pisze:dużo taniej (a pewnie i lepiej) jest zastosować rejestry szeregowe z wyjściem równoległym (i zatrzaskiem), np. CMOS 4094.
Czemuż to pomijamy słynną PCFkę. Jedna ramka z danymi, jedna wyświetlacz, jedna danych, jedna wyświetlacz i tak w koło Macieju...

Awatar użytkownika
Kulpina
Użytkownik
Posty: 2040
Rejestracja: 28 lip 2005, 16:57
Lokalizacja: Sanok
Kontakt:

Post autor: Kulpina » 18 lut 2010, 20:23

No tak, oczywiście język to C a procesor mega8.
Najbardziej mnie dziwi to, że nie jestem w stanie zmienić częstotliwości taktowania na wyższą. Przy 4mhz wszystko chodzi bardzo ładnie. Wszystko zdąża się wyświetlić i odebrać... Przy 8hmz mimo ustawiania przerwań na ten sam czas i kombinowania ze wszystkim mam jakby kilkaset razy wolniejsze i2c (mimo, że i to zmieniałem) i wtedy widać wyraźne migania podczas odczytu...

Narazie postanowiłem wrócic do 4mhz i jakoś sobie przy nich poradzić i wreszcie ten program skonczyć :mrgreen:

keruseykaryu

Post autor: keruseykaryu » 19 lut 2010, 18:02

Kulpina pisze:Najbardziej mnie dziwi to, że nie jestem w stanie zmienić częstotliwości taktowania na wyższą.
A jakieś wypociny kolegi zobaczymy publicznie?

ODPOWIEDZ