CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Re: CodeVision AVR в вопросах и ответах

Сообщение ИС-пытатель »

hfelyx писал(а): На ногу В.0 (OCR0A) повесил через полевик( 10к между G и S, 100Om от ноги мк на G) светодиод , а он не хочет полностью тухнуть при значении OCR0A=0; !!! Что можно сделать чтоб убрать засветку??? Спасибо!
P.S. Если написал не в той ветке извините и направьте!

Можно почитать даташит или Евстифеева. Там черном по белому написано, что при 0-м значении вывод включится и тут же выключится. Поэтому Ваш светодиод полностью не гаснет. Либо выключайте таймер, если хотите погасить, либо вешайте НЧ-фильтр, чтобы погасить этот импульс.
Vrungel
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт сен 07, 2007 22:13:42
Откуда: Мариуполь

Re: CodeVision AVR в вопросах и ответах

Сообщение Vrungel »

Vrungel писал(а):Добрый вечер.
В версии 2.05.3 есть штатная библиотека для работы с графическим экраном ks0108 (128*64).
Есть даже пять шрифтов. Но они без русских букв - вот в чём беда :cry:
Может попадались кому-то совместимые с CV русифицированные шрифты?

p.s. Пытался генерировать сам с помощью LCD Vision - их экран почему-то не отображает.


Симулирую пока кстати в протеус (7.1).
LCD Vision 1.05 леченый. Щрифт создаёт, на первый взгляд нормальный, но на индикатор не выводится.
"штатные" работают без проблем.

p.s. прилагаю проект со шрифтами и моделью (мега32).
интересуемый шрифт - "arial" - сгенерён из стандартного ариала-8
"не срабатывает" команда в 404-й строке

Код: Выделить всё

glcd_outtextxyf(0,40,"Arial 8\n");


Есть соображения?
Вложения
архив.zip
(354.49 КБ) 179 скачиваний
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение clawham »

по поводу экрана - а вы уверены что протеус умеет симулировать этот дисплей полностью? а в прошивке вы видите этот шрифт? А как оно передаётся? Может нужна какая команда для загрузки этого шрифта в экран? Или есть подозрение что эта библиотека имеет фреймбуффер а на экран гонит только картинку? Очень чтото сомнительное
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Vrungel
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт сен 07, 2007 22:13:42
Откуда: Мариуполь

Re: CodeVision AVR в вопросах и ответах

Сообщение Vrungel »

clawham писал(а):по поводу экрана - а вы уверены что протеус умеет симулировать этот дисплей полностью? а в прошивке вы видите этот шрифт? А как оно передаётся? Может нужна какая команда для загрузки этого шрифта в экран? Или есть подозрение что эта библиотека имеет фреймбуффер а на экран гонит только картинку? Очень чтото сомнительное

Как симулирует протеус - не знаю. В железе пока не проверял.
Шрифты идущие с CV в комплекте, отображаются. По идее значит нельзя сказать что не работает вообще.
Но мне нужна кириллица. И когда создаю шрифт с помощью LCD Vision - ничего не выводиться.
Вот и интересуюсь - есть ли опыт "русификации" встроеных шрифтов?

Кстати вот тут:
http://avr-start.ru/?p=1423
дядька выложил шрифт, но только с большими буквами - он тоже работает.
А те что я пытаюсь состряпать - нет. :(
Vrungel
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт сен 07, 2007 22:13:42
Откуда: Мариуполь

Re: CodeVision AVR в вопросах и ответах

Сообщение Vrungel »

Появилась уточнённая информация.
Проблемы начинаются если шрифт кончается на "я" - код "FF".
Если при генерации шрифта букву "я" в него не включать, и ограничиться "ю" - то вывод на экран происходит нормально.
Похоже на какой-то глюк в функции вывода строк, в библиотеке "graphics.lib".
А её я не знаю как править.
Замкнутый круг :(
И всё из-за "я".

В версии выше 2.05.3 проверить не могу - код больше 4к.
Может есть здесь лицензионные пользователи?
Последний раз редактировалось Vrungel Вт май 27, 2014 20:12:03, всего редактировалось 1 раз.
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Re: CodeVision AVR в вопросах и ответах

Сообщение ИС-пытатель »

заменяйте я на [йа]. :)))
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Vrungel писал(а):Похоже на какой-то глюк в функции вывода строк, в библиотеке "graphics.lib".
А её я не знаю как править.
Да напишите свой вывод символов. Точку выводить умеете (надеюсь - да) ? Ну и выводите из массива по точкам символ. Задачка для начинающего - простецкая.
Vrungel
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт сен 07, 2007 22:13:42
Откуда: Мариуполь

Re: CodeVision AVR в вопросах и ответах

Сообщение Vrungel »

Аlex писал(а):
Vrungel писал(а):Похоже на какой-то глюк в функции вывода строк, в библиотеке "graphics.lib".
А её я не знаю как править.
Да напишите свой вывод символов. Точку выводить умеете (надеюсь - да) ? Ну и выводите из массива по точкам символ. Задачка для начинающего - простецкая.

Ну это как крайний случай.
Тут уже готовые библиотеки работы с текстом, с геометрическими фигурами и т.д.
Самому писать всё - коты животные ленивые :)))
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Vrungel писал(а):Самому писать всё - коты животные ленивые :)))
Зачем всё ? Только вывод символов :)
Аватара пользователя
mr4ester
Держит паяльник хвостом
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение mr4ester »

Добрый день, не хочет работать такая конструкция
if ((keys == 1) && (menu == 20)) {
menu -= 10;
}
else {
menu--;
}
не выполняется вот это условие ((keys == 1) && (menu == 20)), даже если я при объявлении переменных сразу им присваиваю необходимые значения, все равно, не могу понять почему, погуглил, конструкция записи условия "И" вроде бы правильная.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение ibiza11 »

на вскидку, все ок. давай полный код.
Ставим плюсы: )
Аватара пользователя
mr4ester
Держит паяльник хвостом
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение mr4ester »

Суть программы такова меню на ЖКИ HD44780. Навигация в меню 4 кнопками вни, вверх, назад(esc), ок, меню состоит из 2х основных строк меню и по 2 подменю у каждого меню, для определения текущего состояния меню используется переменная "menu" значение 10 соответствует первому пункту меню значение 1,1 и 1,2 подпунктам первого меню, так же значение 20 соответствует второму пункту меню, 2,1 и 2,2 его подпунктам.

Код: Выделить всё

//******************************************************************************
//
//  Author(s)...:
//
//  Target(s)...: atmega8
//
//  Compiler....: CodeVision 2.05
//
//  Description.:
//
//  Data........: 12.10.2011
//
//******************************************************************************
#include <MEGA8.H>
#include <io.h>
#include <delay.h>
//#include "lcd_lib.h"
#include <lcd.h>

#asm 
.equ __lcd_port=0x18 ; //PORTB
#endasm

unsigned char keys = 0;
unsigned char menu = 10;       


void main (void)
{
   lcd_init(16);
   PORTD = 0b1111111;
   DDRD = 0b00000000;
   
 
   
   
   
  while(1) {
   
    if(PIND.0 == 0){
        while(PIND.0 == 0)   
        keys = 1;
    }
   
    if(PIND.1 == 0){
        while(PIND.1 == 0)
        keys = 2;
    }
   
    if(PIND.2 == 0){
        while(PIND.2 == 0)
        keys = 3;
    }
   
    if(PIND.3 == 0){
        while(PIND.3 == 0)
        keys = 4;
    }
   
    delay_ms(60);
 
 

    if(keys){

      if ((keys == 1) && (menu == 20)) { // кнопка вверх
       menu -= 10;
       }
       else {
        menu--;
        }
       
      if ((keys == 2) && (menu == 10)){  // вниз
       menu += 10;
        }
        else {
            menu++;
        }

      if (keys == 3){                  // ESC
       menu -= 10;
        }

      if (keys == 4){                   //ОК
       menu += 1;
        }
     keys = 0;
     }
     
   
    switch (menu)
    {   
    case 10:
        lcd_gotoxy(0,0);
        lcd_putsf(">   menu 1");
        lcd_gotoxy(0,1);
        lcd_putsf("    menu 2");
        break;

    case 20:
        lcd_gotoxy(0,0);
        lcd_putsf("    menu 1");
        lcd_gotoxy(0,1);
        lcd_putsf(">   menu 2");
        break;
           
    case 11:
        lcd_gotoxy(0,0);
        lcd_putsf(">   menu 1.1");
        lcd_gotoxy(0,1);
        lcd_putsf("    menu 1.2");
        break;
       
    case 12:
        lcd_gotoxy(0,0);
        lcd_putsf("    menu 1.1");
        lcd_gotoxy(0,1);
        lcd_putsf(">   menu 1.2");
        break;
       
    case 21:
        lcd_gotoxy(0,0);
        lcd_putsf(">   menu 2.1");
        lcd_gotoxy(0,1);
        lcd_putsf("    menu 2.2");
        break;
       
    case 22:
        lcd_gotoxy(0,0);
        lcd_putsf("    menu 2.1");
        lcd_gotoxy(0,1);
        lcd_putsf(">   menu 2.2");
      }
     
    }
           
}
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Код: Выделить всё

      if ((keys == 1) && (menu == 20)) { // кнопка вверх
У Вас уже есть кусок кода, который выполняется при условии (menu == 20) :

Код: Выделить всё

    case 20:
      .....................
      .....................
    break;
Почему бы туда и не "воткнуть" условие

Код: Выделить всё

if (keys == 1){.....}
?
Будет и кода меньше и нагляднее - видно что делается в каждом (под)пункте меню.

Код: Выделить всё

    if(PIND.0 == 0){
        while(PIND.0 == 0)   
        keys = 1;
    }
Задержечку бы нужно тут поставить - дребезга аднака.... ))
volter5000
Встал на лапы
Сообщения: 120
Зарегистрирован: Пт май 28, 2010 15:31:58

Re: CodeVision AVR в вопросах и ответах

Сообщение volter5000 »

День добрый, столкнулся с проблемой в codevision, при разложении ряда фурье получаюятся числа солидных размеров, и по традиции нифига по началу не работало, пока не заметил (в Proteus), что
unsigned long int принимает значения лишь от 0 до 65536(по сути беззнаковый int), потом переполняется и начинает счет с нуля, пробовал отдельно (тупо одна переменная и всё), таже песня, а главное что занимает как положено 4 байта памяти, но при этом long (long int) как положено принимает значения все положенные ему значеня. Atmega32a, или может я чего то не знаю. И эта проблема как на версии 1.х.х, так и на 2.х.х. Хелп плз. Значение переменной i, смотрю в протеусе, весь код ФФТ выкладывать не буду ибо грамоздкий. Заранее спасибо

#include <mega32a.h>
unsigned long int i;
void main(void){
while (1)
{
i=4000000000;
}
}
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Re: CodeVision AVR в вопросах и ответах

Сообщение ИС-пытатель »

Кстати, интересная тема! Сколько по времени выполняется разложение? И длительность сигнала, который обрабатываете?

Попробуйте объявлять просто unsigned long ;)
volter5000
Встал на лапы
Сообщения: 120
Зарегистрирован: Пт май 28, 2010 15:31:58

Re: CodeVision AVR в вопросах и ответах

Сообщение volter5000 »

да пробовал unsigned long просто, таже история, ФФТ берет (в моем врианте) первую гармонику (50гц) и кратные ей, переделать то можно под любую частоту, но там числа заоблочные получаются просто. даже еслиб long без знаковый заработал бы и то малова то бы было, там некоторые переменные желательно 8ми байтовые, a long long ковижен говорит мол только в про версии, хз чо делать.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Есть такой глюк в протеусе, подтверждаю. Беззнаковый long показывает только 2 младших байта.
volter5000
Встал на лапы
Сообщения: 120
Зарегистрирован: Пт май 28, 2010 15:31:58

Re: CodeVision AVR в вопросах и ответах

Сообщение volter5000 »

Так это глюк протеуса или компилятора ?? и как правду то узнать ))
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Я прогаю PIC'и, на нескольких компиляторах такое происходит.
Выходит - виновен протеус.
volter5000
Встал на лапы
Сообщения: 120
Зарегистрирован: Пт май 28, 2010 15:31:58

Re: CodeVision AVR в вопросах и ответах

Сообщение volter5000 »

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

Вернуться в «AVR»