Страница 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 за что отвечают. Там же и примеры кода на Си есть. Читать до просветления

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, там хрен разберешься.

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