SPI или i2C ?

Обсуждаем контроллеры компании Atmel.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

7seg писал(а):Мне просто пришлось только написать алгоритм
я уже в курсе вашего умения программировать
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 303
Зарегистрирован: Ср май 03, 2017 03:22:26

Сообщение 7seg »

В протеусе почему то не захотел симулироватся 597 регистр, решил попробовать пока на 165ых.
Как я понял защелка для 165 должна быть инвертирована ?
Изображение

Добавлено after 3 minutes 24 seconds:
И все равно при каскодирование симулируется только 1вый регистр.
Последний раз редактировалось 7seg Пт окт 27, 2017 11:51:36, всего редактировалось 1 раз.
andrei23061996@gmail.com
.................................................................................................................
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15605
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

А как насчет матрицы контактов 8*8? (один 595 и один 597/165).
Или всего два порта МК/порт МК плюс сдвиговый регистр.
:tea:
Да и вывод таким способом соорудить удобно...
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 303
Зарегистрирован: Ср май 03, 2017 03:22:26

Сообщение 7seg »

К сожалению матрица не подходит,пока жду регистры мучаю протеус ( на всякий пожарный заказал 165,595,597x10шт) .
Просто интересно это глюк протеуса с регистрами или все таки не правильно микры объединил ?
andrei23061996@gmail.com
.................................................................................................................
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

7seg писал(а):В протеусе почему то не захотел симулироватся 597 регистр
я вас предупреждал[uquote="ARV",url="/forum/viewtopic.php?p=3214309#p3214309"]Сразу предупреждаю: протеус некорректно моделирует поведение регистров 74HC597, которые я рекомендовал вам для опроса дискретных входов - протеус не поддерживает корректно их каскадирование. один в протеусе нормально себя показывает, а цепочка из двух и более ведет себя, как один - первый. просто имейте ввиду.[/uquote]
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15605
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Если аппаратный модуль МК используется... Желательно вывод /SS (PB2) не трогать (функцию параллельной записи переставить на другой вывод).
:roll:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 303
Зарегистрирован: Ср май 03, 2017 03:22:26

Сообщение 7seg »

AVR , я помню ваши предупреждение т.к логика работы одинакова решил в протеусе использовать 165.
А вот почему лучше переназначить SS(PB2) Это интересно.
andrei23061996@gmail.com
.................................................................................................................
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Так как логика одинакова, нет смысла лепить в протеусе несколько регистров, достаточно отладить работу с единственным - остальное регулируется простым изменением константы в программе.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 303
Зарегистрирован: Ср май 03, 2017 03:22:26

Сообщение 7seg »

Я хотел убедиться в правильности подключения ( но протеус упорно не дает мне это сделать ) чтобы развести пп под макет.
Как я понял подключение правильное , и могу начинать рисовать ПП, пока жду микрухи начинать приводить прошивку под мк в порядок.

Добавлено after 2 minutes 6 seconds:
НА самом деле просто странно протеус позволяет эмулировать работу архитектуры авр но при этом не может с эмулировать работу тригеров )) этоже аналог садеповской логики ИР10 ))
andrei23061996@gmail.com
.................................................................................................................
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 303
Зарегистрирован: Ср май 03, 2017 03:22:26

Сообщение 7seg »

Решил все таки еще не много помучать эмулятор.
Запустил тактирование на 7Hz, все-таки смог считать два регистра, но вот интересно почему у меня не получилось это сделать по SPI?)
Изображение
Изображение

Добавлено after 15 minutes 34 seconds:
Кажись понял у меня защелка срабатывает каждые 8бит и он просто не может считать дальше(это в протеусе так), а как дела обстоят с настоящим железом ?)

Добавлено after 5 hours 15 minutes:
получилось вроде, в протеусе с данным кодом все считывается и пишется.

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

#define F_CPU 8000000UL

#include <avr/io.h>
#include <util/delay.h>

#define SPI_PORT PORTB
#define SPI_DDR DDRB

#define SPI_MISO PB4
#define SPI_MOSI PB3
#define SPI_SCK PB5
#define SPI_SS PB2

struct UnionBits
{
	unsigned DO0: 1;
	unsigned DO1: 1;
	unsigned DO2: 1;
	unsigned DO3: 1;
	unsigned DO4: 1;
	unsigned DO5: 1;
	unsigned DO6: 1;
	unsigned DO7: 1;
};

union Byte {
	uint8_t ByteRegister;
	struct UnionBits Register;
};

union Byte OneOUT;
union Byte TwoOUT;
union Byte ThreeOUT;
union Byte OneIN;
union Byte TwoIN;
union Byte ThreeIN;
union Byte FourIN;
union Byte FifthIN;

void StartInitIO()
{
	OneOUT.ByteRegister=0x00;
	TwoOUT.ByteRegister=0x00;
	ThreeOUT.ByteRegister=0x00;
	OneIN.ByteRegister=0x00;
	TwoIN.ByteRegister=0x00;
	ThreeIN.ByteRegister=0x00;
	FourIN.ByteRegister=0x00;
	FifthIN.ByteRegister=0x00;
}

/*инициализация SPI модуля в режиме master*/
void SPI_Init(void)
{

   /*настройка портов ввода-вывода
   все выводы, кроме MISO выходы*/
   SPI_DDR |= (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(0<<SPI_MISO);
   SPI_PORT |= (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS)|(1<<SPI_MISO);

   /*разрешение spi,старший бит вперед,мастер, режим 0*/
   SPCR = (1<<SPE)|(0<<DORD)|(1<<MSTR)|(0<<CPOL)|(0<<CPHA)|(0<<SPR1)|(1<<SPR0);
   SPSR = (0<<SPI2X);
}
uint8_t SPI_UpdataByte(uint8_t data)
{
	uint8_t report;
	SPDR = data;
	while(!(SPSR & (1<<SPIF)));
	report = SPDR;
	return report;
}

void SpiOutRegister()
{
	SPI_PORT &= ~(1<<SPI_SS);
	OneIN.ByteRegister=SPI_UpdataByte(0);
	TwoIN.ByteRegister=SPI_UpdataByte(0);
	ThreeIN.ByteRegister=SPI_UpdataByte(ThreeOUT.ByteRegister);
	FourIN.ByteRegister=SPI_UpdataByte(TwoOUT.ByteRegister);
	FifthIN.ByteRegister=SPI_UpdataByte(OneOUT.ByteRegister);
	SPI_PORT |= (1<<SPI_SS);
}
int main(void)
{
	SPI_Init();
	StartInitIO();
	_delay_us(100);
	while(1)
	{
		SpiOutRegister();
		OneOUT.ByteRegister=OneIN.ByteRegister;
		TwoOUT.ByteRegister=TwoIN.ByteRegister;
		ThreeOUT.ByteRegister=ThreeIN.ByteRegister;
		OneOUT.Register.DO3
		
	}
	return 0;
}
andrei23061996@gmail.com
.................................................................................................................
Ответить

Вернуться в «AVR»