roboforum.ru

Технический форум по робототехнике.

Ptoteus + attiny45 + usi + i2c

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Ptoteus + attiny45 + usi + i2c

Сообщение 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
Аватара пользователя
WickedGoblin
 
Сообщения: 114
Зарегистрирован: 12 сен 2009, 21:42
Откуда: Москва

Re: Ptoteus + attiny45 + usi + i2c

Сообщение dccharacter » 17 авг 2011, 21:49

Говорят, что i2c в протеусе не работает
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Ptoteus + attiny45 + usi + i2c

Сообщение WickedGoblin » 19 авг 2011, 22:01

Проблема снялась, была ошибка в "монтаже"
Но теперь имеется другая проблема что SCL не падает до 0, а остается на уровне 2.5 вольта. Похоже что i2c debuger пытается выставить на шину 0, а контроллер ее держит на +5
Вложения
i2c_2.jpg
Аватара пользователя
WickedGoblin
 
Сообщения: 114
Зарегистрирован: 12 сен 2009, 21:42
Откуда: Москва

Re: Ptoteus + attiny45 + usi + i2c

Сообщение Romikgy » 22 авг 2011, 09:58

по идее дебагер имеет high impedance на входе ... ибо он только слушает ....
схему , если не сектретна , предоставьте
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: Ptoteus + attiny45 + usi + i2c

Сообщение 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
Аватара пользователя
WickedGoblin
 
Сообщения: 114
Зарегистрирован: 12 сен 2009, 21:42
Откуда: Москва

Re: Ptoteus + attiny45 + usi + i2c

Сообщение 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 ....
Что мог протестировал, но хотелось научное так сказать обоснование что проверь и что надо погонять, прежде чем народу отдавать.
Аватара пользователя
WickedGoblin
 
Сообщения: 114
Зарегистрирован: 12 сен 2009, 21:42
Откуда: Москва

Re: Ptoteus + attiny45 + usi + i2c

Сообщение avr123.nm.ru » 04 окт 2011, 21:51

Зафиксируйте осциллограммы в инструменте ГРАФ и убедитесь что они соответствуют нормативам ДШ.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Ptoteus + attiny45 + usi + i2c

Сообщение WickedGoblin » 05 окт 2011, 13:28

Осциллограф это поверхностное тестирование.

Интересуют именно все состояния которые необходимо проверить.
Мне подсказали на другом форму что обязательно проверить:
1 Потеря арбитража шины во всех состояниях
2 Возникновение на запланированных старт и стоп во всех состояниях
Один экстремал предложил на SDA подключить генератор шума и в это время на SCL по подавать тактирование различными частотами.
Аватара пользователя
WickedGoblin
 
Сообщения: 114
Зарегистрирован: 12 сен 2009, 21:42
Откуда: Москва

Re: Ptoteus + attiny45 + usi + i2c

Сообщение avr123.nm.ru » 05 окт 2011, 16:03

Оригинальный метод борьбы со скукой.

10 баллов. :Bravo:
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0