Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 2 lip 2026, o 21:21


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 27 maja 2016, o 21:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Posiadam popularną pamięć eeprom 24C32 i chciałbym nauczyć się i zrozumieć sposoby zapisu i odczytu w trybie page write.
Zapis i odczyt pojedyńczych bajtów już znam i rozumiem ale w trybie zapisu strony mam z tym problem.
Powiem od razu że nie chodzi mi o jakiś gotowy kod ale o rzeczowe wytłumaczenie,naprowadzenie w celu stworzenia sobie funkcji zapisu i odczytu strony w C avr (procesor Atmega32).
Zacznę o początku załóżmy że napiszę taką funkcję do zapisu dwóch stron.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I tak dalej.
Czy mogę sobie pozwolić na taki sposób zapisu w trybie page write po TWI?
czy może błądzę.
Proszę o konkretną pomoc w zrozumieniu tematu.Czekam na posty.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 maja 2016, o 22:26 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

Brakuje pętli do wysyłania bajtów (buf++, addr++ nic nie dają), a przy przeskakiwaniu stron należy rozpocząć cały cykl od nowa, więc najlepiej zorganizowac to w kodzie wywołującym.
Warto też jakoś ograniczyć tą funkcję tylko do tego co chcesz wysłać,a nie że ciągnie z niezdefiniownej przestrzeni.

A tu takie cuś co ostatnio popełniłem, może się przyda ;) .

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Ostatnio edytowano 28 maja 2016, o 21:09 przez jnk0le, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2016, o 20:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

W tym linku który mi dałeś z bibliotekami jest jakaś zmienna TW_MT_SLA_NACK co się pod nią kryje?,bo nie mogę znaleźć deklaracji.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wiem że tutaj sprawdzany jest warune czy ta zmienna jest różna z tym co jest po TWI wysyłane (sprawdzanie statusu) czyli jeśli status TWI jest różny od tej zmiennej to wyjdź z pętli (właśnie ale na co wskazuje ta zmienna?-bo nie jest nigdzie zdeklarowana.
W chwili wolnej przećwiczę te bibioteki i zobaczę czy zadziałają.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2016, o 17:55 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

TW_MT_SLA_NACK jest to po prostu makro z <util/twi.h> (właśnie zauważyłem że brakowało jednego includa)
Pętla ta się wykonuje do momentu aż pamięć zacznie odpowiadać (ACK), czyli skończy zapis.

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2016, o 22:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

Czyli tak jak zapiszę wszystkie bajty do eepromu to pamięć wystawi ack i wyjdę z pętli while ,po czym realizowany jest dalsza część programu.Wysłałem do pamięci bajt 32 i zapisało mi do drugiej strony ten bajt ale nie rozumiem w jaki sposób.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wykorzystując ten kod zadziałało to ale nie rozumiem w jaki sposób następuje przejście do zapisu do drugiej strony po przekroczeniu 32 bajtu podczas zapisu (mam na myśli inkrementację po zapisie pierszej pełnej strony (0---- 31)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 maja 2016, o 15:00 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

Właśnie zajrzałem do znalezionego datasheetu (jakiś obsolete Microchip 24C32) i wychodzi na to że niektóre pamięci mogą przyjąć do 64 bajtów. (podczas gdy AT24C32 pozwala tylko na 32 bajty)

Cytuj:
4.3 Page Write
The write control byte, word address and the first data
byte are transmitted to the 24C32 in the same way as
in a byte write. But instead of generating a stop condi-
tion, the master transmits up to eight pages of eight
data bytes each (64 bytes total)
which are temporarily
stored in the on-chip page cache of the 24C32. They
will be written from cache into the EEPROM array after
the master has transmitted a stop condition.


Być może masz którąś z nich.

A te delaye są już nie potrzebne jeśli masz pętle czekająca na zakończenie zapisu. (szczególnie że zapis może trwać 8x5ms dla wyżej wspomnianego 24c32)

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 maja 2016, o 23:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2013
Posty: 257
Lokalizacja: Racibórz
Pomógł: 0

W przypadku odczyty w trybie read page mam pytanko.
Jaką rolę pełni ta linijka kodu skoro na nic nie wpływa praktycznie.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A oto cały kod dla odczytu proszę o sprawdzenie ew. komentarz.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2016, o 15:39 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

Funkcja ta wczytuje ostatni bajt do buforu, jako że `while( --len )` kończy się o jedno przejście szybciej niż `while( len-- )`.
A jak bardzo zdefiniowane jest kończenie odczytu po wysłaniu ACK to przewidzieć nie mogę.

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO