logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Attiny 2313 eeprom - zapis długości/ilości danych

pawli52 20 Mar 2008 10:35 1753 4
REKLAMA
  • #1 4930731
    pawli52
    Poziom 10  
    Posty: 16
    Witam

    Wpisuje sobie do eeprom wewnętrznego dane:

    $eeprom
    Data 140 , 134 , 136 , 198 , 134 , 255 , 142 , 163 , 175 , 255 , 136 , 199

    Nie do końca rozumiem gdzie to polecenie pakuje pierwszą daną?
    Czy 140 będzie w adresie 0 czy 1?
    Gdzie będzie zapisana długość(ilość) danych?

    Pozdrawiam

    Pawli
  • REKLAMA
  • #2 4930829
    kundzios
    Poziom 19  
    Posty: 401
    Pomógł: 20
    Ocena: 42
    Brakuje etykiety (adresu)
    Powinno być tak:
    $eeprom
    Adres:
       Data 140 , 134 , ...

    Adres - zmienna z adresem komórki w pamięci eeprom
    Wartość 140 zapisze się w pierwszej komórce, jaką podasz, a 134 w kolejnej i tak dalej.

    PS: Pamiętaj, aby nie zapisywać danych w pierwszej komórce(o adresie 0) pamięci eeprom, podczas włączania się układu, lubi sama zmieniać wartość.
  • REKLAMA
  • #3 4930966
    pawli52
    Poziom 10  
    Posty: 16
    Witam

    Dziękuje za odpowiedź ale chciałbym jeszcze zapytać:

    Co jeśli nie podam adresu startowego?

    Adress:

    Czy gdzieś w eepromie bęzie zapisana ilość danych?Adres końca napisu

    Pozdrawiam

    Pawli
  • REKLAMA
  • #4 4931462
    kundzios
    Poziom 19  
    Posty: 401
    Pomógł: 20
    Ocena: 42
    Zawsze wpisywałem konkretny adres, ale sam możesz zobaczyć.
    Wpisz dane do eeprom dane, bez określania adresu, a później odczytaj jedną z komórek. Zobaczysz wtedy, jak twoje dane zostały umieszczone w pamięci eeprom.
    Pamiętaj, że kolejne wpisywanie/odczytywanie danych może rozpocząć się na końcowym adresie, jaki został użyty.

    Dlatego lepiej wpisać konkretny adres.
  • #5 4937205
    pawli52
    Poziom 10  
    Posty: 16
    Witam

    Czy moze mi ktoś powiedzieć jak w poniższym programie do pamieci eeprom wew do komórki o adresie 1 jest wpisywana długość (adres ostatniej danej data)?
    Ściślej skąd pod adresem 1 bieże sie ilość danych data?
    Readeeprom Dlugosc , 1 'odczytuje adres końca napisu

    Pozdrawiam

    Pawli


    'C019d 'Wyświetlanie biegnącego napisu z pomieci EEPROM
    'teraz długość wyświetlanego napisu jest określona w pamięci EEPROM
    'i można ją zmienić w trakcie pracy programu:
    'na początku, w komórce o adresie 1 jest długość napisu
    'komórki 0 nie wykorzystujemy, bo teoretycznie może zmienić swą zawartość
    $eeprom 'dane do zapisania w EEPROMie mają być na początku pliku
    Napis1: 'tu jest jeden napis
    Data 136 , 136 , 136 , 136 , 136 , 136 , 136 , 136



    'tu kończy się zawartość EEPROMa i zaczyna "zwykły" program
    Dim R1 As Byte , R2 As Byte , R3 As Byte , R4 As Byte
    Dim Licznik As Byte , Mux As Byte , Dlugosc As Byte
    Config Portb = 255 : Portb = 255 : Config Portd = &B1111100 : Portd = &B1111111
    Config Timer0 = Timer , Prescale = 64 : Config Timer1 = Timer , Prescale = 64
    Enable Interrupts : Enable Timer0 : Enable Timer1 'odblokowanie przerwań
    On Timer0 Co4ms : On Timer1 Skok 'po przepełnieniu liczników skocz
    R4 = 255 : R3 = 255 : R2 = 255 : R1 = 255 'Wygasza wyświetlacz na początek
    Licznik = 2 'zaczyna od trzeciej komórki pamięci EEPROM

    Do : Loop : End 'to jest główny program - pusta nieskończona pętla

    Skok:
    Timer1 = 45000 'czas ok. 0,33s
    R4 = R3 : R3 = R2 : R2 = R1 'przesuwamy zawartość
    Readeeprom R1 , Licznik 'do R1 nowa literka
    Incr Licznik
    Readeeprom Dlugosc , 1 'odczytuje adres końca napisu
    If Licznik = Dlugosc Then Licznik = 2 'wraca do początku napisu
    Return

    Co4ms: 'przerwanie co 4,096ms (bez skracania cyklu)
    Mux = Mux + 1 : If Mux = 4 Then Mux = 0 : Portd = &B1111111
    Select Case Mux ' obsługa wyświetlacza
    Case 0:
    Portb = R1 : Portd.3 = 0 '
    Case 1:
    Portb = R2 : Portd.4 = 0
    Case 2:
    Portb = R3 : Portd.5 = 0
    Case 3:
    Portb = R4 : Portd.6 = 0
    End Select : Return 'koniec obsługi przerwania od T/C0 co 4,096ms
REKLAMA