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

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

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

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

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

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

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 03.04.2009, 20:23   #1
atsys
Частый гость
 
Регистрация: 19.12.2008
Сообщений: 21
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
atsys на пути к лучшему
По умолчанию Вопрос по atmega8 + spi + max7219

Помогите пожалуйста разобраться с проблемой: пытаюсь написать простенькую программу для вывода значения на LED-экран (4-ре 7-сегментных индикатора), подключенный через max7219 к atmega8 (мастер) по SPI.
Но при выводе первой же комманды spi(0x09) получаю ошибку: [AVR SPI] SPDR: Write collision, Written data (09) is ignored.
огадываюсь, что надобы проверять SPIF, но как это сделать в CVAVR не представляю.

На форуме как-то промелькнула тема, что Proteus 7.4 SP3 некорректно вообще эмулирует mega8, но эта же ошибка вылетает и на mega16.

Средства разработки:
1. CodeVisionAVR V2.03.4
2. Proteus 7.4 SP3 (Build 7692) with Advanced Simulation(заплатка с этого форума)
3. Windows XP SP2 v5.01, Build 2600

Прикрепленный файл: 3173262.zip
Реклама:
atsys вне форума  
Непрочитано 03.04.2009, 21:00   #2
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

по-моему, здесь что-то с протеусом. Я похожую проблему решил так.

Прикрепленный файл: 7449977.rar
__________________
warez
urry вне форума  
Непрочитано 03.04.2009, 21:38   #3
atsys
Частый гость
 
Регистрация: 19.12.2008
Сообщений: 21
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
atsys на пути к лучшему
По умолчанию

Сообщение от urry
по-моему, здесь что-то с протеусом. Я похожую проблему решил так.
Интересное решение. Спасибо. В Протеусе работает.
Правда управление SS приходится вручную делать.
Я сделал вот так:
Код:
PORTB.2 = 1;   //SS - INACTIVE
PORTB.2 = 0;
write_byte(0x09);
write_byte(0xFF);
PORTB.2 = 1;   //SS - INACTIVE

PORTB.2 = 0;
write_byte(0x0A);
write_byte(0x0F);
PORTB.2 = 1;   //SS - INACTIVE

PORTB.2 = 0;
write_byte(0x0B);
write_byte(0x07);
PORTB.2 = 1;   //SS - INACTIVE

PORTB.2 = 0;
write_byte(0x0C);
write_byte(0x01);
PORTB.2 = 1;   //SS - INACTIVE
Может есть решение более красивое?

Прикрепленный файл: 7449977.rar
atsys вне форума  
Непрочитано 03.04.2009, 22:36   #4
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

А зачем его дергать ? Для макса ? Можно обойтись одной командой, убирая бит спе. А можно так
Код:
#define SS 2
#define BITSET(var,bitno) ((var) |= 1 ‹‹ (bitno))   
#define BITCLR(var,bitno) ((var) &= ~(1 ‹‹ (bitno)))
//---------------------------------------------------
void write_byte(unsigned char X) 
{
    BITCLR(PORTB,SS);    
 SPDR=X;
   while (!(SPSR &(1‹‹ SPIF)));
    BITSET(PORTB,SS); 
}
__________________
warez
urry вне форума  
Непрочитано 04.04.2009, 22:11   #5
atsys
Частый гость
 
Регистрация: 19.12.2008
Сообщений: 21
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
atsys на пути к лучшему
По умолчанию

Сообщение от urry
А зачем его дергать ? Для макса ? Можно обойтись одной командой, убирая бит спе. А можно так
Код:
#define SS 2
#define BITSET(var,bitno) ((var) |= 1 ‹‹ (bitno))   
#define BITCLR(var,bitno) ((var) &= ~(1 ‹‹ (bitno)))
//---------------------------------------------------
void write_byte(unsigned char X) 
{
    BITCLR(PORTB,SS);    
 SPDR=X;
   while (!(SPSR &(1‹‹ SPIF)));
    BITSET(PORTB,SS); 
}
Спасибо за подсказку. Красивое решение!
atsys вне форума  
Непрочитано 24.05.2010, 15:27   #6
VladUpiter523
Прохожий
 
Регистрация: 24.05.2010
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
VladUpiter523 на пути к лучшему
По умолчанию Re: Вопрос по atmega8 + spi + max7219

привет! Помогите кто чем может. Где еще можно глянуть [censored] led дисплей кроме этого ?

Последний раз редактировалось nml; 24.05.2010 в 15:53. Причина: реклама
VladUpiter523 вне форума  
Непрочитано 16.09.2010, 14:01   #7
StepanSuhoy58
Прохожий
 
Регистрация: 16.09.2010
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
StepanSuhoy58 на пути к лучшему
По умолчанию Re: Вопрос по atmega8 + spi + max7219

А мужики-то не знают
StepanSuhoy58 вне форума  
Закрытая тема

Закладки

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помехозащищённость SPI Chudilo Микроконтроллеры, АЦП, память и т.д 16 02.10.2008 23:46
Програмирование по SPI EKuzmich Микроконтроллеры, АЦП, память и т.д 2 09.07.2008 21:35
Баг SPI ruscad Микроконтроллеры, АЦП, память и т.д 1 12.10.2007 22:58
Вопрос по SPI ezin Микроконтроллеры, АЦП, память и т.д 3 29.09.2007 22:27
atmega8 <-> at45db161, не рабоотает SPI ilord Микроконтроллеры, АЦП, память и т.д 0 15.02.2007 15:33


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


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