реклама на сайте
подробности

 
 
> Bolymin BG320240B
Pavel_Bor
сообщение Dec 19 2010, 14:20
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Доброго времени суток.

Кто-нибудь имел дело с подобным ЖКИ ( встроенный контроллер S1D13700(SED1335))?
Я новичок в работе с ЖКИ.
Подскажите пожалуйста как запустить инициализацию и выдать символ на экран.

Во вложениях даташит на board.
Прикрепленные файлы
Прикрепленный файл  BG320240Bseries_VER01.pdf ( 542.59 килобайт ) Кол-во скачиваний: 52
 
Go to the top of the page
 
+Quote Post
4 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 53)
ILYAUL
сообщение Dec 19 2010, 15:27
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Стоит наверное вот это почитать


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Dec 19 2010, 15:30
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Для начала я хочу проверить работает ли индикатор. А потом подробно читать инструкцию.
На плате есть интерфейс на 20 пинов можете подсказать как его правильно с Xmega128 соединить.(управляющие пины WR/RD, E, A0, CS )
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 20 2010, 06:06
Сообщение #4


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(Pavel_Bor @ Dec 19 2010, 21:30) *
Для начала я хочу проверить работает ли индикатор. А потом подробно читать инструкцию.

До прочтения инструкции индикатор Вы сможете проверить только подключив его к уже кем-то сделанному работающему устройству.

Цитата(Pavel_Bor @ Dec 19 2010, 21:30) *
На плате есть интерфейс на 20 пинов можете подсказать как его правильно с Xmega128 соединить.(управляющие пины WR/RD, E, A0, CS )

Любое подключение будет правильным. Единственное, D0-D7 удобнее повесить на один порт
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Dec 20 2010, 06:24
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



То есть при первом подключении экран будет полностью пустой? Хотелось бы что-то на нем увидеть.

На плате нашел посадочные места для smd компонентов - RL, RWAIT, RP1,CON3,J1,J2,SK,JDSF,JAA,JE1,JE2,JF. подскажите зачем они.

Входы V0, Vee уже подключены к цепи? На плате есть переменный резистор VR, в документации тоже о нем есть... Но зачем тогда контакты для Vee и V0 на разъеме ?

Сообщение отредактировал Pavel_Bor - Dec 20 2010, 06:35
Go to the top of the page
 
+Quote Post
Slavast
сообщение Dec 20 2010, 07:10
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(Pavel_Bor @ Dec 20 2010, 12:24) *
То есть при первом подключении экран будет полностью пустой? Хотелось бы что-то на нем увидеть.

На плате нашел посадочные места для smd компонентов - RL, RWAIT, RP1,CON3,J1,J2,SK,JDSF,JAA,JE1,JE2,JF. подскажите зачем они.

Входы V0, Vee уже подключены к цепи? На плате есть переменный резистор VR, в документации тоже о нем... Но зачем тогда на коннекте для него контакты?


Объясняем:
1. перво наперво читаем аналог на http://robotsspace.ucoz.ru/publ/9-1-0-15 (в свое время весь инет обыскал, но нашел только тут)
2. алгоритм чтения записи четко написан здесь в конце статьи http://easyelectronics.ru/avr-uchebnyj-kur...ze-hd44780.html
3. В вашем случае:
Vss - на землю
Vdd - сюда заводим с блока питания 5в
Vo - написано как-то странно, но думаю это как и в моем аналоге Управление контрастностью (о том как я заводило сюда отриц напряжение - смотрите мои насущные вопросы http://electronix.ru/forum/index.php?showt...p;hl=%F2%F11320 )
E - это проталкивающий кратковременный сигнал для подготовленных данных
R/W - запись -чтение
A0 - без понятия
DB0-DB7 - сюда шлем данные
Res - завожу на Res микроконтроллера
Vee - сюда отриц напряжение завожу с того же инверитирующего Операц уилителя

Все остальное - должно быть ясным.
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Dec 20 2010, 07:41
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



FGND (Frame ground) это что?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 20 2010, 09:46
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Slavast @ Dec 20 2010, 12:10) *
2. алгоритм чтения записи четко написан здесь в конце статьи http://easyelectronics.ru/avr-uchebnyj-kur...ze-hd44780.html
Вы бы хоть название темы прочитали внимательно. У автора графический дисплей.


QUOTE (Pavel_Bor @ Dec 20 2010, 12:41) *
FGND (Frame ground) это что?
Земля, соединенная с металлической рамкой индикатора. Если не посажена на землю на плате индикатора, то соединить с землей через параллельно соединенные резистор 1МОм и конденсатор 0.1мкФ


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 21 2010, 13:21
Сообщение #9


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(Pavel_Bor @ Dec 20 2010, 12:24) *
То есть при первом подключении экран будет полностью пустой?

Cкорее всего да; если нет, то это может быть только мусор.

Цитата(Pavel_Bor @ Dec 20 2010, 12:24) *
Хотелось бы что-то на нем увидеть.

Что-либо осмысленное Вы увидите только когда, разобравшись, создадите изображение
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 21 2010, 14:10
Сообщение #10


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Slavast @ Dec 20 2010, 14:10) *
Res - завожу на Res микроконтроллера

А это зачем? Не все ж используют внешний монитор питания и собаку. Скорее, уже никто не использует. laughing.gif
Всегда отдельную ногу завожу или хотя бы способ для сброса. Для недостатка ног это - CE=1, RD=0, WR=0
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Dec 22 2010, 04:56
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Будет ли без резистора RL работать индикатор?
RWAIT контроллирует задержку?
J3 находится между FGND и землей платы.


Сообщение отредактировал Pavel_Bor - Dec 22 2010, 04:58
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 11 2011, 08:42
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



В качестве контроллера взял Xmega128 A3. Компилятор codevision. В программе когда пытаюсь записать значение в порт выскакивает ошибка:

Error: a value of type 'unsigned char' can't be assigned to an entity of type 'volatile struct PORT_t'

как от нее избавиться?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 11 2011, 11:37
Сообщение #13


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Pavel_Bor @ Jan 11 2011, 14:42) *
Error: a value of type 'unsigned char' can't be assigned to an entity of type 'volatile struct PORT_t'
как от нее избавиться?
Читать и понимать что пишет Вам компилятор:
"значение типа 'unsigned char' не может быть присвоено сущности типа 'volatile struct PORT_t'"

Это означает, что вы присваиваете байт всей структуре разом, а не её полю, что и является ошибкой.
Посмотрите на то, как определена эта структура в заголовочном файле.
Ищите что-то типа
Код
typedef struct
{
...
...
} PORT_t;

И почитайте что-нибудь из классики по языку Си.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 11 2011, 11:45
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



описание переменной идет в хидере xmega128a3.h строкой #define PORTA (*(volatile PORT_t *) 0x0600)

в самом начале программы я присваиваю порт переменной #define CtrlPort PORTC ,
в результате при выполнении ошибка ошибка...
если пытаться изменить значение порта, выдает ту же ошибку.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 11 2011, 12:02
Сообщение #15


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Pavel_Bor @ Jan 11 2011, 17:45) *
описание переменной идет в хидере xmega128a3.h строкой #define PORTA (*(volatile PORT_t *) 0x0600)
Неправильный ответ.
Это строка делает определение (дефайн) PORTA как привязанную к адресу 0x0600 переменную типа volatile PORT_t.

Ищите как определена структура PORT_t.
Возможно не в xmega128a3.h, а в другом файле, который опять же возможно подключен внутри xmega128a3.h.

Цитата(Pavel_Bor @ Jan 11 2011, 17:45) *
в самом начале программы я присваиваю порт переменной #define CtrlPort PORTC
Тут вы определяете CtrlPort как синоним PORTC и всё. Никаких присвоенией не происходит.
Не ленитесь, почитайте литературу. Наберитесь немного терминологии.
Форум - это хорошо, но не достаточно.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 11 2011, 12:24
Сообщение #16


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Сергей Борщ @ Dec 20 2010, 15:46) *
Земля, соединенная с металлической рамкой индикатора. Если не посажена на землю на плате индикатора, то соединить с землей через параллельно соединенные резистор 1МОм и конденсатор 0.1мкФ

А номинальное напряжение конденсатора не подскажете?

Не так давно посадил через такую же цепочку корпус USB разъёма, используя обычный 50 вольтовый кондёр.
Но ведь при разряде статического заряда это будут сотни-тысячи вольт?
Как правильно?

Извиняюсь за некоторый оффтоп 05.gif
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 11 2011, 15:47
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата(demiurg_spb @ Jan 11 2011, 18:02) *
Не ленитесь, почитайте литературу. Наберитесь немного терминологии.

Какую посоветуете?

Нашел следующие строчки:
#include <xmstruct.h> // definitions for the Peripheral Module structures
#include <xmbits_a3.h> // bit definitions for the Peripheral Modules registers
которые привели меня к:

Код
// I/O Ports
typedef struct PORT_struct
             {
             unsigned char DIR; // I/O Port Data Direction
             unsigned char DIRSET; // I/O Port Data Direction Set
             unsigned char DIRCLR; // I/O Port Data Direction Clear
             unsigned char DIRTGL; // I/O Port Data Direction Toggle
             unsigned char OUT; // I/O Port Output
             unsigned char OUTSET; // I/O Port Output Set
             unsigned char OUTCLR; // I/O Port Output Clear
             unsigned char OUTTGL; // I/O Port Output Toggle
             unsigned char IN; // I/O port Input
             unsigned char INTCTRL; // Interrupt Control Reg.
             unsigned char INT0MASK; // Port Interrupt 0 Mask
             unsigned char INT1MASK; // Port Interrupt 1 Mask
             unsigned char INTFLAGS; // Interrupt Flag Reg.
             unsigned char reserved_0x0D;
             unsigned char reserved_0x0E;
             unsigned char reserved_0x0F;
             unsigned char PIN0CTRL; // Pin 0 Control Reg.
             unsigned char PIN1CTRL; // Pin 1 Control Reg.
             unsigned char PIN2CTRL; // Pin 2 Control Reg.
             unsigned char PIN3CTRL; // Pin 3 Control Reg.
             unsigned char PIN4CTRL; // Pin 4 Control Reg.
             unsigned char PIN5CTRL; // Pin 5 Control Reg.
             unsigned char PIN6CTRL; // Pin 6 Control Reg.
             unsigned char PIN7CTRL; // Pin 7 Control Reg.
             }
PORT_t;



Сообщение отредактировал Pavel_Bor - Jan 11 2011, 15:49
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 11 2011, 18:08
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (sonycman @ Jan 11 2011, 17:24) *
А номинальное напряжение конденсатора не подскажете?

Не так давно посадил через такую же цепочку корпус USB разъёма, используя обычный 50 вольтовый кондёр.
Делаю так же.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 12 2011, 01:52
Сообщение #19


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(Сергей Борщ @ Jan 12 2011, 00:08) *
Делаю так же.

То есть это нормально, и не требуется ставить "гроб" на 250 или вообще на 2 киловольта?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 12 2011, 03:58
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (sonycman @ Jan 12 2011, 06:52) *
То есть это нормально, и не требуется ставить "гроб" на 250 или вообще на 2 киловольта?
В промышленных изделиях "гробов" не встречал, но гарантировать, что это правильно - не буду. Какова емкость у модели человеческого тела при испытаниях на статику? Эта емкость составляет с вашей делитель. Осталось посчитать, в какой пропорции распределяется испытательное напряжение. Под рукой нет материалов по испытаниям на статику, данные взять неоткуда.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 12 2011, 04:57
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Нашел статью о создании универсальных портов В/В
http://easyelectronics.ru/rabota-s-portami...erov-na-si.html
Разобраться тяжело...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 12 2011, 06:15
Сообщение #22


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Pavel_Bor @ Jan 11 2011, 21:47) *
Какую посоветуете?
Керниган и Ричи + Стандарт по Си99

Цитата
Нашел следующие строчки:
#include <xmstruct.h> // definitions for the Peripheral Module structures
#include <xmbits_a3.h> // bit definitions for the Peripheral Modules registers
которые привели меня к:

И что? Додумались до:
Код
PORTA.OUT = 0xff;


2 Moderators: надо бы вычленить нашу беседу в отдельную тему типа " xMega - доступ к io-порту"


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 12 2011, 06:40
Сообщение #23


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата(demiurg_spb @ Jan 12 2011, 12:15) *
2 Moderators: надо бы вычленить нашу беседу в отдельную тему типа " xMega - доступ к io-порту"

Когда с мегой разберусь перейду на ЖКИ

На cvavr2.05 работать намного легче. У меня стоял 2.04 и он не понимал операций с мегой.

Сообщение отредактировал Pavel_Bor - Jan 12 2011, 09:43
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 17 2011, 10:21
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



На порт Е меги подключен регистр команд.
На D регистр данных.

В датьашите написано что для служебных операций (например DispOFF) необходимо RD, A0, D6,D4,D3 установить в "1". Как правильно выполнить данную операцию?

Я имею ввиду, что D3,D4,D7 относятся к шине данных. И когда я буду подавать различные данные операция сбросится...?

По даташиту для ЖКИ есть нога Е.
А по даташиту для S1D13700 таковой не наблюдается.

Сообщение отредактировал Pavel_Bor - Jan 18 2011, 10:11
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 19 2011, 13:09
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата
И что? Додумались до:
Код
PORTA.OUT = 0xff;


Вообще мне нужна была побитовая адресация

Код
#define    E        0
#define    WR        1
#define    A0        2
#define    CS        3
#define    RST        4
#define    DSF        5
......
void main (void)
{
.....
PORTA|=(1<<E)|(1<<WR)
.....
}


Продолжаем разговор о ЖКИ. Подключил, запрограммировал, а экран пустой(
Судя по временным диаграммам для 68 серии (по умолчанию) - [стр 11 даташита на BF320240B]
Для записи команд сначала формирую W/R=0, DATA,A0=1 Затем запускаю E....
Для записи данных сначала формирую W/R=0, DATA,A0=0 Затем запускаю E....

Сообщение отредактировал Pavel_Bor - Jan 19 2011, 13:27
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 19 2011, 13:52
Сообщение #26


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Pavel_Bor @ Jan 19 2011, 15:09) *
Продолжаем разговор о ЖКИ. Подключил, запрограммировал, а экран пустой(
Напряжение контраста (-22В) на 17 ноге есть? Через потенциометр завели его на 3 ногу? Выставили потенциометром на 3 ноге -24В отностительно 2 ноги? Исходник вашей программы показать можете?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 19 2011, 14:03
Сообщение #27


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Собственно код

CODE
/*****************************************************
Chip type : ATxmega128A3
Program type : Application
AVR Core Clock frequency: 4,608000 MHz
Memory model : Small
Data Stack size : 2048
*****************************************************/

// I/O Registers definitions
#include <io.h>

#define E 0
#define WR 1
#define A0 2
#define CS 3
#define RST 4
#define DSF 5
#define Button1 6
#define Button2 7

#define D0 0
#define D1 1
#define D2 2
#define D3 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7

#define Data_PORT PORTD.OUT
#define Ctrl_PORT PORTE.OUT
#define Data_DIR PORTD.DIR
#define Ctrl_DIR PORTE.DIR

#define SystemSet 0x40
#define SleepIn 0x53
#define DispOff 0x58
#define DispOn 0x59
#define Scroll 0x44
#define CurForm 0x5D
#define CGRAMAddr 0x5C
#define CurRight 0x4C
#define CurLeft 0x4D
#define CurUp 0x4E
#define CurDown 0x4F
#define HdotScr 0x5A
#define Overlay 0x5B
#define SetCurAddr 0x46
#define ReadCurAddr 0x47
#define MemWrite 0x42
#define MemRead 0x43


void Delay(unsigned int);
void Ports_Init(void);
void system_clocks_init(void);
void SendLcdCommand(unsigned char);
void SendLcdData(unsigned char);
void Delay(unsigned int);
void ClearText(void);
void ClearGraphics(void);
void InstructionSet(void);

// Declare your global variables here
int i=1;

void main(void)
{
// Declare your local variables here
unsigned char n;

// Interrupt system initialization
// Optimize for speed
#pragma optsize-
// Make sure the interrupts are disabled
#asm("cli")
// Low level interrupt: Off
// Round-robin scheduling for low level interrupt: Off
// Medium level interrupt: Off
// High level interrupt: Off
// The interrupt vectors will be placed at the start of the Application FLASH section
n=(PMIC.CTRL & (~(PMIC_RREN_bm | PMIC_IVSEL_bm | PMIC_HILVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_LOLVLEN_bm)));
CCP=CCP_IOREG_gc;
PMIC.CTRL=n;
// Set the default priority for round-robin scheduling
PMIC.INTPRI=0x00;
// Restore optimization for size if needed
#pragma optsize_default


system_clocks_init();
Ports_Init();
Delay(i);
InstructionSet();
Ctrl_PORT|=(1<<CS);
while (1)
{
// Place your code here

}
}

// System Clocks initialization
void system_clocks_init(void)
{
unsigned char n,s;

// Optimize for speed
#pragma optsize-
// Save interrupts enabled/disabled state
s=SREG;
// Disable interrupts
#asm("cli")

// External 4608,000 kHz clock source on XTAL1 initialization
OSC.XOSCCTRL=OSC_XOSCSEL_EXTCLK_gc;
// Enable the external clock source
OSC.CTRL|=OSC_XOSCEN_bm;

// System Clock prescaler A division factor: 1
// System Clock prescalers B & C division factors: B:1, C:1
// ClkPer4: 4608,000 kHz
// ClkPer2: 4608,000 kHz
// ClkPer: 4608,000 kHz
// ClkCPU: 4608,000 kHz
n=(CLK.PSCTRL & (~(CLK_PSADIV_gm | CLK_PSBCDIV1_bm | CLK_PSBCDIV0_bm))) |
CLK_PSADIV_1_gc | CLK_PSBCDIV_1_1_gc;
CCP=CCP_IOREG_gc;
CLK.PSCTRL=n;

// Select the system clock source: External Osc. or Clock
n=(CLK.CTRL & (~CLK_SCLKSEL_gm)) | CLK_SCLKSEL_XOSC_gc;
CCP=CCP_IOREG_gc;
CLK.CTRL=n;

// Disable the unused oscillators: 2 MHz, 32 MHz, internal 32 kHz, PLL
OSC.CTRL&= ~(OSC_RC2MEN_bm | OSC_RC32MEN_bm | OSC_RC32KEN_bm | OSC_PLLEN_bm);

// Peripheral Clock output: Disabled
PORTCFG.CLKEVOUT=(PORTCFG.CLKEVOUT & (~PORTCFG_CLKOUT_gm)) | PORTCFG_CLKOUT_OFF_gc;

// Restore interrupts enabled/disabled state
SREG=s;
// Restore optimization for size if needed
#pragma optsize_default
}

// Ports initialization
void Ports_Init(void)
{
// PORTA initialization
// OUT register
PORTA.OUT=0x00;
// Bit0: Input
// Bit1: Input
// Bit2: Input
// Bit3: Input
// Bit4: Input
// Bit5: Input
// Bit6: Input
// Bit7: Input
PORTA.DIR=0x00;
// Bit0 Output/Pull configuration: Totempole/No
// Bit0 Input/Sense configuration: Sense both edges
// Bit0 inverted: Off
// Bit0 slew rate limitation: Off
PORTA.PIN0CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit1 Output/Pull configuration: Totempole/No
// Bit1 Input/Sense configuration: Sense both edges
// Bit1 inverted: Off
// Bit1 slew rate limitation: Off
PORTA.PIN1CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit2 Output/Pull configuration: Totempole/No
// Bit2 Input/Sense configuration: Sense both edges
// Bit2 inverted: Off
// Bit2 slew rate limitation: Off
PORTA.PIN2CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit3 Output/Pull configuration: Totempole/No
// Bit3 Input/Sense configuration: Sense both edges
// Bit3 inverted: Off
// Bit3 slew rate limitation: Off
PORTA.PIN3CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit4 Output/Pull configuration: Totempole/No
// Bit4 Input/Sense configuration: Sense both edges
// Bit4 inverted: Off
// Bit4 slew rate limitation: Off
PORTA.PIN4CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit5 Output/Pull configuration: Totempole/No
// Bit5 Input/Sense configuration: Sense both edges
// Bit5 inverted: Off
// Bit5 slew rate limitation: Off
PORTA.PIN5CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit6 Output/Pull configuration: Totempole/No
// Bit6 Input/Sense configuration: Sense both edges
// Bit6 inverted: Off
// Bit6 slew rate limitation: Off
PORTA.PIN6CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit7 Output/Pull configuration: Totempole/No
// Bit7 Input/Sense configuration: Sense both edges
// Bit7 inverted: Off
// Bit7 slew rate limitation: Off
PORTA.PIN7CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Interrupt 0 level: Disabled
// Interrupt 1 level: Disabled
PORTA.INTCTRL=(PORTA.INTCTRL & (~(PORT_INT1LVL_gm | PORT_INT0LVL_gm))) |
PORT_INT1LVL_OFF_gc | PORT_INT0LVL_OFF_gc;
// Bit0 pin change interrupt 0: Off
// Bit1 pin change interrupt 0: Off
// Bit2 pin change interrupt 0: Off
// Bit3 pin change interrupt 0: Off
// Bit4 pin change interrupt 0: Off
// Bit5 pin change interrupt 0: Off
// Bit6 pin change interrupt 0: Off
// Bit7 pin change interrupt 0: Off
PORTA.INT0MASK=0x00;
// Bit0 pin change interrupt 1: Off
// Bit1 pin change interrupt 1: Off
// Bit2 pin change interrupt 1: Off
// Bit3 pin change interrupt 1: Off
// Bit4 pin change interrupt 1: Off
// Bit5 pin change interrupt 1: Off
// Bit6 pin change interrupt 1: Off
// Bit7 pin change interrupt 1: Off
PORTA.INT1MASK=0x00;

// PORTD initialization
// OUT register
PORTD.OUT=0x00;
// Bit0: Output
// Bit1: Output
// Bit2: Output
// Bit3: Output
// Bit4: Output
// Bit5: Output
// Bit6: Output
// Bit7: Output
PORTD.DIR=0xFF;
// Bit0 Output/Pull configuration: Totempole/No
// Bit0 Input/Sense configuration: Sense both edges
// Bit0 inverted: Off
// Bit0 slew rate limitation: Off
PORTD.PIN0CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit1 Output/Pull configuration: Totempole/No
// Bit1 Input/Sense configuration: Sense both edges
// Bit1 inverted: Off
// Bit1 slew rate limitation: Off
PORTD.PIN1CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit2 Output/Pull configuration: Totempole/No
// Bit2 Input/Sense configuration: Sense both edges
// Bit2 inverted: Off
// Bit2 slew rate limitation: Off
PORTD.PIN2CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit3 Output/Pull configuration: Totempole/No
// Bit3 Input/Sense configuration: Sense both edges
// Bit3 inverted: Off
// Bit3 slew rate limitation: Off
PORTD.PIN3CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit4 Output/Pull configuration: Totempole/No
// Bit4 Input/Sense configuration: Sense both edges
// Bit4 inverted: Off
// Bit4 slew rate limitation: Off
PORTD.PIN4CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit5 Output/Pull configuration: Totempole/No
// Bit5 Input/Sense configuration: Sense both edges
// Bit5 inverted: Off
// Bit5 slew rate limitation: Off
PORTD.PIN5CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit6 Output/Pull configuration: Totempole/No
// Bit6 Input/Sense configuration: Sense both edges
// Bit6 inverted: Off
// Bit6 slew rate limitation: Off
PORTD.PIN6CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit7 Output/Pull configuration: Totempole/No
// Bit7 Input/Sense configuration: Sense both edges
// Bit7 inverted: Off
// Bit7 slew rate limitation: Off
PORTD.PIN7CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Interrupt 0 level: Disabled
// Interrupt 1 level: Disabled
PORTD.INTCTRL=(PORTD.INTCTRL & (~(PORT_INT1LVL_gm | PORT_INT0LVL_gm))) |
PORT_INT1LVL_OFF_gc | PORT_INT0LVL_OFF_gc;
// Bit0 pin change interrupt 0: Off
// Bit1 pin change interrupt 0: Off
// Bit2 pin change interrupt 0: Off
// Bit3 pin change interrupt 0: Off
// Bit4 pin change interrupt 0: Off
// Bit5 pin change interrupt 0: Off
// Bit6 pin change interrupt 0: Off
// Bit7 pin change interrupt 0: Off
PORTD.INT0MASK=0x00;
// Bit0 pin change interrupt 1: Off
// Bit1 pin change interrupt 1: Off
// Bit2 pin change interrupt 1: Off
// Bit3 pin change interrupt 1: Off
// Bit4 pin change interrupt 1: Off
// Bit5 pin change interrupt 1: Off
// Bit6 pin change interrupt 1: Off
// Bit7 pin change interrupt 1: Off
PORTD.INT1MASK=0x00;

// PORTE initialization
// OUT register
PORTE.OUT=0x00;
// Bit0: Output
// Bit1: Input
// Bit2: Output
// Bit3: Output
// Bit4: Output
// Bit5: Output
// Bit6: Output
// Bit7: Output
PORTE.DIR=0xFD;
// Bit0 Output/Pull configuration: Totempole/No
// Bit0 Input/Sense configuration: Sense both edges
// Bit0 inverted: Off
// Bit0 slew rate limitation: Off
PORTE.PIN0CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit1 Output/Pull configuration: Totempole/No
// Bit1 Input/Sense configuration: Sense both edges
// Bit1 inverted: Off
// Bit1 slew rate limitation: Off
PORTE.PIN1CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit2 Output/Pull configuration: Totempole/No
// Bit2 Input/Sense configuration: Sense both edges
// Bit2 inverted: Off
// Bit2 slew rate limitation: Off
PORTE.PIN2CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit3 Output/Pull configuration: Totempole/No
// Bit3 Input/Sense configuration: Sense both edges
// Bit3 inverted: Off
// Bit3 slew rate limitation: Off
PORTE.PIN3CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit4 Output/Pull configuration: Totempole/No
// Bit4 Input/Sense configuration: Sense both edges
// Bit4 inverted: Off
// Bit4 slew rate limitation: Off
PORTE.PIN4CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit5 Output/Pull configuration: Totempole/No
// Bit5 Input/Sense configuration: Sense both edges
// Bit5 inverted: Off
// Bit5 slew rate limitation: Off
PORTE.PIN5CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit6 Output/Pull configuration: Totempole/No
// Bit6 Input/Sense configuration: Sense both edges
// Bit6 inverted: Off
// Bit6 slew rate limitation: Off
PORTE.PIN6CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit7 Output/Pull configuration: Totempole/No
// Bit7 Input/Sense configuration: Sense both edges
// Bit7 inverted: Off
// Bit7 slew rate limitation: Off
PORTE.PIN7CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Interrupt 0 level: Disabled
// Interrupt 1 level: Disabled
PORTE.INTCTRL=(PORTE.INTCTRL & (~(PORT_INT1LVL_gm | PORT_INT0LVL_gm))) |
PORT_INT1LVL_OFF_gc | PORT_INT0LVL_OFF_gc;
// Bit0 pin change interrupt 0: Off
// Bit1 pin change interrupt 0: Off
// Bit2 pin change interrupt 0: Off
// Bit3 pin change interrupt 0: Off
// Bit4 pin change interrupt 0: Off
// Bit5 pin change interrupt 0: Off
// Bit6 pin change interrupt 0: Off
// Bit7 pin change interrupt 0: Off
PORTE.INT0MASK=0x00;
// Bit0 pin change interrupt 1: Off
// Bit1 pin change interrupt 1: Off
// Bit2 pin change interrupt 1: Off
// Bit3 pin change interrupt 1: Off
// Bit4 pin change interrupt 1: Off
// Bit5 pin change interrupt 1: Off
// Bit6 pin change interrupt 1: Off
// Bit7 pin change interrupt 1: Off
PORTE.INT1MASK=0x00;

// PORTR initialization
// OUT register
PORTR.OUT=0x00;
// Bit0: Input
// Bit1: Input
PORTR.DIR=0x00;
// Bit0 Output/Pull configuration: Totempole/No
// Bit0 Input/Sense configuration: Sense both edges
// Bit0 inverted: Off
// Bit0 slew rate limitation: Off
PORTR.PIN0CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Bit1 Output/Pull configuration: Totempole/No
// Bit1 Input/Sense configuration: Sense both edges
// Bit1 inverted: Off
// Bit1 slew rate limitation: Off
PORTR.PIN1CTRL=PORT_OPC_TOTEM_gc | PORT_ISC_BOTHEDGES_gc;
// Interrupt 0 level: Disabled
// Interrupt 1 level: Disabled
PORTR.INTCTRL=(PORTR.INTCTRL & (~(PORT_INT1LVL_gm | PORT_INT0LVL_gm))) |
PORT_INT1LVL_OFF_gc | PORT_INT0LVL_OFF_gc;
// Bit0 pin change interrupt 0: Off
// Bit1 pin change interrupt 0: Off
PORTR.INT0MASK=0x00;
// Bit0 pin change interrupt 1: Off
// Bit1 pin change interrupt 1: Off
PORTR.INT1MASK=0x00;
}

void SendLcdCommand(unsigned char Command)
{
Ctrl_PORT |= 1<<A0;
Data_PORT = Command;
Ctrl_PORT |= (0<<WR);
Ctrl_PORT |= (1<<E);
Delay(i);
Ctrl_PORT |= (1<<WR)|(0<<E);
}

void SendLcdData(unsigned char Data)
{
Ctrl_PORT |= (0<<A0);
Data_PORT = Data;
Ctrl_PORT |= (0<<WR);
Ctrl_PORT |= (1<<E);
Delay(i);
Ctrl_PORT = (1<<WR)|(0<<E);
}

void Delay(unsigned int counter)
{
while(counter)
{
counter = counter - 1;
}
}

void ClearText(void)
{
SendLcdCommand(SetCurAddr);
SendLcdData(0x00);
SendLcdData(0x00);
SendLcdCommand(CurRight);
SendLcdCommand(MemWrite);
for(i = 0; i <= 1200; i++)
{
SendLcdData(0x20);
}
}

void ClearGraphics(void)
{
SendLcdCommand(SetCurAddr);
SendLcdData(0x00);
SendLcdData(0x10);
SendLcdCommand(CurRight);
SendLcdCommand(MemWrite);
for(i = 0; i <= 9600; i++)
{
SendLcdData(0x00);
}
}

void InstructionSet(void)
{
SendLcdCommand(SystemSet); //System
SendLcdData(0x38);
SendLcdData(0x87);
SendLcdData(0x07);
SendLcdData(0x3F);
SendLcdData(0x49);//(0x2B)
SendLcdData(0x7F);//(EF)
SendLcdData(0x80);//(0x28)
SendLcdData(0x00);
SendLcdCommand(Scroll); //Scroll
SendLcdData(0x00);
SendLcdData(0x00);
SendLcdData(0x40);//(0xEF)
SendLcdData(0x00);
SendLcdData(0x10);
SendLcdData(0x40);//(0xEF)
SendLcdData(0x00);
SendLcdData(0x04);
SendLcdData(0x00);
SendLcdData(0x30);
SendLcdCommand(HdotScr); // HDOTSCR
SendLcdData(0x00);
SendLcdCommand(Overlay); //OVLAY
SendLcdData(0x01);
SendLcdCommand(DispOff); //DISPOFF
SendLcdData(0x56); //(0x00)
ClearText();
ClearGraphics();
SendLcdCommand(SetCurAddr); //CSRW
SendLcdData(0x00);
SendLcdData(0x00);
SendLcdCommand(CurForm); //CSR FORM
SendLcdData(0x00);
SendLcdData(0x00);
SendLcdCommand(DispOn); //DISP ON
SendLcdData(0x14);
Ctrl_PORT|=(1<<DSF);
SendLcdCommand(CurRight); //CSR DIR
SendLcdCommand(MemWrite); //MWRITE
SendLcdData(0x20);
SendLcdData(0x45);
SendLcdData(0x50);
SendLcdData(0x53);
SendLcdData(0x4F);
SendLcdData(0x4E);
SendLcdCommand(SetCurAddr); //CSRW
SendLcdData(0x00);
SendLcdData(0x10);
SendLcdCommand(CurDown); //CSRDIR 0x4F
SendLcdCommand(MemWrite); //MWRITE
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdCommand(SetCurAddr); //CSRW
SendLcdData(0x01);
SendLcdData(0x10);
SendLcdCommand(MemWrite); //MWRITE
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdData(0xFF);
SendLcdCommand(SetCurAddr); //CSRW
SendLcdData(0x00);
SendLcdData(0x01);
SendLcdCommand(CurRight); //CSRDIR
SendLcdCommand(MemWrite); //MWRITE
SendLcdData(0x44);
SendLcdData(0x6F);
SendLcdData(0x74);
SendLcdData(0x20);
SendLcdData(0x4D);
SendLcdData(0x61);
SendLcdData(0x74);
SendLcdData(0x72);
SendLcdData(0x69);
SendLcdData(0x78);
SendLcdData(0x20);
SendLcdData(0x4C);
SendLcdData(0x43);
SendLcdData(0x44);

SendLcdCommand(SetCurAddr);
SendLcdData(0x00);
SendLcdData(0x00);
SendLcdCommand(CurForm);
SendLcdData(0x04);
SendLcdData(0x86);
}


-24В Есть
Цитата
Выставили потенциометром на 3 ноге -24В отностительно 2 ноги

Так вторая нога же Vdd. Может относительно первой ноги? Диапазон (-22.8~-12.4)В.

Появляются прямые линии. Мусор?

Сообщение отредактировал IgorKossak - Jan 19 2011, 14:35
Причина редактирования: Длинные коды оформляйте с codebox
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 19 2011, 14:27
Сообщение #28


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Pavel_Bor @ Jan 19 2011, 16:03) *
Так вторая нога же Vdd. Может относительно первой ноги?
Напряжение Vo отсчитывается относительно напряжения питания контролера.
QUOTE (Pavel_Bor @ Jan 19 2011, 16:03) *
Появляются прямые линии. Мусор?
Что-то недопрограммировали. Сейчас гляну код, хотя с дисплеем на таком контроллере и не работал.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 20 2011, 06:31
Сообщение #29


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Pavel_Bor @ Jan 19 2011, 16:03) *
Собственно код
CODE
Ctrl_PORT |= (0<<WR);
   Ctrl_PORT = (1<<WR)|(0<<E);
Ошибка как минимум в этих и подобных строках. Вам следует изучить двоичную арифметику, без этого в микроконтроллерах делать нечего. http://ru.wikipedia.org/wiki/Битовые_операции


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 20 2011, 07:25
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата(Сергей Борщ @ Jan 20 2011, 09:31) *
Код
Ctrl_PORT |= (0<<WR);
   Ctrl_PORT = (1<<WR)|(0<<E);
Ошибка как минимум в этих и подобных строках. Вам следует изучить двоичную арифметику, без этого в микроконтроллерах делать нечего. http://ru.wikipedia.org/wiki/Битовые_операции

Ctrl_PORT |= (0<<WR); - Я хочу присвоить переменную "0". Но с такой записью я оставляю ее в "1". Мдя бывает... Спасибо.
с битовыми операциями знаком давно, а вот с мегой не очень.

Сообщение отредактировал Pavel_Bor - Jan 20 2011, 07:36
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 20 2011, 07:48
Сообщение #31


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Pavel_Bor @ Jan 20 2011, 09:25) *
с битовыми операциями знаком давно, а вот с мегой не очень.
Мега тут совершенно не при чем. Правила битовых операций одинаковы для любого контроллера/процессора


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 20 2011, 11:19
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата(Сергей Борщ @ Jan 20 2011, 10:48) *
Мега тут совершенно не при чем. Правила битовых операций одинаковы для любого контроллера/процессора



Что я получу при такой записи?
[/code]
Ctrl_PORT &= (~WR);
Ctrl_PORT = (0<<WR)
Ctrl_PORT |= (0<<WR)
[/code]
1) WR=WR&(~WR);
2) WR=0;
3) WR=WR;
Правильно?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 20 2011, 11:24
Сообщение #33


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Pavel_Bor @ Jan 20 2011, 13:19) *
Что я получу при такой записи?
CODE

Ctrl_PORT &= (~WR);  
Ctrl_PORT = (0<<WR)
Ctrl_PORT |= (0<<WR)

1) WR=WR&(~WR);
2) WR=0;
3) WR=WR;
Правильно?
Недопонял. Чтобы сбросить бит WR вам надо написать Ctrl_PORT &= ~(1<<WR);


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 20 2011, 11:54
Сообщение #34


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



После исправления кода у индикатор сразу загорается весь экран, потом остаются линии, а потом исчезает вся картинка.

Закоментировал InstructionSet(). С индикатором происходит тоже самое.
стер программу с контроллера - без изменений.

Сообщение отредактировал Pavel_Bor - Jan 21 2011, 07:45
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 24 2011, 11:29
Сообщение #35


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Исправил последовательность иницилизации хмеги. Найдена новая ошибка...
Подозрительное поведение при Debug(е) - Программа из SendLcdCommand перепрыгивает в SendLcdData.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 24 2011, 11:40
Сообщение #36


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Pavel_Bor @ Jan 24 2011, 13:29) *
Подозрительное поведение при Debug(е) - Программа из SendLcdCommand перепрыгивает в SendLcdData.
Умный компилятор сообразил, что остаток этих функций идентичен и вместо двух идентичных кусков кода использовал один?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 24 2011, 11:57
Сообщение #37


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата(Сергей Борщ @ Jan 24 2011, 14:40) *
Умный компилятор сообразил, что остаток этих функций идентичен и вместо двух идентичных кусков кода использовал один?

Именно так. Как ему объяснить?

Сообщение отредактировал Pavel_Bor - Jan 24 2011, 11:58
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 24 2011, 12:31
Сообщение #38


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Pavel_Bor @ Jan 24 2011, 15:57) *
Именно так. Как ему объяснить?

Зачем? cranky.gif
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 24 2011, 12:39
Сообщение #39


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



есть отдельный вызов на данные и на команды
Код
oid SendLcdCommand(unsigned char Command)
{      
        i=1;
        Ctrl_PORT  = (1<<A0);
        Ctrl_PORT &=~(1<<WR);    //прыгает с этой строчки
        Data_PORT = Command;
        Ctrl_PORT |= (1<<E);        
        Delay(i);
        Ctrl_PORT |= (1<<WR);
        Ctrl_PORT &=~(1<<E);
}


void SendLcdData(unsigned char Data)
{
        i=1;
        Ctrl_PORT &=~(1<<WR);
        Ctrl_PORT &=~(1<<A0);
        Data_PORT = Data;
        Ctrl_PORT|= (1<<E);  
        Delay(i);            
        Ctrl_PORT |= (1<<WR);
        Ctrl_PORT &=~(1<<E);
}

команда не проходит. Следовательно я не попадаю в регистр настроек.

На осциллографе сигналы RW, E видно. А сигнал А0 признаков жизни не подает, хотя в дебаге все нормально.

Сообщение отредактировал Pavel_Bor - Jan 24 2011, 14:13
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 24 2011, 14:24
Сообщение #40


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Не считая того, что Ctrl_PORT = (1<<A0); сбрасывает все биты в порту кроме A0, другого криминала не видно. Нога настроена на вывод? Если просто в цикле ей шевелить - шевелится? Замыканий нет?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 25 2011, 07:12
Сообщение #41


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Замыканий нет. Сейчас подрыгаю ногой в цикле. Шевелится.
Состояние ножек WR, E меняется намного чаще чем А0. При добавлении времени задержки до 100, при А0="1" сигнал видно.
Выдачу команд или данных определяю следующим образом.

Код
void SendLcd(unsigned char Command)
{      
        if (key)
            {
                Ctrl_PORT  |= (1<<A0);
                key=0;
            }
           else
                 {
                     Ctrl_PORT &=~(1<<A0);
                 }
        Ctrl_PORT &=~(1<<WR);
        Data_PORT  = Command;
        Delay(2);
        Ctrl_PORT |= (1<<E);        
        Delay(1);
        Ctrl_PORT |= (1<<WR);
        Ctrl_PORT &=~(1<<E);
}

Странно, но ножка DSF (PE5), отвечающая за вкл/выкл индикатора, находится всегда в "1". Отключил мегу от жки DSF в "0".

Индикатор все еще не запускается.

Сообщение отредактировал Pavel_Bor - Jan 25 2011, 12:02
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jan 27 2011, 09:14
Сообщение #42


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Возможно ли что он не запускается по следующим причинам:
1. Проведена неправильно инициализация
2. Сделан неправильный выбор слоя(графика/текст)
3. Ножка RESET ЖКИ всегда в 0
4. Команда Mem_Write, которая выдает символы из знакогенератора
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Feb 14 2011, 12:54
Сообщение #43


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Попробовал подкинуть кнопки, не заработали. Посмотрел на ножки кварца, он не стартует.. Кварц живой, проверял на асме.
Подскажите как правильно инициализировать кварц на С для Xmega128A3.

Также на асме индикатор вроде проходит процедуру инициализации - зажигается весь экран. Случайно получилось его очистить - заполнить пустыми символами.

Сообщение отредактировал Pavel_Bor - Feb 14 2011, 13:23
Go to the top of the page
 
+Quote Post
bob1
сообщение Feb 14 2011, 14:21
Сообщение #44


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Цитата(Pavel_Bor @ Feb 14 2011, 18:54) *
Попробовал подкинуть кнопки, не заработали. Посмотрел на ножки кварца, он не стартует.. Кварц живой, проверял на асме.
Подскажите как правильно инициализировать кварц на С для Xmega128A3.


Попробуйте:
CLKSYS_XOSC_Config(OSC_FRQRANGE_2TO9_gc,
false,
OSC_XOSCSEL_XTAL_16KCLK_gc );

CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc );
//разрешение работы кварца и внутреннего RC 32 кГц
OSC.CTRL=OSC_XOSCEN_bm|OSC_RC32KEN_bm;
do {} while ( CLKSYS_IsReady( OSC_XOSCEN_bm ) == 0 );
CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_XOSC_gc );

Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Feb 14 2011, 14:27
Сообщение #45


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



[quote name='bob1' date='Feb 14 2011, 18:21' post='884420']

у меня внешний кварц 4.608 МГц
Go to the top of the page
 
+Quote Post
bob1
сообщение Feb 14 2011, 14:34
Сообщение #46


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Последняя строка кода и выбирает внешний кварц для работы!!!!
Написано для IAR.
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Feb 16 2011, 09:20
Сообщение #47


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



в даташите на контроллер нашел следущее

Цитата
• If no standard crystal close to the calculated value of fOSC exists, a higher frequency
crystal can be used and the value of TC/R revised using the above equation.
• Symptoms of an incorrect TC/R setting are listed below. If any of these appears, check
the value of TC/R and modify it if necessary.
• Vertical scanning halts and a high-contrast horizontal line appears.
• All pixels are on or off.
• The FPLINE output signal is absent or corrupted.
• The display is unstable.


Из перечисленных выше пунктов присутствуют:
горизонтальные линии
полностью вкл/выкл все пиксели.
Получается бэда с инициализацией, неправильным выбором параметров, что в свою очередь ведет к неправильному расчету Fsysclk.

В даташите не нашел конкретных значений Ffr, bpp,ClockDiv. Выходит уравнение содержит в себе 4 переменных

fSYSCLK = ([ClockDiv] x [bpp] x [TC/R'] x [FX] x [L/F] x Ffr) / 4

Сообщение отредактировал Pavel_Bor - Feb 17 2011, 08:00
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Feb 18 2011, 13:34
Сообщение #48


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Удалось очистить экран ЖКИ и установить курсор в текущую позицию.
Проблема в том что он на всю ширину экрана. Кто-нибудь сталкивался с подобным?
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Feb 21 2011, 12:09
Сообщение #49


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



В принципе изменением напряжения VEE можно засвечивать только активные символы. Что-нибудь кроме курсора пока выдать не удается..

Сообщение отредактировал Pavel_Bor - Feb 21 2011, 12:10
Go to the top of the page
 
+Quote Post
Juk1976
сообщение Feb 23 2011, 21:50
Сообщение #50


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-08-05
Из: Украина Винница
Пользователь №: 7 258



Цитата(Pavel_Bor @ Feb 21 2011, 15:09) *
В принципе изменением напряжения VEE можно засвечивать только активные символы. Что-нибудь кроме курсора пока выдать не удается..

Попробуй эти файлы (C и H)
В принципе индикаторы похожие
sm.gif)

Левая нога но работает.
Прикрепленные файлы
Прикрепленный файл  main____.txt ( 14.55 килобайт ) Кол-во скачиваний: 46
 
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Feb 24 2011, 07:45
Сообщение #51


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата(Juk1976 @ Feb 24 2011, 01:50) *
Попробуй эти файлы (C и H)
В принципе индикаторы похожие
sm.gif)


Спасибо. Попробую.
Go to the top of the page
 
+Quote Post
Juk1976
сообщение Feb 24 2011, 08:06
Сообщение #52


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 1-08-05
Из: Украина Винница
Пользователь №: 7 258



Цитата(Pavel_Bor @ Feb 24 2011, 10:45) *
Спасибо. Попробую.



Я Дятел не сбросил основные файлы (23-ночь sm.gif) )
Извини добавляю
Прикрепленные файлы
Прикрепленный файл  t6963V_C.txt ( 24.29 килобайт ) Кол-во скачиваний: 119
Прикрепленный файл  t6963V_h.txt ( 9.96 килобайт ) Кол-во скачиваний: 68
 
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 17 2011, 14:05
Сообщение #53


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



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

Теперь проблема заключается в том, что я не могу управлять курсором, не могу записывать символы в память индикатора. Каждый раз на экране одна и ту же последовательность символов. Все вышесказанное относится как к текстовому так и к графическому режимам.

Добавлен код на асме.

Сообщение отредактировал Pavel_Bor - Mar 17 2011, 14:25
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  S1D13700F02.doc ( 206.5 килобайт ) Кол-во скачиваний: 31
Прикрепленный файл  GR_LCD_01.rar ( 2.78 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 18 2011, 11:32
Сообщение #54


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Всем спасибо за поддержку. Процесс инициализации прошел успешно! Баги были с контактами.
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 08:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01977 секунд с 7
ELECTRONIX ©2004-2016