Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 21.06.2011, 13:05  
TEHb
Почётный гражданин KAZUS.RU
 
Аватар для TEHb
 
Регистрация: 27.06.2005
Сообщений: 1,389
Сказал спасибо: 19
Сказали Спасибо 210 раз(а) в 156 сообщении(ях)
TEHb на пути к лучшему
По умолчанию Re: i2c debugger в proteus

Сообщение от Andrik75 Посмотреть сообщение
Скажите, а есть ли компонент для Proteus-а, который мог бы симулировать работу ну практически любого I2C устройства, тоесть в нем была бы возможность настраивать адресс, геристры, задержки и т.д.. Вот я счас мучаюсь с таким светосенсором как MAX9635 и приходится париться с перепрошивкой каждый раз. А хотелось бы попроще и с меньшим гемором.
I2CSLAVE + кучка логики
Реклама:
TEHb вне форума  
Непрочитано 18.11.2012, 16:45  
Kachalov
Прохожий
 
Регистрация: 09.05.2007
Сообщений: 7
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Kachalov на пути к лучшему
По умолчанию Re: i2c debugger в proteus

Столкнулся с проблемкой - как в I2C дебагере настроить ответ АСК при посылка от пика ?
В архиве проет и прошивка
Миниатюры:
Нажмите на изображение для увеличения
Название: 13.gif
Просмотров: 215
Размер:	81.9 Кб
ID:	40611  
Вложения:
Тип файла: zip 1.ZIP (13.7 Кб, 96 просмотров)
Kachalov вне форума  
Непрочитано 08.07.2020, 22:52  
dmitrij999
Прохожий
 
Регистрация: 08.07.2020
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
dmitrij999 на пути к лучшему
По умолчанию Re: i2c debugger в proteus

Доброго времени суток!

При попытке получения байта по I2C дебаггер зависает из-за нарушения арбитража, хотя я вроде все делаю правильно. Сделал последовательность - в дебаггере она сдвинута на бит вправо, а слева добавляется единица.

Код для работы с I2C на ATmega32A

Код:
#define I2CSLAVE_ADDR		0x4E

#define PORT_DDR			0xB0 // PORTB Settings
#define PORT_IN				0xB1 // Get PINB
#define PORT_OUT			0xB2 // Set PORTB
#define GET_ANALOG			0xAF // Get all analog inputs

...


void i2c_slave_action(unsigned char rw_status)
{
	switch(regaddr) {
		// PORT
		case PORT_DDR:
			if (rw_status == 0)
				// read
				regdata = DDRB;
			else
				// write
				DDRB = regdata;
			break;

		case PORT_IN:
			if (rw_status == 0)
				// read
				regdata = PINB;
			break;

		case PORT_OUT:
			if (rw_status == 1)
				// write
				PORTB = regdata;
		case GET_ANALOG:
		   if (rw_status == 0) {
		      regdata = 0b10101100;
		      //regdata = (analog_block % 2 == 0 ? analog_h[analog_block] : analog_l[analog_block]);
		      analog_block++;
		      if (analog_block › 15) analog_block = 0;
		   }
		     break;
	}
}

ISR(TWI_vect)
{
	static unsigned char i2c_state;
	unsigned char twi_status;

	// Disable Global Interrupt
	cli();

	// Get TWI Status Register, mask the prescaler bits (TWPS1,TWPS0)
	twi_status=TWSR & 0xF8;     

	switch(twi_status) {
		case TW_SR_SLA_ACK:	// 0x60: SLA+W received, ACK returned
			i2c_state=0;	// Start I2C State for Register Address required
			break;

		case TW_SR_DATA_ACK:	// 0x80: data received, ACK returned
			if (i2c_state == 0) {
				regaddr = TWDR;	// Save data to the register address
				i2c_state = 1;
			} else {
				regdata = TWDR;	// Save to the register data
				i2c_state = 2;
			}
			break;

		case TW_SR_STOP:	// 0xA0: stop or repeated start condition received while selected
			if (i2c_state == 2) {
				i2c_slave_action(1);	// Call Write I2C Action (rw_status = 1)
				i2c_state = 0;		// Reset I2C State
			   analog_block = 0;
			}
			break;

		case TW_ST_SLA_ACK:	// 0xA8: SLA+R received, ACK returned
		case TW_ST_DATA_ACK:	// 0xB8: data transmitted, ACK received
			if (i2c_state == 1) {
				i2c_slave_action(0);	// Call Read I2C Action (rw_status = 0)
				TWDR = regdata;		// Store data in TWDR register
				i2c_state = 0;		// Reset I2C State
			}
			break;

		case TW_ST_DATA_NACK:	// 0xC0: data transmitted, NACK received
		case TW_ST_LAST_DATA:	// 0xC8: last data byte transmitted, ACK received
		case TW_BUS_ERROR:	// 0x00: illegal start or stop condition
		default:
			i2c_state = 0;	// Back to the Begining State
	}
	// Clear TWINT Flag
	TWCR |= (1‹‹TWINT);
	// Enable Global Interrupt
	sei();
}
Последовательность - regdata = 0b10101100; А команда - получение данных с АЦП. Последовательность создавалась для проверки.

Это баг дебаггера или что-то не так с кодом?
Миниатюры:
Нажмите на изображение для увеличения
Название: Аннотация 2020-07-08 224938.png
Просмотров: 0
Размер:	160.3 Кб
ID:	154411  
dmitrij999 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AT89C51RD2 & Proteus & XDATA Muzicant Proteus, KiCAD и другие ECAD 11 06.10.2017 18:38
Proteus не работает в связке с MPLAB-ом SergSit Proteus 11 11.05.2011 13:44
Почему Proteus тормозит nsklital Proteus 1 02.11.2009 21:41
LPT b PROTEUS romshe Proteus 0 01.11.2009 18:22
[Решено] Проблема с eeprom в Proteus Memfis666 Proteus, KiCAD и другие ECAD 1 01.10.2009 15:38


Часовой пояс GMT +4, время: 05:45.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot