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

[MEGA16][BASCOM] writeeeprom i parametryzacja

janusz182 27 Lut 2010 12:47 2202 16
REKLAMA
  • #1 7757753
    janusz182
    Poziom 14  
    witam, zgodnie z definicją, instrukcja writeeeprom służy do zapisu do pamięci eeprom.

    Chciałbym, aby można było w zmiennej przechowywać adres komórki, która będziemy chcieli nadpisać, bo potrzebuję taką automatyzację do kasowania komórek pamięci od P1 do P8, (takie są ich nazwy).

    Proszę o pomoc.
  • REKLAMA
  • #2 7759644
    wader_669
    Poziom 28  
    chyba nie rozumiem twojego problemu
    lub czegos nie zrozumiales w helpie:

    (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005 napisał:

    Zapisuje dane do wbudowanej pamięci EEPROM.

    Składnia:

    WRITEEEPROM zmienna , adres

    gdzie:

    zmienna zmienna, której wartość wpisana będzie do adresowanej komórki EEPROM,
    adres adres komórki pamięci EEPROM.
  • REKLAMA
  • #3 7761045
    janusz182
    Poziom 14  
    Witam,

    Chciałbym dowiedzieć się, czy w części adres można wpisać jakąś zmienną.

    Mam program gdzie na poczatku znajduje się:
    $eeprom
    P1:
    data 1, 2, 3
    P2:
    data 1,2,3
    ...
    ...
    P8:
    data 1, 2,3
    $data

    a w petli głównej chciałem zrobić coś takiego:


    do
    wrieeeprom a,b

    loop until (8 kroków)

    i moje pytanie, czy mogę b zadeklarować jaką zmienną string i zmieniać od p1 do p8...
    czy tak się nie da i muszę powtarzać osiem razy writeeeprom


    Oczywiście przy komórkach, to może nie mieć znaczenia, ale w programie chciałbym zrobić jeszcze przegladanie danych zapisanych w 48 komórkach, więc automatyzacja byłaby wskazana.

    Pozdrawiam
  • #4 7761068
    Konto nie istnieje
    Poziom 1  
  • #5 7761127
    janusz182
    Poziom 14  
    dziękuję, jutro bedę testował
  • REKLAMA
  • #6 7779640
    janusz182
    Poziom 14  
    Witam, stworzyłem coś takiego:

    zmienna kali to bajt,
    sek4 i sek3 to long
    k to string

    Kali = 11
    K = "P" + Str(kali)

    Lcd K
    Readeeprom Sek4 , K
    Readeeprom Sek3 , P11

    No i długo już się męczę, bo sek 4 jest różne od sek3, mało tego sek3 jest wartością poprawną, więc adres komórki P11 wpisany ręcznie sprawia, że instrukcja readeeprom działa prawidłowo, natomiast przy użyciu zmiennej k, readeeprom, nie działa dobrze, co jest nie tak??

    Proszę o odpowiedź

    Dziwne, że dla komórek np P1, P2, P3....P9 działa to prawidłowo.
    Czy wina moze leżeć po stronie programu, mianowicie jego wielkości (54% Megi16??)
    Pozdrawiam
  • REKLAMA
  • #7 7780148
    Konto nie istnieje
    Poziom 1  
  • #8 7780414
    janusz182
    Poziom 14  
    Atom, kilka postów wyżej właśnie napisałeś, że można użyć zmiennej jako adres w instrukcji writeeeprom i readeeprom.

    Co dziwne działa to tak jak napisałem, dla P1, P2...P9
    napisałem, że zmienna Kali to bajt, tylko dlatego żeby było wiadomo, ze to cyfra 0-255, dlatego później robię z niej str(kali), żeby można było dodać do "p", żeby wyszło P11, bo pod tym adresem mam zapisaną informację, i jak widać z programu, do zmiennej Sek4 wpisuje wartość odczytaną z komórki o adresie P11, z tym, ze P11 to wynik sumowania znaków, natomiast do zmiennej sek3 wpisuje zawartość komórki P11, ale adres wpisałem ręcznie.
    zmienna sek3 zgadza się, natomiast sek4 nie i tu tkwi mój problem, chciałbym, aby zmieniając zmienną Kali, można było automatycznie odnosić się do kolejnych komórek pamięci, P12, P13 itd.
  • #9 7780881
    wader_669
    Poziom 28  
    ja np. dalej nie rozumiem o co ci chodzi, tak samo pewnie kolega atom1477
  • #10 7781223
    janusz182
    Poziom 14  
    Kali = 10
    do
    incr kali
    K = "P" + Str(kali)
    Readeeprom Sek4 , K
    Readeeprom Sek3 , P11
    loop

    Ok, mam nadzieję, że teraz będzie widać, o co chodzi.
    Program działa w pętli, incrementuję zmienną kali od 11 do iluśtam, nieważne..

    zmienna sek4 będzie się zmieniać tak jak zapisana jest pamięc eeprom od adresu P11 do P ileśtam... no nie.
    a zmienna Sek3 nie będzie się zmieniać, bo będzie zawsze odczytywana wartość z komórki P11.
    Ale mój problem polega na tym, że dla komórki P11 (czyli dla kali=11), sek4 jest rózne od sek3.


    Nie wiem, jak mam to jeszcze wytłumaczyć....
  • #11 7781939
    Konto nie istnieje
    Poziom 1  
  • #12 7786468
    janusz182
    Poziom 14  
    Hmm, czytajac ostatni post atoma, troszka sie skrzywilem.
    Mowie ze program ktory napisalem dziala, ale nieprawidlowo, to nie jest wynik zamiany miejscami danej z adresem, malo tego, zmienna k, która jest oczywiscie stringiem, bo jest to zlozenie LITERY P i liczby 11, ktora jest zamieniona ze zmiennej byte (kali) na stringa podstawiona w miejsce adresu dziala, ale dla Kali jednocyfowej.....

    Sek3 i Sek4 to zmienne w ktore wpisuje zawartości komórek o adresie,który zachowany jest w stringu k.

    Prosze jeszcze raz przejrzec co napisałem i sprawdzić, czy zamieniłem daną z adresem?

    Proszę mi odpowiedzieć, mając adres komórki np P11, jak ja ją mogę zapisać w zmiennej typu Bajt??

    Pozdrawiam
  • #13 7786765
    Konto nie istnieje
    Poziom 1  
  • #14 7787484
    wader_669
    Poziom 28  
    Moze naucz sie pisac programy i czesciej zaglada do helpa. Juz samo to ze zapisujesz adres w stringie jest dla mnie jakies anormalne.

    Ja tez wymiekam i mimo ze staram sie zrozumiec, nie da rady.
  • #15 7789814
    Konto nie istnieje
    Poziom 1  
  • #16 7918903
    IMEX
    Poziom 20  
    mam podobny problem

    napisałem program w wersji podstawowej jakiejs tam - zapisywanie do eprom bylo bez problemu

    zmienne
    Dim T_solar As Word , T_H_dn As Word , T_H_up As Word , S_praca As Bit


    odczytywane dane
    Readeeprom T_solar , 24
    Readeeprom T_H_dn , 26
    Readeeprom T_H_up , 28


    pobierane dane
                Case 2:
                  Select Case P_u
                    Case 0:
                      P_u = 1
                    Case 1:
                      If T_solar > 10 Then T_solar = T_solar - 10
                    Case 2:
                      If T_H_dn > 10 Then T_H_dn = T_H_dn - 10
                    Case 3:
                      If T_H_up > 0 Then T_H_up = T_H_up - 10
                    Case 4:
                    S_praca = Not S_praca
                      If S_praca = 0 Then P_u = 0
                  End Select
                  A_s = 0


    i zapisywane dane
            Writeeeprom T_solar , 24                            '2 bajty
            Writeeeprom T_H_dn , 26
            Writeeeprom T_H_up , 28


    i to wszystko działa OKI
    Ale jak dodam dodatkowe menu CASE 3 - a w nim kolejne dane a procedura zapisywania i odczytywania dodana i zmienne - i niestety nie zapisuje mi tych danych. Ale jeżeli przed zapisem dodam

    
    T_solar = 10   'jakies tam dane
    T_H_dn = 10   'jakies tam dane
    T_H_up = 10   'jakies tam dane
    
            Writeeeprom T_solar , 24
            Writeeeprom T_H_dn , 26
            Writeeeprom T_H_up , 28


    on to zapisze poprawne i odczyta w tym dodatkowym menu
    Czego tu nie rozumiem
    Całego kodu nie podam ze zrozumiałych powodów - ale nic tam wiecej niema potrzebnego dla odczytu i zapisu danych
  • #17 7919690
    polprzewodnikowy
    Poziom 26  
    Mnie się wydaje że zmienne Word musisz sam rozbić na 2 bajty.
REKLAMA