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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

ChipKiller писал(а):вывод идет не из-за типа переменной, а из-за формата, который Вы не указали sprintf(buffer, format-string[, argument...]);

ну да, а это что, по-вашему: sprintf(lcd_buffer,"T1=%i",T1);
чел указал формат int и огорчается, что у него числа с минусом... указал бы формат беззнакового int - не огорчался бы...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

ARV писал(а):чел указал формат int и огорчается
... об этом я и писал, просто человек не понимает значения параметра %i
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

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

Сообщение Александр 2677 »

Ух, что то у меня ничего не выходит :cry: Может разжуёте мне, вставте эту строку в мой код. Здесь нужно добавлять ещё одну переменную или библиотеку? Извиняюсь за наглость :oops:
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

2 Александр 2677 напишите

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

.....
 int  T1;
.....
     sprintf(lcd_buffer,"T1=%u",T1);

... и попробуйте :))
Александр 2677
Встал на лапы
Сообщения: 89
Зарегистрирован: Пн фев 22, 2010 11:16:00

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

Сообщение Александр 2677 »

Ура, что б я без вас делал :)) Спасибо.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

... для sprintf(..) важен не тип T1, а спецификатор %u в Вашем случае.
FredyInKR
Открыл глаза
Сообщения: 40
Зарегистрирован: Ср мар 25, 2009 22:05:46
Откуда: Kirovohrad -> Ukraine
Контактная информация:

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

Сообщение FredyInKR »

Наверно не той. Вот почитайте, расписано до мелочей.

да но то слишком круто... Тем более я не буду использовать регистры...
Вообщем с индикатором я разобрался. Теперь не могу понять с числами
вот нашел функцию хорошую... Мне бы зделать тоже только для 3-х и 4х значных
чисел. В упор не могу понять... Точнее не могу понять как работает операнд "-="

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

void Display (unsigned int Number) //Ф-ция для разложения десятичного цисла
{
  unsigned char Num1, Num2, Num4, Num5;
  Num1=0;
  while (Number >= 10) //десятичную
  {
  Number -= 10; 
  Num1++;
  }
  Num2 = Number; //остаток
 
  dis[1] = digits[Num1];
  dis[2] = digits[Num2]; 
}
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

FredyInKR писал(а):да но то слишком круто... Тем более я не буду использовать регистры...
Там есть и без регистров, прочитайте всю статью.
FredyInKR писал(а):Точнее не могу понять как работает операнд "-="

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

x-=10;
// тоже самое что
x=x-10;
«И всё-таки она вертится!»
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

FredyInKR писал(а):Теперь не могу понять с числами
вот нашел функцию хорошую... Мне бы зделать тоже только для 3-х и 4х значных чисел. В упор не могу понять...
Может я и неправ (тоже начинающий), но я бы сделал так:

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

char num[4]; // глобальный массив
void Display (unsigned int a)
{
 char i;
 while(a>0)
      {
        num[i]=a%10;
        a/=10;
        i++;
      }
}
числа будут в ячейках массива num
«И всё-таки она вертится!»
FredyInKR
Открыл глаза
Сообщения: 40
Зарегистрирован: Ср мар 25, 2009 22:05:46
Откуда: Kirovohrad -> Ukraine
Контактная информация:

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

Сообщение FredyInKR »

Так вроде нельзя. Во первых у меня уже компилятор рвет. Хотя и функций не много и памяти особо не использую.
Далее пишу, допустим:

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

Display(5589);

и вывожу на семисигментный индикатор первую цифру, получаю ерунду какую-то....

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

PORTD=0b00000100 ;
PORTB=num[1];
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

FredyInKR писал(а):и вывожу на семисигментный индикатор первую цифру, получаю ерунду какую-то....
Глянуть бы весь код
«И всё-таки она вертится!»
FredyInKR
Открыл глаза
Сообщения: 40
Зарегистрирован: Ср мар 25, 2009 22:05:46
Откуда: Kirovohrad -> Ukraine
Контактная информация:

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

Сообщение FredyInKR »

на этой функции то работает:

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

#include <tiny2313.h>
#include <delay.h>

unsigned char digits[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
char dis[4]; //буфер экрана
int temp;                     

interrupt [TIM1_COMPA] void timer1_compa_isr(void)    //Прерывание происходит 100 раз в сек,
{
  TCNT1H=0x00;
  TCNT1L=0x00;
}

void Display (unsigned int Number) //Ф-ция для разложения десятичного цисла
{
  unsigned char Num1, Num2, Num4, Num5;
  Num1=0;
  while (Number >= 10) //десятичную
  {
  Number -= 10; 
  Num1++;
  }
  Num2 = Number; //остаток
 
  dis[1] = digits[Num1];
  dis[2] = digits[Num2]; 
}

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0xFF;

//PORTD = 0;
//DDRD = (1<<1)|(1<<0);
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization... и т.д.
//..

Display(85); //какое нить число 2х значное

#asm("sei")
while (1)
{
#asm("cli");
PORTD=0b00000100 ;//даем лог 0 для катода 1 разряда
PORTB=dis[1]; //1 цифра 
delay_ms(5);
PORTD=0b00001000 ; //даем лог 0 для катода 2 разряда
PORTB=dis[2]; //2 цифра 
delay_ms(5);
}

}

так работает...
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

FredyInKR писал(а):так работает...
... скорее так не работает и работать не будет
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

Apparatchik писал(а):Может я и неправ (тоже начинающий), но я бы сделал так:

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

char num[4]; // глобальный массив
void Display (unsigned int a)
{
char i;
while(a>0)
      {
        num[i]=a%10;
        a/=10;
        i++;
      }
}

числа будут в ячейках массива num
... несколько неточностей
1. Нет обработки для отрицательных чисел (.. хотя может это и не нужно)
2. Число в массиве num будет "перевернутым"
чтобы избежать "перевертывания" массив нужно заполнять начиная с последнего элемента
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

ChipKiller писал(а):
FredyInKR писал(а):так работает...
... скорее так не работает и работать не будет
Присоединяюсь
ChipKiller писал(а):... несколько неточностей
1. Нет обработки для отрицательных чисел (.. хотя может это и не нужно)
2. Число в массиве num будет "перевернутым"
чтобы избежать "перевертывания" массив нужно заполнять начиная с последнего элемента
Ну я для примера, конечно нужно подстраивать под свои нужды.
«И всё-таки она вертится!»
FredyInKR
Открыл глаза
Сообщения: 40
Зарегистрирован: Ср мар 25, 2009 22:05:46
Откуда: Kirovohrad -> Ukraine
Контактная информация:

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

Сообщение FredyInKR »

void Display (unsigned int Number) //Ф-ция для разложения десятичного цисла
{
unsigned char Num1, Num2;
Num1=0;
while (Number >= 10) //десятичную
{
Number -= 10;
Num1++;
}
Num2 = Number; //остаток

dis[1] = digits[Num1];
dis[2] = digits[Num2];
}

:music: не так точно работает. А вот так:

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

char num[4]; // глобальный массив
void Display (unsigned int a)
{
char i;
while(a>0)
      {
        num[i]=a%10;
        a/=10;
        i++;
      }
}

- нет.
А проще как сделать???
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

FredyInKR писал(а):

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

interrupt [TIM1_COMPA] void timer1_compa_isr(void)    //Прерывание происходит 100 раз в сек,
{
  TCNT1H=0x00;
  TCNT1L=0x00;
}
... если вы в обработчике прерывания только перегружаете таймер, то в чем смысл такого обработчика?
Думаю Вам следует не ждать "халявы", а разобраться что такое динамическая индикация
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

FredyInKR писал(а):А проще как сделать???
Там весь код переделывать нужно начиная с обработчика прерывания. Те два присваивания имхо там ненужны, там нужно выводить информацию на дисплей. Ещо раз советую прочитать ув. ARV там всё подробно разжевал. С момента "3.1 Простейший способ" и по "3.2 Способ с дешифратором" как раз ваш случай.
«И всё-таки она вертится!»
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

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

Сообщение Amstron »

Подскажите! Если я прописываю в eeprom число а потом у меня программа постоянно крутится в этом цикле, где снова идет команда записи этого же числа в эту же переменную, то это число сново не прописывается???

Я что имею в виду! То что проц сначала сравнивает инфу с переменной, если она такая же как и мне надо записать то он ее не прописывает?!
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

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

Сообщение ValBag »

Amstron писал(а):Подскажите! Если я прописываю в eeprom число...
Если вы ждете ответа, то изложите вопрос понятнее. И что значит в вашем толковании "прописывается" в отличие от "записывается". А лучше приведите код.
Ответить

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