Страница 225 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 22, 2012 00:19:41
avreal
У 74HC405x при 5 вольтах типовое сопростивление канала 70 Ом. Ближе к земле и питанию меньше, около 60.
Мне кажется, что должно заработать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 22, 2012 13:20:07
Сериг
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
спасибо огромное!Только не очень понял что означает вот эта строчка
эта
Код: Выделить всё
lcd_buffer_1," t%u=%i.%u\xdfC ",i+1,temp1,temp1%1
и для чего нужен LCD буфер,их аж целых три,я так понимаю хранить каки-то выводимые переменные?тогда каким образом их туда записывать?
спасибо!
P.S. я на почту

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 22, 2012 13:59:25
vitalik_1984
Сериг писал(а): спасибо огромное!Только не очень понял что означает вот эта строчка
данная строчка присваивает создает указатель с именем _str1 на данную строку
Сериг писал(а): эта
Код: Выделить всё
lcd_buffer_1," t%u=%i.%u\xdfC ",i+1,temp1,temp1%1
я же сказал, нужно читать справку по printf()! В данном случае sprintf()
Вкратце, в буфер lcd_buffer_1 помещается строка с правилами, указанными в кавычках.Далее по справке будет понятно.Выводится на экран температура судя по переменным
Сериг писал(а): и для чего нужен LCD буфер,их аж целых три,я так понимаю хранить каки-то выводимые переменные?
правильно, только не переменные, а в данном случае похоже это строки дисплея количество буферов может быть любым, это зависит от того, что нужно сделать и от оперативной памяти Мк
Сериг писал(а):тогда каким образом их туда записывать?
Записать можно несколькими способами
1.Неизменную строку
2.Вывод переменных с помощью функций формирования строк
sprintf() и других.
Сериг писал(а):P.S. я на почту

ОК, жду почтового идентификатора
PS.Я написал, что символ с номером 60, только в шестнадцатеричной системе.То есть номер 0х60.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 22, 2012 14:29:40
Сериг
огромнейшее спасибо!
и последний вопрос

что означает символ с номером 60, только в шестнадцатеричной системе.То есть номер 0х60,то есть что означает 0x60?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 22, 2012 14:36:24
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)
С умножением я что-то напутал теперь ещё раз по пробовал заработало. Только непонятно как запятую ставить.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 22, 2012 15:30:37
vitalik_1984
Сериг писал(а):то есть что означает 0x60?

помнится мне я вот в
этом посте конкретно написал что означает это число смотрим таблицу и под номером 0x60 будет тот символ, что вам нужен.
Хотя если выводится на lcd то у него может быть своя таблица, которую нужно смотреть в даташите на дисплей.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 09:26:52
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;
}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 10:10:27
BCluster
Нормально конечно, я бы еще в другой файл их вынес нафиг ) А в мейне только вызывал бы эти иниты)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 10:11:43
pokk
Как ? библиотеку создать ?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 10:14:11
pyzhman
Чтобы не напрягал длинный листинг придумана include. Нужное место в программе оформляете как отдельный файл *.с и прописываете в теле программы #include "*.с". А если в виде функций, то один хрен болтаться будет в теле и плюс съедать память на вызов функции и возврат из нее.
Библиотека на то и библиотека, есть все, но берем только то, что надо. Короче возьмется только та функция, которая прописана в теле программы. Остальное не войдет в программу.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 10:20:43
pokk
Отлично то что надо благодарю за помощь.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 17:17:23
Arlleex
#include "*.с"
Вообще-то .h:)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 17:50:51
pyzhman
Перечитываем мой предыдущий пост еще раз. И внимательно.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 20:12:44
mich91
Почему в роботе не могу поменять значение регистра сравнения OCR2 , тоисть я не могу перестраивать его как мне нужно, что бы менять время прерываний( ?
Код: Выделить всё
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
TCNT2=0x00;
OCR2=0xF;
if(digit==0)
{
digit=8;
OCR2=0xFF;
}
digit--;
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 21:31:06
vitalik_1984
А прерывания то разрешили?
Еще одно замечание:
Зачем вам сначала устанавливать одно значение OCR2, а потом после определенного условия еще раз его менять?Может это присвоение как то в условие поместить?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 21:53:53
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/, но вот не работает из за того что не меняется время прерываний ((
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 22:16:54
urry
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 22:30:37
mich91
А в чем тогда проблемма в моем случае?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 22:31:10
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 не имеет значения.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 24, 2012 22:40:11
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;
Просто даже раньше, не в этом проекте, через кнопку менял значение регистра сравнения, но на осцылограмме осцылографа в протеусе ничего не менялось!