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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

У 74HC405x при 5 вольтах типовое сопростивление канала 70 Ом. Ближе к земле и питанию меньше, около 60.
Мне кажется, что должно заработать.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

vitalik_1984 писал(а):Это же элементарно с CVAVR:

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


eeprom unsigned char saved_value 
=56;//Объявляем переменную по умолчанию
 unsigned char value 

//в начале работы
value=saved_value;
////////---------- разное,работаем с переменной value
//конец работы 
saved_value=value;//сохраняем значение
 

только вот вопрос о переносимости кода останется открытым.
что такое 2 Tepјoјeїpa 1\x60C?

Так это же та самая строка разве не понятно?Читайте справку по printf();
\x60 здесь это символ номер 60 втаблице символов ASCII

спасибо огромное!Только не очень понял что означает вот эта строчка

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

char *_str1="2 Tepјoјeїpa 1\x60C";
эта

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

lcd_buffer_1," t%u=%i.%u\xdfC ",i+1,temp1,temp1%1

и для чего нужен LCD буфер,их аж целых три,я так понимаю хранить каки-то выводимые переменные?тогда каким образом их туда записывать?
спасибо!
P.S. я на почту :)))
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Сериг писал(а): спасибо огромное!Только не очень понял что означает вот эта строчка

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

char *_str1="2 Tepјoјeїpa 1\x60C";
данная строчка присваивает создает указатель с именем _str1 на данную строку
Сериг писал(а): эта

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

lcd_buffer_1," t%u=%i.%u\xdfC ",i+1,temp1,temp1%1
я же сказал, нужно читать справку по printf()! В данном случае sprintf()
Вкратце, в буфер lcd_buffer_1 помещается строка с правилами, указанными в кавычках.Далее по справке будет понятно.Выводится на экран температура судя по переменным
Сериг писал(а): и для чего нужен LCD буфер,их аж целых три,я так понимаю хранить каки-то выводимые переменные?
правильно, только не переменные, а в данном случае похоже это строки дисплея количество буферов может быть любым, это зависит от того, что нужно сделать и от оперативной памяти Мк
Сериг писал(а):тогда каким образом их туда записывать?
Записать можно несколькими способами
1.Неизменную строку

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

str="какая то строка"

2.Вывод переменных с помощью функций формирования строк
sprintf() и других.
Сериг писал(а):P.S. я на почту :)))
ОК, жду почтового идентификатора :wink:

PS.Я написал, что символ с номером 60, только в шестнадцатеричной системе.То есть номер 0х60.
В поисках истины человек развивается.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

огромнейшее спасибо!
и последний вопрос :)) что означает символ с номером 60, только в шестнадцатеричной системе.То есть номер 0х60,то есть что означает 0x60?
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Подскажите как можно сделать преобразование дробных чисел из десятичной системы в двоично десятичную.
для целых чисел сделал делением.

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

void LCD_BDC(unsigned int data)
{
    mass[0]=data/1000+0x30;
    mass[1]=data%1000/100+0x30;
    mass[2]=data%1000%100/10+0x30;
    mass[3]=data%1000%100%10+0x30; 
}


теперь понадобилось выводить на LCD дробные, а как не как придумать не могу.
пробовал умножить дробные число, но CodeVisionalAVR выдаёт зелёную ошибку что типа возможно может быть переполнение. (overflow is possible in 16 bit multiplication, casting to 'long' may be required) а на индикаторе только целая часть показывается (из 3.15 после умножения на 100 выводит только 300)

С умножением я что-то напутал теперь ещё раз по пробовал заработало. Только непонятно как запятую ставить.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Сериг писал(а):то есть что означает 0x60?

:facepalm: помнится мне я вот в этом посте конкретно написал что означает это число смотрим таблицу и под номером 0x60 будет тот символ, что вам нужен.
Хотя если выводится на lcd то у него может быть своя таблица, которую нужно смотреть в даташите на дисплей.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Что-то стало меня напрягать инициализация портов таймеров и тд сильно уже большая идёт и замучился гонять экран вверх вниз. Что бы от этого избавится вынес в функции и по сворачивал их. Но чувствую что это не совсем правильно. Как можно по другому это сделать? и ещё не большой вопросик вот когда пишем #include <math.h> мы подключаем библиотеку из этой библиотеки я к примеру использую только одну функцию при компиляции он её выдернет из библиотеки и вставит как функцию? или же всю библиотеку скомпилирует и загонит в флеш память ?
Спойлер

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

void INIT_TIMER(void)
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Disconnected
// OC1B output: Disconnected
// OC1C output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 0,25 ms
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
OCR1AH=0x07;
OCR1AL=0xCF;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (1<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
}

void INIT_PORT(void)
{
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=1 Bit2=1 Bit1=1 Bit0=1
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);

PORTB=0;
DDRB=0xFF;

PORTC=0;
DDRC=0xFF;       

PORTA=0;
DDRA=0xFF;
}
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

Нормально конечно, я бы еще в другой файл их вынес нафиг ) А в мейне только вызывал бы эти иниты)
Последний раз редактировалось BCluster Ср окт 24, 2012 10:13:47, всего редактировалось 1 раз.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Как ? библиотеку создать ?
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Чтобы не напрягал длинный листинг придумана include. Нужное место в программе оформляете как отдельный файл *.с и прописываете в теле программы #include "*.с". А если в виде функций, то один хрен болтаться будет в теле и плюс съедать память на вызов функции и возврат из нее.
Библиотека на то и библиотека, есть все, но берем только то, что надо. Короче возьмется только та функция, которая прописана в теле программы. Остальное не войдет в программу.
Docendo discimus
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Отлично то что надо благодарю за помощь.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

#include "*.с"

Вообще-то .h:)
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Перечитываем мой предыдущий пост еще раз. И внимательно.
Docendo discimus
mich91
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

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

Сообщение mich91 »

Почему в роботе не могу поменять значение регистра сравнения OCR2 , тоисть я не могу перестраивать его как мне нужно, что бы менять время прерываний( ?

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

interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
 TCNT2=0x00;
 OCR2=0xF;
 
 if(digit==0)
   {
    digit=8;
    OCR2=0xFF;
   }
 digit--;
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

А прерывания то разрешили?

Еще одно замечание:
Зачем вам сначала устанавливать одно значение OCR2, а потом после определенного условия еще раз его менять?Может это присвоение как то в условие поместить?
mich91
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

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

Сообщение mich91 »

да разрешыл я прерывания, то просто кусок из кода, вот весь код

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

interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
 TCNT2=0x00;
 
 if(digit==0)
   {
    digit=8;
   }
 digit--;
 OCR2=1<<digit; // не меняет значение  (((
 if(VALUE & (1<<digit))
  {
    PORTD.0=1;
  }
  else
  {
    PORTD.0=0;
  }   
}

Это я хочу вот такое сделать http://bsvi.ru/bam-alternativa-shimu/, но вот не работает из за того что не меняется время прерываний ((
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

viewtopic.php?f=20&t=68801
делал на переполнении 1 таймера.
mich91
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

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

Сообщение mich91 »

А в чем тогда проблемма в моем случае?
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

А почему Вы решили, что OCR2 не меняет значение?
Может, таймер не так настроен?

А вообще я бы не занулял таймер в прерывании. Просто проинициализировать так, чтобы прерывание по сравнению, таймер отпустить с правильным прескалером (чтобы и прерывания успевали, но чтобы основная частота не слишком низкая была) и что-то такое:

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

uint8_t mask = 0x01;
uint8_t value;

interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
    mask <<= 1;
    if (mask == 0) mask = 0x01;
    OCR2 += mask;
    if (value & mask) {
        PORTD.0=1;
    } else {
        PORTD.0=0;
    }   
} 
Начальное значение OCR2 не имеет значения.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
mich91
Встал на лапы
Сообщения: 95
Зарегистрирован: Ср ноя 02, 2011 15:11:49

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

Сообщение mich91 »

avreal писал(а):А почему Вы решили, что OCR2 не меняет значение?
Может, таймер не так настроен?


А как нужно настроить таймер, у меня вот так
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x02;
TCNT2=0x00;
OCR2=0x80;
Просто даже раньше, не в этом проекте, через кнопку менял значение регистра сравнения, но на осцылограмме осцылографа в протеусе ничего не менялось!
Ответить

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