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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
oleg110592 на пути к лучшему
По умолчанию Re: mega8+CVavr+Proteus - кто из них так глючит?

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

А зачем? Можно делать ставки, всему виною CVavr.
nahimovv вне форума  
Непрочитано 04.10.2013, 11:55  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 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.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 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,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
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.RU
 
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
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, время: 03:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot