Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.05.2011, 19:15
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 594
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: SPI ATMEGA8535 не запускается
Сообщение от avtoneru
|
а что мешает вывести три проводочка плюс пара транзисторов ( преобразователь USART - RS232) и проверить работу не косвенно, а воочию, через терминал например?
ножки USART задействованы?
у меня коробочка с 3 проводами (к USART цеплять) и разъемом для ком порта вседа под рукой ... иногда помогало.
|
Я не понял, каким образом я могу проверить SPI с помощью RS232.
Если программно опрашивать SPDR и выводить на UART, то я это делаю, только вывожу на I2C.
А напрямую вывести SPI на UART - я что-то не представляю. Или я не так понял?
|
|
|
|
25.05.2011, 19:36
|
|
Прописка
Регистрация: 17.10.2010
Сообщений: 113
Сказал спасибо: 2
Сказали Спасибо 20 раз(а) в 12 сообщении(ях)
|
Re: SPI ATMEGA8535 не запускается
Сообщение от pifa
|
Я не понял, каким образом я могу проверить SPI с помощью RS232.
|
настраиваю USART и печатаю туда при помощи printf всё, что меня может заинтересовать ... ну примерно так: " printf("%i",temp); "
на компе запускаю гипертерминал или (если винда семерка) встроенный в CV ...
ну например можно организовать в Вашем случае -
1) от терминала принимается команда - любая в виде написания байта, переводится в шестнадцатеричное число и отправляется по SPI
2) то, что принято по SPI тут же передается в терминал ...
3) и т.д.
у меня как то так получается.
|
|
|
|
25.05.2011, 22:15
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 594
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: SPI ATMEGA8535 не запускается
Сообщение от avtoneru
|
настраиваю USART и печатаю туда при помощи printf всё, что меня может заинтересовать ... ну примерно так: " printf("%i",temp); "
на компе запускаю гипертерминал или (если винда семерка) встроенный в CV ...
ну например можно организовать в Вашем случае -
1) от терминала принимается команда - любая в виде написания байта, переводится в шестнадцатеричное число и отправляется по SPI
2) то, что принято по SPI тут же передается в терминал ...
3) и т.д.
у меня как то так получается.
|
Так это и есть программный опрос SPI, что я и делаю. А куда направлять полученные данные неважно. Вопрос в том, что приходит по SPI. Вот сейчас смотрю в сторону логического анализатора. Но нет его под рукой.
|
|
|
|
26.05.2011, 15:41
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 594
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: SPI ATMEGA8535 не запускается
Сегодня "ловушкой" проверил SPI. В наличии только импульсы на SCK. В Proteus'е SPI тоже молчит.
В результате поиска нашел причину. Но понять не могу. Возможно, я что-то не так понимаю. Суть в следующем.
На порте B, кроме SPI я использую еще несколько битов. Если я провожу инициализация вот так:
PORTB= (1‹‹PORTB4)|(1 ‹‹ PORTB7)|(1 ‹‹ PORTB3)|(1 ‹‹ PORTB2);
DDRB = (1‹‹PINB4)|(1‹‹PINB5)|(1‹‹PINB7)|(1‹‹PINB3)|(1‹‹PI NB2);
то SPI работает. Если я сначала инициализирую SPI:
PORTB= (1‹‹PORTB4)|(1 ‹‹ PORTB7);
DDRB = (1‹‹PINB4)|(1‹‹PINB5)|(1‹‹PINB7);
а потом добавляю:
PORTB= (1 ‹‹ PORTB3) | (1 ‹‹ PORTB2);
DDRB = (1 ‹‹ PINB3) | (1 ‹‹ PINB2);
SPI не работает. Может кто-нибудь объяснить?
|
|
|
|
26.05.2011, 16:22
|
|
Прописка
Регистрация: 17.10.2010
Сообщений: 113
Сказал спасибо: 2
Сказали Спасибо 20 раз(а) в 12 сообщении(ях)
|
Re: SPI ATMEGA8535 не запускается
С IAR не работал, но кажется вся причина в том, что при переназначении битов регистра порта для сохранения предыдущих настроек надо сначала считать текущее значение регистра, и уже на это значение накладывать маску с новым значением, иначе предыдущее значение просто теряется.
Поэтому в первом варианте - вы сразу назначаете всё как Вам надо, а во втором варианте - Вы записываете значение в регистр два раза, причем вторая запись ничего не знает о первой. Происходит это потому, что запись типа
PORTB= (1‹‹PORTB4)|(1 ‹‹ PORTB7);
перепроцессором переводится в PORTB= 0x88; , т.е. Вы каждый раз пишите в регистр новое значение, компилятору ничего о предыдущих значениях в регистре не известно - Вы должны сами позаботиться о сохранении предыдущего значения регистра.
Другой вариант - использовать побитовый доступ к регистрам. Только не знаю, как это делается средствами IAR - мне он не понравился и глубоко не изучал (о вкусах не спорят ...).
|
|
|
|
26.05.2011, 17:09
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 594
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: SPI ATMEGA8535 не запускается
Вы совершенно правы. Что-то меня уже затуманило с этим АЦП. Перепутал установку р-ра с побитовой операцией. Никогда так не делал. А почему тут написал так и сам не пойму.
Остается вопрос по AD7706. Пока не могу его оживить.
|
|
|
|
27.05.2011, 00:04
|
|
Вид на жительство
Регистрация: 02.04.2008
Адрес: Ленинград
Сообщений: 346
Сказал спасибо: 67
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
|
Re: SPI ATMEGA8535 не запускается
Сообщение от pifa
|
Вы совершенно правы. Что-то меня уже затуманило с этим АЦП. Перепутал установку р-ра с побитовой операцией. Никогда так не делал. А почему тут написал так и сам не пойму.
Остается вопрос по AD7706. Пока не могу его оживить.
|
Очень часто проблема - в выборе режима spi: по какому фронту slk Ваш аdc захватывает данные с MOSI (по заднему или переднему). Проверьте еще раз хорошенько. У Вас mode 3, значит по спаду. А Вам надо по нарастанию, если не ошибаюсь. Поэкспериментируйте с режимом. И еще: хотите увидеть импульсы - уменьшите скорость. И Вообще, лучше начинать отлаживаться на низких скоростях (особенно с опторазвязкой...). Удачи !
Последний раз редактировалось Mike121234; 27.05.2011 в 00:13.
|
|
|
|
28.05.2011, 19:28
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 594
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: SPI ATMEGA8535 не запускается
Сообщение от Mike121234
|
Очень часто проблема - в выборе режима spi: по какому фронту slk Ваш аdc захватывает данные с MOSI (по заднему или переднему). Проверьте еще раз хорошенько. У Вас mode 3, значит по спаду. А Вам надо по нарастанию, если не ошибаюсь. Поэкспериментируйте с режимом. И еще: хотите увидеть импульсы - уменьшите скорость. И Вообще, лучше начинать отлаживаться на низких скоростях (особенно с опторазвязкой...). Удачи !
|
Вот часть из datasheet:
" For microcontroller interfaces, it is recommended that the SCLK idles high between data transfers"
А также пример настройки SPI оттуда же:
SPCR = 0X7f; /* this sets the WiredOR mode(DWOM=1),
Master mode(MSTR=1),
SCK idles high( CPOL=1),
/SS can be low always ( CPHA=1),
lowest clock speed(slowest speed which is master clock /32*/
Это для 68HC11. Для ATMegи буде то же самое.
А скорость у меня минимальная.
Сейчас SPI работает. Исправил некоторые ошибки в настройке SPI.
|
|
|
|
29.05.2011, 21:44
|
|
Вид на жительство
Регистрация: 02.04.2008
Адрес: Ленинград
Сообщений: 346
Сказал спасибо: 67
Сказали Спасибо 8 раз(а) в 7 сообщении(ях)
|
Re: SPI ATMEGA8535 не запускается
Сообщение от pifa
|
Вот часть из datasheet:
" For microcontroller interfaces, it is recommended that the SCLK idles high between data transfers"
А также пример настройки SPI оттуда же:
SPCR = 0X7f; /* this sets the WiredOR mode(DWOM=1),
Master mode(MSTR=1),
SCK idles high(CPOL=1),
/SS can be low always (CPHA=1),
lowest clock speed(slowest speed which is master clock /32*/
Это для 68HC11. Для ATMegи буде то же самое.
А скорость у меня минимальная.
Сейчас SPI работает. Исправил некоторые ошибки в настройке SPI.
|
НУ И СЛАВА БОГУ !!!!!
|
|
|
|
30.05.2011, 22:33
|
|
Временная регистрация
Регистрация: 29.03.2009
Сообщений: 61
Сказал спасибо: 44
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: SPI ATMEGA8535 не запускается
Привет всем! И у меня сейчас проблема с SPI.
Микроконтроллер ADUС831, никак не получаетс вывод по SPI на графический OLED дисплей (BL12864G, контроллер SSD1303).
Код:
|
#include ‹ADUC831.H›
#define vd_on() P3 |= 0x10;//P3.4 led OFF
#define vd_off() P3 &= ~0x10;//P3.4 led ON
#define oled_res_on() P0 |= 0x80;//P0.7/HI
#define oled_res_off() P0 &= ~0x80;// P0.7/LOW 0;
#define oled_data_set() P0 |= 0x40; //P0.6
#define oled_command_set() P0 &= ~0x40;
#define oled_cs_1() P0 |=0x20; //P0.5
#define oled_cs_0() P0 &= ~0x20; |
Код:
|
/ прерывание от SPI
void spi_interrupt (void) interrupt 7 using 0
{
WCOL = 0;
ISPI = 0; // очистить флаг прерывания
//spi_r = SPIDAT;
vd_off();//Led ON
delay(2000);
vd_on();
delay(2000);
} |
Код:
|
void spi_init(void)
{
// SPI init
SPIM = 1; // SPI Master/Slave Mode Select Bit. Set by user to enable Master Mode operation (SCLOCK is an output).
CPOL = 1; // Clock Polarity Select Bit. Set by user if SCLOCK idles high.
CPHA = 1; // Clock Phase Select Bit. Set by user if leading SCLOCK edge is to transmit data.
// IE2 = 0x01; // enable interrupt from spi
//ESI=1
IEIP2=0x01;
SPE = 1; // SPI Interface Enable Bit. Set by user to enable the SPI interface.
SPR1 = 0; // These bits select the SCLOCK rate (bit-rate) in Master Mode f/64
SPR0 = 0;
} |
Код:
|
void oled_write_command(unsigned char oled_command)
{
oled_command_set();
//delay(10);
oled_cs_0();
//delay(10);
SPIDAT = oled_command;
delay(1);
oled_cs_1();
delay(1);
} |
Вроде бы, при задании команды для дисплея, выставляю
oled_cs_0() и
oled_cs_1() на P0.5, но на осфиллографе нет импусльсов, глухой "0", и SLK не возникает....
Чё делать?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:11.
|
|