Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 07.09.2011, 13:25  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Работа с еепром 24Схх Помогите разобраться

Добрый день уважаемые. Возникла такая проблема. Написал код. Вроди все работает в симуляторе при условии что пишу в еепром до 10байт
если пишу более 10байт то данные считываются не корректно... в чем это проблема? симулятор тупит? выкладываю полный проект.
сейчас сделал так: набираю значение пароля (якобы) копирую в переменную и отправляю в 24Схх а потом считываю и смотрю на индикаторе...


вот так я читаю и записываю в микросхему
Код:
/**************************************************  *************************************
+ ×èòàåì ÿ÷åéêó èç 24ñ02.
+  ïàðàìåòðàõ óêàçûâàåòñÿ àäðåñ ÷èòàåìîé ÿ÷åéêè.
+ Ôóíêöèÿ âîçâðàùàåò ïðî÷èòàíîå èç ÿ÷åéêè.
**************************************************  **************************************/
unsigned char eep_read(unsigned char address) {
unsigned char data;                    //ïåðåìåííàÿ äëÿ ïðî÷èòàíûõ äàííûõ
i2c_start();                           //ïîñûëàåì êîìàíäó "ñòàðò" â øèíó i2c
i2c_write(EEPROM_BUS_ADDRESS);         //ïîñûëàåì â øèíó àäðåñ óñòðîéñòâà
i2c_write(address);                    //ïîñûëàåì â øèíó àäðåñ ÷èòàåìîé ÿ÷åéêè
i2c_start();                           //ñíîâà ïîñûëàåì "ñòàðò" â øèíó
i2c_write(EEPROM_BUS_ADDRESS | 1);     //íåçíàþ çà÷åì íî áåç ýòîãî íå ðàáîòàåò
data=i2c_read(0);                      //ïðèíèìàåì äàííûå ñ ëèíè è ñîõðàíÿåì â ïåðåìåííóþ
i2c_stop();                            //ïîñûëàåì êîìàíäó "ñòîï"
return data;                           //âîçâðîùàåì çíà÷åíèå ïðî÷èòàíîãî
} 

/**************************************************  *************************************
+ Çàïèñü äàííûõ â ÿ÷åéêó 24ñ02.
+  ïàðàìåòðàõ óêàçûâàåòñÿ àäðåñ çàïèñûâàåìîé ÿ÷åéêè (adress).
+ Òàêæå óêàçóåì â ïàðàìåòðàõ äàííûå êîòîðûå íàäî çàïèñàòü â ÿ÷åéêó.
**************************************************  **************************************/
void eep_write(unsigned char address, unsigned char data) {   
i2c_start();                           //ïîñûëàåì êîìàíäó "ñòàðò" â øèíó i2c
i2c_write(EEPROM_BUS_ADDRESS);         //ïîñûëàåì â øèíó àäðåñ óñòðîéñòâà
i2c_write(address);                    //ïîñûëàåì â øèíó àäðåñ çàïèñûâàåìîé ÿ÷åéêè
i2c_write(data);                       //ïîñûëàåì äàííûå äëÿ çàïèñè
i2c_stop();                            //ïîñûëàåì êîìàíäó "ñòîï"
} 

void epp_save() { //Ñîõðàíåíèå äàííûõ â ååïðîì 



   
   
   
    eep_write(0x01,temp1); // Çàïèñü äàííûõ òåìï â Ååïðîì
    eep_write(0x02,temp2);
    eep_write(0x03,temp3); 
    eep_write(0x04,temp4);
    eep_write(0x05,temp5);
    eep_write(0x06,temp6);
   
    
    eep_write(0x07,term_set_LR); 
    eep_write(0x08,term_set_P); 
    eep_write(0x09,delta_LR);
    eep_write(0x0A,delta_P);
    eep_write(0x0B,term_max_LR); 
    eep_write(0x0C,term_max_P);
    eep_write(0x0D,term_max_delta_LR);
    eep_write(0x0E,term_max_delta_P);
    
    eep_write(0x0F,error_calendar_current0);
    
    eep_write(0x10,EPP_SING);// ñèãíàòóðà ñîîòâåòñòâèÿ Ååïðîì
    
    eep_write(0x11,error_calendar_current1);
    
    eep_write(0x12,error_calendar_volt_out0);
    eep_write(0x13,error_calendar_volt_out1);
    
    eep_write(0x14,error_calendar_volt_in0);
    eep_write(0x15,error_calendar_volt_in1);
    
    eep_write(0x16,error_calendar_temperature_left0);
    eep_write(0x17,error_calendar_temperature_left1);
    
    eep_write(0x18,error_calendar_temperature_right0); 
    eep_write(0x19,error_calendar_temperature_right1);
    
    eep_write(0x1A,error_calendar_temperature_P0);
    eep_write(0x1B,error_calendar_temperature_P1);
    
    eep_write(0x1C,error_temperature_sensor0);
    eep_write(0x1D,error_temperature_sensor1);
    
    eep_write(0x1E,control_pass0);
    eep_write(0x1F,control_pass1);
    eep_write(0x20,control_pass2);
    eep_write(0x21,control_pass3);
    //eep_write(0x22,control_pass0);
    //eep_write(0x23,control_pass3);
   
} 

void epp_load() { //Çàãðóçêà äàííûõ ñ ååïðîì
        
     

    if (eep_read(0x10)==EPP_SING) { //Åñëè ñèãíàòóðà ïðÿâåëüíàÿá ÷èòàåì äàííûå ñ ååïðîì 
        temp1=eep_read(0x01); // çàãðóçêà èç ååïðîì ïðè âûõîäå èç ìåíþ
        temp2=eep_read(0x02);
        temp3=eep_read(0x03);
        temp4=eep_read(0x04); // óïðàâëåíèå ðåæèìàìè
        temp5=eep_read(0x05);
        temp6=eep_read(0x06);
        
        term_set_LR=eep_read(0x07); // ÷èòàåì óñòàíîâëåííóþ òåìïåðàòóðó
        term_set_P=eep_read(0x08);  // ÷èòàåì óñòàíîâëåííóþ òåìïåðàòóðó
        delta_LR=eep_read(0x09);    // ÷èòàåì äåëüòó
        delta_P=eep_read(0x0A);     // ÷èòàåì äåëüòó
        term_max_LR=eep_read(0x0B); // ÷èòàåì óñòàíîâëåííóþ òåìïåðàòóðó
        term_max_P=eep_read(0x0C);  // ÷èòàåì óñòàíîâëåííóþ òåìïåðàòóðó
        term_max_delta_LR=eep_read(0x0D);  // ÷èòàåì äåëüòó
        term_max_delta_P=eep_read(0x0E);   // ÷èòàåì äåëüòó  
        
        
        error_calendar_current0 = eep_read(0x0F); // ÷èòàåì êîëè÷åñòâî îøèáîê ïî òîêó â ïåðâîì áàéòå
        error_calendar_current1 = eep_read(0x11); // ÷èòàåì êîëè÷åñòâî îøèáîê ïî òîêó âî âòîðîì áàéòå
        
        error_calendar_volt_out0 = eep_read(0x12); // ÷èòàåì êîëè÷åñòâî îøèáîê ïî âûõîäíîìó íàïðÿæåíèþ â ïåðâîì áàéòå
        error_calendar_volt_out1 = eep_read(0x13); // ÷èòàåì êîëè÷åñòâî îøèáîê ïî âûõîäíîìó íàïðÿæåíèþ âî âòîðîì áàéòå
        
        error_calendar_volt_in0 = eep_read(0x14);  // ÷èòàåì êîëè÷åñòâî îøèáîê ïî íàïðÿæåíèþ íà âõîäå â ïåðâîì áàéòå
        error_calendar_volt_in1 = eep_read(0x15);  // ÷èòàåì êîëè÷åñòâî îøèáîê ïî íàïðÿæåíèþ íà âõîäå âî âòîðîì áàéòå
        
        
        
        error_calendar_temperature_left0 = eep_read(0x16);
        error_calendar_temperature_left1 = eep_read(0x17);
        
        error_calendar_temperature_right0 = eep_read(0x18);
        error_calendar_temperature_right1 = eep_read(0x19);
        
        error_calendar_temperature_P0 = eep_read(0x1A);
        error_calendar_temperature_P1 = eep_read(0x1B); 
        
        error_temperature_sensor0 = eep_read(0x1C); 
        error_temperature_sensor1 = eep_read(0x1D);
        
        control_pass0 = eep_read(0x1E);
        control_pass1 = eep_read(0x1F);
        control_pass2 = eep_read(0x20);
        control_pass3 = eep_read(0x21); 
        //control_pass0 = eep_read(0x22);
        //control_pass3 = eep_read(0x23);

   }else{
        temp1=1; // åñëè ñèãíàòóðà áèòàÿ 
        temp2=1; // ãðóçèì åäèíèöè.
        temp3=1;
        temp4=1;
        temp5=1;
        temp6=1;
       
        term_set_LR=0; // ÷èòàåì óñòàíîâëåííóþ òåìïåðàòóðó
        term_set_P=0;  // ÷èòàåì óñòàíîâëåííóþ òåìïåðàòóðó
        delta_LR=0;    // ÷èòàåì äåëüòó
        delta_P=0;     // ÷èòàåì äåëüòó
        term_max_LR=0; // ÷èòàåì óñòàíîâëåííóþ òåìïåðàòóðó
        term_max_P=0;  // ÷èòàåì óñòàíîâëåííóþ òåìïåðàòóðó
        term_max_delta_LR=0;  // ÷èòàåì äåëüòó
        term_max_delta_P=0;   // ÷èòàåì äåëüòó  
        
        
        error_calendar_current0=0; // ÷èòàåì êîëè÷åñòâî îøèáîê ïî òîêó â ïåðâîì áàéòå
        error_calendar_current1=0; // ÷èòàåì êîëè÷åñòâî îøèáîê ïî òîêó âî âòîðîì áàéòå
        
        error_calendar_volt_out0=0; // ÷èòàåì êîëè÷åñòâî îøèáîê ïî âûõîäíîìó íàïðÿæåíèþ â ïåðâîì áàéòå
        error_calendar_volt_out1=0; // ÷èòàåì êîëè÷åñòâî îøèáîê ïî âûõîäíîìó íàïðÿæåíèþ âî âòîðîì áàéòå
        
        error_calendar_volt_in0=0;  // ÷èòàåì êîëè÷åñòâî îøèáîê ïî íàïðÿæåíèþ íà âõîäå â ïåðâîì áàéòå
        error_calendar_volt_in1=0;  // ÷èòàåì êîëè÷åñòâî îøèáîê ïî íàïðÿæåíèþ íà âõîäå âî âòîðîì áàéòå
        
        
        
        error_calendar_temperature_left0=0;
        error_calendar_temperature_left1=0;
        
        error_calendar_temperature_right0=0;
        error_calendar_temperature_right1=0;
        
        error_calendar_temperature_P0=0;
        error_calendar_temperature_P1=0; 
        
        error_temperature_sensor0=0;
        error_temperature_sensor1=0;
        
        control_pass0=0;
        control_pass1=0;
        control_pass2=0;
        control_pass3=0;
        
    }  
}
вот так отправляю данные и потом смотрю

Код:
void pass()
{

 switch(a)
 {
  case 0:
        if (BTN_PLUS==0 && flags_button==0){ pass3++; flags_button=1; timer_pass=0; }
        
        if (BTN_MINUS==0 && flags_button==0){ pass3--; flags_button=1; timer_pass=0; }
        if (BTN_MENU==0 && flags_button==0) { a=1; flags_button=1; timer_pass=0; }
        if (BTN_MENU & BTN_PLUS & BTN_MINUS) flags_button=0;
        
        if (pass3 › 9 && pass3 ‹ 20) pass3 = 0;
        if (pass3 › 250) pass3 = 9;
        
        if (timer_pass ‹ 10)
         {
          led_buff[0]=led_table[19]; //13   
          led_buff[1]=led_table[13];
          led_buff[2]=led_table[pass3]; 
          led_buff[3]=led_table[11]; //13  
          led_buff[4]=led_table[11];
          led_buff[5]=led_table[11];
         
         } else {
         
          led_buff[0]=led_table[19]; //13   
          led_buff[1]=led_table[13];
          led_buff[2]=led_table[10]; 
          led_buff[3]=led_table[11]; //13  
          led_buff[4]=led_table[11];
          led_buff[5]=led_table[11];
         
         }
         
         if (++timer_pass › 20)
         {
          timer_pass=0;
         }
  break;
  case 1:
        if (BTN_PLUS==0 && flags_button==0) { pass2++; flags_button=1; timer_pass=0;}
        if (BTN_MINUS==0 && flags_button==0){ pass2--; flags_button=1; timer_pass=0; }
        if (BTN_MENU==0 && flags_button==0){ a=2; flags_button=1; timer_pass=0;}
        if (BTN_MENU & BTN_PLUS & BTN_MINUS) flags_button=0;
        
        if (pass2 › 9 && pass2 ‹ 20) pass2 = 0;
        if (pass2 › 250) pass2 = 9;
        
         if (timer_pass ‹ 10)
         {
          led_buff[0]=led_table[19]; //13   
          led_buff[1]=led_table[13];
          led_buff[2]=led_table[11]; 
          led_buff[3]=led_table[pass2]; //13  
          led_buff[4]=led_table[11];
          led_buff[5]=led_table[11];
         
         } else {
         
          led_buff[0]=led_table[19]; //13   
          led_buff[1]=led_table[13];
          led_buff[2]=led_table[11]; 
          led_buff[3]=led_table[10]; //13  
          led_buff[4]=led_table[11];
          led_buff[5]=led_table[11];
         
         }
         
         if (++timer_pass › 20)
         {
          timer_pass=0;
         }
  break;
  case 2:
        if (BTN_PLUS==0 && flags_button==0) { pass1++; flags_button=1; timer_pass=0; }
        if (BTN_MINUS==0 && flags_button==0) { pass1--; flags_button=1; timer_pass=0;}
        if (BTN_MENU==0 && flags_button==0){ a=3; flags_button=1; timer_pass=0; }
        if (BTN_MENU & BTN_PLUS & BTN_MINUS) flags_button=0;
        
        if (pass1 › 9 && pass1 ‹ 20) pass1 = 0;
        if (pass1 › 250) pass1 = 9;
        
         if (timer_pass ‹ 10)
         {
          led_buff[0]=led_table[19]; //13   
          led_buff[1]=led_table[13];
          led_buff[2]=led_table[11]; 
          led_buff[3]=led_table[11]; //13  
          led_buff[4]=led_table[pass1];
          led_buff[5]=led_table[11];
         
         } else {
         
          led_buff[0]=led_table[19]; //13   
          led_buff[1]=led_table[13];
          led_buff[2]=led_table[11]; 
          led_buff[3]=led_table[11]; //13  
          led_buff[4]=led_table[10];
          led_buff[5]=led_table[11];
         
         }
         
         if (++timer_pass › 20)
         {
          timer_pass=0;
         }
  break;
  case 3:
        if (BTN_PLUS==0 && flags_button==0){ pass0++; flags_button=1; timer_pass=0;}
        if (BTN_MINUS==0 && flags_button==0){ pass0--; flags_button=1; timer_pass=0;}
        if (BTN_MENU==0 && flags_button==0){ a=0; flags_button=1; timer_pass=0; }
        if (BTN_MENU & BTN_PLUS & BTN_MINUS) flags_button=0;
        
        if (pass0 › 9 && pass0 ‹ 20) pass0 = 0;
        if (pass0 › 250) pass0 = 9;
        
         if (timer_pass ‹ 10)
         {
          led_buff[0]=led_table[19]; //13   
          led_buff[1]=led_table[13];
          led_buff[2]=led_table[11]; 
          led_buff[3]=led_table[11]; //13  
          led_buff[4]=led_table[11];
          led_buff[5]=led_table[pass0];
         
         } else {
         
          led_buff[0]=led_table[19]; //13   
          led_buff[1]=led_table[13];
          led_buff[2]=led_table[11]; 
          led_buff[3]=led_table[11]; //13  
          led_buff[4]=led_table[11];
          led_buff[5]=led_table[10];
         
         }
         
         if (++timer_pass › 20)
         {
          timer_pass=0;
         }
  break;
  case 4:
       
          led_buff[5]=led_table[control_pass0]; //13   
          led_buff[4]=led_table[control_pass1];
          led_buff[3]=led_table[control_pass2]; 
          led_buff[2]=led_table[control_pass3]; //13  
          led_buff[1]=led_table[10];
          led_buff[0]=led_table[10];
  
     while(b)
     {  
       epp_load();
       b--;
     }
  
  break;
 } 
 
 
  if (BTN_PLUS==0 && BTN_MINUS==0)
 {
  control_pass0 = pass0;
  control_pass1 = pass1;
  control_pass2 = pass2;
  control_pass3 = pass3;
  timer_eep=100;
  a=4;
  b=1;
  flags_button=1;
  }
  
  if (BTN_PLUS & BTN_MINUS & BTN_MENU)
  {
   flags_button=0;
  }
  
  if (BTN_PLUS==0 & a==4 & flags_button==0)
  {
   flags_button=1;
   a=0;
  }
  
          
 
 
}
Вложения:
Тип файла: rar Atmega128 AMPL самая свежая версия_.rar (414.6 Кб, 47 просмотров)
Реклама:

Последний раз редактировалось artyomugr; 07.09.2011 в 13:54.
artyomugr вне форума  
Непрочитано 07.09.2011, 13:47  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Работа с еепром 24Схх Помогите разобраться

Какая именно 24с? В младшие за раз пишется только 8 байт, читается неограниченно вся память по кольцу
niXto вне форума  
Непрочитано 07.09.2011, 13:51  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Работа с еепром 24Схх Помогите разобраться

пробую 24с02,24с01,24с04 все так себя ведут.
Так я помоему пишу по байтово, должно по идее работать...
artyomugr вне форума  
Непрочитано 07.09.2011, 14:05  
heady69
Прописка
 
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
heady69 на пути к лучшему
По умолчанию Re: Работа с еепром 24Схх Помогите разобраться

Сообщение от artyomugr Посмотреть сообщение
пробую 24с02,24с01,24с04 все так себя ведут.
Так я помоему пишу по байтово, должно по идее работать...
После записи страницы (для 24с02== 8 байт 24с04\08 ==16 байт) сделай задержку на запись ~10mS.Если побайтово-лучше после каждого байта.В твоей программе лучше использовать постраничную запись т.к. пишеш много за один раз. Установи EEPROM_BUS_ADDRESS, адрес начала записи,потом просто отпрать от ‹=8 или ‹=16 (в зависимости от типа микросхемы)данных,потом stop- микросхема начнет запись(~10mS).
При постраничной записи лучше выравнивать адрес записываемых данных с началом страницы.

Последний раз редактировалось heady69; 07.09.2011 в 14:34.
heady69 вне форума  
Непрочитано 07.09.2011, 16:42  
petr5555
Почётный гражданин KAZUS.RU
 
Регистрация: 16.02.2010
Сообщений: 1,407
Сказал спасибо: 0
Сказали Спасибо 128 раз(а) в 114 сообщении(ях)
petr5555 на пути к лучшему
По умолчанию Re: Работа с еепром 24Схх Помогите разобраться

Не все схемы пишутся постранично.
Если писать побайтно, то обязательно
надо после записи байта делать задержку 10 mS.
petr5555 вне форума  
Непрочитано 07.09.2011, 17:45  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Работа с еепром 24Схх Помогите разобраться

Можно и не делать, микросхема просто не будет отзываться (9й бит) пока не запишется
niXto вне форума  
Непрочитано 08.09.2011, 12:06  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Работа с еепром 24Схх Помогите разобраться

Вчера весь вечер сидел над кодом.... перепробовал все. Не корректно сохраняются данные в еепром, или не правильно читаются, и при каждой новой симуляции данные которые не верные меняются. Например сначала не сохранялся первый байт и третий , потом второй и третий и т.д.... я в шоке. Где мне можно подробно на русском почитать о еепром 24сХХ ? либо простой пример чтения записи в микросхему большого обьема данных.
С ув. Артем
artyomugr вне форума  
Непрочитано 08.09.2011, 12:55  
heady69
Прописка
 
Регистрация: 25.09.2009
Адрес: Ivanovo
Сообщений: 156
Сказал спасибо: 3
Сказали Спасибо 67 раз(а) в 60 сообщении(ях)
heady69 на пути к лучшему
По умолчанию Re: Работа с еепром 24Схх Помогите разобраться

Код:
/*
**************************************************  *
*
*               I2C Library
* постраничная запись\чтение 24c16
**************************************************  **
*/
#include ‹INTRINS.H›
#include "I2C_LIB.H"
#include "lcd_lib.h"

bit i2c_busy, no_ack, bus_fault;

unsigned char data iic_buffer [16];

unsigned char bdata a;

sbit LSB=a ^ 0;
sbit MSB=a ^ 7;


void main(void) 
{

	unsigned char chip_adress ;	
	unsigned char page_number;

	lcd_init();

	

	chip_adress =0xA0;	
	page_number =1;

	iic_buffer[0]='S';
	iic_buffer[7]='L';
	iic_buffer[15]='A';


	write_I2C_page (chip_adress,page_number,iic_buffer);

	iic_buffer[0]=0;
	iic_buffer[7]=0;
	iic_buffer[15]=0;


	read_I2C_page (chip_adress,page_number,iic_buffer);

	lcd_putchar( iic_buffer[15] );


	while (1);	
	 }

/*
*************************************
* Delay for write SEEPROM
*************************************
*/
void WR_Delay(unsigned char j)
{
	unsigned char i;
	for(;j›0;j--)
		{
		for(i=0;i‹125;i++)
		{;}
	}
}

/*
************************************
*       Sending Stop Condition
************************************
*/

void send_stop()
{
	sda = 0;
	scl = 1;
	HOLD;
	sda = 1;
	i2c_busy = 0;
}

/*
************************************
*      I2C Start Condition
*
*     NOTE: need to use it.
************************************
*/

void master(unsigned char slave_addr)
{
	i2c_busy = 1;
	no_ack = 0;
	bus_fault = 0;
	sda =1;
	scl =1;

	if(!scl||!sda)
		bus_fault = 1;
	else
	{
		sda = 0;  //start condition
		HOLD;
		scl = 0;
		HOLD;
		send_byte(slave_addr);
	}
}

/*
************************************
*     Sending a byte on I2C Bus
************************************
*/

void send_byte(unsigned char i2c_data)
{
	unsigned char i;
	a=i2c_data;
	for(i=0;i‹8;i++)
	{
		scl=0;
		HOLD;
		sda=MSB;
		a‹‹=1;
		_nop_();
		scl=1;
		HOLD;
		scl=0;
	}
	sda = 1;
	scl = 1;
	HOLD;
	if(!sda)
		scl = 0;
	else
	{
		no_ack = 1;
	 }
		HOLD;
}

/*
**************************************************  **
*      Write page  data on I2C bus
*   записывает страницу (16 байт)  из буфера 
*	Принимает :  unsigned char slave_add-адрес микросхемы
*   			 unsigned char page_number-номер страницы
				 unsigned char* адрес буфера данных	
*   Возвращает: ничего   
*
**************************************************  ***
*/
			
void write_I2C_page(unsigned char slave_add, unsigned char page_number,unsigned char *write_buff)
{
	unsigned int sub_add;	 	//адрес данных в микросхеме
	unsigned char bytes_count;
	unsigned char i;

	sub_add =  16 * page_number;	//считаем адрес в seeprom

	i = sub_add ››8;
	i ‹‹=1;						//сдвигаем на r/w bit
	slave_add |= i;				//составляем slave_add+старший байт адреса
	master(slave_add);		   	//start
	send_byte(sub_add);			//младший

	if(no_ack)
		send_stop();
	else
	{
		for(bytes_count =0;bytes_count ‹16;bytes_count++)
		{
			send_byte(*write_buff++);
			if(no_ack)
				break;
		}
		send_stop();
		WR_Delay(20); //need for SEEPROM
	}
}

/*
*********************************************
*      Recieve a single byte from I2C Bus
*
*    Note: if you are going to recieve
*          a single byte then the passing
*          argument should be 1.
*
*********************************************
*/

unsigned char recv_byte(unsigned char cnt) {

	unsigned char i,rcv_data;
		sda =1;
		HOLD;
		for(i=0;i‹8;i++) {
			HOLD;
			scl=1;
			HOLD;
			LSB=sda;
			if(i‹7)
				a‹‹=1;
			HOLD;
			scl=0;
			HOLD;	
		}
	if(cnt==1)
		sda = 1;
	else
		sda = 0;
	scl =1;
	HOLD;
	scl = 0;
/*	sda = 1; don't work with I2C simul!! possible bug in simulation !? */
	HOLD;
	rcv_data = a;  
	return rcv_data;
}

/*
**************************************************  **
*     Read page data on I2C bus
*   читает страницу (16 байт) в буфер 
*	Принимает :  unsigned char slave_add-адрес микросхемы
*   			 unsigned char page_number-номер страницы
				 unsigned char* адрес буфера данных	
*   Возвращает: ничего   
**************************************************  ***
*/

void read_I2C_page(unsigned char slave_add, unsigned char page_number, unsigned char *read_buff)
{
	unsigned int sub_add;
	unsigned char byte_count;
	unsigned char i;
	sub_add = 16 * page_number;	 //считаем адрес в seeprom
	sda = 1;
	scl = 1;
	i = sub_add ››8;
	i ‹‹=1;						//сдвигаем на r/w bit
	slave_add |= i;				//составляем slave_add+старший байт адреса
	master(slave_add);		   	//start
	send_byte(sub_add);			//младший
	sda = 1;
	scl = 1;
	master(slave_add+1);
	if(no_ack)
	{
		send_stop();
		goto exit;
	}
	for(byte_count =0;byte_count ‹16;byte_count++)	{
		read_buff[byte_count]=recv_byte(16-byte_count);
		}
	send_stop();
	exit:;
}
heady69 вне форума  
Непрочитано 08.09.2011, 13:20  
artyomugr
Вид на жительство
 
Аватар для artyomugr
 
Регистрация: 05.04.2008
Адрес: Украина, Ахтырка
Сообщений: 302
Сказал спасибо: 148
Сказали Спасибо 31 раз(а) в 30 сообщении(ях)
artyomugr на пути к лучшему
По умолчанию Re: Работа с еепром 24Схх Помогите разобраться

Спасибо Вам большое за код. Но чтото я его плохо понимаю...
Я недавно начал изучать программирование, по этому пока слабенько умею читать код...
Вы не могли бы взглянуть на мой исходник, что я не так делаю... почему код не работает так как надо? Все таки хочу писать и читать по байтово мне как новичку проще понимать код
С ув. Артем
artyomugr вне форума  
Непрочитано 08.09.2011, 13:52  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,801
Сказал спасибо: 2,913
Сказали Спасибо 3,122 раз(а) в 2,112 сообщении(ях)
ForcePoint на пути к лучшему
Плохо Re: Работа с еепром 24Схх Помогите разобраться

Если хотите, что-бы ошибку нашли в Вашем коде, то его и следовало-бы привести. Т.е. собственно eep_write и eep_read вместо всей этой байды с кривыми каментами в пером посте.
ForcePoint вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с микроконтроллером igor140329 Микроконтроллеры, АЦП, память и т.д 7 07.03.2011 03:27
Немецкая схемотехника. Помогите разобраться Luzkov TTL и CMOS логика 23 05.01.2011 11:13
[Решено] Помогите разобраться barbuss Proteus 2 26.10.2010 23:45
Помогите разобраться ,АЦП Тину 13, что то не так... Botan Микроконтроллеры, АЦП, память и т.д 2 14.09.2010 18:31
Помогите разобраться с транзисторами в Proteus`е EsterniTY Proteus 2 05.08.2004 00:18


Часовой пояс GMT +4, время: 03:28.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot