1 / 1 / 0
Регистрация: 17.12.2012
Сообщений: 425
|
|
1 | |
Сопряжение двух ATMega16 через SPI, непонятный глюк21.12.2012, 02:49. Показов 6981. Ответов 12
Метки нет (Все метки)
Помогите пожалуйста найти косяк!
Всё вроде работает, но периодически ведомый микроконтроллер начинает чудить. Вообще, замечены такие странные вещи: 1. Ведомый можно прошить через бутлоадер только после отключения ведущего от питания. 2. Если отключить питание от ведомого, он всё равно работает оО(к нему подключен семисегментник, поэтому я вижу). Методом вытыкания, выяснил, что питание он каким-то адским образом получает через MOSI от ведущего. Схему не привожу, т.к. всё просто - питание, земля и ресет на каждом МК. 3 линии SPI между ними попарно, и еще одна для выбора ведомого - от пина DEV1 порта B ведущего к SS пину порта B ведомого. Вот так у меня настроен SPI: SPI.h Код
#include <avr/io.h> #include <avr/interrupt.h> #define SPI_DDR DDRB #define SPI_PORT PORTB #define DEV1 3 #define SS 4 #define MOSI 5 #define MISO 6 #define SCK 7 unsykned char ValSPI; void Init_SPIMaster(); void Init_SPISlave(); void Transmit_SPIMaster(char cData); Код
#include "SPI.h" ISR(SPI_STC_vect) { ValSPI = SPDR; } void Init_SPIMaster() { volatile char IOReg; SPI_DDR = 1<<MOSI|1<<SCK|1<<SS|1<<DEV1; SPI_PORT = 1<<SS; SPCR = 1<<SPE|1<<MSTR; IOReg = SPSR; // clear SPIF bit in SPSR IOReg = SPDR; ValSPI = 0; } void Init_SPISlave() { volatile char IOReg; SPI_DDR = 1<<MISO; SPCR = 1<<SPE|1<<SPIE; IOReg = SPSR; // clear SPIF bit in SPSR IOReg = SPDR; ValSPI = 0; } void Transmit_SPIMaster(char cData) { SPDR = cData;//начинаем передачу while(!(SPSR & (1<<SPIF)));//ждем пока передача завершится }
0
|
21.12.2012, 02:49 | |
Ответы с готовыми решениями:
12
[РЕШЕНО] SPI. 5v (Master) --> 3.3v(Slave). Сопряжение. Сопряжение с LPT четырех SPI выходов Можно ли прошить ATMega16 не по SPI Управление потенциометров по SPI из AtMega16 Использование интерфейса UART и SPI на ATmega16 |
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
|
|
21.12.2012, 03:16 | 2 |
Сообщение от tirmyk
0
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
|
21.12.2012, 03:17 | 3 |
По первому вопросу - все правильно, так как ведущий занял линию MISO ведомого, по которой идет программирование, а пограмматор не может ее продавить. т.е. на одной линии два источника. На момент программирования надо либо ведущий контроллер в ресет садить, либо перемыку на эту линию ставить, чтобы отключать ведущий на время программирования.
По второму - паразитное питание через IO ноги. Обычно так вылетают микрухи, так как по даташиткам Абсолютно максимальные значения вольтажа VCC+0.5, а у вас в данном случае VCC = 0, и в данной ситуации максимально допустимое напряжение может быть 0.5 вольта, а у вас все ... 5 (или 3.3 если вы схему от 3х вольт питаете).
0
|
1 / 1 / 0
Регистрация: 17.12.2012
Сообщений: 425
|
|
21.12.2012, 03:34 | 4 |
0
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
|
21.12.2012, 03:40 | 5 |
Сообщение от tirmyk
Ну тут уже вам надо смотреть, как оно в бутлоадер попадает, по каким условиям и т.д. По идее внешние соединения не влияют на работу бутлоадера, если он сам за внешние линии не "цепляется".
0
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
|
21.12.2012, 03:41 | 6 |
Хотя еще надо глянуть на напряжение проца, там вроде как было что то на предмет минимального напряжения для прошивки флеша.
0
|
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|
21.12.2012, 04:02 | 7 |
MASTER OUT - SLAVE IN MISO - MASTER IN - SLAVE OUT Посему ПИНЫ MOSI мастера и SLAVE соеденены между собой. ПИНЫ MISO по желанию И , если мне не изменяет память , порты надо настраивать . Не помню точно , утром посмотрю. Но вообщем то в DS - это есть
0
|
1 / 1 / 0
Регистрация: 17.12.2012
Сообщений: 425
|
|
21.12.2012, 04:03 | 8 |
Бутлоадер Дихалтовский. Ни за что кроме уарта не цепляется вроде...
Питание от USB. Напряжение 4,8 В при обоих работающих контроллерах + 4 нуля на семисегментном индикаторе. При ресете ведомого(и гашении индикатора соответственно) поднимается до 5 В Мистика какая-то =)
0
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
|
21.12.2012, 05:02 | 9 |
Сообщение от tirmyk
Если у вас мега16 которая от 4.5 вольт работает, то, если верить даташитке, при низком питании флеш может "ломаться" при записи. @ YTYOUT, угумс. Перепутал названия пинов. Уели таки. :)
0
|
1 / 1 / 0
Регистрация: 17.12.2012
Сообщений: 425
|
|
21.12.2012, 05:56 | 10 |
Осциллографа нет.
Заменил питание - сделал от внешнего БП DLink-овского. Теперь напряжение стабильно 5,12 В, судя по мультиметру за 500 рублей. =) Ничего не изменилось. Откуда там шумам взяться вообще? Как микроконтроллер, нифига не делающий тем более, может их создать? Влепил в цепь питания конденсатор на 1000 мкф на всякий случай, тоже не помогло... Более того, отключил нафиг SPI-провода, осталось по сути просто два микроконтроллера, к которым подключено питание, земля и ресет. В схематике точно ошибок нет. И всё равно - при обоих включенных мк, не удается прошить через бутлоадер ни одну, ни другую.
0
|
1 / 1 / 0
Регистрация: 17.12.2012
Сообщений: 425
|
|
21.12.2012, 06:17 | 11 |
Далее - прошил оба МК голой прошивкой, только бутлоадер. Та же картина! Но стоит отключить питание от одного МК - второй грузит бутлоадер без проблем. Как такое может быть? =)
0
|
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|
21.12.2012, 21:06 | 12 |
А Вы представляете , что твориться на шине SPI по MISO, когда два проца пытаются ответить , что у них усё в порядке (не порядке) и делают это одновременно.
0
|
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
|
|
24.12.2012, 20:36 | 13 |
Там надо ss всегда настраивать на ваш вход или на выход. В обеих мк. Иначе спи адово глючит.
0
|
24.12.2012, 20:36 | |
24.12.2012, 20:36 | |
Помогаю со студенческими работами здесь
13
Непонятный глюк C# Непонятный глюк ! Непонятный глюк непонятный глюк Непонятный глюк. PROTEUS в ATMEGA16 не видит нового значения OCR0. Глюк? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |