�ڶ����� ���� һ�������¶ȼƻ�����atmel΢����������I2Cͨ��

ArticleCategory: [Choose a category, do not translate this]

Hardware

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to zh SEVEN

AboutTheAuthor:[A small biography about the author]

Guidoϲ��Linux����Ϊ���ڿ����Լ���Ӳ����˵Linuxȷʵ��һ���dz��õ�ϵͳ��

Abstract:[Here you write a little summary]

�ڵڶ����������ǽ�����һ��Һ����ʾ����LCD���������ҽ�����һ������������ι����ġ�

��һ�ζ���һϵ�����µĶ��������Ķ� ��һ����(February2005 article365).

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

�¶���

�� ��һƪ���� �������Ѿ��������˴󲿷ֵ�Ӳ�����¶ȼƵ���Ҫ���ܲ��֣�Ҳ�����˵�Linux PC �����ݴ��䡣����һƪ�����ǽ�����һ��Һ����ʾ����һ���dz��򵥵�gtk GUI���档

��������������ס��������µ����������ҽ�����һ��I2C������ģ��ת��������ι����ġ�

Һ����ʾ��

����ʹ��һ��HD44780����LCD��ʾ������Ϊ����������ǰ��������ʹ�ù����� ��������Ը����Ƿ���ASCII�ַ���������Щ��ʾ����΢�����������Ҳ������ʹ�á�
HD44780 compatible LCD display

��������һϵ�е�����һ����������� shop.tuxgraphics.org���ҵ�����LCD ���ڵ�����Ԫ������
����ǰ����������һ������ʹ����ͬ���������롣 ʵ��LCD�������ļ���lcd.c��lcd.h��lcd_hw.h�� ���Ƿ���һ�����У�������ڱ��ĵ�����ҵ������ء� ��Щ����Ľӿڵ�ȷ�dz�����ʹ�ã�
// call this once:
// initialize LCD display, cursor off
lcd_init(LCD_DISP_ON);

// to write some text we first clear
// the display:
lcd_clrscr();
lcd_puts("Hello");
// go to the second line:
lcd_gotoxy(0,1); 
lcd_puts("LCD");
the linuxfocus September2002 article "Understanding HD44780 compatible LCD-displays" �н�����HD44780��ʾ������ι����ġ�

���ǵ�������16x2��20x2��LCD�϶��ܹ�����

board change �������ǶԵ�·ͼ������һЩ���¡��ҷ�����һЩLCD�������ıȽ������и��ߵĵ��ݸ��غ͸��͵ĵ��衣 �������Ϊ�����и��õ�ESD����������LCD��ʾ�����ӵ�SCK��MOSI���ʱ�� ��һ����ĸ������ڲ���·����п��ܻ��������롣

��һ�����������������LCD���������������˶���ĵ��衣 �����������������������������ˣ������DZʼDZ������û���Ȼ�������⡣

Ϊ�˳��ױ�����һ�����Ҹ����˵�·ͼ�����ڰ�LCD��ʾ����D7��RS�����ӵ���PD7��PD6�ϡ� ��ʹ���Ѿ����õ�·�壬����Щ�ı�Ҳ������ʲô����ġ� ��ֻҪ�ڰ��������һ����߲�����PB3��������С���жϾͿ����ˡ�

Circuit diagram

һ��С��GUI����

Ϊ�˷���ϲ������ϵͳ��GUI������û�������һ���dz��򵥵�GUI�� ��ֻ��������ǩ��ɣ�����������ʾi2ctemp_linux����������ߵ���� ��i2ctemp_linux��ͨ��I2C���ߴӵ�·�϶�ȡ�¶ȵ������
GUI

�������Ǿ�����һ���dz�����¶ȼ��ˡ���������һЩ���ܣ� �����ҽ��ڱ���ʣ�µIJ��ֽ���һ�������ڲ���һЩ������

ģ��ת������ι�����

Atmega8֧������ģʽ��һ��ģʽ������Զ����ģ���źŲ����ڲ�������ʱ������һ���жϡ� Ӧ�ó��������Ϳ������жϷ���ʱ���ٵؽ�����������Ĵ���������һ�������С�

��һ��ģʽ����Ϊ������ģʽ�����������һ��ת����������ģʽ�ٶȺܿ졣 �����Ĵ��������ڶ���ǰ�Ľ���ʱ�䣬����Ȼ���Ի��ÿ��100�ε�ת���ٶȡ� ���������˵�����㹻�ˡ��������Dz�������ģʽ��

�����ǵ�Atmega8�����ǿ���ʹ��ģ�������ADC0��ADC3�� ����֮�⻹��AGND��ģ��أ����ӵ���ͨ�أ���AREF���ο���ѹ����AVCC������+5V����

��ģ��ת��������ģ���ź���AREF��Ƚϡ���AREF��ȵ�ģ���ź��൱������ֵ1023�� AREF�������κ��ⲿ0-5V֮��IJο���ѹ�������ʹ���ⲿ�ο���ѹ�� ��Ҳ����ͨ��ʹ��һ���ڲ��ο���ѹ��2.56V����AVCC������ȷ��ת���� ����ʹ����һ������������ͨ��ADMUX�Ĵ�����REFS0��REFS1�������ġ�

ģ��ת����һ�ο���ת��ADC0��ADC3���һ�������ߡ� ����ת��֮ǰ�����ͨ������ADMUX�Ĵ����ı�־λ��֪ͨоƬʹ����һ��ͨ����

������һ���򵥵�ģ��ת��������������������ӣ�
volatile static int analog_result;
volatile static unsigned char analog_busy;

analog_busy=1; // busy mark the ADC function
channel=0; // measure ADC0 
// use internal 2.56V ref
outp((1<<REFS1)|(1<<REFS0)|(channel & 0x07),ADMUX);
outp((1<<ADEN)|(1<<ADIE)|(1<<ADIF)|(1<<ADPS2),ADCSR);
sbi(ADCSR,ADSC); // start conversion
����΢�������ͽ�����ģ��ת��������һ����׼���ã����ͻ����SIGNAL(SIG_ADC)������ ����һ���������ǿ��Խ����������һ������������΢��������һЩ��������ģ�⡰ԭ���ԡ����� ��Ϊһ������Ա��������ȼ������������ĵ�8λ���ݡ�
SIGNAL(SIG_ADC) {
        unsigned char adlow,adhigh;
        adlow=inp(ADCL); /* read low first, two lines. Do not combine
                          the two lines into one C statement */
        adhigh=inp(ADCH);
        analog_result=(adhigh<<8)|(adlow & 0xFF);
        analog_busy=0;
}
����֮�����ǾͿ��Դ�analog_result�����л��һ��������Ϊ���õ�ģ��ת���Ľ���� ����������ڳ���������κεط�ʹ�á��dz�����ʹ�á�

�������е��ж϶���Ҫ����sei();������Ϊ��ȫ�ֿɼ�����Ӧ�����������ij���ط�ʵ�� ������û�г�����

�Ҽ򵥽���һ��һЩ����λ�ͱ�־λ�� Atmega8�м��ֿ�ѡ�IJο���ѹ���ο���ѹ�������ǵ�ģ�������ѹ��Ƚϡ� ���൱�����ֵ�ѹֵ1023��
REFS0=0, REFS1=0ʹ���ⲿ��AREF���ڲ�Vref���ر�
REFS0=0, REFS1=1ʹ��AVCC��AREF����Ͽ�ѡ���ⲿ����
REFS0=1, REFS1=1ʹ���ڲ�2.56V�ο���ѹ��AREF�Ͽ�ѡ���ⲿ����
AREF��һ����ѡ�ĵ����������������������ȶ�AREF��ѹ��

������ι����ģ�I2Cͨ�ţ�Atmega8����

���Ѿ��ڵ�һ���� (February2005 article365) ������I2CЭ������ι����ġ���������������һ���������֡�Atmega8�ж�I2Cͨ�ŵ�Ӳ��֧�֡� ������û�б�Ҫ������ȥʵ����һЭ�顣��ֻ��Ҫʵ��һ��״̬���� ��һ״̬�����Ը���Atmega8��һ��Ҫ��ʲô���뿴����������ӣ�

��Atmega8�յ�һ���������Լ�����)��ַ��I2C��ʱ�����ͻ�ʹ��״̬��0x60 �������������¼�����ʹ��������״̬�룩������SIGNAL��SIG_2WIRE_SERIAL)������

--> �������DZ���ͨ�����ü����Ĵ���������Atmega8��һ��Ҫ��ʲô�� ���������Ǿ�Ҫ���������������ݰ�������֤ʵ�źš�

�����������ݱ������Ժ����Ǿͻᱻ��״̬��0x80���á�

--> Ȼ�����ǾͿ��Զ�ȡ�����ֽڲ��Ҹ���Atmega8�����һ���ֽڵ����ݵ���ʱ��������֤ʵ�źš�

ͨ�Ž���ʱ���ǻ�õ�״̬��0xA0��ֹͣ��������Ȼ�����ǾͿ���֪ͨ���ǵ�Ӧ�ó���һ����������Ϣ�Ѿ��յ��ˡ�

I2C��ģʽȫ����״̬�������п��ܵ�״ֵ̬��Atmega8�ֲᣨ �����ĺ���IJο�������183ҳ�����ݱ�������ϸ��������

��������Ҳ������ƣ���һ������ɡ�

������ι����ģ�I2Cͨ�ţ�Linux��

i2c input stage ����˵һ��Ӳ������Ȼ����ʹ����I2C���ߣ������ǽ���ͨ������ʹ��һ�����豸�����豸��Linux PC�� ��ĵ㵽������ӡ�������Ȼ���豸Ҫ�������ϵĵ�ѹ����ֻҪ�������ڵ��¶�·�� ���ǾͿ��Խ�Լһ���������衣����������ֻ�����Ͻ���һ��4.7K�ĵ��衣

��ƽֵ������ڡ������ʹ��һ����ѹ�����ܽ�����ѹ���Ƶ�-0.7V�� ��������ѹ���Ƶ����+5.1����

�ڶ�Atmega8���ڲ����˸�����˽�֮���ҵó�һ�����ۣ� ����ͨ��4.7K����ĵ����dz�С��Atmega8���뼶�ڲ��ı��������Ѿ��㹻�ˡ� ʵ�������Dz����DZ���ʹ����ѹ�����ܡ�û����ѹ������Ҳ������ʲôӰ�졣

Linux I2C����������ʵ����һ����ȫ��I2CЭ��ջ��������Ϊ����Ҫһ��С�������й��ߣ� ����һ����Ӧ�ò��������κ�����Ŀ���ں�ģ�������������

����㿴һ��i2c_m.c�ļ��������ز��֣�����Ϳ��Կ���ÿһ��I2C��Ϣ����һ������һ�����صĹ���ġ�

Ϊ�˲�������λ�����DZ������RC232�ӿڵ�������š� ������ioctl������ʵ�ֵģ�
        // set RTS pin:
        int arg=TIOCM_RTS;
        ioctl(fd, TIOCMBIS, &arg);
���߲���һ��0��
        // clear RTS pin:
        int arg=TIOCM_RTS;
        ioctl(fd, TIOCMBIC, &arg);
������뽫��һЭ��ջ��ֲ��������ͬ��OS�ϣ���ֻ��Ķ���Щ�оͿ����ˡ� �����Ķ�����ͨ��C���ԡ�

USB��RS232

���ڵ�����Щû��RS232�ӿڵıʼDZ��������û���˵������Լ򵥵�ʹ��USB-RS232ת������ ������ʹ����һ��û�����ֵ�ת������������һ��Prolific 2303оƬ�� ��ת������/proc/bus/usb/devices�ļ��п��������£� Vendor=067b ProdID=2303 Rev= 2.02�� ����Բ鿴�� "Use your ATEN UC-232A USB adapter with Linux (Linuxfocus, November 2001, article 223)".

����

mount the sensor �������Ѿ�ʹ����һ�¶ȼ�2�����ˣ��ҷdz�ϲ��������Ϊ�����ֱ�Ӵ�Һ����ʾ���϶�ȡ�¶ȡ� ������Ҳ���Խ����е����ݴ洢�����PC�ϡ������ֱ�ӿ���Ҳ����ͳ�ƻ�ͼ���dz��ᡣ

����Ĵ�������������ʵ��ı����Ա�����ɹ���ܡ�����Խ�������һЩ������Ʒ�У� ���Ҳ��Ƽ������������������ö�ô����ˮ�����ܻ�����ȥ�ģ�����������档 NTC�dz�������ʪһ����ûʲô��ϵ�ģ�ֻҪ���ܸɾ��С� ʹ��һ����װ�ģ��ڳ��£����ӣ�����ˮ�Ϳ����������ˡ�


the thermometer


����Ȼ���Դ� shop.tuxgraphics.org �����̵궨�����е�Ԫ������LCD��ʾ����ӡˢ��·�壬΢�������ȣ���

Have fun!

�����