Pytanie-zagadka o TWI w Atmega8[bascom]

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!
ZbeeGin

Post autor: ZbeeGin » 15 sie 2008, 9:18

Hmmmm... Spróbujmy. Załóżmy, że masz 200kHz fSCL i za każdym adresowaniem będzie odczytywany jeden bajt. Trzeba wykonać:
1. START - 1 bit
2. SLAVE ADR+WRITE - 9 bitów
3. R-START - 1 bit
4. SLAVE ADR+READ - 9 bitów
5. READ+NACK - 9 bitów
6. STOP - 1 bit
Czyli mamy 30 bitów w ramce transmisyjnej. 200kHz/30 czyli uzyskasz wtedy ok. 6kHz.

Skrzydlaty
Użytkownik
Posty: 126
Rejestracja: 23 wrz 2007, 21:08
Lokalizacja: Krak

Post autor: Skrzydlaty » 15 sie 2008, 11:53

Szukampomocy pisze: BTW: Pisałam już, że to nie jest żadna praca zaliczeniowa a jedynie mój własny projekcik realizowany dla własnej satysfakcji.
Sory, zwracam honor, nie lubie pisać niepotrzebnych postów ale sumienie mnie zagryzło :wink:

Szukampomocy
-
Posty: 10
Rejestracja: 14 sie 2008, 12:28
Lokalizacja: Londyn

Post autor: Szukampomocy » 15 sie 2008, 12:18

Czyli w ten sposób nie uda mi się prowadzić odczytu z wymaganą szybkością. Może polecicie jakiś inny typ niedrogich ale szybszych pamięci o podobnych pojemnosciach jak te eepromy?

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 15 sie 2008, 12:23

ZbeeGin pisze:2. Przy I2C nie dzieli się przez 8 tylko przez 10 a nawet 11 dla bezpieczeństwa. Zapominacie o tym, że protokół wymaga jeszcze bitów startu, stopu, potwierdzenia ACK. A i przesyłanie, i ustawianie rejestrów się do tego też zalicza.
Masz racje moje niedopatrzenie.. Ale skoro przy kwarcu 8Mhz bedzie 6khz, to tak na prosty rozum przy kwarcu 16Mhz bedzie 2 razy szybciej czyli 12khz zgadza się?

Szukampomocy
-
Posty: 10
Rejestracja: 14 sie 2008, 12:28
Lokalizacja: Londyn

Post autor: Szukampomocy » 15 sie 2008, 12:29

Dwa pytania:
a) Czy rzeczywiście p[rzy szybszym kwarcu będę mogła szybciej odczytywać te dane?
b) Czy mogłabym zastosować niewielką kartę SD o pojemnosci 16 MB? Słyszałam, że one komunikują się przez SPI. Czy mozliwy byłby szybszy odczyt? I jak to oprogramować w bascomu, oraz co ze stroną sprzętową?

ZbeeGin

Post autor: ZbeeGin » 15 sie 2008, 13:18

Szukampomocy pisze:a) Czy rzeczywiście p[rzy szybszym kwarcu będę mogła szybciej odczytywać te dane?
Tak. Gdyż prescaler ustawia się względem częstotliwości pracy procesora. Przy 16MHz uzyskasz max. 444kHz czyli 444kbps, a będzie to nieco ponad 14kB/s.
Jeśli chcesz jeszcze szybciej to musiałabyś użyć ATMega88 a nie Mega8 - wyprowadzenia są takie same, a możliwości nieco większe. Ten układ może pracować do 20MHz.
Szukampomocy pisze:b) Czy mogłabym zastosować niewielką kartę SD o pojemnosci 16 MB? Słyszałam, że one komunikują się przez SPI. Czy mozliwy byłby szybszy odczyt?
SPI jest szybszy od I2C gdyż nie ma takich narzutów, a poza tym można jednocześnie czytać i zapisywać (patrz SPIMOVE). Do spraw sprzętowych trzeba zastosować konwerter poziomów gdyż karta jest zasilana 3.3V.
Na forum MCS Electronics były przykłady użycia.

Szukampomocy
-
Posty: 10
Rejestracja: 14 sie 2008, 12:28
Lokalizacja: Londyn

Post autor: Szukampomocy » 15 sie 2008, 13:28

Dzięki. Najpierw spróbuję zwiększyć częstotliwość taktowania stosując kwarc 16MHz, a jesli to nie wystarczy to tozejrzę się i pokombinuje z kartą SD.

ODPOWIEDZ