Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

I2C между МК, отправка массива чисел

Непрочитано 23.03.2013, 22:49  
bestrating
Прохожий
 
Регистрация: 23.03.2013
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
bestrating на пути к лучшему
По умолчанию I2C между МК, отправка массива чисел

Только начал изучать I2C, хочу организовать связь между atmega'ми.
Итак, нашел проект I2C между мк (Atmega16+Atmega8 ).

Отсылается переменная char, то есть символы. Мне нужно передать массив 16 битных чисел. Это что-то меняет?

Например, что-то вроде

Код:
uint16_t ReseiveData[16] = {0x1111, 0x1111, 0x1111, 0x1111,
				0x0000, 0x0000, 0x0000, 0x0000,
				0x00ff, 0x00ff, 0x11ff, 0x22ff,
				0xffff, 0xffff, 0xffff, 0xffff,};
Мастер
Код:
#define F_CPU 4000000UL

#include ‹string.h›
#include ‹avr/io.h›
#include ‹util/delay.h›
#include ‹avr/pgmspace.h›
#include ‹stdio.h›
#include ‹avr/interrupt.h›

#include "i2c.h"
#include "UART_routines.h"

#define LOCAL_ADDR 0xA0 
#define TARGET_ADDR 0x07 

unsigned char buf[100];

int main(void)
{
	uart0_init();
	_delay_ms(1000);
	sendStr0("*************TWI MASTER RUNNING*************");

	// initialize i2c function library 
  	i2cInit(); 
  	// set local device address and allow response to general call 
  	i2cSetLocalDeviceAddr(LOCAL_ADDR, TRUE); 

	unsigned char mBuf[100];
	sprintf(mBuf,"%s","hello!");mBuf[strlen(mBuf)]=0x00;
    i2cMasterSend(TARGET_ADDR,strlen(mBuf)+1/*(0x00)*/,&mBuf[0]);

    sprintf(buf,"master sended: %s (length %d)",mBuf,strlen(mBuf)+1/*(0x00)*/);
    transmitString(buf);TX_NEWLINE;

	while(1)
	{
		_delay_ms(100);
	}
}
Слейв
Код:
#define F_CPU 4000000UL

#include ‹string.h›
#include ‹avr/io.h›
#include ‹util/delay.h›
#include ‹avr/pgmspace.h›
#include ‹stdio.h›
#include ‹avr/interrupt.h›

#include "i2c.h"
#include "UART_routines.h"

#define LOCAL_ADDR 0x07
#define TARGET_ADDR 0xA0 

unsigned char buf[40];

// slave operations 
void i2cSlaveReceiveService(u08 receiveDataLength, u08* receiveData) 
{ 
   sprintf(buf,"slave received: %s (length %d)",receiveData,receiveDataLength);
   transmitString(buf);TX_NEWLINE;
} 

int main(void)
{
	uart0_init();
	//_delay_ms(10);
	sendStr0("*************TWI SLAVE RUNNING*************");

	// initialize i2c function library 
  	i2cInit(); 
  	// set local device address and allow response to general call 
  	i2cSetLocalDeviceAddr(LOCAL_ADDR, TRUE); 
	
	i2cSetSlaveReceiveHandler( i2cSlaveReceiveService ); 

	while(1)
	{
		_delay_ms(100);
	}
}
Пытался подкрутить под себя, пока не работает. Может кто что подскажет?

Вот исходник проекта
http://www.box.net/shared/nuac0pytxh

Взял отсюда
http://nagits.wordpress.com/2010/10/09/avr_twi/
Реклама:

Последний раз редактировалось bestrating; 23.03.2013 в 22:52.
bestrating вне форума  
Непрочитано 23.03.2013, 23:04  
jump
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,011
Сказал спасибо: 0
Сказали Спасибо 4,955 раз(а) в 2,379 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: I2C между МК, отправка массива чисел

(тихо напевая): ваще-то I2C байтовая шина... и регистр данных там такой же... и проверять надо флаги... и пример есть в аппнотах атмел...
jump вне форума  
Непрочитано 24.03.2013, 16:49  
bestrating
Прохожий
 
Регистрация: 23.03.2013
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
bestrating на пути к лучшему
По умолчанию Re: I2C между МК, отправка массива чисел

Может это и не лучшее решение, передается информация в виде символов, на приемнике преобразуется в число. Дальше, например, можно программировать ЦАП.

При нажатии на кнопку загружается новое значение из массива:


Кому нужно, вот проект:
http://zalil.ru/34376791
bestrating вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема в организации I2C между ds1307 и pic16f1826 serjgorel Микроконтроллеры, АЦП, память и т.д 16 09.04.2012 21:50
Отправка числа 0 (ноль) по уарту code-by Микроконтроллеры, АЦП, память и т.д 47 18.02.2011 15:09
Обработка массива данных Zemlyanov Микроконтроллеры, АЦП, память и т.д 47 09.09.2010 18:59
Отправка SMS через PIC16F877 Vilovski Микроконтроллеры, АЦП, память и т.д 10 15.10.2007 08:00
Отправка SMS c Siemens Muzicant Автоматика и аппаратура связи 1 28.01.2007 21:37


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.