Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

mega8+CVavr+Proteus - кто из них так глючит?

Непрочитано 04.10.2013, 09:25  
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию mega8+CVavr+Proteus - кто из них так глючит?

Добрый день.
В CVavr'е есть код под мегу 8ю, в коде есть немного глобальных переменных, полное перечисление ниже.
Так вот компилю код, вставляю в протеус, запускаю проект и ВУАЛЯ, код работает не так как надо, переменная pwm_b постоянно принимает значение 32, и что бы не делал с этой переменной она всегда = 32.
Думал сначала проблема в коде. Заремарил все строки с этой переменной, присвоил этой переменной значение 0 и тут же вывел на дисплей - результат не порадовал - 32. Даже пробовал переименовать эту переменную, все тот же результат. Тут зачем то, даже не знаю зачем, поменял описание переменных, точнее эту переменную поднял на 2 строки выше, было:
Код:
unsigned char pwm_r,pwm_r_new;
unsigned char pwm_g,pwm_g_new;
unsigned char pwm_b,pwm_b_new;
Стало:
Код:
unsigned char pwm_b,pwm_b_new; 
unsigned char pwm_r,pwm_r_new;
unsigned char pwm_g,pwm_g_new;
Ура, все заработало, переменная стала вести себя адекватно. Но тут заметил что теперь pwm_g стала выносить мозг. И вот тут то закралась мысля, что либо в меге нет возможности столько переменных переварить, либо CVavr их не пережевывает(нона этапе компиляции не ругается), ну или протеус обижается на такое кол-во глобальных переменных.

Подскажите, что это может быть, как избавиться от глюка?
P.S. CVavr - 2.05.3, Proteus - 7.7 SP2
P.S.S. Прошу прощения за слишком много букавак.



Код:
typedef struct{ 
    unsigned char second;
    unsigned char minute;
    unsigned char hour;
}s_time;
eeprom unsigned char e_time[9][4];
eeprom unsigned char first_run;
eeprom unsigned char e_pwm_r;
eeprom unsigned char e_pwm_g;
eeprom unsigned char e_pwm_b;
eeprom unsigned char e_pwm_timer;
unsigned char time[9][4];
s_time t;
unsigned char displey;
unsigned char displ_position;
unsigned char s_in_menu;
unsigned char lcdbuffer[19];
int t_temp;
bit f_ds1307;
bit f_reg;
unsigned char v_reg;
unsigned char pwm_r,pwm_r_new;
unsigned char pwm_g,pwm_g_new;
unsigned char pwm_b,pwm_b_new; 
unsigned char pwm_counter;
unsigned char pwm_timer;
unsigned int pwm_time_counter;
bit f_pwm_up;

typedef unsigned char byte;
typedef struct {
    byte family;
    byte serial[6];
    byte crc;
}trom;
typedef struct {
    union {
        struct {
            byte l;
            byte h;
        }b;
        int w;
    }temp;
    union {
        struct {
            byte l;
            byte h;
        }b;
        int w;
    }th;
    byte config;
    byte res[3];
    byte crc;
}tscratchpad;
trom ds_rom;
tscratchpad ds_sp;
bit ds_ok=0;
Реклама:
Sany81 вне форума  
Непрочитано 04.10.2013, 11:25  
oleg110592
Гражданин KAZUS.RUN
 
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
oleg110592 на пути к лучшему
По умолчанию Re: mega8+CVavr+Proteus - кто из них так глючит?

а где код неработающий?
oleg110592 вне форума  
Непрочитано 04.10.2013, 11:36  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: mega8+CVavr+Proteus - кто из них так глючит?

А зачем? Можно делать ставки, всему виною CVavr.
nahimovv вне форума  
Непрочитано 04.10.2013, 11:55  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: mega8+CVavr+Proteus - кто из них так глючит?

Не, не - виновата мега, точно! Ни протезус, ни тем более ЦВ врать не могут!!!
Тем более, что мега, согласно первому посту, в процессе никак не участвует - точно она!

Сообщение от Sany81 Посмотреть сообщение
как избавиться от глюка?
Исправить вот это вот место в программе, где он и возникает.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 04.10.2013, 12:15  
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Re: mega8+CVavr+Proteus - кто из них так глючит?

Вы видать не внимательно читали.
Повторюсь другими словами.
Есть код, ни как не связанный с переменной pwm_b, точнее переменная ни где, ни в одной процедуре или функцие не участвует, кроме одной, вывод информации на дисплей.
вот код:
pwm_r=0;
pwm_g=100;
pwm_b=200;
sprintf(lcdbuffer, "%03d%% %03d%% %03d%%",pwm_r,pwm_g,pwm_b);
lcd_puts(lcdbuffer);
Так вот на дисплей выйдет надпись
000% 100% 032%

Вот теперь думаю более понятно описал.
Sany81 вне форума  
Непрочитано 04.10.2013, 12:17  
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Re: mega8+CVavr+Proteus - кто из них так глючит?

Блин, пока писал предыдущее сообщение, понял что я мог где то лохануться и попытаться в теле программы в какой нить массив впихнуть значение превосходящее размер этого массива, вот это и могло стать причиной некрасивого поведения нужной мне переменной.
Сейчас буду проверять.
Sany81 вне форума  
Непрочитано 04.10.2013, 12:19  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: mega8+CVavr+Proteus - кто из них так глючит?

Сообщение от Sany81 Посмотреть сообщение
Вы видать не внимательно читали.
В каком конкретно месте?

Сообщение от Sany81 Посмотреть сообщение
Есть код, ...
Неправда, нет никакого кода.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 04.10.2013, 13:01  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: mega8+CVavr+Proteus - кто из них так глючит?

Сообщение от Sany81 Посмотреть сообщение
Сейчас буду проверять.
"Это элементарно, Ватсон!"(С)
Добавляете в конце три строчки:
Код:
pwm_counter = pwm_r;
pwm_counter = pwm_g;
pwm_counter = pwm_b;
Этим вы проверите действительность значений в pwm_r, pwm_g и pwm_b без объявления новой переменной.
Просмотрите содержимое lcdbuffer после выполнения sprintf.
Если всё верно, то разбирайтесь с lcd_puts(lcdbuffer); .
nahimovv вне форума  
Непрочитано 04.10.2013, 13:39  
oleg110592
Гражданин KAZUS.RUN
 
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
oleg110592 на пути к лучшему
По умолчанию Re: mega8+CVavr+Proteus - кто из них так глючит?

Код:
pwm_r=0;
pwm_g=100;
pwm_b=200;

    while (1)
    {
        sprintf(lcdbuffer, "%03d%% %03d%% %03d%%",pwm_r,pwm_g,pwm_b);
        puts(lcdbuffer);
        delay_ms(2000);
    }
"код" работает, естественно предупреждает
Цитата:
Warning: D:\Work\Codev\Examples\TestM48_2\TestM48_2.c(30): global variable 'pwm_r_new' was declared, but not referenced
Warning: D:\Work\Codev\Examples\TestM48_2\TestM48_2.c(31): global variable 'pwm_g_new' was declared, but not referenced
Warning: D:\Work\Codev\Examples\TestM48_2\TestM48_2.c(32): global variable 'pwm_b_new' was declared, but not referenced
Миниатюры:
Нажмите на изображение для увеличения
Название: terminal.png
Просмотров: 69
Размер:	3.5 Кб
ID:	52774  
oleg110592 вне форума  
Непрочитано 04.10.2013, 13:50  
Sany81
Частый гость
 
Регистрация: 30.08.2010
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
Sany81 на пути к лучшему
По умолчанию Re: mega8+CVavr+Proteus - кто из них так глючит?

Всем спасибо, нашел ошибку.
Опять невнимательность при написании кода.
Переменная lcdbuffer объявлена как массив 19, а в коде программы я присваиваю этому массиву значение из 20 символов. Вот как раз тут и и получается ошибка.
Мдя, вчера просидел пол дня с этой ошибкой, сегодня час убил, а оказывается все на поверхности, просто смотреть нужно ярче
А число 32, которое было в моей переменной, это ни что иное как пробел, которым я забивал массив, что бы очистить дисплей.

Последний раз редактировалось Sany81; 04.10.2013 в 13:56.
Sany81 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Предложение к Dosikus и другим профи по PROTEUS, а так же standy_crow Proteus, KiCAD и другие ECAD 15 31.03.2008 14:53
[Решено] Так, рассказик :)) Я долго ржал :)) DK Отвлекитесь, эмбеддеры! 7 31.08.2007 22:33
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43


Часовой пояс GMT +4, время: 12:57.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.