roboforum.ru

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

Ptoteus + attiny45 + usi + i2c

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

Re: Ptoteus + attiny45 + usi + i2c

dccharacter » 17 авг 2011, 21:49

Говорят, что i2c в протеусе не работает

Re: Ptoteus + attiny45 + usi + i2c

WickedGoblin » 19 авг 2011, 22:01

Проблема снялась, была ошибка в "монтаже"
Но теперь имеется другая проблема что SCL не падает до 0, а остается на уровне 2.5 вольта. Похоже что i2c debuger пытается выставить на шину 0, а контроллер ее держит на +5
Вложения
i2c_2.jpg

Re: Ptoteus + attiny45 + usi + i2c

Romikgy » 22 авг 2011, 09:58

по идее дебагер имеет high impedance на входе ... ибо он только слушает ....
схему , если не сектретна , предоставьте

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

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 ....
Что мог протестировал, но хотелось научное так сказать обоснование что проверь и что надо погонять, прежде чем народу отдавать.

Re: Ptoteus + attiny45 + usi + i2c

avr123.nm.ru » 04 окт 2011, 21:51

Зафиксируйте осциллограммы в инструменте ГРАФ и убедитесь что они соответствуют нормативам ДШ.

Re: Ptoteus + attiny45 + usi + i2c

WickedGoblin » 05 окт 2011, 13:28

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

Интересуют именно все состояния которые необходимо проверить.
Мне подсказали на другом форму что обязательно проверить:
1 Потеря арбитража шины во всех состояниях
2 Возникновение на запланированных старт и стоп во всех состояниях
Один экстремал предложил на SDA подключить генератор шума и в это время на SCL по подавать тактирование различными частотами.

Re: Ptoteus + attiny45 + usi + i2c

avr123.nm.ru » 05 окт 2011, 16:03

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

10 баллов. :Bravo:


cron
Rambler\'s Top100 Mail.ru counter