Микроконтроллеры avr для начинающих " EEPROM "

Поділитися
Вставка
  • Опубліковано 24 січ 2025

КОМЕНТАРІ • 93

  • @nicolasomsk
    @nicolasomsk 10 років тому +1

    Александр, спасибо за труды! Скачиваю на диск Ваши уроки, опасаясь, что отключат интернет:) Просьба: Если возможно, выкладывайте, пожалуйста примеры (исходники) к Вашим видео (в т.ч. и к этому видео).

  • @moreplavotel
    @moreplavotel 10 років тому

    Как всегда: просто, легко и понятно. Большое спасибо Александр.

  • @LitAlexV
    @LitAlexV 8 років тому +7

    В видео ошибочка присутствует uint32 занимает не 3 байта, а 4 байта. В watch мы видим адрес х0003, потому как первая переменная была 1 байт начинается с адреса 0х0000, в 2-я 0х0001:0х0002, а третяя переменная в адресе 0х0003:0х0006.

  • @efimtrivozhenko3904
    @efimtrivozhenko3904 10 років тому +15

    Я извиняюсь, но uint32_t - это точно 3 байта?

  • @dmitriibannikovasx
    @dmitriibannikovasx 6 років тому

    Спасибо за ваш труд, один из немногих каналов, если не единственный, где по мк всё понятно разъясняется. И разрешите придраться, английская "w" в слове word это не перевернутая русская "м"

    • @АлександрПисанец
      @АлександрПисанец  6 років тому

      Увы, английский с трудом дается в отличии от программирования.

  • @jone2409
    @jone2409 2 роки тому

    Скажите пожалуйста 🙏 чем отличается язык gcc c executable от других ??? Или одинаковый

  • @Prostoslojnom
    @Prostoslojnom 8 років тому

    Александр, здравствуйте !
    Если не затруднит :
    Кто будет быстрее вычислять простые функции(if ,for, switch и т.д) AtMega 8A (ну или AtMega 16A, я понял, что по процессору примерно то же) на 16МГц
    или "старичок" At89S52 на частоте 24МГц.
    И если можно из практики пару слов о At89S52 (то что "на поверхности не лежит")
    Спасибо.

    • @АлександрПисанец
      @АлександрПисанец  8 років тому

      одинаково, между ними отличия только в количестве периферии. Так сказать в atmega16 больше примочек.

    • @Prostoslojnom
      @Prostoslojnom 8 років тому

      Понял . Спасибо

    • @stillamer
      @stillamer 8 років тому

      не верь автору. Больше частота - быстрее вычисления. Подумай, зачем ты хочешь ПК с большим количеством ядер и тактовой частотой?

    • @АлександрПисанец
      @АлександрПисанец  8 років тому +1

      И в чем у них разница? какая частота больше? прежде чем написать хоть даташит изучите.

  • @JackSparrow-dn1cu
    @JackSparrow-dn1cu 6 років тому

    Подскажите, а есть специальная команда размещения данных в оперативке (data)?
    Не могу понять с какого то момента по умолчанию студия размещает данные во флеш памяти если нету обращения к переменой в программе. Это очередной глуюк студии? Тогда почему открываю старые проекты и там все правильно размещается. Мало того при объявлении глобальной переменой или массива вообще левые данные подставляются.

  • @electronics_is_easy
    @electronics_is_easy 10 років тому +10

    Лучше не пользоваться функцией eeprom_write_byte(); лучше пользоваться eeprom_update_byte(); Вторая функция в отличие от первой проверяет текущее значение в ячейке и если данные для записи в ячейке такие же которые надо записать, то запись в ячейку вообще не производится. Это экономит реcурс жизни ЕЕПРОМ.

    • @Bitmraz
      @Bitmraz 3 роки тому

      Эта функция есть в этой библиотеке? И могу ли я через неё записывать при самой первой записи? Или сначала надо выполнить eeprom_write_byte( ), а потом уже использовать eeprom_update_byte( )?

  • @ДмитроПерший
    @ДмитроПерший 7 років тому

    Подскажите, а можно ли в качестве аргумента в функцию записи передать адрес не в виде числа 300 или любого другого, а в шестнадцатеричном виде, скажем 0x00FD? С целью хранения больших чисел.

  • @Sborka_Electron
    @Sborka_Electron 9 років тому

    Здравствуйте, Александр! Я с начала не знал про эту библиотеку тупо с даташита сделал функции чтения записи и почемуто они не работают. хотя затем узнал про библиотеку она работает. Вот мне интересно почему через мои функции не работает. И за чего может не работать

  • @fordconversemodnaprodej5955
    @fordconversemodnaprodej5955 2 роки тому

    Доброго дня можна ка та изминить язик на приборке через EEPROM

  • @NIKOLAY_PSHONIA
    @NIKOLAY_PSHONIA 9 років тому

    Александр возникла проблемка почему ot=eeprom_read_byte(0x30+k); ошибка
    eeprom_write_byte((0x40+k), po); ошибка
    переношу с WINAVR -> AtmelSdudio ot, k, po, - unsigned char

    • @АлександрПисанец
      @АлександрПисанец  9 років тому

      Никола Пшоня А зачем вы указываете +K, там такое не прокатит.ua-cam.com/video/gh-LguCG1iY/v-deo.html

  • @alekskapitonov2738
    @alekskapitonov2738 Рік тому

    Большое спасибо

  • @IvanIvanov-z9f4i
    @IvanIvanov-z9f4i 9 років тому +1

    Здравствуйте. При работе в Atmel studio 6 в процессе отладки значения не заносятся в eeprom на стадии инициализации переменных, т.е. при объявлении переменной.В чем может таится причина?

    • @АлександрПисанец
      @АлександрПисанец  9 років тому

      +дмитрий кислов Даже не знаю чем вам помочь. Тяжело так подсказать, не видя происходящего

    • @СергейДоннер-р9к
      @СергейДоннер-р9к 8 років тому

      +дмитрий кислов столкнулся с такой же проблемой. Решение найдено? если да, то как исправить?

    • @IvanIvanov-z9f4i
      @IvanIvanov-z9f4i 8 років тому

      Сергей Доннер Если Вы проводите отладку в режиме "Simulator", то уберите галочку с "Preserve EEPROM" (Project->Properties, или Alt+F7). Но файл .eep и так сгенерируется, его можно открыть и посмотреть, что записалось.Если вы отлаживаете в железе, с помощью JTAGICE mkII, к примеру, и у Вас портятся данные, то тут иное решение.

    • @Alexcymantrene
      @Alexcymantrene 2 роки тому

      @@IvanIvanov-z9f4i огромное вам спасибо! я тоже над этим голову ломал

  • @иванрусев-ш5щ
    @иванрусев-ш5щ 7 років тому +1

    Спасибо я уже осилил EEPROM и для сохранения нужна кнопка иначе всегда будет писать я не программист я эксперементатор электрик

  • @olegnovikov8885
    @olegnovikov8885 6 років тому

    Здравствуйте! Подскажите пожалуйста бюджетную вариант для чтения и записи 93c76wp

  • @denial3874
    @denial3874 7 років тому

    Подскажите пожалуйста, почему у меня нет вкладки Watch ?

  • @ala8799
    @ala8799 6 років тому

    имеется прошивка для паяльника на атмега8 в хекс формате. Как её открыть чтобы иметь возможность отредактировать некоторые параметры (а именно задать нужный интервал времени ухода в сон и некоторые другие настройки)?
    Загружаю хекс файл через open file в атмел студио, оно, естественно, выглядит как хекс файл, а не так как у вас на видео. Подскажите что я делаю не так, я совсем нуб в этом, а откорректировать прошивочку очень надо!

    • @АлександрПисанец
      @АлександрПисанец  6 років тому

      НEX файл не получится отредактировать, это уже код для прошивки

    • @ala8799
      @ala8799 6 років тому

      а как-то конвертировать его для удобной работы нельзя?
      а в формате .bin можно отредактировать? Есть ещё и в этом формате прошивка.

    • @АлександрПисанец
      @АлександрПисанец  6 років тому

      не встречал таких программ

  • @mishagrigorovi4921
    @mishagrigorovi4921 10 років тому +1

    Александр, сделайте пожалуйста урок по подключению МК к USB. Будем очень признательны) Данная тема многих мучает.

    • @АлександрПисанец
      @АлександрПисанец  10 років тому

      misha grigorovi4 Самый простой способ использовать ST232CN и USART. Там особо
      и рассказывать нечего. А вот как программно реализовать USB на
      микроконтроллере, мне сложно будет объяснить. Тема сложная, много времени
      потребует. Врятли я сейчас за такое возмуся.

    • @electronics_is_easy
      @electronics_is_easy 10 років тому

      Александр Писанец
      Для подключения USB лучше использовать Atmega c аппаратным USB. Типа как 90USB162-16AU. Загрузку программы можно сразу через USB делать ну или через программатор, но тогда сразу загрузчик затрется.

  • @hieverybody359
    @hieverybody359 2 роки тому

    Вы учите как работать с готовой библиотекой?)

  • @vitalimitko5168
    @vitalimitko5168 9 років тому

    Александр, может Вы мне поможите?const unsigned int UPTEN_TEMP_MAX_EE EEMEM = 400; // 2 байта в EEEPROM
    volatile unsigned int UPTEN_TEMP_MAX; // 2 байта в RAM
    ....
    eeprom_write_word(&UPTEN_TEMP_MAX_EE, UPTEN_TEMP_MAX);Предупреждение: "passing argument 1 of '__eewr_word_m16' discards 'const' qualifier from pointer target type [enabled by default]"Как убрать?

  • @иванрусев-ш5щ
    @иванрусев-ш5щ 8 років тому

    можна волрс watch не сохраняет значение в программе а переходит на максимальное значение битов это же значение в memori EEPROM в чём проблема почему не получается?

  • @vova9962
    @vova9962 8 років тому

    У меня данные не инициируются при создании
    uint8_t a EEMEM = 0b00000000; или так 0xCC;
    в ячейке пишет ff
    Подскажите, почему так ?

  • @smolmaxmaxi6633
    @smolmaxmaxi6633 6 років тому

    Здравствуйте Александр, помогите пожалуйста. Почему у меня в студии 6,2 когда происходит инициализация uint_8t save8 EEMEM = 5; uint_16t save8 EEMEM =234; uint_32 save32 EEMEM = 10000; в окне memory1 значение по адресу 0х0000= 0 и остальные 0х0001 = 0xFF, 0х0002 =0xFF, 0х0003 =0xFF, 0х0004 =0xFF, 0х0005 =0xFF и т.д. не как у вас в видео.

    • @Alexcymantrene
      @Alexcymantrene 2 роки тому

      уберите галочку с "Preserve EEPROM"

  • @shizlgizI
    @shizlgizI 8 років тому

    Александр подскажите, как сохранить в EEPROM массив? Есть два массива например data_x [5] и data_y[5].
    Нужно чтобы в массив data_x по нажатию кнопки сохранялось значение АЦП в нуевую ячейку, в data_y произвольное число также в нулевую ячейку, в следующем шаге по нажатию кнопки в первую ячейку и т.д. В общем нужно в микроконтроллер по нажатию определенных клавиш в EEPROM сохранить 2 массива со значениями X,Y. По нажатию кнопки снова сохранить значения но уже в следующую ячейку массивов, это так сказать калибровка устройства, перед использованием. А затем нужно уже при работе устройства с этими значениями работать. Не могу понять алгоритм действий. Помогите пожалуйста.

    • @АлександрПисанец
      @АлександрПисанец  8 років тому

      +shizlgizI Это не тяжело, вам нужно работать с адресами памяти eeproma. При каждом входе в функцию по сохранению данных нужно инкрементировать адрес.
      eeprom_sav ()
      {
      eeprom_write_bute(адрес, данные Х)
      адрес++; //глобальная переменная
      eeprom_write_bute(адрес, данные Y)
      адрес++; //
      }
      Это если по простому обяснить.

    • @shizlgizI
      @shizlgizI 8 років тому

      Благодарю. Продолжаем. Правильно ли я понял, что адреса первых ячеек массивов вычисляются и устанавливаются вручную? Или есть способ получить адрес первой ячейки массива программно?

    • @АлександрПисанец
      @АлександрПисанец  8 років тому

      Не понял вопроса?

    • @shizlgizI
      @shizlgizI 8 років тому

      Ну т.е. для записи допустим нулевой ячейки массива в EEPROM, я объявляю массив в EEPROM, далее в Atmel Studio в окне watch смотрю первый адрес объявленного ранее массива, и далее этот адрес (например 20я ячейка) пишу уже в программный код, чтобы от этого адреса равному 20 заполнять массив данными функцией eeprom_write_word(20,X) далее 20+=2, и так далее. На случай если я изменю, или отменю некоторые переменные в EEPROM, то адреса массивов в памяти EEPROM изменяться, и в строке eeprom_write_word(20,X) нужно будет исправлять адрес вручную. Есть ли какие либо функции для получения адресов объявленных переменных, массивов в EEPROM, чтобы не исправлять адреса во всём коде на случай изменения адреса?

    • @АлександрПисанец
      @АлександрПисанец  8 років тому

      Чет как то за мудрено. Зачем вам отсчитывать 20 ячеек. Язык си тем и хорош что за вас все распределит в памяти. Или я чего то просто не понял ?

  • @MultiBarmaley
    @MultiBarmaley 4 роки тому

    Спасибо!

  • @sergiioliinyk6517
    @sergiioliinyk6517 10 років тому

    компилятор на эту запись eeprom_write_byte(adres, masiv [i]); сообщает следующий Warning passing argument 1 of '__eewr_byte_m64' from incompatible pointer type.
    Что нужно в коде поправить?

    • @АлександрПисанец
      @АлександрПисанец  10 років тому

      Все должно работать.

    • @sergiioliinyk6517
      @sergiioliinyk6517 10 років тому

      Александр Писанец
      Все работает. Хотелось узнать природу возникновения варнинга.

    • @АлександрПисанец
      @АлександрПисанец  10 років тому

      Я настоко не разбирался, разгребуся с делами, постораюся разобраться.

    • @alexpoweredbo
      @alexpoweredbo 9 років тому

      Возможно, я слегка опоздал с ответом. Но может кому пригодиться. У меня возникла та же проблема с предупреждениями. Немного подумав, я понял, что у меня не сходится размерность переменной, которой я читаю, и в которую записываю результат. То же предупреждение появляется, если я записываю при помощи eeprom_write_byte двубайтное число.

  • @иванрусев-ш5щ
    @иванрусев-ш5щ 7 років тому

    можна вопрос как с памяти еепрома записать в на лсд 16х02 через буфер?

    • @АлександрПисанец
      @АлександрПисанец  7 років тому

      И как вы себе представляете ответ )

    • @иванрусев-ш5щ
      @иванрусев-ш5щ 7 років тому

      я извеняюсь у меня просто с еепромом проблема я сделал меню или я неправильно прошиваю или я ни чего не понимаю.скорее всего второе.как прошивать еепром?отдельно? или вместе с hex.?
      вы профи я люитель только 2 года с нуля начал.Методом исключения я учусь.Хотите ответте хотите нет.
      /*
      * AVR_MENU.c
      *
      * Created: 18.03.2017 5:30:25
      * Author : User
      */
      #define F_CPU 8000000UL
      #include
      #include
      #include
      #include "lcd.h"
      #include
      #include
      #include
      //#include
      #define btn_minus (PINC&1

    • @АлександрПисанец
      @АлександрПисанец  7 років тому

      Епром отдельно прошивается. В Atmel Studio во вкладке где неx файл указывается, там же и епром есть.

    • @иванрусев-ш5щ
      @иванрусев-ш5щ 7 років тому

      понял спасибо за подсказку я благодарен вам вы для меня учител.Хоть мне 42 я учусь

    • @АлександрПисанец
      @АлександрПисанец  7 років тому

      Мне не намного меньше ) постоянно сам учусь.

  • @atlatl3033
    @atlatl3033 10 років тому

    a kak vsio eto proshit v kontroler atmega ne ponial flash otdelno proshivat s hex. a tam gde u nas biblioteka eeprom.h s failom eep. ??????

    • @АлександрПисанец
      @АлександрПисанец  10 років тому

      Работая с Atmel Studio и используя программатор отладчик все прошивается сразу. При использовании готового проекта, в котором применяется eeprom. Нужно прошивать отдельно. ua-cam.com/video/eHXXNkWcXBk/v-deo.html

  • @pilotm31
    @pilotm31 10 років тому

    Спасибо за видео. Объяснение доступно для понимания. Хотелось бы еще узнать об организации доступа к EEPROM извне контроллера (приложение для Windows/Linux/Android) через USB. Например для обмена данными приложения Windows и отладочной платы "ATMEGA32 ATMEL AVR + USB бутлоадер". Возможно есть какие-то готовые библиотеки?

    • @mishagrigorovi4921
      @mishagrigorovi4921 10 років тому

      есть, V-USB, но как с ней работать разобраться не могу.

    • @АлександрПисанец
      @АлександрПисанец  10 років тому

      К сожилению тут врятли чем помогу. Я не работал с таким небыло надобности.

    • @АлександрПисанец
      @АлександрПисанец  10 років тому

      Александр Писанец Возможно это видео поможит, неплохо обясняет работу USB ua-cam.com/video/M4tFkxPhxcc/v-deo.html

    • @pilotm31
      @pilotm31 10 років тому

      Александр Писанец Спасибо за видео, но пока что как-то уж слишком замудрено все. Буду потихоньку разбираться, если интересна тема - могу сюда отписываться со временем.

    • @АлександрПисанец
      @АлександрПисанец  10 років тому

      За мудрено это слабо сказано :)

  • @NIKOLAY_PSHONIA
    @NIKOLAY_PSHONIA 9 років тому

    Спасибо понял, и eeprom_write_byte((0x40, po) тоже не работает
    eeprom_write_byte((0x40, 27) работает
    надо только числа писать! у меня с EEPROM достает 16 значений на LCD - строка, теперь думаю как это сделать - СМОТРЮ ваши др. уроки. 27 менюшек все надо переписать...

  • @atlatl3033
    @atlatl3033 10 років тому

    spasibo bolshoe za otvet

  • @иванрусев-ш5щ
    @иванрусев-ш5щ 7 років тому

    я извеняюсь учител у меня не получается вывести на LCD16x02
    *
    * EEPROM_atmega 16.c
    *
    * Created: 10.04.2016 6:06:21
    * Author : User
    */
    #define F_CPU 8000000UL
    #include
    //#define save_16 EEMEM
    #include
    #include
    #include "lcd.h"
    #include
    #include
    unsigned int data,i,adres;
    unsigned char masiv[4]={100,150,200,250};
    char buf1[10];

    //uint8_t save8 EEMEM = 29;//размер в 1 байт
    uint16_t save16 EEMEM = 2600;// размер в 2 байта
    // uint32_t save32 EEMEM= 10000;//размер в 3 байта
    int main(void)
    {
    //buf1=eeprom_read_byte(& save8);//чтение 1 байта
    data=eeprom_read_word(& save16);// чтение 2 байт
    //data=eeprom_read_dword(& save32);//чтение 3 байт
    //data++;
    //eeprom_write_byte(& save8, data);//запись в память 1 байта
    //eeprom_write_byte(300,5 );//запись в память 1 байта
    eeprom_write_word(& save16,data);//запись в память2 байт
    //eeprom_write_dword(& save32, data);//запись в память 3 байт
    //char buf1[16];
    DDRB=0xFF;
    PORTB=0x00;
    lcd_init(LCD_DISP_ON);
    //lcd_clrscr();
    while (1)
    {
    lcd_clrscr();
    itoa(save16,buf1,10);
    //sprintf(buf1)
    //sprintf(buf1,"a=%4d",save16);
    lcd_puts(buf1);
    _delay_ms(50);
    //eeprom_write_word(& save16, data);//запись в память2 байт
    }
    }
    как записать 2600 с еер на лсд? дайте хоть куда идти? пожалуста вы же фахівець допоможіть будь ласка аматору. Я не прошу код может литературу ?

  • @ЕвгенийИнкогнито-б6ц
    @ЕвгенийИнкогнито-б6ц 10 років тому +1

    Я сразу дико извиняюсь - за уроки большое спасибо, объяснения доходчивые и ясные, мне очень помогают освоить программирование, разобраться во внутренней архитектуре AVR, но!
    Ухо режет - "оттУдова", "Ихние", "хОчете"...

    • @АлександрПисанец
      @АлександрПисанец  10 років тому +1

      Учту, исправлюсь :)

    • @Microname1000
      @Microname1000 9 років тому

      +Евгений Инкогнито меня позабавило "саве8". А если по сути - урок отличный !

  • @иванрусев-ш5щ
    @иванрусев-ш5щ 7 років тому

    вот эти LCD.C LCD.H помогите учител

  • @dmitriibannikovasx
    @dmitriibannikovasx 6 років тому

    4:34 написана функция)

  • @ПрограммированиеС
    @ПрограммированиеС 10 років тому +1

    да 4 байта :)
    Глаза так медленно 0_0

  • @ПавелГеворков-п2л
    @ПавелГеворков-п2л 5 років тому

    Как вы задолбали со своим ++

    • @АлександрПисанец
      @АлександрПисанец  5 років тому

      А чем не устраивает такая запись?

    • @ПавелГеворков-п2л
      @ПавелГеворков-п2л 5 років тому

      @@АлександрПисанец потому, что вы все выбираете, что попроще. И таких, как говна за баней. На каждом углу одно и тоже, причем не изящно, а тупо и прямо. Так может тупо и прямо, но хотя бы на аасемблере, а на ++ коротко, изящно, талантливо?! Как вы считаете?

    • @АлександрПисанец
      @АлександрПисанец  5 років тому

      @@ПавелГеворков-п2л Все очень быстро развивается, нужно быстро решать поставленные задачи и в этом помогает языки высокого уровня. На асемблере безусловно будет как вы говорите красиво, но затраты по времени написания кода требуется затратить много