роботы робототехника микроконтроллеры


 Страниц (3): [1] 2 3 »   

> Без описания
ilnur888 Post Id



Маршал


Сообщений всего: 103
Дата рег-ции: Окт. 2010  



Всем добрый день!
Прошу помогите, немогу понять в чем дело, почему код не работает так как надо.
Код для MK1 в режиме Master:
CODE:
;=======================================================================
;Autor: Ilnur 2011
;Project: Mega8 работа с SPI в режиме Master
;Name: SPImega8Master
;=======================================================================
.device ATmega8
.include "m8def.inc"
.list

.def temp=r16
.def data=r17

.org $0
rjmp init

INIT: ;стек
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp

;порты
ldi temp,$00
out DDRD,temp
ldi temp,0b11111111
out PortD,temp

ldi temp,(1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0);
out SPCR,temp
;(1<<SPE) - разрешение работы SPI
;(1<<MSTR) - режим ведущего
;(1<<CPOL) - во время ожидания на SCK присутствует ВЫСОКИЙ уровень
;(1<<CPHA) - данные считываются по спадающему фронту SCK
;(1<<SPR1)|(1<<SPR0) - частота SCK равна СК/128
;режим работы №3 :)
ldi temp,(0<<SPI2X)
out SPSR,temp
;(0<<SPI2X) - двойная скорость отключена
;SPCR (0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0);
ldi temp,(1<<PB2)+(1<<PB3)+(1<<PB5)
out DDRB,temp ;MOSI, SS и SCK на выход
ldi temp,(0<<PB4) ;MISO на вход
out PortB,temp ;т.к. в режиме ведущего
;===

Main:
rcall Output
rjmp Main

Output:
ldi data,PortD
out SPDR,data ;запись данных в регистр данных
Wait_Transmit:
sbis SPSR,SPIF ;ждем окончания передачи байта
rjmp Wait_Transmit
ret


Код для MK2 в режиме Slave:
CODE:
;=======================================================================
;Autor: Ilnur 2011
;Project: Mega8 работа с SPI в режиме Slave
;Name: SPImega8Slave
;=======================================================================
.device ATmega8
.include "m8def.inc"
.list

.def temp=r16
.def data=r17

.org $0
rjmp init

INIT: ;стек
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp

;порты
ldi temp,$ff
out DDRD,temp
ldi temp,0b00000000
out PortD,temp

ldi temp,(1<<SPE)|(0<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0);
out SPCR,temp
;(1<<SPE) - разрешение работы SPI
;(0<<MSTR) - режим ведомого
;(1<<CPOL) - во время ожидания на SCK присутствует ВЫСОКИЙ уровень
;(1<<CPHA) - данные считываются по спадающему фронту SCK
;(1<<SPR1)|(1<<SPR0) - частота SCK равна СК/128
;режим работы №3 :)
ldi temp,(0<<SPI2X)
out SPSR,temp
;(0<<SPI2X) - двойная скорость отключена
;SPCR (0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0);
ldi temp,(0<<PB2)+(0<<PB3)+(0<<PB5)
out DDRB,temp ;MOSI, SS и SCK на вход
ldi temp,(1<<PB4) ;MISO на выход
out PortB,temp ;т.к. в режиме ведомого
;===

Main:
rcall Receive
out PortD,data
rjmp Main

Receive:
sbis SPSR,SPIF
rjmp Receive
in data,SPDR
ret


схема на которой все испытывал:


а вот что во время работы твориться (несмотря на то, какую кнопку нажимаешь):


подскажите что не так, может в схеме проблема? или в проге?
(Добавление)
AVR Studio ошибок не находит, все нормально
Правда в Proteus`е пишется что проц загружается на 88%-100%, и иногда жалуется на то, что слишком сильно проц загружен...
В чем дело может быть???

(Отредактировано автором: 11 Апреля, 2011 - 13:45:45)

 
 Top
nestandart Супермодератор Post Id



Супер-модератор


Сообщений всего: 1490
Дата рег-ции: Сент. 2010  



Зачем городить конструкцию из 2 МК ?
Как это должно работать ?
(Добавление)
Кнопки должны быть притянуты к +5v через резисторы.
У вас получается : когда кнопка включена - она притянута к земле ,
а когда выключена - нога МК "болтается в воздухе" и МК принимает "случайные значения".

Я бы подключил кнопки не кземле а к +5v а ноги МК притянул к земле через резисторы.
(Добавление)
На светодиодах должны стоять ограничительные резисторы.
У вас к одному порту подключено 8 светодиодов "на прямую" ,
можно запросто спалить МК

Может быть я ошибаюсь , но я бы не рискнул включать такую конструкцию.
 
 Top
ilnur888 Post Id



Маршал


Сообщений всего: 103
Дата рег-ции: Окт. 2010  



Сделал конструкцию из 2 МК чтобы проверить, работает SPI иль нет.
Это работает так, выводы PortD МК1 соединены с кнопками, в зависимости от того, какая кнопка нажата в данный момент должны гореть светодиоды от МК2, т.е. по SPI передается байт считанный из портов PortD МК2.
Хм, насчет кнопок, счас попробую
(Добавление)

непомогло
Мне кажется дело не в этом, так я и раньше пробовал...
 
 Top
nestandart Супермодератор Post Id



Супер-модератор


Сообщений всего: 1490
Дата рег-ции: Сент. 2010  



Выложите измененную схему.
 
 Top
ilnur888 Post Id



Маршал


Сообщений всего: 103
Дата рег-ции: Окт. 2010  



nestandart, Улыбка)) это же виртуальное устройство, чего вы так боитесь? Вы никогда не работали в Proteus? Улыбка
 
 Top
nestandart Супермодератор Post Id



Супер-модератор


Сообщений всего: 1490
Дата рег-ции: Сент. 2010  



Вы меня не совсем поняли.

В вашей последней схеме , подтяните ноги МК к земле , через резисторы.

Один "конец" резистора между кнопкой и ногой МК , второй к земле.
Так каждую кнопку.
(Добавление)
В Proteus не работал .
Я бы не рискнул собирать реальное устройство по этой схеме.
 
 Top
ilnur888 Post Id



Маршал


Сообщений всего: 103
Дата рег-ции: Окт. 2010  



Nestandart, скажите пожалуйста, а код правильный?

Я не собираюсь собирать это устройство.

(Отредактировано автором: 11 Апреля, 2011 - 14:49:29)

 
 Top
nestandart Супермодератор Post Id



Супер-модератор


Сообщений всего: 1490
Дата рег-ции: Сент. 2010  



На счет кода ничего конкретного не скажу.
Я не пину на асемблере.
 
 Top
ilnur888 Post Id



Маршал


Сообщений всего: 103
Дата рег-ции: Окт. 2010  



А работали ли вы с SPI?
(Добавление)
Мне нужна помощь в коде, скорее всего ошибка там, еще ошибка может быть в соединении SPI и настройкой выводов этого самого SPI как вход/выход...

(Отредактировано автором: 11 Апреля, 2011 - 14:55:25)

 
 Top
nestandart Супермодератор Post Id



Супер-модератор


Сообщений всего: 1490
Дата рег-ции: Сент. 2010  



Переделайте схему , если не поможет знасит проблема в программе.
(Добавление)
Должно быть вот так.

Каждая кнопка.


(Добавление)
Номинал резистора может быть другим .
Можете попробовать 100К.
 
 Top
ilnur888 Post Id



Маршал


Сообщений всего: 103
Дата рег-ции: Окт. 2010  



Хех, заработало!!!
Ошибка-то в проге была!!!
Все, исправил, дело было вход/выход неправильно, соединение SPI правильно, теперь при нажатии на кнопку включ соотв светодиод, т.е. передача байтов работает!!!!
Ща, перепроверю отпишу...
Резисторы на всякий пожарный поставил уж... (хотя в компе ниче и не сгорит) Улыбка))
(Добавление)
Вообщем работает, только вот когда кнопку отожмешь, то лог. 1 все равно остается на выводе (с чего бы так), пробовал и в проге обнулять - пока незнаю че и делать.
Вот, работает так-то, передаетт! Улыбка

(Отредактировано автором: 11 Апреля, 2011 - 15:41:55)

 
 Top
nestandart Супермодератор Post Id



Супер-модератор


Сообщений всего: 1490
Дата рег-ции: Сент. 2010  



Резисторы включены не правильно.
Там их вообще не должно быть.
Я же рисовал на схеме выше как должно быть.
Резисторы должны быть между кнопкой и МК а не между кнопкой и +5v.
А на последней схеме при отжатой кнопке может быть любой лог ,

при том он может меняться сам по себе.
(Добавление)
Если нога МК подключена к +5 - лог 1.
Если к GND - лог 0.
Нога МК не подключеная ни куда будет собирать внешние наводки и выдавать
случайные логи.
Нажатая кнопка должна подключать ногу МК к +5
а отжатая к GND.
(Добавление)
Как вариант можете включить внутренние резисторы "подтяжки".
 
 Top
ilnur888 Post Id



Маршал


Сообщений всего: 103
Дата рег-ции: Окт. 2010  



Это не помогает!!!
Я не знаю, программно не получается, это точно не связано с тем что ножки с/без резистора

Что-то надо делать...
 
 Top
nestandart Супермодератор Post Id



Супер-модератор


Сообщений всего: 1490
Дата рег-ции: Сент. 2010  



Цитата:
Я не знаю, программно не получается, это точно не связано с тем что ножки с/без резистора

Вы считываете данные с ноги МК
и у вас при любом раскладе лог1 ?

На новую схему можно взглянуть ?
(Добавление)
Что именно не получается ?
Светодиоды не реагируют на кнопки ?
 
 Top
ilnur888 Post Id



Маршал


Сообщений всего: 103
Дата рег-ции: Окт. 2010  



Улыбка
Схема такая же, просто дело в том, что если я кнопку нажимаю (появл. лог.1 - правильно) и потом отжимаю, то лог. 1 остается на выводе МК, а оставаться не должен по сути (откуда?), я и в прогевсе порты обнуляю...

Мне нужно чтобы кто-нить проверил код на наличие ошибок, чувствую что-то там нето...
 
 Top
Страниц (3): [1] 2 3 »
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru