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

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

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

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

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

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

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

 
Опции темы
Непрочитано 31.10.2014, 22:11  
Fangir
Временная регистрация
 
Регистрация: 31.10.2014
Сообщений: 59
Сказал спасибо: 24
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Fangir на пути к лучшему
По умолчанию Программный SPI

Нужна программная реализации spi в режиме мастера, использую этот пример, за исключением того, что код мастера реализован программно, но ничего не работает

Вот код мастера
Код:
#include ‹mega8.h›
#include ‹delay.h›



// Ножки интерфейса SPI
#define SPI_PORT PORTB
#define SPI_DDR  DDRB 
#define SPI_PIN  PINB 

//#define CS   0  // Выбор ведомого
#define MOSI 3  // Передатчик ведущего, приемник ведомого
#define MISO 4  // Приемник ведущего, передатчик ведомого
#define SCK  5  // Тактовый сигнал


void spi_init() {
	SPI_DDR |= (1 ‹‹ MOSI) | (1 ‹‹ SCK); // На выход
	// SPI_DDR |= (1 ‹‹ CS); // На выход
	SPI_DDR &= ~(1 ‹‹ MISO); // На вход
}


unsigned char endData = 0;
char i;
unsigned char spi(char data) {
	SPI_PORT &= ~(1 ‹‹ SCK); // SCK = 0
	delay_us(20);
	//SPI_PORT &= ~(1 ‹‹ CS); // CS = 0
	endData = 0;


	for(i = 0; i‹8; i++) {

		SPI_PORT &= ~(1 ‹‹ MOSI); // MOSI = 0
		if((data&(0b10000000)) == 0b10000000) {
			SPI_PORT |= (1 ‹‹ MOSI); // MOSI = 1
		}
		endData = (endData ‹‹ (SPI_PIN & (1 ‹‹ MISO)));

		delay_us(5);
		SPI_PORT &= ~(1 ‹‹ SCK); // SCK = 0
		data = (data ‹‹ 1);
		delay_us(15);
		SPI_PORT |= (1 ‹‹ SCK); // SCK = 1
	}

	SPI_PORT |= (1 ‹‹ MOSI); // MOSI = 1
	delay_us(20);
	//SPI_PORT |= (1 ‹‹ CS);   // CS = 1
	return endData;
}




void main(void) {
	spi_init();

	while(1) {
		PORTB.2 = 0;
		spi('1');
		delay_ms(500);
		spi('0');
		delay_ms(500);
		PORTB.2 = 1;

		PORTB.1 = 0;
		spi('1');
		delay_ms(500);
		spi('0');
		delay_ms(500);
		PORTB.1 = 1;
	}
}
Реклама:
Fangir вне форума  
Непрочитано 31.10.2014, 22:54  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,016
Сказал спасибо: 3,025
Сказали Спасибо 3,199 раз(а) в 2,171 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Программный SPI

Сообщение от Fangir Посмотреть сообщение
Нужна программная реализации spi в режиме мастера,
А смысл городить программыный костыль для эмуляции такого простого интерфейса?
Сообщение от Fangir Посмотреть сообщение
использую этот пример, за исключением того, что код мастера реализован программно, но ничего не работает
Возможно потому, что PORTB.1 и PORTB.2 не настроены как выходы. Значит "ведомые" не выбраны для обмена и ничего не делают.
ForcePoint на форуме  
Непрочитано 31.10.2014, 23:13  
Fangir
Временная регистрация
 
Регистрация: 31.10.2014
Сообщений: 59
Сказал спасибо: 24
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Fangir на пути к лучшему
По умолчанию Re: Программный SPI

Точно, я рептилоид и забыл про настройку портов на вывод х)
Реализую для ATtiny13, там нет SPI

Но все равно работает странно, срабатывают оба slave, потом верхняя отключается, после опять верхняя включается и они так и остаются работать

Последний раз редактировалось Fangir; 31.10.2014 в 23:21.
Fangir вне форума  
Непрочитано 31.10.2014, 23:32  
Fangir
Временная регистрация
 
Регистрация: 31.10.2014
Сообщений: 59
Сказал спасибо: 24
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Fangir на пути к лучшему
По умолчанию Re: Программный SPI

Нашел ещё одну реализацию, выглядит красиво, но почему-то вообще не работает, что не так? Может надо что-то подправить? Потому что на радиокоте говорят что все работает
Код:
#include ‹mega8.h›
#include ‹delay.h›



#define MOSI PORTB.3
#define MISO PINB.4
#define SCK  PORTB.5

unsigned char spi(unsigned char data){
   unsigned char miso = 0;
   unsigned char mask = 0x01; // если надо начинать со старшего бита - заменить на 0x80

   for( ; mask; mask ‹‹= 1){ // если надо начинать со старшего бита - заменить на mask ››= 1;
       MOSI = (data & mask)?0:1;
       SCK = 1;
       if(MISO) miso |= mask;
       SCK = 0;
   }
   return miso;
}


void main(void) {
    DDRB.3 = 1;
    DDRB.4 = 0;
    DDRB.5 = 1;

    DDRB.2 = 1;
    DDRB.1 = 1;         
    
    while(1) {
        PORTB.2 = 0;
        spi('1');
        delay_ms(1000);
        spi('0');
        delay_ms(1000);
        PORTB.2 = 1;

        PORTB.1 = 0;
        spi('1');
        delay_ms(1000);
        spi('0');
        delay_ms(1000);
        PORTB.1 = 1;
    }
}
Fangir вне форума  
Непрочитано 02.11.2014, 08:32  
bass1981
Гражданин KAZUS.RU
 
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
bass1981 на пути к лучшему
По умолчанию Re: Программный SPI

И что за устройство подключается к SPI ????
Может задержки нужны ???
bass1981 вне форума  
Непрочитано 02.11.2014, 10:02  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: Программный SPI

Сообщение от Fangir Посмотреть сообщение
Но все равно работает странно, срабатывают оба slave
А чё б им не срабатывать. Слабо в Википедию заглянуть? Читаем вЫнимательно про линию SS, она же CS, "...она же Элла Кацнельбоген, она же Людмила Огуренкова, она же Изольда Меньшова, она же Валентина Панеяд. — Сводня, воровка, четырежды судимая...".
Ну, а далее правьте верхний код с количеством CS-ов равным кол-ву СЛИВов (боюсь, что у ТиТьки-13 копытов может не хватить).
Во втором примере кода CS(SS) вообще похоронен.
ЗЫ Да и в первом Вы его закоментили по кой то ч..н. А, ну да - етож реализация от avr123, он (или Вы???) выборы чипов реализовал через другие ноги в мейне, правда слегка криФовато...
ЗЫ2 Уф, кажись проснулся полностью...
Окончательный вердикт: вина Ваша в первом коде программные CS-ы (пины не развернуты на выход) - надо DDRB.2 и 1 выставить в 1 (у avr123 это сделано в начале майна, а Вы на это ни обратили внимания).
Во втором коде сделали то правильно, а вот поднять, как и в первом, впрочем, при инициализации те же ноги в 1 забыли. В итоге первая же засылка данных идет обеим сливам.
Код:
//Вот так надо было
DDRB.2 = 1;
PORTB.2 = 1;
DDRB.1 = 1; 
PORTB.1 = 1;
Ну и в самой функции spi, моГет быть действительно "притормозить" делеями, а то при хорошей тактовой МК скорость спая будет офигительной, начнутся проблемы.
Удачи!!!

Последний раз редактировалось Halex07; 02.11.2014 в 13:02.
Halex07 вне форума  
Сказали "Спасибо" Halex07
Easyrider83 (25.01.2015)
Непрочитано 02.11.2014, 22:24  
Fangir
Временная регистрация
 
Регистрация: 31.10.2014
Сообщений: 59
Сказал спасибо: 24
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Fangir на пути к лучшему
По умолчанию Re: Программный SPI

Спасибо, разобрался)
Fangir вне форума  
Непрочитано 25.01.2015, 17:46  
12val12
Временная регистрация
 
Регистрация: 17.03.2009
Адрес: Киев
Сообщений: 68
Сказал спасибо: 18
Сказали Спасибо 1 раз в 1 сообщении
12val12 на пути к лучшему
По умолчанию Re: Программный SPI

Спрошу в данной теме .хотя это вопрос скорее по аппаратному SPI
суть вопроса
при использовании апаратного spi в меге 16 (8535)
бит 4 порта B (PB4) занят функцией ~SS ?
вопрос 1
-чем занята эта нога в в режиме SPI Type: Master?
вопрос 2
-что я потеряю если буду использовать программный SPI по тем же ножкам (MOSI SCK) ?
вопрос 3
- можно ли в режиме аппаратного SPI (SPI Type: Master)
использовать (PB4 ||~SS) (PB6||MISO) под свои нужды ?

Последний раз редактировалось 12val12; 25.01.2015 в 17:50.
12val12 вне форума  
Непрочитано 25.01.2015, 18:47  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,016
Сказал спасибо: 3,025
Сказали Спасибо 3,199 раз(а) в 2,171 сообщении(ях)
ForcePoint на пути к лучшему
Стрелка Re: Программный SPI

Сообщение от 12val12 Посмотреть сообщение
Спрошу в данной теме .хотя это вопрос скорее по аппаратному SPI. суть вопроса
при использовании апаратного spi в меге 16 (8535)
бит 4 порта B (PB4) занят функцией ~SS ?
В режиме ведомого - занят этой функцией. В режиме ведущего - на Ваше усмотрение.
Сообщение от 12val12 Посмотреть сообщение
вопрос 1
-чем занята эта нога в в режиме SPI Type: Master?
Если конфигурируете её на выход, то используете по своему усмотрению. Если оставляете входом, то низкий уровень на ней переключит SPI в режим ведомого и сгенерирует прерывание (для реализации multi-master, например).
Сообщение от 12val12 Посмотреть сообщение
вопрос 2
-что я потеряю если буду использовать программный SPI по тем же ножкам (MOSI SCK) ?
Место в ПЗУ, скорость и гибкость.
Сообщение от 12val12 Посмотреть сообщение
вопрос 3
- можно ли в режиме аппаратного SPI (SPI Type: Master)
использовать (PB4 ||~SS) (PB6||MISO) под свои нужды ?
PB4 - см. ответ 1. PB6 - надо смотреть функциональную схему в разделе "I/O ports".

Ну и rtfm.
ForcePoint на форуме  
Сказали "Спасибо" ForcePoint
12val12 (25.01.2015)
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто-нибудь работал с RF модулями nRF2401A? Easyrider83 Автоматика и аппаратура связи 1481 04.09.2021 23:24
ATmega32, программный SPI для карты памяти pavned AVR 3 11.02.2014 12:04
Atmega16 - много переферийных устройств SPI pavned AVR 21 23.01.2013 07:00
Программный SPI Slave для AVR artyomugr Микроконтроллеры, АЦП, память и т.д 17 28.06.2012 13:55
Опрос АЦП через программный SPI AVR Iamuser Микроконтроллеры, АЦП, память и т.д 8 23.03.2007 18:33


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


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