Страница 1 из 1

Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Пт май 14, 2010 11:58:34
Fasterpast
Подскажите, пытаюсь связать два МК по SPI... Код сгенерирован CVAVR, второй МК еще передает данные по УСАРТ.
Первый мастер, там просто spi(128); для теста, второй слейв без прерывания, забираю данные командой переменная=SPDR; а потом переменную по усарту.
При загрузке по усарту никаких данных не идет, отключаю проводок от СПИ, с УСАРТА сразу идут данные, правда не с 128, но и не с 0... Подключаю проводок, усарт опять замерает... Пробовал с прерыванием на слейве - та же картина.
пин СС на мастере выход, на слейве вход. Пробовал и соединять их, и пин слейва ручками пускать на 0 или на+5. Реакции нет...
В протеусе причем все работает.

и еще вопрос в догонку... После очередного ресета на 128й меге на всех ногах стало 5В... Почему она могла вот так сдохнуть?, до этого отлично работала, ресет делал уже много раз...
Постояла без питания минут 10, терь на ногах все ок, но не шьётся и признаков жизни не подаёт..(

Оказалось кварц сдох 0_о такое вообще бывает? Хотя нет, с другим кварцем тоже не пашет, а от внешнего осцилятора той же частоты пашет... Бред какой-то. Фузы как поставил с самого начала, так они и стоят, ща еще раз проверил... Сделал фузы на внутренний осц., теперь вообще никак не шьётся.... 400р в помойку (

А вопрос про SPI еще открыт... Там у меня две атмеги16

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Пт май 14, 2010 12:41:56
of_silence
Я как-то раз умудрился упалить выходную ножку кварцевого генератора. Пришлось ваять внешний генератор, дело было как раз на мере 128. Не знаю, как это у меня получилось, но факт на лицо - такое в жизни явно случается.
А про спи не понятно, что написано. В чем суть проблемы? не передается, или не принимается? или и то, и другое?

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Пт май 14, 2010 12:46:39
Fasterpast
Да припаял другой кварц - та же фигня. С внешнего работал, но криво, только удавалось стереть его и фузы прошить. В итоге прошил на внутренний осц., теперь вообще не пашет.

А с SPI проблема в том, что при соединении ножек SCK и MOSI двух МК, слейв зависает. Причем даже если убрать все while и прерывания SPI. Разъединяю ножки - всё работает дальше. Соединяю - виснет. В протеусе всё работает.

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Сб май 15, 2010 18:28:46
BCluster
код покажи, вообще зависает при передаче или просто висит всегда?

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Сб май 15, 2010 23:25:20
Fasterpast
На мастере:

Код: Выделить всё

// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 250,000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x56;
SPSR=0x00;

while (1)
      {
      adc = read_adc(0);
      delay_ms(100);
      spi(adc);
      delay_ms(100);
      }; 
пробовал вместо adc ставить 123, пробовал разные задержки и без них.

На слейве:

Код: Выделить всё

// SPI interrupt service routine
interrupt [SPI_STC] void spi_isr(void)
{
unsigned char data;
data=SPDR;
// Place your code here
amp_temp = data;
}


// SPI initialization
// SPI Type: Slave
// SPI Clock Rate: 250,000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0xC6;
SPSR=0x00;

// Clear the SPI interrupt flag
#asm
    in   r30,spsr
    in   r30,spdr
#endasm

// Global enable interrupts
#asm("sei")
Пробовал отключать прерывания, пробовал разные скорости, пробовал на слейве вообще не запрашивать никак SPI - виснет... Не пробовал отключать SPI и подключать проводки. Соединение 10раз проверил...

PORTB на котором висит SPI сконфигурен кодвижном...

Зависает сразу после соединения SCK и MOSI. Как бы через те же ножки оно у меня программируется, так что SPI разведен и пашет нормально сам по себе...

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Ср май 19, 2010 23:27:39
Fasterpast
Даже больше скажу... Отключаю в обоих МК SPI... Соединяю их... И второй виснет! Причем иногда сразу обрывается поток данных с UART, а иногда еще пару байт выкинет несуразных и виснет. Даже уже другие меги пробовал, все равно не хотят... :shock:
Либо где-то я дико туплю, либо это полтергейст.

Опытным путём установлено, что виснет при соединении SCK...
Может нужно его чем-нибудь к чему-нибудь подтянуть?

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Чт май 20, 2010 09:42:28
Pavel V.
Ну так это прямое следствие "генерации кода". Предлагаю обратиться в CodeVision для решения проблемы :))

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Чт май 20, 2010 09:44:43
Fasterpast
А в шпротеусе почему пашет?
И я вообще ставлю
SPCR=0x00;
SPSR=0x00;
А он всё равно виснет при соединении SCK линий...
В студии тоже всё прогнал, пашет.

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Чт май 20, 2010 22:06:33
Fasterpast
Короче ну нафиг, пойду с xmega'ми ковыряться, там USARTов много хоть... :))

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Пт май 21, 2010 08:28:12
Pavel V.
Fasterpast писал(а):Короче ну нафиг, пойду с xmega'ми ковыряться, там USARTов много хоть... :))
А может, ну нафиг эти микроконтроллеры с этой электроникой.. Лучше пойти пива попить во дворе :)

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

Удачи!

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Пт май 21, 2010 09:31:15
Fasterpast
А вообще здравая мысль.. Пойду за пивом ))))
Ну а если серьёзно, эт я канеш "в порыве гнева" сказал...
Правда всё равно не понимаю почему оно виснет. Может частота слишком большая?
В даташите про SPI вообще три с половиной слова написано... Ща апноуты перебираю...
Кстати, начитался тут про xmeg'у и не смог себе отказать в удовольствии - купить одну ))
Вообще кто-нить с ними работал? Инфы в инете ну очень мало...

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Пт май 21, 2010 15:14:27
Pavel V.
Fasterpast писал(а):А вообще здравая мысль.. Пойду за пивом ))))
Ну а если серьёзно, эт я канеш "в порыве гнева" сказал...
Правда всё равно не понимаю почему оно виснет. Может частота слишком большая?
В даташите про SPI вообще три с половиной слова написано... Ща апноуты перебираю...
Первое, что я бы сделал на твоем месте, это выкинул код сгенерированный CV и переписал его ручками. Причем, не в виде SPCR=0x56;, а как положено, чтобы было наглядно, например:
SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR1);

Вот тогда можно и поговорить.

Re: Соединение двух at16 через SPI и глюки атмеги128...

Добавлено: Пт май 21, 2010 17:23:01
Fasterpast
ща попробую пересобрать макетки, чтобы там не было ничего лишнего, кроме усарта, спи и пару светодиодиков для дебага...
ну и код попробую вручную загнать. по резалтам отпишусь..