Porownanie danych zapisanych w eeprom


Witam!
Nie wiem ,czy dobrze temat zatytułowałem.Chodzi mi o to,ze napisałem odczyt i zapis kart RFID.Wszystko działa dobrze z małym wyjątkiem.Nr kart sa zapisywane w menu.Przykład:Ustawiam licznik na 1 przykładam kartę i zostaje ona zapisana do pamięci,później zwiększam licznik i dokładnie ta sama procedura.Problem polega na tym,ze gdy któraś karta jest juz zapisana pod nr np:1 to po zapisie jej pod inny numer to przy odczycie następuje reset.Sa dwie takie same karty pod rożnymi adresami. Chciałbym dopisać przed zapisem porównanie komórek pamięci i jeżeli zostanie wykryty taki sam numer to pokaże error i nie zapisze do pamięci.Albo skasuje tamten wpis w pamięci.tylko problem w tym ,ze nie mam pojęcia jak przy zapisywaniu którejś karty porównać ja z danymi w eeprom.Odczytywać każda po koleji?Ma ktoś na to pomysł?




Portret użytkownika mirley

Re; EEprom

Czy założyłeś sobie jakąś maksymalną liczbę kart w pamięci? Ile bajtów numeru zapisujesz z jednej karty i w jaki sposób masz to zorganizowane w pamięci? Najprościej jest po odczytaniu numeru karty zachować go w zmiennej tymczasowej i odczytać po kolei wszystkie zapisane numery, jesli już taki istnieje to error albo nic nie robić bo karta już istnieje

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

Mam zrobione to w ten sposób:

Mam zrobione to w ten sposób: Zrobiłem sobie tablice karta(14) as word. Odczytuje kartę i gdy karta jest w pamięci to wykonuje dana funkcje dla tej karty. Zapisuje ja w pamięci w ten sposób.Jeżeli nie ma karty w pamięci i licznik do przypisania numeru karty = np:1 to odczytuje wszystkie 14 adresów.I jeżeli karta nie jest zapisana to ja zapisuje w eeprom pod danym adresem. Zrobiłem to na if-ach i to działa,niestety generuje olbrzymi kod. W każdej karcie jest 14 if. Sama obsługa kart zajmuje 60% atmega32. Myślałem,ze jest jakiś inny sposób na odczyt pamięci. Moze w pętli,ale chyba tak sie nie da.

Portret użytkownika mirley

Re: Karty

Da sie zrobić w pętli, normalnie sprawdzaj pętla for po wszystkich wartościach w tablicy karta. Za każdym razem robisz pętle po tej tablicy jak tylko jest jakaś akcja z kartą. Np po przyłożeniu karty kiedy np przycisk "uczenia karty" jest wciśniety pętla sprawdza cz w którejś z komórek nie ma już tej wartości i jeśli jest to pomija zapis, jesli natrafi na komórkę o wartości np 0 to zapisuje w niej nową kartę.... prosta sprawa

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Grzeniu 73

ta prosta:) Nie mam zielonego

ta prosta:) Nie mam zielonego pojęcia jak w pętli for sprawdzać adresy pamięci.Na dzień dzisiejszy zostawiłem to tak jak miałem.Moze kiedyś do tego wrócę jak sie trochę podszkolę.Dzieki za odpowiedz.Pozdrawiam!

Portret użytkownika mirley

Re: Karta

Czytasz kolejne adresy:

istnieje = 0
For N = adres_start to adres_koniec step 2
  Readeeprom Zmienna_word, N
  if Zmienna_word = aktualna_karta then istnieje = 1
Next N

Odczytujesz wszystkie karty z pamięci co dwa adresy skok bo karty masz w zmiennych word(dwa bajty) sprawdzasz czy nie ma takiego samego numeru i ustawiasz sobie zmienną pomocniczą istnieje na 1, potem wykonujesz odpowiednie akcje

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Grzeniu 73

teraz mam tak; If Poz_menu =

teraz mam tak;

If Poz_menu = 13 And Nrkarty = 15 Then
 
        Readeeprom Hc , 60
                 If M <> Hc Then
         Readeeprom Hc , 62
                   If M <> Hc Then
           Readeeprom Hc , 64
                     If M <> Hc Then
             Readeeprom Hc , 66
                       If M <> Hc Then
              Readeeprom Hc , 68
                         If M <> Hc Then
                 Readeeprom Hc , 70
                          If M <> Hc Then
                  Readeeprom Hc , 72
                           If M <> Hc Then
                    Readeeprom Hc , 74
                             If M <> Hc Then
                     Readeeprom Hc , 76
                               If M <> Hc Then
                      Readeeprom Hc , 78
                                 If M <> Hc Then
                       Readeeprom Hc , 80
                                   If M <> Hc Then
                         Readeeprom Hc , 82
                                        If M <> Hc Then
                           Readeeprom Hc , 84
                                     If M <> Hc Then
                             Readeeprom Hc , 86
                                        If M <> Hc Then
 
                Hc = M
           Writeeeprom Hc , 88

a muszę mieć tak?
If Poz_menu = 13 And Nrkarty = 15 Then
for n=60 to 86 step 2
Readeeprom hc, N
if m<>hc then  Hc = M
   Writeeeprom Hc , 88
next n

Rozmontowalem płytkę testowa i nie mam jak sprawdzić teraz. Jak zrobię ten licznik to sprawdzę ten kod.Zaoszczędzi mi on dużo miejsca.Będę mógł zapisać dużo więcej kart. Ps. Kiedyś czytałem,ze masz zamiar napisać kurs Bascom.:) Chętnie bym taka książkę kupił z przykładami bardziej zaawansowanymi.