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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Bolymin BG320240B
Сергей Борщ
сообщение 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

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

 


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


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