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

 
 
> Странный глюк, двумя словами не описать
masterpc
сообщение Jul 31 2008, 06:09
Сообщение #1


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

Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788



Работаю над контроллером для вентиляции, написал меню для жки 2*8, все работало нормально, пока я не решил вывод на жки перенести в основной цикл, до этого все выводилось по прерыванию таймера. Но я не постоянно что-то вывожу на ЖКИ, а только тогда, когда что-то новое нужно вывести. Все строковые литералы у меня храняться в флеше.
Глюк в следующем, включаю свой девайс и наблюдаю в верхней строке индикатора кракозябры, притом при переходе по меню,, кракозябры остаються. Начинаю думать, что может с настройками стека что-то не то, начинаю чтио-то пытаться настроить, вроде прошло. Целый день все нормально. Вот ушел домой, выключил девайс, прихожу утром, опять теже кракозябры. Провожу ту же процедуру поиска глюков, добиваюсь, чтобы все работало нормально. Подергал питание туда сюда, все нормально. И тут решил отключить питание на 10 минут. Включил после этого, и.... опять те же кракозябры. Даже не знаю где искать причину траблы, программер я пока не ас, только учусь, может и накосячил где. Помогите плиз crying.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Jul 31 2008, 06:47
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Похоже, что с инициализацией ЖКИ у Вас что-то не то.
Хотя, что значит "вытягиваю строки из флеша" - флеш внешний?
Go to the top of the page
 
+Quote Post
masterpc
сообщение Jul 31 2008, 06:56
Сообщение #3


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

Группа: Участник
Сообщений: 124
Регистрация: 1-03-07
Из: Винница
Пользователь №: 25 788



Цитата(aaarrr @ Jul 31 2008, 09:47) *
Похоже, что с инициализацией ЖКИ у Вас что-то не то.
Хотя, что значит "вытягиваю строки из флеша" - флеш внешний?


Вот инициализация ЖК:
Код
//Функция инициализации ЖКИ
void LCDinit(void){

  PAUSE_US(15000);     // ~15 ms
  write_LCD(0x30, 0);
  PAUSE_US(5500);      // ~5,5 ms
  write_LCD(0x30, 0);
  PAUSE_US(250);      // ~250 us
  write_LCD(0x30, 0);
  
  
  BFcontrol();  
  write_LCD(0x01, 0);   //очистка экрана
  BFcontrol();
  write_LCD(0x28, 0);   //выбираем 4-х разрядную шину, размер символа 5х8, развертка в 2 строки
  BFcontrol();  
  write_LCD(0x0C, 0);   //дисплей включен, курсор никак не отображаем /E
  BFcontrol();  
  write_LCD(0x06, 0);   //Перемещает курсор вправо, счетчик адреса инкрементируется
  BFcontrol();  
  write_LCD(0x02, 0);   //AC=0
  BFcontrol();  
  write_LCD(0x01, 0);   //очистка экрана
  
}



А вот как меню организовано:
Код
__flash const byte s0[]=" MASTER ";
__flash const byte s1[]=" v-0.1a ";
__flash const byte s2[]=" Журнал ";
__flash const byte s3[]=" работы ";
__flash const byte s4[]="Конфиг. ";
__flash const byte s5[]="системы ";
__flash const byte s6[]=" Ручной ";
__flash const byte s7[]=" режим  ";
__flash const byte s8[]="Текущие ";
__flash const byte s9[]="настр-ки";

и т.д.


/*Структуры всех пунктов меню*/
struct MENU{
      __flash const byte *st1;
      __flash const byte *st2;
      const byte next;
      const byte func;      
}__flash mas[]={
                            
            s0,     //0
            s1,                // " MASTER "
            1,                 // " v-0.1a "
            0x00,
            
            s2,     //1
            s3,                // " Журнал "
            0,                 // " работы "              
            0x00,
            
            s4,     //2
            s5,                // "Конфиг. "
            4,                 // "системы "
            0x08,
            
            
            s6,     //3
            s7,                // " Ручной "
            0,                 // " режим  "
            0x09,
            
            
            s8,     //4
            s9,                // "Текущие "
            2,                 // "настр-ки"
            0x0A,


и т.д.


//Вывод текущей информации на ЖКИ
void DISPLAY(void){
    
        
  
         static byte buf=0xFF;
         if(buf!=Current_Punkt){          
                       buf=Current_Punkt;                        
                       ChType(1,1, (mas[Current_Punkt].st1));
                       ChType(2,1, (mas[Current_Punkt].st2));                        
         }
        
         else if(permit>0){          
                       buf=Current_Punkt;                        
                       ChType(1,1, (mas[Current_Punkt].st1));
                       ChType(2,1, (mas[Current_Punkt].st2));
                       permit--;  
         }
        
         NextPunkt=mas[Current_Punkt].next;
         Function=mas[Current_Punkt].func;          
        
        
            
}



void ChType(byte x, byte y, byte const __flash  *str){    
  byte i=0;
  byte buf[8];    
                  
    
          while (str[i]!='\0'){
            buf[i]=str[i];
            i++;
          }
         Out_LCD(x,y, buf);
}



По меню я передвигаюсь с помощью двумерного массива, в котором записаны номера пунктов меню из __flash mas[].
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:18
Рейтинг@Mail.ru


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