Страница 1 из 1

I2C в CodevisionAVR

Добавлено: Вс дек 15, 2013 19:15:16
romasimeiz
Здравствуйте ! Прошу извинить за наверняка существующий вопрос.
У меня есть 2 простеньких макета с ATMega16 на борту.
Мне нужно написать 2 проекта на CodevisionAVR, чтобы прошив каждый по очереди я мог с одного макета передать информацию на другой при помощи I2C интерфейса. Конкретно : я включил оба макета, нажал на какую нибудь кнопку и у меня на другом макете зажёгся светодиод.
Какую нужно скачать библиотеку и как её конкретно использовать. Инфо в интернете есть, но всё сложно и не понятно. Без полных исходников с библиотеками.
Я очень плохо ещё пока понимаю в программировании микроконтроллеров :(
Буду благодарен за любую помощь! Спасибо! )

Re: I2C в CodevisionAVR

Добавлено: Вс дек 15, 2013 19:24:15
blackx
А кто сказал что будет просто? :)))
http://easyelectronics.ru/avr-uchebnyj- ... c-i2c.html
Вот, для начала нужно разобраться в теории, и понять какие биты в регистрах TWI за что отвечают. Там же и примеры кода на Си есть. Читать до просветления :write:

Re: I2C в CodevisionAVR

Добавлено: Вс дек 15, 2013 19:57:34
romasimeiz
Вот код для мастера... Запутался ибо выдаёт ошибки на define-ах и функцииях...

Не могу понять где оно будет соединять с другим макетом и где мне отправлять комбинацию загорающихся диодов : 0b00001000

Код: Выделить всё

#define F_CPU 4000000UL

#include <string.h>
[b]#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <avr/interrupt.h>[/b]

#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);
	}
}

Re: I2C в CodevisionAVR

Добавлено: Пн дек 16, 2013 14:32:49
Eugene.Negrobov
Хе, а точно по I2C контроллеры соединять хочешь? SPI гораздо более подходит для подобных дел, у него скорости передачи в десяток раз выше, да и проще он гораздо. На крайняк всегда есть UART.
Я I2C без специализированных библиотек только для работы с 24LC512 использовал, могу сбросить функции, вдруг пригодятся. Заюзана софтварная либа, так что ножки любые можно использовать. Аппаратный I2C вообще адовый в AVR, там хрен разберешься. :shock:

Re: I2C в CodevisionAVR

Добавлено: Вт дек 17, 2013 00:22:11
romasimeiz
Буду вам очень благодарен за то что скинете пример!
I2C задали в универе :(