roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 15:45

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Аппаратный I2C slave на меге
СообщениеДобавлено: 05 апр 2010, 23:26 
Не в сети

Зарегистрирован: 12 дек 2009, 23:44
Сообщения: 152
Откуда: Киев
ФИО: Алексей Диомидов
Пытаюсь подключить мегу 8 к NXT. Компилятор CVAVR. Атмеловский апноут по subj сделан на IAR. Вроде переписал на CVAVR, даже откомпилировалось, но не работает. Решил упростить задачу до безобразия: NXT тупо в цикле каждые 100 мсек шлет устройству '02' один байт. Мега должна при попадании в прерывание зажечь светик на ноге С0.
Все равно не работает :(
Код меги:
Код:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.6 Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 04.04.2010
Author  : Freeware, for evaluation and non-commercial use only
Company :
Comments:


Chip type               : ATmega8L
Program type            : Application
AVR Core Clock frequency: 1,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega8.h>
#include <delay.h>   

// Two Wire bus interrupt service routine
interrupt [TWI] void twi_isr(void)
{
  PORTC.0 = 1;

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x01;

PORTD=0x00;
DDRD=0x00;


// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Two Wire Bus initialization
// Bit Rate: 9,615 kHz
TWBR=0x2C;
// Two Wire Bus Slave Address: 10h
// General Call Recognition: On
TWAR=0x05;
// Generate Acknowledge Pulse: Off
// TWI Interrupt: On
TWCR=0x05;
TWSR=0x00;

// Global enable interrupts
#asm("sei")
 
  PORTC.0 = 1;
  delay_ms(300);
  PORTC.0 = 0;
 
while (1)
      {
      }
}

Код NXT:
Код:
task main {
  SetSensorType(S4, sensorLowSpeed);
  sbyte I2Cmsg[4];
  I2Cmsg[1]=0x02;
  I2Cmsg[2]=0x42;
  I2Cmsg[0]=2;
  while (1) {
     sendI2CMsg(S4, I2Cmsg[0], 1);
     wait1Msec(100);
  }
}

Похоже на решение уравнения с 3 неизвестными. NXT, Mega и соединение между ними.
В коде NXT я более-менее уверен - стандартная работа по I2C. Опыт работы с такими датчиками есть - Mindsensors'овский серво контроллер используется уже несколько месяцев. Но что-бы не рисковать, конкретно этот фрагмент скопировали из блога одного из разработчиков RobotC.
Соединение проверяли несколько раз - все подключено правильно. Подтягивающие резисторы 82К стоят.
Осцилографа нету, пытался проверить уровни напряжений тестером. До начала передачи на SCL - 2.35, на SDA - 3.26. После запуска проги на NXT на SCL стало 3.16, на SDA - 3.20.
Посмотрите пож. код Меги - должен он работать? :sorry:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 05 апр 2010, 23:36 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Если будет настроение сделайте проектик в PROTEUS и шлите чтонибудь аппаратным i2c twi второй меги в схеме.

Подтяжка надеюсь есть на линиях ?

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 05 апр 2010, 23:43 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2008, 14:41
Сообщения: 997
Откуда: СПб
прог. языки: C,Python
подтяжка в 82К не слабовата ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 06 апр 2010, 00:05 
Не в сети

Зарегистрирован: 12 дек 2009, 23:44
Сообщения: 152
Откуда: Киев
ФИО: Алексей Диомидов
Ну такую лего рекомендует в своем "LEGO MINDSTORMS NXT Hardware Developer Kit". В инете видел описания нескольких таких проектов - у всех такая стоит. Вот тут у парня были проблемы, пока он не выпаял из ардуины "лишние" резюки.http://mightor.wordpress.com/2009/08/04/connecting-the-nxt-to-an-arduinomega/

Добавлено спустя 16 минут 18 секунд:
avr123.nm.ru писал(а):
Если будет настроение сделайте проектик в PROTEUS и шлите чтонибудь аппаратным i2c twi второй меги в схеме.

Подтяжка надеюсь есть на линиях ?

Proteus еще не освоил (к сожалению).

Стоят. 82К.

Вроде схема смешная, но на всякий случай, вот:
Вложение:
IMGP0102.JPG
IMGP0102.JPG [ 214.34 КиБ | Просмотров: 2373 ]

Разъем NXT:
1 и 2- аналоговое питание и земля(в i2c датчиках не используются)
3 - GND
4 - VCC
5 - SCL
6 - SDA
Так что с программой? В таком виде должна она работать, или нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 06 апр 2010, 01:20 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Рекомендуют 4.7 кОм

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 06 апр 2010, 01:53 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Не слушайте про подтяжку - в NXT так сделано.
(последовательно в линии воткнуты защитные резюки, поэтому и подтяжки высокоомные и скорости низкие)
NXT рекомендуют 82к.

Проблема, уверен, в АВР-ке.
Бит-рейт можно поднять - на скорость обмена для слэйва он все равно не влияет,
но ограничения есть - частота на слейве должна быть выше, чем битрейт*16 - у вас все впритык.

Вообще I2C-слейва сделать на АВР-ке - это геморрой, а сделать это на прерывании - это _большой_ геморрой :wink:
Посмотрите хотя бы в аппноуте AVR311 на фигу 7 - это ж убицца :shock: :oops:

Почему не работает - не знаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 06 апр 2010, 02:23 
Не в сети

Зарегистрирован: 12 дек 2009, 23:44
Сообщения: 152
Откуда: Киев
ФИО: Алексей Диомидов
С номиналами подтяжек сомнений нет.
Частоты вроде тоже хватает. У NXT lowspeed где-то в районе 10К. Т.е. у меня частота проца в 100 раз больше битрейта, а атмел говорит что мин. нужно в 16. Так что тут вроде можно не волноваться. На всякий сл. завтра попробую поставить кварц.

Апноут смотрел. Внимательно. Уже неделю об него бьюсь :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 06 апр 2010, 02:59 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
PROTEUS может значительно сократить время.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 06 апр 2010, 12:12 
Не в сети

Зарегистрирован: 12 дек 2009, 23:44
Сообщения: 152
Откуда: Киев
ФИО: Алексей Диомидов
avr123.nm.ru писал(а):
PROTEUS может значительно сократить время.

Не очень понимаю, каким образом в данном случае. Судя по всему сигналы на ноги МК приходят. Программа - проще уже не придумаешь, но тем не менее прерывание не возникает. Если не сложно, ответьте пож. на основной вопрос топика: "Все ли правильно в программе или я чего-то в ней не учел?" А если все правильно, то в каком направлении копать дальше, поскольку у меня идеи иссякли. :sorry:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 06 апр 2010, 12:14 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
А точно I2C поступает на вход МК? Может правда в протеусе запустить пару МК один со своей программкой SLAVE, а второй типа мастер и там глянуть что и как?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 06 апр 2010, 20:27 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2008, 14:41
Сообщения: 997
Откуда: СПб
прог. языки: C,Python
а нхт нужный адрес использует ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 06 апр 2010, 23:31 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2681
Откуда: Где-то в Латинской Америке
I2Cmsg[1]=0x10; и должно заработать


Последний раз редактировалось Scorpio 06 апр 2010, 23:46, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 06 апр 2010, 23:53 
Не в сети

Зарегистрирован: 12 дек 2009, 23:44
Сообщения: 152
Откуда: Киев
ФИО: Алексей Диомидов
Поставил кварц 8Мгц. Без изменений.

ALHIMIK писал(а):
а нхт нужный адрес использует ?

Да. 02:
I2Cmsg[1]=0x02;
В меге:
TWAR=0x05;

В комментарии остался старый - 10h. Реально в регистр адреса пишется 2, сдвигается на 1 бит влево и нулевым битом выставляется "General Call Recognition: On". Т.о. получаем 5.

Добавлено спустя 6 минут 37 секунд:
Scorpio писал(а):
I2Cmsg[1]=0x10; и должно заработать

Решил проверить, хотя и так было ясно, что дело не в этом. К сож., чуда не случилось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 07 апр 2010, 00:12 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2681
Откуда: Где-то в Латинской Америке
Вот тут есть кое-что по теме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Аппаратный I2C slave на меге
СообщениеДобавлено: 07 апр 2010, 00:23 
Не в сети

Зарегистрирован: 12 дек 2009, 23:44
Сообщения: 152
Откуда: Киев
ФИО: Алексей Диомидов
Спс. Я видел. Но там так аппаратный TWI и не запустился.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO