Благодаря этой ветке получилось в режиме автосканирования оживить данную микруху, но возникла такая проблема. При попытке считывания адресов с 0х0А и до 0хFH, да и даже достаточно просто считать 0х0A, старший байт считывается правильно а вот младший и последующие 255. Не могу понять что не так?
Ткните носом где я накосячил.
//============== чтение всех регистров==============
// передача старта==============
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); // передача состояния СТАРТ
while (!(TWCR & (1<<TWINT))); // ждём установки флага TWINT.означает что условие СТАРТ было передано
// передаём адрес чипа и бит записи======
TWDR = (RDA5807_adrr<<1)|0 ; // обращение к RDA5807 + бит записи данных
TWCR = (1<<TWINT) | (1<<TWEN); //сброс бита TWINT в регистре TWCR для передачи адреса
while (!(TWCR & (1<<TWINT))); //ждём установки флага TWINT. это означает успешную передачу, и получение ответа о успешном принятииACK/NACK.
// передаём регистр к которому обращаемся=================
TWDR = 0x0a ; // передаём адрес регистра куда будут записыватсья настройки
TWCR = (1<<TWINT) | (1<<TWEN); //сброс бита TWINT в регистре TWCR для передачи адреса
while (!(TWCR & (1<<TWINT))); //ждём установки флага TWINT. это означает успешную передачу, и получение ответа о успешном принятииACK/NACK.
// передача старта для чтение из регистров=======
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); // передача состояния СТАРТ
while (!(TWCR & (1<<TWINT))); // ждём установки флага TWINT.означает что условие СТАРТ было передано
// передаём адрес чипа и бит чтения========
TWDR = (RDA5807_adrr<<1)|1 ; // чтение данных по адресу 0х10 //передача адреса чипа и бита записи данных ;
TWCR = (1<<TWINT) | (1<<TWEN); //сброс бита TWINT в регистре TWCR для передачи адреса
while (!(TWCR & (1<<TWINT))); //ждём установки флага TWINT. это означает успешную передачу, и получение ответа о успешном принятииACK/NACK.
// ======приём регистр 0Х0А байты 0AH и 0AL
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
lcd_gotoxy(0,1); // столбец, строка
display_data(TWDR) ; // выводим значение старшего байта на дисплей
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
lcd_puts(" "); // делаем 3 пробела между старшим и младшим байтом
display_data(TWDR) ; // выводим значение младшего байта на дисплей
// ======приём регистр 0Х0В байты 0ВH и 0ВL
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
// H=TWDR; // приём старшего байта
lcd_gotoxy(0,2); // столбец, строка
display_data(TWDR) ; // выводим значение на дисплей
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
//L=TWDR; // приём младшего байта
lcd_puts(" "); // делаем 3 пробела между старшим и младшим байтом
display_data(TWDR) ; // выводим значение на дисплей
// ======приём регистр 0Х0C байты 0CH и 0CL
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
// H=TWDR; // приём старшего байта
lcd_gotoxy(0,3); // столбец, строка
display_data(TWDR) ; // выводим значение на дисплей
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
//L=TWDR; // приём младшего байта
lcd_puts(" "); // делаем 3 пробела между старшим и младшим байтом
display_data(TWDR) ; // выводим значение на дисплей
// ======приём регистр 0Х0D байты 0DH и 0DL
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
// H=TWDR; // приём старшего байта
lcd_gotoxy(0,4); // столбец, строка
display_data(TWDR) ; // выводим значение на дисплей
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
//L=TWDR; // приём младшего байта
lcd_puts(" "); // делаем 3 пробела между старшим и младшим байтом
display_data(TWDR) ; // выводим значение на дисплей
// ======приём регистр 0Х0E байты 0EH и 0EL
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
// H=TWDR; // приём старшего байта
lcd_gotoxy(0,5); // столбец, строка
display_data(TWDR) ; // выводим значение на дисплей
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
//L=TWDR; // приём младшего байта
lcd_puts(" "); // делаем 3 пробела между старшим и младшим байтом
display_data(TWDR) ; // выводим значение на дисплей
// ======приём регистр 0Х0F байты 0FH и 0FL
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
// H=TWDR; // приём старшего байта
lcd_gotoxy(0,6); // столбец, строка
display_data(TWDR) ; // выводим значение на дисплей
TWCR = (1<<TWINT)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
//L=TWDR; // приём младшего байта
lcd_puts(" "); // делаем 3 пробела между старшим и младшим байтом
display_data(TWDR) ; // выводим значение на дисплей
//формируем состояние СТОП
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
- Вложения
-
- 20160131_222012.jpg
- (171.34 KiB) Скачиваний: 719