Програма керування енергонезалежної памяті AT24C32

Міністерство освіти і науки України
Національний технічний університет
“Харківський політехнічний інститут”
Кафедра “Обчислювальна техніка та програмування”
Альбом документів курсового проекту
на тему:
Програма керування енергонезалежної пам’яті AT24C32
з дисципліни:
“Периферійні пристрої ”
xxxx.07126.008 ДКП
Керівник проекту____________ ()
«___» ____________ 2009р.
Виконавець____________ ( )
«___» ____________ 2009p.
Харків 2009р.
Анотація
У даному курсовому проекті виконана розробка програми керування пристроєм для читання/записування енергонезалежної пам’яті AT24C32 через LPT-порт ПК з навчальної дисципліни “Периферійні пристрої”. У пояснювальній записці приведені структурна схема системи та таблиця приєднання мікросхеми AT24C32 до порту LPTпорту. Розроблені алгоритми та підпрограми читання, записування байту, забезпечена можливість демонстрації виконання цих команд пристрою.
Аннотация
В данном курсовом проекте выполнена разработка программы управления устройством для чтения/записи энергонезависимой памяти AT24C32 через LPT-порт ПК по курсу «Переферийные устройства». В пояснительной записке приведены структурная схема системы и таблица присоединения микросхемы AT24C32 к LPTпорту. Разработаны алгоритмы и подпрограммы чтения, записи байта, обеспечена возможность демонстрации выполнения этих команд устройства.
The Annotation.
In this project was made program of controlling read/write procedures electrically erasable memory microchip AT24C32above LPT port. In report there is structure scheme and table connections microchip AT24C32to LPT port. Also was made algorithms of next programs: read, write,there is possibility of demonstrations this device commands.
Формат
Зона
ПОзиція
Позначення
Найменування
Кіл.
Примітка

Документація загальна

А4

КІТ36.07126.008 ТЗ
Техничне завдання
2

A4

КІТ36.07126.008 П3
Пояснювальна записка
19

A4

КІТ36.07126.008 Е1
Схема електрична структурна
1

A4

КІТ36.07126.008 Е3
Схема електрична принципова
1

–PAGE_BREAK–

МІНІСТЕРСТВО НАУКИ І ОСВІТИ УКРАІНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра «ОБЧИСЛЮВАЛЬНА ТЕХНІКА та ПРОГРАМУВАННЯ»
ЗАТВЕРДЖЕНО
Завідуючий кафедрою ОТП
__________ (Домнін Ф.А.)
«____» __________ 2009р.
Програма керування енергонезалежної
пам’яті AT24C32
Технічне завдання
КІТ36.07126.008 ТЗ
Керівник проекту
_____ (Даніленко М. В.)
«___» ____________ 2009р.
Виконавець
_________ (Ладенко М.І.)    продолжение
–PAGE_BREAK–
«___» ____________ 2009р.
Харків 2009 р.
ТЕХНІЧНЕ ЗАВДАННЯ
1. Найменування й область застосування
1.1 Програма керування енергонезалежної пам’яті AT24C32.
1.2 Область застосування – найчастіше для пересувного обладнання та обладнання з аварійним батарейнім живленням.
2. Склад виробу, технічні характеристики і рекомендації.
2.1 Вивчити організацію часових характеристик мікросхеми AT24C32з висновком щодо придатності LPT-порту.
2.2 Розробити алгоритми та тексти підпрограм виконання наступних команд: читання, запису даних.
2.3 Розробити програму демонстрації виконання команд та продемонструвати її викладачеві.
2.4 Розробити текстові документи проекту та оформити звіт.
3. Перелік документів:
3.1 Відомість проекту.
3.2 Технічне завдання.
3.3 Пояснювальна записка.
3.4 Схема електрична структурна – Е1.
3.5 Схема електрична принципова – Е3.
МІНІСТЕРСТВО НАУКИ І ОСВІТИ УКРАІНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра «ОБЧИСЛЮВАЛЬНА ТЕХНІКА та ПРОГРАМУВАННЯ»
ЗАТВЕРДЖЕНО
Завідуючий кафедрою ОТП
__________ (Домнін Ф.А.)
«____» __________ 2009р.
Програма керування енергонезалежної
пам’яті AT24C32
Пояснювальна записка
КІТ36.07126.008 ПЗ
Керівник проекту
_____ (Даніленко М. В.)
«___» ____________ 2009р.
Виконавець
_________ (Ладенко М.І.)
«___» ____________ 2009р.
Харків 2009 р.
РЕФЕРАТ
Пояснювальна записка об’ємом 19 листів. У пояснювальній записці надано 2 таблиці, 4 схеми, використано 5 джерел літератури.
У даному курсовому проекті виконана розробка програми керування пристроєм длячитання/записування енергонезалежної пам’яті AT24C32 через LPT-порт ПК з навчальної дисципліни “Периферійні пристрої”. У пояснювальній записці приведені структурна схема системи та таблиця приєднання мікросхеми AT24C32 до порту LPTпорту. Розроблені алгоритми та підпрограми читання, записування даних забезпечена можливість демонстрації виконання цих команд пристрою.
Зміст
Вступ
1. Мета проекту
2. Опис запропонованого технічного рішення
3. Опис та часові діаграми команд мікросхеми AT24C32
4. Опис та блок-схеми програми та підпрограм, що обслуговує пристрій
5. Вибір середовища програмування та розробка програми
Висновок
Список джерел інформації
Додаток А Текст програми
Додаток Б Таблиця приєднання мікросхеми AT24C32 до порту LPTпорту
Вступ
Шина I2Cшироко використається в побутовій електроніці, передачі даних і промисловій електроніці. Розроблена фірмою Phіlіps проста двохнаправлена 2-провідна шина для ефективного керування та взаємодії різних блоків телевізорів, вона стала використовуватись для зв’язку між собою однокристальних мікроконтролерів, РКИ-індикаторів, портів вводу-виводу, мікросхем пам’яті (особливо энергонезалежної), аналого-цифрових і цифро-аналогових перетворюювачах ланцюгах цифрового настроювання, DTMF кодеров і декодерів, годинників реального часу й т.д.
У цей час, асортименти мікросхем із шиною I2Cтільки однієї фірми Phіlіps становить більше чим 150 КМОП і біполярних приборів, а в області енергонезалежної пам’яті середньої ємності (від сотень байт до десятків кілобайт) вона стала стандартом де-факто (серії 24XXX фірм Mіcrochіp, Atmel, і ін.)
Шина I2Cявляє собою концепцію, що вирішує багато проблем інтерфейсу, з якими зіштовхуються при проектуванні різних апаратів, і має наступні плюси:
— Тільки дві лінії — послідовна лінія даних (SDA) і послідовна лінія синхронізації (SCL)
— Кожний елемент, з’єднаний із шиною є програмно-адресуемим своєю унікальною адресою. При цьому відносини між ними можуть бути побудовані на простому принципі master/slave або ж може бути побудована multі-master система.
— Це дійсна шина, з можливістю роботи в multі-master середовищу, включаючи перевірку на перетинання й арбітраж.
— Послідовна, 8-розрядна двунаправленная передача даних може проводитися зі швидкістю від 0 до 100 kbіt/s у стандартному режимі або до 400 kbіt/s у швидкісному режимі (не для всіх типів мікросхем). При реалізації власних пристроїв можливі застосування й більше високих швидкостей при збереженні ідеології шини I2C.
— Фільтрація сигналів усередині мікросхем забезпечує нечутливість до викидів на лінії шини даних.
— Число пристроїв, які можуть бути з’єднані однією шиною, обмежено тільки максимальною ємністю шини 400 pF.
1. Мета проекту
Ознайомитися з принципами роботи наступних команд мікросхеми AT24C32: читання, запису даних. Розробити програму, яка забезпечить можливість демонстрації цих команд.
2. Опис запропонованого технічного рішення
Структурна схема системи наведена у Додатку А. Для роботи з мікросхемою AT24C32ми використовуємо LPTпорт ( за базовою адресою 378Н). Вихід мікросхеми SСL ми подаємо на регістр даних (DRза адресою 378H) до розряду DR0, вихід мікросхеми SDА ми подаємо на регістр даних до розряду CR0. Три (DR3, DR4, DR5) розряди регістру даних ми використовуємо для подачі живлення на мікросхему. Таблиця приєднання мікросхеми AT24C32до порту LPTпорту наведена у Додатку Б.
3. Опис та часові діаграми команд мікросхеми 24LC08В
Команда читання (RANDOM_READ) – це команда читання даних, що дозволяє читати дані випадковим способомз будь-якої ділянки пам’яті. Для організації цієї команди необхідно за допомогою надіслання певної комбінації кодів( так, як показано на рисунку 3.1 ) задати адресу та блок пам’яті звідки ми збираємося читати дані.
/>
Рисунок 3.1 Часова діаграма команди читання
Команда читання (CURRENT_ADDRESS_READ) – це команда читання даних, що дозволяє читати дані з адреси останнього слова доступу збільшеного на 1. Для організації цієї команди необхідно за допомогою надіслання певної комбінації кодів( так, як показано на рисунку 3.1 ) задати адресу та блок пам’яті звідки ми збираємося читати дані.    продолжение
–PAGE_BREAK–
/>
Рисунок 3.2Часова діаграма команди читання
Команда запису (BYTE_WRITE)– це команда запису байту. Вона виконується за допомогою надіслання такої комбінації кодів яка показана на рисунку 3.2. Для ії організації треба задати адрес та блок пам’яті, куди буде записуватись байт. Після того, як байт запишеться необхідно подати сигнал стоп, а потім подавати сигнал старт та керуючий байт до того, доки байт не запишется.
/>
Рисунок 3.3Часова діаграма команди запису
4. Опис та блок-схеми програми та підпрограм, що обслуговує пристрій
Список констант:
DATA
0х378 – адреса регістру даних
STATUS
0х379 – адреса регістру стану
CONTROL
0х37А – адреса регістру керування
Список функцій:
high_SDA()
Встановлює 1 на лінії SDA
low_SDA()
Встановлює 0 на лінії SDA
high_SCL()
Встановлює 1 на лінії SDL
low_SCL()
Встановлює 0 на лінії SDL
nack()
Повертає зачення сигналу ACK
Start()
Надсилає команду START
Stop()
Надсилає команду STOP
out_byte(byte o_byte)
Надсилає байт
in_byte()
Зчитує байт
write_byte(int device, int address, byte data)
Записує вказаний байт за вказаною адресою
read_random_data(int device, int address)
Зчитує байт за випадковою адресою(в межах 4кб)
read_cur_adr()
Зчитує байт за поточною адресою
write_to_file(int adr)
Зчитує байт до файлу
void test(void)
Виконує перевірку роботоздатності
Рисунок 1 Блок-схема підпрограми виконання команди WRITE_BYTE
Рисунок 2 Блок-схема підпрограми виконання команди RANDOM_READ
Рисунок 3 Блок-схема підпрограми виконання команди CUR_ADR_READ
5. Вибір середовища програмування та розробка програми
Для реалізації підпрограм та програми ми вибрали Borland C++, оскільки на мові C++ найпростіше напряму працювати з портами LPT порту. За алгоритмами, які наведені у попередньому пункту ми розробили діалогову програму, яка забезпечила можливість демонстрації команд читання та запису.
Висновок
В результаті виконання даного курсового проекту ми знайомилися з принципами роботи наступних команд мікросхеми AT24C32: читання, запису даних. Розробили програму, яка забезпечила можливість демонстрації цих команд.
Список джерел інформації
Шилдт Г. Теория и практика С++. – СПб.: БХВ-Петербург, 1999. – 416с.
Шилдт Г. Самоучитель С++. – СПб.: БХВ-Петербург, 2001. – 688с.
Microchip AT24C32. – USA: Microchip Technology Incorporated, 2008.
Шина I2C–Харьков Александр Торрес1997
Описания элементов с шиной I2C, например даташиты I2C-EEPROM серии 24XXX фирмы Microchip (www.microchip.com)
Додаток А
Текст програми
#include
#include
#include
#include
#include
#include
#define DATA 0x0378
#define STATUS DATA+1
#define CONTROL DATA+2
typedef unsigned char byte;
void write_byte(int device, int address, byte data);
byte read_random_data(int device, int address);
byte read_cur_adr(void);
void enter_adr(void);
void write_to_file(int adr);
void write_page(int device, int address, byte data);
void out_byte(byte o_byte);
byte in_byte(void);
byte ack(void);
byte nack(void);
void test(void);
void start(void);
void stop(void);
void low_SDA(void);
void high_SDA(void);
void low_SCL(void);
void high_SCL(void);
void main(void)
{
clrscr();
// test();
char c;
byte i_byte;
puts(«Press 1 to write byte\nPress 2 to read all data\nPress 3 to read data from curent location\nPress 4 to write data to file\nPress ESC to exit program»);
while(c!=27)
{
c=getch();    продолжение
–PAGE_BREAK–
switch(c)
{
case ‘1’:
{
enter_adr();
break;
}
case ‘2’:
{
for(int adr=0x0000;adr
{
//write_byte(0x5, adr, 0x00);
i_byte=read_random_data(0x5,adr);
printf(“\n %x”, i_byte);
}
break;
}
case ‘3’:
{
i_byte=read_cur_adr(); // read data from the same location and display it
printf(“\nDATA IS %x\n”, i_byte);
break;
}
case ‘4’:
{
int adr;
puts(«Enter adr\n»);
cin>>adr;
write_to_file(adr);
break;
}
}
}
}
void test(void)
{
puts(«Displaying testing of work.To cancel press any key»);
while(!kbhit())
{
high_SDA();
delay(1000);
low_SDA();
high_SCL();
delay(1000);
low_SCL();
}
}
void write_page(int device, int address, byte data)//build
{
byte ack_bit;
start();
out_byte(0xA0 | (device
nack();
out_byte(address>>8);
nack();
out_byte(address&0xff);
nack();
start();
out_byte(0xA0 | (device
nack();
i_byte=in_byte();
nack();
stop();
return(i_byte);
}
void enter_adr(void)
{
byte dev=0x5;
int adr,val,n_val;
byte i_byte;
char *c;
char buf[12];
printf(«Please enter adress in HEX\n»);
cin>>adr;
printf(«Please enter value to write in HEX\n»);
cin>>val;
write_byte(dev,adr,val);
n_val=read_random_data(dev,adr);
printf(«Value is %x on adress %x\n»,n_val,adr);
puts(«Insert text of no more then 12 symbols»);
cin>>c;
for( int i=0;i
buf[i]=*(c+i);
for(i=0;i
printf(“%c”,buf[i]);
adr=0x00;
for( i=0;i
{
write_byte(dev,adr,buf[i]);
adr++;
}
adr=0x00;
for( i=0;i
{
i_byte=read_random_data(dev,adr);
printf(“\n%c”,i_byte);
adr++;
}
}
void write_byte(int device, int address, byte data)
{
byte ack_bit;
start();
out_byte(0xA0 | (device
nack();
out_byte(address>>8);
nack();
out_byte(address&0xff);
nack();
out_byte(data);
nack();
stop();
}
byte read_cur_adr(void)
/* read from specified address. return fetched data */
{
byte i_byte,ack_bit;
int device=0x5;
start(); /* start with no stop */
out_byte(0xA0 | (device
ack_bit=nack();    продолжение
–PAGE_BREAK–
if(ack_bit==1)
{
printf(«error_reading\n»);
}
i_byte=in_byte(); /* fetch the byte */
nack();
stop();
return(i_byte);
}
void out_byte(byte o_byte)
/* shift out byte, beginning with most significant bit */
{
int n;
for(n=7; n>=0; n–)
{ /* note SCL is low during transitions on SDA */
if (((o_byte >>n) & 0x01) == 0)
{
low_SDA();
}
else
{
high_SDA();
}
else
{
high_SDA();
}
high_SCL();
low_SCL();
}
}
byte in_byte(void)
/* fetch byte, most significant byte first */
{
byte i_byte=0;
int n;
high_SDA();
for (n=0; n
{
high_SCL();
i_byte=(i_byte >7)^0x01)&0x01);
/* note inversion on last significant bit of status! port ??? */
low_SCL();
}
return(i_byte);
}
/*byte ack(void)
{
byte ack_bit;
low_SDA();
high_SCL();
if ((((inportb(STATUS)>>7)^0x01)&0x01)==0)
{
ack_bit=0;
}
else
{
ack_bit=1;
}
low_SCL();
return(ack_bit);
} */
byte nack(void)
{
byte ack_bit;
high_SDA();
high_SCL();
if ((((inportb(STATUS)>>7)^0x01)&0x01)==0)
{
ack_bit=0;
}
else
{
ack_bit=1;
}
low_SCL();
// printf(“\nACK = %x\n”,ack_bit);
return(ack_bit);
}
void start(void)
/* bring SDA high to low while SCL is high */
{
high_SDA();
high_SCL();
low_SDA(); /* bring SDA low while clock is high */
low_SCL();
}
void stop(void)
/* bring SDA low to high while SCL is high */
{
low_SDA();
high_SCL();
high_SDA(); /* bring SDA high while clock is high */
low_SCL();
}
void low_SDA(void)
{
outportb(CONTROL, 0x00^0x01);
delay(5);
}
void high_SDA(void) /* makes output high impedance */
{
outportb(CONTROL, 0x01^0x01);
delay(5);
}
void low_SCL(void)
{
outportb(DATA, 0xE);
delay(5);
}
void high_SCL(void)
{
outportb(DATA, 0xF);
delay(5);
}
Додаток Б
Таблиця приєднання мікросхеми AT24C32 до порту LPTпорту
Регістри та розряди LPTпорту
Входи та виходи мікросхеми AT24C32
DR3-5
живлення
СR
вхід SDA
DR0
вхід SCL
Схема електрична структурна
Схема електрична принципова
/>