Пт авг 03, 2012 16:55:46
#include <i2c.h>
#include <delay.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
// Some code
i2c_init();
delay_ms(1000);
i2c_start();
i2c_write(0b10000011);
i2c_write(0);
i2c_write(0b00000000);
i2c_start();
i2c_write(0b10000011);
i2c_write(1);
i2c_write(0b00000000);
i2c_start();
i2c_write(0b10000011);
i2c_write(2);
i2c_write(0b00111111);
i2c_start();
i2c_write(0b10000011);
i2c_write(3);
i2c_write(0b00000000);
i2c_start();
i2c_write(0b10000011);
i2c_write(4);
i2c_write(0b00000000);
Пт авг 03, 2012 18:19:43
Пт авг 03, 2012 18:55:06
Ser60 писал(а):При беглом взгляде на код:
1. Адресный байт (slave address) должен быть всегда 0b10000010
2. Subaddress инкрементирется сам при посылке нескольких байтов
3. Формировть start сигнал нужно лишь 1 раз перед посылкой группы байтов при инкрементаци subaddress. Если хотите каждый раз посылать и subaddress, формируйте stop сигнал.
4. Пишите комментарии чего хотите добиться. В настоящем коде выставляется нулевая громкость в левом и правом каналах (по адресам 0 и 1). Вам это действительно надо для оживления?
Пт авг 03, 2012 19:04:54
i2c_init();
delay_ms(1000);
i2c_start();
// Slave address
i2c_write(0b10000010);
// SubAddress
i2c_write(0x00);
// Volume
i2c_write(0b00100010);
i2c_write(0b00100010);
// Input selector
i2c_write(0b00111111);
// Bass
i2c_write(0b00000000);
// Treble
i2c_write(0b00000000);
i2c_stop();
Пт авг 03, 2012 21:35:24
void R2A_set_volume(){
unsigned char vol_H = (89-Volume)/10 , vol_L = (89-Volume)%10;
i2c_start();
i2c_write(0b10000010);
i2c_write(0x00);
i2c_write((vol_H << 4) | vol_L);
i2c_write((vol_H << 4) | vol_L);
i2c_stop();
LCD_draw_volume();
}
Пт авг 03, 2012 22:59:13
Сб авг 04, 2012 05:22:02
Сб авг 04, 2012 08:56:49