Otóż napotkałam na problem- Buduję pewien systemik mikroprocesorowy oparty na ATMEDZE8 i potrzebuję bardzo szybko pobierać dane z pamięci at24c512. Otóż kiedy realizuje pobieranie danych przez I2c programowo (crbyte,cwbyte) nawet kiedy ic2delai jest ustawiony na 1 to nie mogę osiągnąć wymaganej prędkości odczytu. I tu jest moje pytanie. Wyczytałam, ze atmega8 ma wbudowany sprzętowy interfejs TWI. Czy za jego pomocą mogę szybciej odbierać te dane? Czy jest tam jakiś bufor? Jak w ogóle szybciej odbierać dane z I2c niż to i2cdelai=1 (z tego co wyczytałam w notce pamięci jej częstotliwośc taktowania powinna pozwolic na szybszy odczyt niz wynikajacy z najmniejszego opóźnienia i2cdelai=1).
Pytanie-zagadka o TWI w Atmega8[bascom]
-
Szukampomocy
- -
- Posty: 10
- Rejestracja: 14 sie 2008, 12:28
- Lokalizacja: Londyn
Pytanie-zagadka o TWI w Atmega8[bascom]
Witam kolegów 
Otóż napotkałam na problem- Buduję pewien systemik mikroprocesorowy oparty na ATMEDZE8 i potrzebuję bardzo szybko pobierać dane z pamięci at24c512. Otóż kiedy realizuje pobieranie danych przez I2c programowo (crbyte,cwbyte) nawet kiedy ic2delai jest ustawiony na 1 to nie mogę osiągnąć wymaganej prędkości odczytu. I tu jest moje pytanie. Wyczytałam, ze atmega8 ma wbudowany sprzętowy interfejs TWI. Czy za jego pomocą mogę szybciej odbierać te dane? Czy jest tam jakiś bufor? Jak w ogóle szybciej odbierać dane z I2c niż to i2cdelai=1 (z tego co wyczytałam w notce pamięci jej częstotliwośc taktowania powinna pozwolic na szybszy odczyt niz wynikajacy z najmniejszego opóźnienia i2cdelai=1).
Otóż napotkałam na problem- Buduję pewien systemik mikroprocesorowy oparty na ATMEDZE8 i potrzebuję bardzo szybko pobierać dane z pamięci at24c512. Otóż kiedy realizuje pobieranie danych przez I2c programowo (crbyte,cwbyte) nawet kiedy ic2delai jest ustawiony na 1 to nie mogę osiągnąć wymaganej prędkości odczytu. I tu jest moje pytanie. Wyczytałam, ze atmega8 ma wbudowany sprzętowy interfejs TWI. Czy za jego pomocą mogę szybciej odbierać te dane? Czy jest tam jakiś bufor? Jak w ogóle szybciej odbierać dane z I2c niż to i2cdelai=1 (z tego co wyczytałam w notce pamięci jej częstotliwośc taktowania powinna pozwolic na szybszy odczyt niz wynikajacy z najmniejszego opóźnienia i2cdelai=1).
-
Skrzydlaty
- Użytkownik
- Posty: 126
- Rejestracja: 23 wrz 2007, 21:08
- Lokalizacja: Krak
Re: Pytanie-zagadka o TWI w Atmega8[bascom]
Tak, sprzętowy TWI pozwala na szybszą prace - komunikacje ponieważ procek może w tym czasie wykonywać inne zadania zamiast "tracić" czas na czasochłonną transmisje, a także inne zadania (np. przerwania) nie przerywają transmisji (co przedłurza czas transmisji). Przynajmniej tak mi sie zdaje...w uproszczeniu...
P.S. Koleżanka elektroniczka z zamiłowania czy trzeba zrobić projekt na studia?
A jaka jest ta Twoja "wymagana" prędkość odczytu?Szukampomocy pisze: ...nie mogę osiągnąć wymaganej prędkości odczytu.(...)
P.S. Koleżanka elektroniczka z zamiłowania czy trzeba zrobić projekt na studia?
-
Szukampomocy
- -
- Posty: 10
- Rejestracja: 14 sie 2008, 12:28
- Lokalizacja: Londyn
Właśnie o to mi chodzi- żeby procek nie musiał się ciągle tylko transmisją zajmować. Jak oprogramowac to w Bascom? A prędkość powinna być największa jaka jest tylko możliwa bez gubienia danych i przekłamań.
Elektronika to moje hobby- nie wiąze się z tym kierunek w jakim idzie moje wykształcenie, ani mojej pracy zawodowej.
Elektronika to moje hobby- nie wiąze się z tym kierunek w jakim idzie moje wykształcenie, ani mojej pracy zawodowej.
Wszystko można znalezc w datasheet (strona 169 - 180)
Wystarczy wpisac odpowiednie bajty do odpowiedznich rejestrów i juz.. Tam jest opisane wszystko i chyba nawet przykłady są
Rejestr TWDR służy do odczytywania/ zapisywania danych
TWAR - do adresowania urządzenia
TWCR - rejestr kontrolny, tam ustawiasz przerwania i czy odebrany bajt jest ostatni itp
Wystarczy wpisac odpowiednie bajty do odpowiedznich rejestrów i juz.. Tam jest opisane wszystko i chyba nawet przykłady są
Rejestr TWDR służy do odczytywania/ zapisywania danych
TWAR - do adresowania urządzenia
TWCR - rejestr kontrolny, tam ustawiasz przerwania i czy odebrany bajt jest ostatni itp
Ostatnio zmieniony 14 sie 2008, 18:28 przez grysek67, łącznie zmieniany 1 raz.
-
Szukampomocy
- -
- Posty: 10
- Rejestracja: 14 sie 2008, 12:28
- Lokalizacja: Londyn
-
Szukampomocy
- -
- Posty: 10
- Rejestracja: 14 sie 2008, 12:28
- Lokalizacja: Londyn
-
Skrzydlaty
- Użytkownik
- Posty: 126
- Rejestracja: 23 wrz 2007, 21:08
- Lokalizacja: Krak
Rejestry można też przecież ustawiać w bascomie bez pomocy wstawek asemblerowskich...
Grysek67, w datasheets natknołem sie na linijke o tresci:
Czy to jest maksymalna prędkość TWI? jesli 400kHz to ile bitów (bajtów?) mozna przesłać na sec.?
btw. jesli to jest max prędkość i w tych samych jednostkach co dla at24c512 to wszystko wyjaśnia dlaczego prędkość nie jest taka jakbyś "wymagala" Grysek, specjalisto - ile ten sprzetowy TWI wyciagnie?
btw. 2. może operujcie wiecej na liczbach.
Grysek67, w datasheets natknołem sie na linijke o tresci:
Kod: Zaznacz cały
Up to 400 kHz Data Transfer Speedbtw. jesli to jest max prędkość i w tych samych jednostkach co dla at24c512 to wszystko wyjaśnia dlaczego prędkość nie jest taka jakbyś "wymagala" Grysek, specjalisto - ile ten sprzetowy TWI wyciagnie?
btw. 2. może operujcie wiecej na liczbach.
Niewiem ile wyciągnie.. ale 400khz to pewnie 400baud czyli bajtów 400 / 8..Skrzydlaty pisze:Rejestry można też przecież ustawiać w bascomie bez pomocy wstawek asemblerowskich...
Grysek67, w datasheets natknołem sie na linijke o tresci:Czy to jest maksymalna prędkość TWI? jesli 400kHz to ile bitów (bajtów?) mozna przesłać na sec.?Kod: Zaznacz cały
Up to 400 kHz Data Transfer Speed
btw. jesli to jest max prędkość i w tych samych jednostkach co dla at24c512 to wszystko wyjaśnia dlaczego prędkość nie jest taka jakbyś "wymagala" Grysek, specjalisto - ile ten sprzetowy TWI wyciagnie?
btw. 2. może operujcie wiecej na liczbach.
Nigdy tego nie uzywałem i staram się pomóc tak jakbym ja to zrobił.. Nie ma innego dostępu to tego z BASCOMa oprócz rejestrów, nie ma takich polecen.. Więc zapewne trzeba ustawic odpowiednie bity w tych trzech rejestrach które podłem wyzej
-
Szukampomocy
- -
- Posty: 10
- Rejestracja: 14 sie 2008, 12:28
- Lokalizacja: Londyn
-
Skrzydlaty
- Użytkownik
- Posty: 126
- Rejestracja: 23 wrz 2007, 21:08
- Lokalizacja: Krak
No wiec tak:
datasheets ATMega8 (s.163):
datasheets AT24C512 (s.1):
Jak napisał grysek w Bascomie można zmieniać zawartość rejestrów poprzez bezpośrednie wpisywanie bezpośrednio do nich zer i jedynek i to w zupełności powinno wystarczyć. Pozatym Bascom jest tak skonstruowany że to co wpisujemy w konfiguracji jest "przeliczane" do wartości preferowanych przez uC a dokładniej do tego co "przyjmą" rejestry. Jeśli te wartości zacytowane bezpośrednio z datashets są w tych samych jednostkach (kiepsko u mnie z angielskim) a zakładana prędkość jest i tak za mala to może przyczyny należy szukać gdzie indziej? Jeśli chodzi o wpisywanie do rejestrów to polski plik pomocy do Bascoma (c by Zbigniew Gibek) powinien wystarczyć, a jeśli nie to metoda kilku prób i błędów. Jeśli to nie pomoże to może przyczyny należy szukać zupełnie gdzie indziej? Np. nowy procek, niby w układzie z kwarcem 16MHz, w bascomie taka prędkość zdefiniowana ale fusebitow nie przeprogramowałaś i wszystko chodzi 16 razy wolniej? Nowe procki z fabrycznie ustawionymi fusami chodza z prędkością 1MHz. Może TWI korzysta z jakichś przerwań które nie są ustawione? Może jeszcze cos?
Btw. Ja jednak jestem nadal ciekawy czy to jakaś praca zaliczeniowa na studia, praca "zawodowa" czy moze hobby?
datasheets ATMega8 (s.163):
Kod: Zaznacz cały
Up to 400 kHz Data Transfer SpeedKod: Zaznacz cały
1 MHz (5V), 400 kHz (2.7V) and 100 kHz (1.8V) CompatibilityBtw. Ja jednak jestem nadal ciekawy czy to jakaś praca zaliczeniowa na studia, praca "zawodowa" czy moze hobby?
-
Szukampomocy
- -
- Posty: 10
- Rejestracja: 14 sie 2008, 12:28
- Lokalizacja: Londyn
-
ZbeeGin
1. Stosowanie sprzętowego TWI w BASCOM w sumie nie wymaga stosowania wstawek. Dołącza się bibliotekę $lib "i2c_twi.lbx", używa się CONFIG TWI = częstotliwość_pracy (wartość podaje się w Hz), i ustala przez CONFIG SDA/SCL nazwy końcówek sprzętowego TWI, które to polecenie I2CINIT ustawi w odpowiedni stan i kierunek. Wtedy wszystkie polecenia BASCOM Basic-a związane z I2C przekierowywane są do sprzętowego TWI. Ale dalej program będzie czekał aż transmisja się zakończy. Chyba, że obróbka danych będzie w przerwaniach.
Przykładzik oczywiście w helpie angielskim (to w miarę nowa instrukcja) w temacie CONFIG TWI.
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.
3. To 400kHz pochodzi od układów podrzędnych high-speed, które mogą z taką częstotliwościa poprawnie pracować - tak gwarantuje producent. Preskaler w TWI można ustawić by generował nawet wyższy fSCL, ale wymaga to odpowiedniego takowania procesora. W ATmega8 @ 8MHz najszybszy fSCL jaki można uzyskać to 222,222kHz. Czyli teoretyczny transfer to 20kB/s w trybie odczytu ciągu danych. Jeśli przy kolejnych próbkach musisz non stop adresować układ to prędkość drastycznie spadnie.
Przykładowy kod w asm z komentarzami komunikacji z pamięcią 24c512 znajdziecie tutaj: https://forum.elportal.pl/viewtopic.php?t=6977
Przykładzik oczywiście w helpie angielskim (to w miarę nowa instrukcja) w temacie CONFIG TWI.
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.
3. To 400kHz pochodzi od układów podrzędnych high-speed, które mogą z taką częstotliwościa poprawnie pracować - tak gwarantuje producent. Preskaler w TWI można ustawić by generował nawet wyższy fSCL, ale wymaga to odpowiedniego takowania procesora. W ATmega8 @ 8MHz najszybszy fSCL jaki można uzyskać to 222,222kHz. Czyli teoretyczny transfer to 20kB/s w trybie odczytu ciągu danych. Jeśli przy kolejnych próbkach musisz non stop adresować układ to prędkość drastycznie spadnie.
Przykładowy kod w asm z komentarzami komunikacji z pamięcią 24c512 znajdziecie tutaj: https://forum.elportal.pl/viewtopic.php?t=6977
-
Szukampomocy
- -
- Posty: 10
- Rejestracja: 14 sie 2008, 12:28
- Lokalizacja: Londyn
Mi potrzeba transmisji z prędkością około 10KHz max do 15KHz, ale za to przyosobnym adresowaniu za każdym razem. Jeśli pobieranie tych danych ustawię w przerwaniu to jak myslicie- uda się?
[ Dodano: 2008-08-15, 10:14 ]
Chodzi mi o to, żeby w przerwaniu było procedurze odcytu z eepromu dane tylko tyle czasu, żeby pewnie odczytało dane i nastepne przerwanie z kolejnym odczytem było wywołane wczesniej niż wynikałoby to z opóźnienia i2cdelai=1
[ Dodano: 2008-08-15, 10:14 ]
Chodzi mi o to, żeby w przerwaniu było procedurze odcytu z eepromu dane tylko tyle czasu, żeby pewnie odczytało dane i nastepne przerwanie z kolejnym odczytem było wywołane wczesniej niż wynikałoby to z opóźnienia i2cdelai=1