Память для ардуино

Тема в разделе "Посоветуйте детальки", создана пользователем issaom, 10 апр 2020.

  1. issaom

    issaom Гуру

    Подскажите пожалуйста, есть такая штука:
    24LC256.png
    А есть что-то подобное только SRAM (32k) и хотелось бы i2C.....
     
  2. parovoZZ

    parovoZZ Гуру

    бери FRAM
     
    Jakudzzzzza и Daniil нравится это.
  3. Jakudzzzzza

    Jakudzzzzza Нуб

    да, FRAM нужно брать.
     
  4. Asper Daffy

    Asper Daffy Иксперд

    PSRAM на SPI устроит? Там написано как работать с 128к и 8М
     
  5. issaom

    issaom Гуру

  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Кирпичики без наименований на корпусе - Срамота.
     
  7. что общего между картинкой на сайте и тем что выдадут в магазине?
    Ожидается поступление на склад г.Москва: 30 апреля 2020 г.
    нухз...
     
  8. issaom

    issaom Гуру

    [QUOTE="Ожидается поступление на склад г.Москва: 30 апреля 2020 г.
    нухз...[/QUOTE]
    Мне уже отгрузили и едет.... они есть в наличии, а "Ожидается поступление на склад" это в смысле что они ишо привезут к себе на склад )))
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Ммммм... Может и ничего - но. Представьте, вам рекламируют невесту, но не показывают ее лица ! Срамота.
     
    Последнее редактирование: 12 апр 2020
  10. представите количество 8 ногих микрух в чиде, на каждую нужна своя фота?
     
  11. parovoZZ

    parovoZZ Гуру

    lcsc на каждый компонент даёт фотку.
     
  12. сравнил...
    вот выйдет чид на международный рынок...
     
  13. Unixon

    Unixon Оракул Модератор

    Глаза боятся, руки делают.
     
  14. issaom

    issaom Гуру

    Прикрутил.... вроде как даже и работает.... Хотя не уверен что правильно SPI инициализировал....
    SPI_RAM.JPG

    Код (C++):
    // Данный код будет работать только на платах с чипом ATmega328P например
    // Arduino UNO, NANO
    // Он использует интрефейс SPI на пинах
    // 13 - SCK, 12 - MISO, 11 - MOSI, 10 - SS
    // Микросхемы памяти SRAM 23K256, 23K512

    void setup (void)
    {
      // отладка
      Serial.begin (115200);
      // Настройка SPI как мастера
      DDRB |= (1 << PB2) | (1 << PB3) | (1 << PB5);   // Настроить выводы MOSI,SS,SCK на выход
      PORTB |= (1 << PB2);                            // Установить "1" на линии SS
      /* Enable SPI, Master, set clock rate fck/4 */
      SPCR = (1 << SPE) | (1 << MSTR);
    }


    uint8_t read_byte(uint16_t address)
    {
      uint8_t read_byte;
      // Write address, read data
      PORTB &= ~(1 << PB2);                   // Установить "0" на линии SS
      SPDR = 3;                               // Режим чтения байта из ячейки памяти по адресу address
      while (!(SPSR & (1 << SPIF))) ;         // Дождаться окончания передачи
      SPDR = address >> 8;                    // Старший байт адреса
      while (!(SPSR & (1 << SPIF))) ;         // Дождаться окончания передачи
      SPDR = address;                         // Младший байт адреса
      while (!(SPSR & (1 << SPIF))) ;         // Дождаться окончания передачи
      SPDR = 255;                             // Байт "пустышка" чтобы прочитать байт из ячейки
      while (!(SPSR & (1 << SPIF))) ;         // Дождаться окончания передачи
      read_byte = SPDR;                       // Читаем байт записанный по адресу address
      PORTB |= (1 << PB2);                    // Установить "1" на линии SS
      return read_byte;                       // Возвращаем полученый байт из ячейки памяти
    }


    void write_byte(uint16_t address, uint8_t data_byte)
    {
      PORTB &= ~(1 << PB2);                   // Установить "0" на линии SS
      SPDR = 2;                               // Режим записи байта в ячейку памяти по адресу
      while (!(SPSR & (1 << SPIF))) ;         // Дождаться окончания передачи
      SPDR = address >> 8;                    // Старший байт адреса
      while (!(SPSR & (1 << SPIF))) ;         // Дождаться окончания передачи
      SPDR = address;                         // Младший байт адреса
      while (!(SPSR & (1 << SPIF))) ;         // Дождаться окончания передачи
      SPDR = data_byte;                       // Записываем байт в ячейку по адресу address
      while (!(SPSR & (1 << SPIF))) ;         // Дождаться окончания передачи
      PORTB |= (1 << PB2);                    // Установить "1" на линии SS
    }


    void loop (void)
    {
      char b;
      // диапазоны адресов для
      // 23K256 0....32767
      // 23K512 0....65535
      // Пишем байт в ячейку с адресом 535
      write_byte(535, 'A');
      // Читаем байт из ячейи с адресом 535
      b = read_byte(535);
      delay (1000);
      // Выводим значение в монитор порта
      Serial.println(b);
    }