роботы
робототехника
микроконтроллеры
Главная
Как сделать робота
Новости
Спорт
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты  


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

> Без описания
nestandart Супермодератор
Отправлено: 11 Апреля, 2011 - 18:22:37
Post Id



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


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





Дело не в коде (не только в коде).
У вас схема не рабочая.
Для каких целей у вас стоят резисторы между кнопкой и +5 ?
Они только понижают (ограничивают) ток который одет на ногу МК,
напряжение не меняется.
А МК читает с ноги только напряжение (U>2v - лог 1 ; U<2v - лог 0)

Ваша кнопка , в нажатом положении подключена к +5
а в отжатом НИКУДА.

Попробуйте считать не подключеную ногу МК Вы увидете лог 1 (а может и нет).
Это должно наводить на мысли.
Меняйте схему .
(Добавление)
Цитата:
я и в прогевсе порты обнуляю...


А потом опять считываете ?
В чем тогда смысл обнуления ?

Вы знаете для чего нужен подтягивающий резистор ?

Вы знаете как включить внутреннюю "подтяжку МК" программно ?
 
 Top
ilnur888
Отправлено: 11 Апреля, 2011 - 18:39:23
Post Id



Маршал


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





Вы правы, правильно писали, изменил все как вы сказали работает, вот схема
(Добавление)
Ничего не включено:


Все включены:


некоторын:

(Добавление)
Спасибо!!! БОЛЬшое!!! Улыбка

Слышл я про включение подтягивающего резистора, но как это сделать незнаю... - это бы избавило от этих резисторов?
 
 Top
nestandart Супермодератор
Отправлено: 11 Апреля, 2011 - 18:48:21
Post Id



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


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





Ну вот !

Я , кстати , когда первый раз работал с АЦП (считывал сигнал с переменного резистора) долго не мог понять
почему он всякую дурь выдает.
Поставил резистор "подтяжку" и все встало на свои места.
(Добавление)
На кнопках on и off местами поменяйте а то не красиво.
 
 Top
ilnur888
Отправлено: 11 Апреля, 2011 - 18:50:18
Post Id



Маршал


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





Скажите, а вот вы с АЦП рабюотали, а на каком языке прогу-то писали??? че-то я недавно тестил свою рогу на АЦП, так тоже непонятно что творилось, вашего совета нехватало, на днях надо будет попробовать!
На каком языке пишете???
 
 Top
nestandart Супермодератор
Отправлено: 11 Апреля, 2011 - 18:53:30
Post Id



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


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





Цитата:
Слышл я про включение подтягивающего резистора, но как это сделать незнаю... - это бы избавило от этих резисторов?


Это и есть подтягивающие резисторы , только внешние .
У МК есть и внутренние "подтяжки" , они включаются программно.
(Добавление)
Я программирую на arduino IDE ,
кажется этот язык называется wiring , точно не помню.
 
 Top
cjA
Отправлено: 13 Апреля, 2011 - 01:34:23
Post Id



Генерал


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






wirging
ппц... что только не напридумывют эти индусы лишьбы не работать
 
 Top
lamakazzz
Отправлено: 13 Апреля, 2011 - 10:13:14
Post Id



Главнокомандующий


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






Кто-то там умный говорил: "Хочешь заработать много денег? Придумай новую религию!" Наверное, отчасти это применимо и в данном случае Голливудская улыбка
 
 Top
engee
Отправлено: 01 Мая, 2011 - 19:46:37
Post Id


Рядовой


Сообщений всего: 5
Дата рег-ции: Май 2011  





ilnur888, здравствуйте! я вот тоже пытаюсь освоить SPI, пользуюсь ассемблером. Не могли бы вы отправить мне код вашей программы после исправлений и если не трудно - схему для протеуса) ansh42@mail.ru Ну или хотябы выложить текст здесь. Большое Спасибо!
 
 Top
nestandart Супермодератор
Отправлено: 01 Мая, 2011 - 22:10:06
Post Id



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


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





Рабочая схема , та что последняя , а код в начале темы был.
 
 Top
engee
Отправлено: 01 Мая, 2011 - 22:59:27
Post Id


Рядовой


Сообщений всего: 5
Дата рег-ции: Май 2011  





Но, я так понял, автор потом нашел ошибку в коде и переправил у себя, я попытался найти в чем дело, но не получается( схема не работает
(Добавление)


Master
CODE:

.device atmega8a
.include "m8Adef.inc"
.nolist
.list
;============================
;Объявления:

.def temp=R16
.def data=R17
;============================
;RAM
.DSEG
;============================
;FLASH
.CSEG
;============================
;Таблица векторов прерываний

.org 0x000
rjmp SPI_MasterInit ; RESET
.org 0x001
RETI ; INT0
.org 0x002
RETI ; INT1
.org 0x003
RETI ; TIMER2 COMP
.org 0x004
RETI ; TIMER2 OVF
.org 0x005
RETI ; TIMER1 CAPT
.org 0x006
RETI ; TIMER1 COMPA
.org 0x007
RETI ; TIMER1 COMPB
.org 0x008
RETI ; TIMER1 OVF
.org 0x009
RETI ; TIMER0 OVF
.org 0x00a
RETI ; SPI, STC
.org 0x00b
RETI ; USART, RXC
.org 0x00c
RETI ; USART, UDRE
.org 0x00d
RETI ; USART, TXC
.org 0x00e
RETI ; ADC
.org 0x00f
RETI ; EE_RDY
.org 0x010
RETI ; ANA_COMP
.org 0x011
RETI ; TWI
.org 0x012
RETI ; SPM_RDY

;============================
;Инициализация

SPI_MasterInit:
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp

;порты
ldi temp,0b00000000
out DDRD,temp
ldi temp,0b00000000
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


Slave
CODE:

.device atmega8a
.include "m8Adef.inc"
.nolist
.list
;============================
;Объявления:

.def temp=R16
.def data=R17
;============================
;RAM
.DSEG
;============================
;FLASH
.CSEG
;============================
;Таблица векторов прерываний

.org 0x000
rjmp SPI_SlaveInit ; RESET
.org 0x001
RETI ; INT0
.org 0x002
RETI ; INT1
.org 0x003
RETI ; TIMER2 COMP
.org 0x004
RETI ; TIMER2 OVF
.org 0x005
RETI ; TIMER1 CAPT
.org 0x006
RETI ; TIMER1 COMPA
.org 0x007
RETI ; TIMER1 COMPB
.org 0x008
RETI ; TIMER1 OVF
.org 0x009
RETI ; TIMER0 OVF
.org 0x00a
RETI ; SPI, STC
.org 0x00b
RETI ; USART, RXC
.org 0x00c
RETI ; USART, UDRE
.org 0x00d
RETI ; USART, TXC
.org 0x00e
RETI ; ADC
.org 0x00f
RETI ; EE_RDY
.org 0x010
RETI ; ANA_COMP
.org 0x011
RETI ; TWI
.org 0x012
RETI ; SPM_RDY

;============================
;Инициализация

SPI_SlaveInit:
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp

;порты
ldi temp,0b11111111
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




вот что получается
 
 Top
nestandart Супермодератор
Отправлено: 02 Мая, 2011 - 06:55:44
Post Id



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


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





У автора , изначально , была ошибка в схеме.
 
 Top
nestandart Супермодератор
Отправлено: 02 Мая, 2011 - 20:49:05
Post Id



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


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





Вы где взяли эту схему ?

Если вы подаете сигнал на одну ногу АЦП ,
то зачем другие к земле притянуты ?


Цитата:
Не могли бы вы отправить мне код вашей программы


Использовать чужие программы , по меньшей мере , глупо.
 
 Top
mihail
Отправлено: 02 Мая, 2011 - 22:20:41
Post Id



Гуру


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





Хотите сказать, что все кто использует программы приведенные в документах atmel (datasheet , application note) глупцы?

(Отредактировано автором: 02 Мая, 2011 - 22:21:18)

 
 Top
nestandart Супермодератор
Отправлено: 03 Мая, 2011 - 07:12:36
Post Id



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


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





Цитата:
Хотите сказать, что все кто использует программы приведенные в документах atmel (datasheet , application note) глупцы?


Программы приведенные в документах atmel это скорее примеры.

Глупо это когда человек заливает себе , кем то написаную ,
программу (возможно с ошибками).

Потом не может понять почему она не работает
(может в железе ошибка ? может в коде ?).
 
 Top
engee
Отправлено: 09 Мая, 2011 - 02:56:32
Post Id


Рядовой


Сообщений всего: 5
Дата рег-ции: Май 2011  





АААААА!!! я схожу с ума, вроде почитал, разобрался в SPI, сделал примерно все по апноуту в даташите, даже протеус заработал! а вот на деле спаял и ничего не пашет, лампочка на слейве горит и горит, а должна бы гаснуть при нажатии кнопки на мастере. Оговорюсь что контроллеры соеденены портами MISO, MOSI, SCK, GND, VCC, RESET. Ну просто это те порты через которые я прошиваю контроллер программатором, на обоих макетках были одинаковые гнезда и я просто обжал шестижильный кабель и соединил эти гнезда. Мастер питается от телефонной зарядки 4,9В\700мА. и шестижильный кабель, будучи соединённым с GND и VCC - передает питание слейву, ну лампочка горит на нем по крайней мере. Контроллеры Atmega8A.


Мастер:
CODE:

.include "m8Adef.inc"

.org 0x000 rjmp Init ; Reset Handler

Init:

ldi r16,(1<<PB3)+(1<<PB5)+(1<<PB2)
out DDRB,r16 ;mosi, SS и sck выходы

ldi r16,(1<<PB2)
out PORTB,r16 ; 1 в SS делает контроллер мастером

ldi r16,0
out DDRD,r16 ;Порт D сконфигурирован как вход

ldi r16,255 ; начальные значения на D - выс лог уровни
out PORTD,r16

;Настройка SPI
ldi r16,(1<<SPR0)+(1<<SPE)+(1<<MSTR)
out SPCR,r16 ;Enable SPI, Master, set clock rate fck/16

SPI_MasterTransmit:
; Start transmission of data (r16)
in r16,PIND
out SPDR,r16
Wait_Transmit:
; Wait for transmission complete
sbis SPSR,SPIF
rjmp Wait_Transmit
rjmp SPI_MasterTransmit


Слейв:
CODE:

.include "m8Adef.inc"



.org 0x000 rjmp Init

Init:


;init ports
ldi r16,(1<<PB4)
out DDRB,r16 ;miso выход, SS и остальные - входы

ldi r16,(0<<PB2)
out PORTB,r16 ;SS установлен в 0, чтобы мк мог принимать данные от мастера

ldi r16,255
out DDRD,r16 ;порт D - выход

ldi r16,255 ; Зажигаем светодиод
out PORTD,r16

;настройка SPI
ldi r16,(1<<SPE)
out SPCR,r16 ;SPI включен

SPI_SlaveReceive:
; Wait for reception complete
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
; Read received data and return
in r16,SPDR
out PORTD,r16
rjmp SPI_SlaveReceive
 
 Top
Страниц (3): « 1 [2] 3 »
« Программирование микроконтроллеров »


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





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown