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


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

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


Капитан


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



Скажу сразу , что никогда ничего не паял. И всегда считал что всё что связанно с хардом, очень сложно.

Очень заинтересовался микроконтроллерами. Отрыл старые свои конспекты , полазил по сетке и стал неплохо врубаться в тему.

Сначала ничего не получалось (не припаявылось) , потом выяснил что дело в плохом флюсе и паяльнике. Купил хорошие и дело пошло.
Собрал программатор на LPT , собрал стабилизатор на 5в всё подключил , как в "первом проекте" диод замигал - счастье. Вот такая присказка.
А вот и сказка.
Прочитал про дисплей 3310, про SPI - понятно. Распаял дисплей с преобразователем уровней в 3.3 Качнул библиотечку, подключил, собрал залил. РАБОТАЕТ!!!
Теперь на экране пишется сколько раз мигнул диод.

Вот собственно вопрос.

// Распиновка порта
#define LCD_DC_PIN PB1
#define LCD_CE_PIN PB2
#define SPI_MOSI_PIN PB3 // SDIN дисплея обязательно подключаем к MOSI аппаратного SPI
#define LCD_RST_PIN PB4
#define SPI_CLK_PIN PB5 // SCLK дисплея обязательно подключаем к SCK аппаратного SPI

Первое LCD_CE_PIN у меня не распаян и заведён в землю на экране. по скольку SPI устройство у меня одно и второго не предвидеться.

Второе, PB1 и PB2 мне нужны для ШИМ. Заживёт ли всё это в параллели ( кажется должно ) ?

Вот я задался идеей например выпилить работу с LCD_CE_PIN из библиотеки и перекинуть LCD_DC_PIN с PB1 на PB0. Вот тут я и встал.
Выпилил везде обращение к LCD_CE_PIN , кроме init - работает .

Функция init
CODE:

void LcdInit ( void )
{
// Pull-up на вывод подключенный к reset дисплея
LCD_PORT |= _BV ( LCD_RST_PIN );

// Устанавливаем нужные биты порта на выход
LCD_DDR |= _BV( LCD_RST_PIN ) | _BV( LCD_DC_PIN ) | _BV( LCD_CE_PIN ) | _BV( SPI_MOSI_PIN ) | _BV( SPI_CLK_PIN );

// Некалиброванная задержка
Delay();

// Дергаем reset
LCD_PORT &= ~( _BV( LCD_RST_PIN ) );
Delay();
LCD_PORT |= _BV ( LCD_RST_PIN );

// Активируем SPI:
// без прерываний, старший бит первый, режим мастера, CPOL->0, CPHA->0, Clk/4
SPCR = 0x50;

// Отключаем LCD контроллер - высокий уровень на SCE
LCD_PORT |= _BV( LCD_CE_PIN );

// Отправляем команды дисплею
LcdSend( 0x21, LCD_CMD ); // Включаем расширенный набор команд (LCD Extended Commands)
LcdSend( 0xC8, LCD_CMD ); // Установка контрастности (LCD Vop)
LcdSend( 0x06, LCD_CMD ); // Установка температурного коэффициента (Temp coefficent)
LcdSend( 0x13, LCD_CMD ); // Настройка питания (LCD bias mode 1:48)
LcdSend( 0x20, LCD_CMD ); // Включаем стандартный набор команд и горизонтальную адресацию (LCD Standard Commands,Horizontal addressing mode)
LcdSend( 0x0C, LCD_CMD ); // Нормальный режим (LCD in normal mode)

// Первичная очистка дисплея
LcdClear();
LcdUpdate();
}


Так вот как только я вместо
CODE:
// Устанавливаем нужные биты порта на выход
LCD_DDR |= _BV( LCD_RST_PIN ) | _BV( LCD_DC_PIN ) | _BV( LCD_CE_PIN ) | _BV( SPI_MOSI_PIN ) | _BV( SPI_CLK_PIN );

делаю
CODE:

// Устанавливаем нужные биты порта на выход
LCD_DDR |= _BV( LCD_RST_PIN ) | _BV( LCD_DC_PIN ) | _BV( SPI_MOSI_PIN ) | _BV( SPI_CLK_PIN );



Такое чувство что всё напрочь повисает и не только экран не показывает ничего но и диод не мигает. В чём тут может быть дело?
 
 Top
Страниц (1): [1]
« Микроконтроллеры »


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





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