|
|
  |
AVR и Siemens M55 |
|
|
|
Jun 15 2008, 16:59
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-05-08
Пользователь №: 37 924

|
Цитата(dENIM @ Jun 15 2008, 18:29)  какой то бок с SPI попробуйте не ждать флага, а вставьте кучку нопов. Спасибо за совет, я понимаю, что проблема где-то здесь, но пока не могу найти. Кучка нопов, к сожалению, не помогает, только инициализация совсем перестает проходить.
|
|
|
|
|
Jun 15 2008, 18:36
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-05-08
Пользователь №: 37 924

|
Почему-то не могу отредактировать предыдущее сообщение. Все разобрался. Все дело было в том, что нога SS была сконфигурирована по умолчанию как вход. А у меня она болтается в воздухе, потому от наводок контроллер периодически считал себя не мастером, а ведомым.
|
|
|
|
|
Jun 22 2008, 20:16
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 26-04-08
Из: BY/MN
Пользователь №: 37 111

|
Палитры для импорта для графических редакторов типа Gimp или Photoshop. В архиве также есть немного подправленная картинка (вместо регистра RE0h указан REFh в самом верху картинки). Включается режим так: lcd_wrcmd16($EF90); lcd_wrcmd16($E800); Первая команда может не понадобиться.
LS020_8bit_palettes.zip ( 22.59 килобайт )
Кол-во скачиваний: 403
Сообщение отредактировал Juras Pr. - Jun 22 2008, 20:18
|
|
|
|
|
Jun 23 2008, 20:20
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 19-07-06
Пользователь №: 18 920

|
Цитата Почему-то не до конца заливается дисплей, если отправлять 132Х176=5АС0 байт, остается порядка 170 незакрашенных пикселей Значит в цикле 132 не выводися по одному байту - итого минус 176. Вот код для полной очистки: Код fill: ; fill screen cbi PORTB,LCD_CS; select Display cbi PORTC,LCD_RS; clear RS line ldi r31, 0xB5 ldi r30, 0x80 fill1: mov temp, color ; load byte in SPI data register call lcd_wrdata sbiw r30,1 brne fill1 ret Про скорость: Цитата На меге 88Р при 20 мгц и SPI 10 мгц в восьмибитном режиме полная заливка происходит за 30 милисекунд (33fps). А если не ждать SPIF в регистре SPSR то 20 милисекунд (50fps). Только между командами out SPDR должно быть не меньше 16 тактов. Измерял осциллографом.
|
|
|
|
|
Jun 24 2008, 05:30
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-05-08
Пользователь №: 37 924

|
Я тоже флага не жду - получается пошустрее. Как раз такой цикл и используется, только в регистр загружается 5АС0. Попробую посчитать, сколько у меня получается фпс. На крайний случай, буду очищать только те области, где выодится информация.
|
|
|
|
|
Jun 24 2008, 06:40
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 19-07-06
Пользователь №: 18 920

|
Juras Pr.Да, это для 16 битного режима пример... На самом деле у меня вот такой код: Код cbi PORTB,LCD_CS ;select Display cbi PORTB,LCD_RS ; clear RS line
loop: ldi r21, 176 f2: ldi r22, 132 f1: out SPDR,color ;load byte in SPI data register
nop nop nop nop nop nop nop nop nop nop nop nop nop nop
dec r22 brne f1 dec r21 brne f2
inc color rjmp loop Быстрее не получается. Запаял reset LCD на reset меги. Все работает. Хотел и CS навсегда выбрать - не получилось. Инициализация проходит, данные не пишутся. Была инфа, что задержки при инициализации нельзя увеличивать. Для LS020 оказалось можно. У меня отвалился кварц - и мега засинхронизировалась от 100 кГц (преобразователь подсветки на 34063). Ооочень медленно экранчик запустился. Кстати 34063 жрет 70 мА от 3.3 вольт. КПД примерно 50 %. Что бы такое поэкономичнее найти?
|
|
|
|
|
Jun 24 2008, 08:48
|
Группа: Новичок
Сообщений: 6
Регистрация: 29-05-08
Пользователь №: 37 924

|
Цитата(Fusion @ Jun 24 2008, 10:40)  Код cbi PORTB,LCD_CS ;select Display cbi PORTB,LCD_RS ; clear RS line
loop: ldi r21, 176 f2: ldi r22, 132 f1: out SPDR,color ;load byte in SPI data register
nop nop nop nop nop nop nop nop nop nop nop nop nop nop
dec r22 brne f1 dec r21 brne f2
inc color rjmp loop И у Вас это работает? У меня точно такая же картина: остаются 170 пикселей. И еще, не подскажете, как в С передаются аргументы функции? Через стек?
|
|
|
|
|
Jun 24 2008, 09:36
|
Частый гость
 
Группа: Свой
Сообщений: 162
Регистрация: 7-12-07
Из: Могилев
Пользователь №: 33 064

|
быстрее будет не грузить Х,Y в разные регистры и на каждый проверку делать а использовать sbiw. Код ldi zh,$5A ldi zl,$C0 cbi PORTB,LCD_CS ;select Display cbi PORTB,LCD_RS ; clear RS line lcd_clear: out SPDR,color тут или нопы и флаг проверять sbiw ZL,1 brne lcd_clear sbi PORTB,LCD_CS ;deselect Display ret p.s. насчет незаполненной области... покажите команды задания окна (т.е. то что перед передачей данных). у вас там "сто пудов" стоят координаты 176 и 132... а надо 131 и 175 (ибо 0-131, 0-175)
|
|
|
|
|
Jun 24 2008, 10:58
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 19-07-06
Пользователь №: 18 920

|
Sergey ParfenovТолько что проверил вот с таким кодом: Код call lcdinit ldi color, 0b00011111
cbi PORTB,LCD_CS ;select Display cbi PORTB,LCD_RS ; clear RS line
ldi r21, 176 f2: ldi r22, 132 f1: out SPDR,color ;load byte in SPI data register
nop nop nop nop nop nop nop nop nop nop nop nop nop nop
dec r22 brne f1 dec r21 brne f2
loop: rjmp loop Экран закрашивается полностью. Если заменить 176 на 175 - справа остается одна вертикальная полоса. Cyber_RATДа, sbiw циклом быстрее (на 0.2%), но мне координаты нужны при выводе служебной информации...
|
|
|
|
|
Jun 25 2008, 04:21
|
Частый гость
 
Группа: Свой
Сообщений: 162
Регистрация: 7-12-07
Из: Могилев
Пользователь №: 33 064

|
Fusion: я не в цикле отрисовки говорил заменить 176 на 175  а в командах задания активного окна... Код clear_screen: ldi r24,$EF rcall lcd_cmd ldi r24,$80 rcall lcd_cmd ldi r24,$18 rcall lcd_cmd ldi r24,$05 rcall lcd_cmd
ldi r24,$12 rcall lcd_cmd ldi r24,131 ;< вот тут rcall lcd_cmd
ldi r24,$13 rcall lcd_cmd clr r24 rcall lcd_cmd
ldi r24,$15 rcall lcd_cmd clr r24 rcall lcd_cmd
ldi r24,$16 rcall lcd_cmd ldi r24,175 ;< и вот тут rcall lcd_cmd
ldi zh,$5A ldi zl,$C0
Cbi PORTB,LCD_RS cbi PORTB,LCD_CS lcd_clear1: out SPDR,r25 пауза sbiw ZL,1 brne lcd_clear1 sbi PORTB,LCD_CS ;deselect Display ret
|
|
|
|
|
  |
10 чел. читают эту тему (гостей: 10, скрытых пользователей: 0)
Пользователей: 0
|
|
|