Прошу помощи с адрессацией в DS1993

Тема в разделе "Arduino & Shields", создана пользователем Pol_butcher, 13 окт 2016.

  1. Pol_butcher

    Pol_butcher Нуб

    Добрый день, начинаю закипать. Пытаю DS1993. В даташите написано что он имеет 4096 байт памяти. 16 страниц по 256 байт. Записывать и считывать данные в память получилось используя команды из даташита. Но особо не понимаю в адресации.
    Как я понимаю в таблетке есть 16 страниц по 256 байт. В моем понятии чтобы записть в нулевую страницу памяти в 42 байт необходимо подать адресный байт 002А. Но по даташиту он находится на 1 странице. Еще там написано что есть 5 адресных бит которые указывают на одно из 32 возможных расположений байта на странице. Так откуда 32 расположения если должно быть 256.
    В общем может не правильно изъясняю, но прошу помощи(((
     

    Вложения:

  2. rkit

    rkit Гуру

    256 бит на странице. а не байт.
     
  3. Pol_butcher

    Pol_butcher Нуб

    Спасибо, уже байт от бита отличить не могу)) 32 возможных байта по 8 бит = 256 бит на странице все сошлось. Надо быть внимательней.
     
  4. Pol_butcher

    Pol_butcher Нуб

    Может кому пригодиться - конечно не по феншую но работает.
    Код (C++):
    #include <OneWire.h>

    OneWire  ds(2);  // линия 1-Wire будет на pin 2
    byte i;
    byte j;
    byte ES;
    byte  TA1;
    byte  TA2;
    char rdata[32];
    byte Scratchpad1[16] = {0x00, 0x20, 0x40, 0x60, 0x80, 0xA0, 0xC0, 0xE0, 0x00, 0x20, 0x40, 0x60, 0x80, 0xA0, 0xC0, 0xE0};
    byte Scratchpad2[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
    char wdata[32] = "Ivanov Ivan Ivanovich 01.01.16";

    void setup(void)
    {
      Serial.begin(9600);
    }

    void loop(){
    Serial.println("Стираем всю память! Приложите ТМ...");
    delay(2000);
    //Стирание всей памяти
    for(i = 0; i < 16; i++) {
      ds.reset();
      ds.write(0xCC); //Пропуск чтения ROM      
      ds.write(0x0F); //Запись в Scratchpad    
      ds.write(Scratchpad1[i]);
      ds.write(Scratchpad2[i]);
      for(j = 0; j < 32; j++) {
      ds.write(0);
      }
      //Чтение переданных данных
      ds.reset();
      ds.write(0xCC); //Пропуск чтения ROM      
      ds.write(0xAA);        
      TA1 = ds.read();
      TA2 = ds.read();
      ES = ds.read();
      //Передача кода авторизации и копирование из Scratchpad в память
      ds.reset();
      ds.write(0xCC); //Пропуск чтения ROM      
      ds.write(0x55);
      ds.write(TA1);
      ds.write(TA2);
      ds.write(ES);
    }
    Serial.println("Память стерта! Уберите ТМ...");
    delay(2000);

    Serial.println("Записываем в память! Приложите ТМ...");
    delay(2000);
    //Стирание всей памяти
    for(i = 0; i < 16; i++) {
      ds.reset();
      ds.write(0xCC); //Пропуск чтения ROM      
      ds.write(0x0F); //Запись в Scratchpad    
      ds.write(Scratchpad1[i]);
      ds.write(Scratchpad2[i]);
      for(j = 0; j < sizeof(wdata); j++) {
      ds.write(wdata[j]);
      }
      //Чтение переданных данных
      ds.reset();
      ds.write(0xCC); //Пропуск чтения ROM      
      ds.write(0xAA);        
      TA1 = ds.read();
      TA2 = ds.read();
      ES = ds.read();
      //Передача кода авторизации и копирование из Scratchpad в память
      ds.reset();
      ds.write(0xCC); //Пропуск чтения ROM      
      ds.write(0x55);
      ds.write(TA1);
      ds.write(TA2);
      ds.write(ES);
    }
    Serial.println("Запись произведена! Уберите ТМ...");
    delay(2000);
    Serial.println("Считываем всю память! Приложите ТМ...");
    delay(2000);
    for(i = 0; i < 16; i++) {
       ds.reset();
       ds.write(0xCC); //Пропуск чтения ROM      
       ds.write(0xF0); //Команда чтения
       ds.write(Scratchpad1[i]);
       ds.write(Scratchpad2[i]);
       for(j = 0; j < 32; j++) {
       rdata[j] = ds.read();
      }
       Serial.println(rdata);
    }
    Serial.println("Память считана! Уберите ТМ...");
    delay(2000);
    }