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

Atmega 8 i zapis do eepromu.

kozunami 24 Sty 2009 02:54 7415 24
REKLAMA
  • #1 6045556
    kozunami
    Poziom 12  
    Witam mam takowy problem. Niewiem dlaczego odczyt eepromu nie może odbywać się w petli do loop. Może ktoś mnie oświecić? Jeżeli zapisuje i odczytuje w ten sposób jest ok:
    
    Dim Eskret As Eram Byte At 1
    Eskret = 12
    Dim Egaz As Eram Byte At 2
    Egaz = 26
    Dim Skret As Byte
    Skret = 0
    Dim Gaz As Byte
    Gaz = 0
    Readeeprom Skret , 1
    Readeeprom Gaz , 2
    Cls
    Locate 1 , 1
    Lcd "Skret:" ; Skret
    Locate 2 , 1
    Lcd "Gaz: " ; Gaz
    Wait 1
    End
    

    Natomiast gdy chcę zrobić to w ten sposób:
      Dim Eskret As Eram Byte At 1
    Eskret = 12
    Dim Egaz As Eram Byte At 2
    Egaz = 26
    Dim Skret As Byte
    Skret = 0
    Dim Gaz As Byte
    Gaz = 0
    do
    Readeeprom Skret , 1
    Readeeprom Gaz , 2
    Cls
    Locate 1 , 1
    Lcd "Skret:" ; Skret
    Locate 2 , 1
    Lcd "Gaz: " ; Gaz
    Wait 1
    Loop End

    To niestety sie nie kompilje. WHY?
    Narazie chcę skumać zapis do eeproma,ale ogólnie chodzi o zmienna BYTE , która chce podczas programu modyfikować i zapisywać w eepromie, tak aby przy ponownym uruchomieniu programu dana zmienna miała zapisaną wartość.
  • REKLAMA
  • #3 6045682
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #4 6046399
    kozunami
    Poziom 12  
    Była zła składnia. Faktycznie END powinien być w następnej linijce bądź po dwukropku. Z mojej literatury wynika iż pierwsza komórka jest adresowana jako zero nie jedynka, więc używam drugiej komkórki. Dziękuje i pozdrawiam, temat do zamknięcia.
  • #5 6691034
    jaros85
    Poziom 20  
    Witam.
    Szukam jakiegoś opisu dotyczącego zapis i odczyt do eepromu w atmega8 napisanego w języku C.
    Jestem początkujący w programowaniu uC dlatego jeżeli jest to możliwe to żeby ta metoda opisana była w stylu jak na tej stronie:
    http://www.kursc.dioda.com.pl/

    Mam jeszcze pytanie czy jest możliwość zaprogramowania uC w taki sposób aby kod wykonywalny nie był ładowany do pamięci Flash tylko do eepromu i z niego uruchamiany.
    Chodzi mi o to że eeprom ma możliwość zapisu 100tys razy natomiast flasch tylko 10tys razy.
    Oczywiście kod który pisze są dosyć krótkie i na pewno się zmieszczą do eepromu
  • REKLAMA
  • #6 6691382
    Konto nie istnieje
    Poziom 1  
  • #7 6706667
    SzymonHK
    Poziom 21  
    Podłączę się do tematu, czy w bascomie, możliwe jest zapisanie danej jako pojedynczy bit, potrzebuje zapisać do eepromu 3360 stanów logicznych, jeśli potraktować 512kB pamięci eeprom jako bity to wystarczy, tylko czy bascom temu podoła?
  • #8 6706897
    wader_669
    Poziom 28  
    x as byte ' to zapisujesz w eepromie
    i odczyt np. x.3 i masz 1 bit
  • #9 6706914
    SzymonHK
    Poziom 21  
    Czyli po kropce podajesz nr odczytywanego bitu, a możesz wyjaśnić dokładniej jak z zapisem jednego bitu?
  • #10 6708067
    wader_669
    Poziom 28  
    nie mozesz zapisac jednego bitu w pamieci eeprom, ale mozesz zapisac byte i czytac jego bity.
  • #11 6708154
    Konto nie istnieje
    Poziom 1  
  • #12 6711011
    SzymonHK
    Poziom 21  
    Dzięki wader_669 i emarcus, to mi wyjaśniło a właściwie skomplikowało rozwiązanie, dzielenie modulo 8 i reszta to nr bitu. czy możecie jesze podpowiedzieć , jak po każdym uruchomieniu w petli FOR/NEXT wpisać do eepromu 0 w bajty o adresie 1 (druga komórka pamięci) do 420?
  • #13 6712608
    Konto nie istnieje
    Poziom 1  
  • #14 6714407
    SzymonHK
    Poziom 21  
    Tak, domyślnie eeprom jest wypełniony 255, i potrzebuje wyczyścić.
    Nie mogę dać "pomógł", bo to nie mój temat, ale jeszcze raz dzięki. Jak będę jeszcze miał kłopot z czymś i nie znajdę rozwiązania na elce to założe temat.
  • #15 6715136
    wader_669
    Poziom 28  
    eee.. nawet jak eeprom jest wypelniony 255 to co za problem zmienic b=0 na b=255 ? halo...?
  • #16 6715857
    Konto nie istnieje
    Poziom 1  
  • #17 6715973
    SzymonHK
    Poziom 21  
    Zasadniczo macie rację, ale ja potrzebuję zapisać eeprom bit po bicie a nie bajcie i dlatego wygodniej jest mi wpisać zera i dopiero pracować na takim "wyczyszczonym" obszarze pamięci. druga kwestia, to fakt, iz w eepromie bedą w trakcie pracy zapisywane różne wartości, a przy restarcie muszę się tych danych pozbyć, to tylko kwestia przyjętej logiki czy wpiszę 0 czy 1. Wartość bitu ustala stan wyjscia, jesli będzie nie zmieniona na skutek błędnej danej, nic się nie stanie. Poza tym w BASCOM i uK bawię się hobbystycznie, więc proszę o wyrozumiałość.
  • #18 6716527
    Konto nie istnieje
    Poziom 1  
  • #19 6717180
    SzymonHK
    Poziom 21  
    Z powodów techniczno-ekonomicznych Atmega8L. Czy do pamięci ram mozna zapisywać dane po jednym bicie? Czy mogę zarezerwować wyłączny dostęp do 420 bajtów RAM?
  • #20 6720769
    Konto nie istnieje
    Poziom 1  
  • #21 6721987
    SzymonHK
    Poziom 21  
    Tak myśle zapisywac do EEPROM'u (RMW), z rezerwowaniem RAM'u za dużo zachodu i tak muszę zapisywać 1 bit. Nie mam problemu z szybkością tylko z ilością pamięci. Jeszcze jedno pytanie, jak w Bascomie przechowywana jest reszta z dzielenia modulo?
  • REKLAMA
  • #22 6722709
    Konto nie istnieje
    Poziom 1  
  • #23 6723517
    SzymonHK
    Poziom 21  
    Jak wygląda jej deklaracja i odczyt?
  • #24 6723889
    psooya
    Poziom 38  
    Nie możesz zrobić licznika bitów od 0 - 7 i wpisywać np do zmiennej byte po kolei te bity i zwiększać o 1 licznik który jak osiągnie 7 to należy zmienną zapiać do eepromu i wyzerować licznik oraz ta zmienną i zmienić adres komórki eepom na kolejny? Przeczytałem cały temat i ciągle zastanawia mnie czemu wybór eepromu a nie ramy. Masz ramu 1KB czyli 102B czyli 8192 bity a eepromu tylko 512 bajtów.
    Pozdrawiam
  • #25 6724005
    SzymonHK
    Poziom 21  
    Ram musiałbym rezerwować, żeby zabezpieczyć się przed konfliktem adresu. Po drugie potrzebuję zapisać 3360 komórek czyli moja zmienna inkrementuje się od 0 do 3359, dziele ja przez 8 i mam adres bajtu pamieci, a reszta z dzielenia to wskaźnik bitu do zapisu. Po trzecie pisałem już, na szybkości mi nie zależy.
REKLAMA