Технический форум по робототехнике.
WickedGoblin » 17 авг 2011, 21:15
Может повторюсь, но чур не пинать ногами но сам в полном тупике. Уже неделю думаю не могу найти решение.
Есть ATtiny45 по i2c к ней в Proteus подключен i2c debuger. SDA и SCL подтянуты на питание резисторами (параметр цифровой для резисторов выставлен).
В ATtiny45 USI инициализируется как:
- Код: Выделить всё • Развернуть
void USI_init (void){
DDR_USI |= ( 1 << PORT_USI_SCL ) | ( 1 << PORT_USI_SDA );
PORT_USI |= ( 1 << PORT_USI_SCL );
PORT_USI |= ( 1 << PORT_USI_SDA );
DDR_USI &= ~( 1 << PORT_USI_SDA );
USICR =
(1 << USISIE) | (0 << USIOIE) |
(1 << USIWM1) | (0 << USIWM0) |
(1 << USICS1) | (0 << USICS0) | (0 << USICLK) |
(0 << USITC);
USISR = (1 << USISIF) | (1 << USIOIF) | (1 << USIPF) | (1 << USIDC)|(0x00 << USICNT0 );
}
В обработчик события СТАРТ
- Код: Выделить всё • Развернуть
ISR (SIG_USI_START) {
Next_Faze = 0;
DDR_USI &= ~( 1 << PORT_USI_SDA );
while ( ( PIN_USI & ( 1 << PIN_USI_SCL ) ) && !( ( PIN_USI & ( 1 << PIN_USI_SDA ) ) ) );
if ( !( PIN_USI & ( 1 << PIN_USI_SDA ) ) ) {
USICR = ( 1 << USISIE ) | ( 1 << USIOIE ) |
( 1 << USIWM1 ) | ( 1 << USIWM0 ) |
( 1 << USICS1 ) | ( 0 << USICS0 ) | ( 0 << USICLK ) |
( 0 << USITC );
}
else {
USICR = ( 1 << USISIE ) | ( 0 << USIOIE ) |
( 1 << USIWM1 ) | ( 0 << USIWM0 ) |
( 1 << USICS1 ) | ( 0 << USICS0 ) | ( 0 << USICLK ) |
( 0 << USITC );
}
USISR = (1 << USISIF) | (1 << USIOIF) | (1 << USIPF) |(1 << USIDC) |
(0x0 << USICNT0);
}
Т.е. все вроде ctrl+c ctrl+v из AVR312
Но что имеем см. картинку
Что событие СТАРТ происходит 3 раза. 1-ый как положено, а вот 2-о1 и 3-й как то не в тему. Ну и понятно что прерывание по переполнению счетчика не вызывается.
Может кто подскажет сцепку ptoteus+attiny+usi+i2c можно отладит не в железе?
- Вложения
-
![i2c_1.jpg (15.8 КиБ) Просмотров: 3493 i2c_1.jpg](./download/file.php?id=21457&t=1&style=9&sid=31948194c29d54a0b40330babd1701d0)
dccharacter » 17 авг 2011, 21:49
Говорят, что i2c в протеусе не работает
WickedGoblin » 19 авг 2011, 22:01
Проблема снялась, была ошибка в "монтаже"
Но теперь имеется другая проблема что SCL не падает до 0, а остается на уровне 2.5 вольта. Похоже что i2c debuger пытается выставить на шину 0, а контроллер ее держит на +5
- Вложения
-
![i2c_2.jpg (27 КиБ) Просмотров: 3477 i2c_2.jpg](./download/file.php?id=21478&t=1&style=9&sid=31948194c29d54a0b40330babd1701d0)
Romikgy » 22 авг 2011, 09:58
по идее дебагер имеет high impedance на входе ... ибо он только слушает ....
схему , если не сектретна , предоставьте
WickedGoblin » 22 авг 2011, 19:14
Да это даже не схема, а так макет для отладки прошивки.
Добавлено спустя 9 минут 23 секунды:Мда-а... во истину по мере продвижения вглубь лесного массива увеличивается толщина жировой ткани у членов не регулярных вооруженных формирований.
Было
- Код: Выделить всё • Развернуть
ISR (SIG_USI_START) {
Next_Faze = 0;
DDR_USI &= ~( 1 << PORT_USI_SDA );
while (( PIN_USI & ( 1 << PIN_USI_SCL ) ) && !( ( PIN_USI & ( 1 << PIN_USI_SDA ) ) ) );
..
Исправил на
- Код: Выделить всё • Развернуть
ISR (SIG_USI_START) {
Next_Faze = 0;
DDR_USI &= ~( 1 << PORT_USI_SDA );
DDR_USI &= ~( 1 << PORT_USI_SCL );// ha-ha
while (( PIN_USI & ( 1 << PIN_USI_SCL ) ) && !( ( PIN_USI & ( 1 << PIN_USI_SDA ) ) ) );
...
И код заработал. Похоже все таки поведение портов в Proteus и в железе отличается.
Как выловлю всех жуков в коде выложу код 4-х канального ADC в i2c
- Вложения
-
![i2c_3.jpg (114.8 КиБ) Просмотров: 3530 i2c_3.jpg](./download/file.php?id=21500&t=1&style=9&sid=31948194c29d54a0b40330babd1701d0)
WickedGoblin » 04 окт 2011, 21:21
Может подсказать существуют ли шаблоны для тестирования реализации i2c?
Есть бета версия реализации i2c slave на Attiny 25,45,85 с использование USI.
Режим работы как у Serial EEROM T.е.
Запись: Adr_Slave, 1st_regiser, 1st_write_byte, 2nd_write_byte ....
Чтение: Adr_Slave, 1st_regiser, Adr_Slave 1st_read_byte, 2nd_read_byte ....
Что мог протестировал, но хотелось научное так сказать обоснование что проверь и что надо погонять, прежде чем народу отдавать.
avr123.nm.ru » 04 окт 2011, 21:51
Зафиксируйте осциллограммы в инструменте ГРАФ и убедитесь что они соответствуют нормативам ДШ.
WickedGoblin » 05 окт 2011, 13:28
Осциллограф это поверхностное тестирование.
Интересуют именно все состояния которые необходимо проверить.
Мне подсказали на другом форму что обязательно проверить:
1 Потеря арбитража шины во всех состояниях
2 Возникновение на запланированных старт и стоп во всех состояниях
Один экстремал предложил на SDA подключить генератор шума и в это время на SCL по подавать тактирование различными частотами.
avr123.nm.ru » 05 окт 2011, 16:03
Оригинальный метод борьбы со скукой.
10 баллов.
![Clapping :Bravo:](http://roboforum.ru/images/smilies/clapping.gif)