Управление от atmega32 предусилителем 5.1
Добавлено: Пн май 06, 2013 13:40:21
Уважаемые пользователи форума, прошу помощи так как я не очень хорошо разбираюсь в МК и за любую помощь буду благодарен.
Вот собираю предусилитель на pt2323 и pt2322 управление от atmega32, написал код но он слишком большой. Помогите исправить ошибки и недочеты. Проверяю пока в протеусе, жду запчасти для железа.
Регулировка громкости от 0 до 30 дб. тембры НЧ и ВЧ от -14 до 14 дб. Переключение входов: 1,2,3,5.1 Функция муте и сароунд
Вот собираю предусилитель на pt2323 и pt2322 управление от atmega32, написал код но он слишком большой. Помогите исправить ошибки и недочеты. Проверяю пока в протеусе, жду запчасти для железа.
Спойлер
Код: Выделить всё
#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <alcd.h>
#define pt2323 0x94
#define pt2322 0x88
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
int buff=0;
char buffer=1;
char array[];
char array_vol[16];
int buffer_vol=0;
volatile unsigned char on=0;
unsigned char d=0;
unsigned char mute=0;
unsigned char chastota=0;
char array_bass[15];
int buffer_bass=0;
char array_trable[17];
int buffer_trable=0;
void i2c_init(void); //инициализация шины
unsigned char i2c_start (void);
unsigned char i2c_write (unsigned char data);
unsigned char i2c_read (unsigned char ack);
void i2c_stop (void);
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if (on==0)
{
lcd_clear( );
lcd_gotoxy( 5,1 );
lcd_putsf( "Hello" );
delay_ms(200);
lcd_clear( );
PORTB.1=1;
PORTB.3=1;
PORTB.5=1;
i2c_start();
i2c_write(pt2322);
i2c_write(0xC7);
i2c_write(0x9f);
i2c_write(0xd0);
i2c_write(0xbf);
i2c_stop();
on=1;
chastota=0;
}
else
{
delay_ms(50);
lcd_clear( );
lcd_gotoxy( 5,1 );
lcd_putsf( "Standby" );
delay_ms(80);
PORTB.1=0;
on=0;
delay_ms(50);
lcd_clear( );
#asm("sleep")
}
}
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTD=0xFF;
DDRD=0x00;
TCCR0=0x06;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
GICR|=0x40;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x40;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
i2c_init();
lcd_init(16);
#asm("sei")
while(2)
{
if(on==1)
{
if(buff==0) // Переключение входов 1,2,3,5.1
{
delay_ms(40);
i2c_start();
i2c_write(pt2323);
i2c_write(0xCB);
i2c_stop();
buffer=1;
buff=1;
}
if(PIND.3==0&&buff==1)
{
delay_ms(40);
i2c_start();
i2c_write(pt2323);
i2c_write(0xCA);
i2c_stop();
buffer=2;
buff=2;
}
if(PIND.3==0&&buff==2)
{
delay_ms(40);
i2c_start();
i2c_write(pt2323);
i2c_write(0xC9);
i2c_stop();
buffer=3;
buff=3;
}
if(PIND.3==0&&buff==3)
{
delay_ms(40);
i2c_start();
i2c_write(pt2323);
i2c_write(0xC7);
i2c_stop();
buffer=4;
buff=4;
}
if(PIND.3==0&&buff==4)
{
delay_ms(40);
buff=0;
}
if(PIND.4==0) // эффект surround
{
delay_ms(40);
if(d==0)
{
lcd_clear( );
lcd_gotoxy( 2,1 );
lcd_putsf( "Surround on" );
PORTB.3=0;
PORTB.2=1;
i2c_start();
i2c_write(pt2323);
i2c_write(0xD0);
i2c_stop();
delay_ms(200);
lcd_clear( );
d=1;
}
else
{
lcd_clear( );
lcd_gotoxy( 2,1 );
lcd_putsf( "Surround off" );
PORTB.2=0;
PORTB.3=1;
i2c_start();
i2c_write(pt2323);
i2c_write(0xD1);
i2c_stop();
delay_ms(200);
lcd_clear( );
d=0;
}
}
if(!(PIND.6)) // функция муте
{
delay_ms(40);
if(mute==0)
{
i2c_start();
i2c_write(pt2323);
i2c_write(0xFF);
i2c_stop();
while(5)
{
lcd_clear( );
delay_ms(30);
lcd_gotoxy( 6,1 );
lcd_putsf( "Mute" );
PORTB.4=1;
PORTB.5=0;
delay_ms(50);
mute=1;
if(!(PIND.6))
{
delay_ms(40);
if(mute==1)
{
lcd_clear( );
PORTB.4=0;
PORTB.5=1;
i2c_start();
i2c_write(pt2323);
i2c_write(0xFE);
i2c_stop();
delay_ms(40);
mute=0;
break;
}
}
}
}
}
if(!(PIND.5)&&chastota==0) //Переключение частот: громкость, ВЧ, НЧ
{
delay_ms(40);
chastota=1;
}
if(!(PIND.5)&&chastota==1)
{
delay_ms(40);
chastota=2;
}
if(!(PIND.5)&&chastota==2)
{
delay_ms(40);
chastota=3;
}
if(!(PIND.5)&&chastota==3)
{
delay_ms(40);
chastota=0;
}
if(chastota==0) //управление громкостью
{
if(!(PIND.0)&&buffer_vol<30)
{
if(buffer_vol==0)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xd2);
i2c_stop();
}
if(buffer_vol==2)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xD4);
i2c_stop();
}
if(buffer_vol==4)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xD6);
i2c_stop();
}
if(buffer_vol==6)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xD8);
i2c_stop();
}
if(buffer_vol==8)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE1);
i2c_stop();
}
if(buffer_vol==10)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE1);
i2c_write(0xD2);
i2c_stop();
}
if(buffer_vol==12)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE1);
i2c_write(0xD4);
i2c_stop();
}
if(buffer_vol==14)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE1);
i2c_write(0xD6);
i2c_stop();
}
if(buffer_vol==16)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE1);
i2c_write(0xD8);
i2c_stop();
}
if(buffer_vol==18)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE2);
i2c_stop();
}
if(buffer_vol==20)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE2);
i2c_write(0xD2);
i2c_stop();
}
if(buffer_vol==22)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE2);
i2c_write(0xD4);
i2c_stop();
}
if(buffer_vol==24)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE2);
i2c_write(0xD6);
i2c_stop();
}
if(buffer_vol==26)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE2);
i2c_write(0xD8);
i2c_stop();
}
if(buffer_vol==28)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE3);
i2c_stop();
}
buffer_vol=buffer_vol+2;
delay_ms(50);
}
if(!(PIND.1)&&buffer_vol>0)
{
if(buffer_vol==2)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xd0);
i2c_stop();
}
if(buffer_vol==4)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xd2);
i2c_stop();
}
if(buffer_vol==6)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xD4);
i2c_stop();
}
if(buffer_vol==8)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xD6);
i2c_stop();
}
if(buffer_vol==10)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xD8);
i2c_stop();
}
if(buffer_vol==12)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE1);
i2c_stop();
}
if(buffer_vol==14)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE1);
i2c_write(0xD2);
i2c_stop();
}
if(buffer_vol==16)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE1);
i2c_write(0xD4);
i2c_stop();
}
if(buffer_vol==18)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE1);
i2c_write(0xD6);
i2c_stop();
}
if(buffer_vol==20)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE1);
i2c_write(0xD8);
i2c_stop();
}
if(buffer_vol==22)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE2);
i2c_stop();
}
if(buffer_vol==24)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE2);
i2c_write(0xD2);
i2c_stop();
}
if(buffer_vol==26)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE2);
i2c_write(0xD4);
i2c_stop();
}
if(buffer_vol==28)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xE2);
i2c_write(0xD6);
i2c_stop();
}
if(buffer_vol==30)
{
i2c_start();
i2c_write(0xE2);
i2c_write(0xD8);
i2c_stop();
}
buffer_vol=buffer_vol-2;
delay_ms(50);
}
}
if(chastota==1) //управление басом
{
if(!(PIND.0)&&buffer_bass<13)
{
delay_ms(50);
if(buffer_bass==-14)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x91);
i2c_stop();
}
if(buffer_bass==-12)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x92);
i2c_stop();
}
if(buffer_bass==-10)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x93);
i2c_stop();
}
if(buffer_bass==-8)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x94);
i2c_stop();
}
if(buffer_bass==-6)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x95);
i2c_stop();
}
if(buffer_bass==-4)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x96);
i2c_stop();
}
if(buffer_bass==-2)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9f);
i2c_stop();
}
if(buffer_bass==0)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9e);
i2c_stop();
}
if(buffer_bass==2)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9d);
i2c_stop();
}
if(buffer_bass==4)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9c);
i2c_stop();
}
if(buffer_bass==6)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9b);
i2c_stop();
}
if(buffer_bass==8)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9a);
i2c_stop();
}
if(buffer_bass==10)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x99);
i2c_stop();
}
if(buffer_bass==12)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x98);
i2c_stop();
}
buffer_bass=buffer_bass+2;
}
if(!(PIND.1)&&buffer_bass>-13)
{
delay_ms(50);
if(buffer_bass==-12)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x90);
i2c_stop();
}
if(buffer_bass==-10)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x91);
i2c_stop();
}
if(buffer_bass==-8)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x92);
i2c_stop();
}
if(buffer_bass==-6)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x93);
i2c_stop();
}
if(buffer_bass==-4)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x94);
i2c_stop();
}
if(buffer_bass==-2)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x95);
i2c_stop();
}
if(buffer_bass==0)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x96);
i2c_stop();
}
if(buffer_bass==2)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9f);
i2c_stop();
}
if(buffer_bass==4)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9e);
i2c_stop();
}
if(buffer_bass==6)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9d);
i2c_stop();
}
if(buffer_bass==8)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9c);
i2c_stop();
}
if(buffer_bass==10)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9b);
i2c_stop();
}
if(buffer_bass==12)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x9a);
i2c_stop();
}
if(buffer_bass==14)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x99);
i2c_stop();
}
buffer_bass=buffer_bass-2;
}
}
if(chastota==2) //громкость высоким
{
if(!(PIND.0)&&buffer_trable<13)
{
delay_ms(50);
if(buffer_trable==-14)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb1);
i2c_stop();
}
if(buffer_trable==-12)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb2);
i2c_stop();
}
if(buffer_trable==-10)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb3);
i2c_stop();
}
if(buffer_trable==-8)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb4);
i2c_stop();
}
if(buffer_trable==-6)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb5);
i2c_stop();
}
if(buffer_trable==-4)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb6);
i2c_stop();
}
if(buffer_trable==-2)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xbf);
i2c_stop();
}
if(buffer_trable==0)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xbe);
i2c_stop();
}
if(buffer_trable==2)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xbd);
i2c_stop();
}
if(buffer_trable==4)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xbc);
i2c_stop();
}
if(buffer_trable==6)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xbb);
i2c_stop();
}
if(buffer_trable==8)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xba);
i2c_stop();
}
if(buffer_trable==10)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb9);
i2c_stop();
}
if(buffer_trable==12)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb8);
i2c_stop();
}
buffer_trable=buffer_trable+2;
}
if(!(PIND.1)&&buffer_trable>-13)
{
delay_ms(50);
if(buffer_trable==-12)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb0);
i2c_stop();
}
if(buffer_trable==-10)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb1);
i2c_stop();
}
if(buffer_trable==-8)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb2);
i2c_stop();
}
if(buffer_trable==-6)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0x93);
i2c_stop();
}
if(buffer_trable==-4)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb4);
i2c_stop();
}
if(buffer_trable==-2)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb5);
i2c_stop();
}
if(buffer_trable==0)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb6);
i2c_stop();
}
if(buffer_trable==2)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xbf);
i2c_stop();
}
if(buffer_trable==4)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xbe);
i2c_stop();
}
if(buffer_trable==6)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xbd);
i2c_stop();
}
if(buffer_trable==8)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xbc);
i2c_stop();
}
if(buffer_trable==10)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xbb);
i2c_stop();
}
if(buffer_trable==12)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xba);
i2c_stop();
}
if(buffer_trable==14)
{
i2c_start();
i2c_write(pt2322);
i2c_write(0xb9);
i2c_stop();
}
buffer_trable=buffer_trable-2;
}
}
// Главный экран
lcd_gotoxy( 0,0 );
sprintf(array,"Input %d ",buffer);
lcd_puts( array );
if(chastota==0)
{
lcd_gotoxy( 2,1 );
sprintf(array_vol,"Volume %i Db ",buffer_vol );
lcd_puts( array_vol );
}
if(chastota==1)
{
lcd_gotoxy( 2,1 );
sprintf(array_bass," Bass %i Db ",buffer_bass );
lcd_puts( array_bass );
}
if(chastota==2)
{
lcd_gotoxy( 2,1 );
sprintf(array_trable,"Treble %i Db ",buffer_trable );
lcd_puts( array_trable );
}
}
}
}