CodeVision AVR в вопросах и ответах
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Адрес, в виде числа, не работает. Компилятор глотает без проблем, но до портов ничего не доходит 
Re: CodeVision AVR в вопросах и ответах
у меня 2.05.0 позволяет.
1-й способ гарантированно работает в любом компиляторе, если не ошибиться в адресе.
ps. ну как же так?
мою программу один-в-один пробовали? в чем проверяете? протеус/железо?
1-й способ гарантированно работает в любом компиляторе, если не ошибиться в адресе.
ps. ну как же так?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Извиняюсь, я адреса брал из "mega8.h", а там совсем видимо что-то другое...
По этому у меня ничего и не получалось. Беру свои слова обратно, про неработоспособность портов через указатели. Был не прав.
PS: Что за sfrb такой ? Что это за таинственный тип... И где смотреть реальные адреса, кроме ДШ ? В каких хидерах они прописаны ?
Код: Выделить всё
sfrb DDRB=0x17;
sfrb PORTB=0x18;PS: Что за sfrb такой ? Что это за таинственный тип... И где смотреть реальные адреса, кроме ДШ ? В каких хидерах они прописаны ?
Re: CodeVision AVR в вопросах и ответах
это таинственный внутренний "закидон" CVAVR 
ps. смотреть в datasheet. но, по-моему они одинаковые (поправьте, если не прав, сейчас сам еще посмотрю)
pps. mega8.h:
sfrb PIND=0x10;
sfrb DDRD=0x11;
sfrb PORTD=0x12;
sfrb PINC=0x13;
sfrb DDRC=0x14;
sfrb PORTC=0x15;
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
только прибавить 0x20. этот таинственный тип это учитывает
ps. смотреть в datasheet. но, по-моему они одинаковые (поправьте, если не прав, сейчас сам еще посмотрю)
pps. mega8.h:
sfrb PIND=0x10;
sfrb DDRD=0x11;
sfrb PORTD=0x12;
sfrb PINC=0x13;
sfrb DDRC=0x14;
sfrb PORTC=0x15;
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
только прибавить 0x20. этот таинственный тип это учитывает
Последний раз редактировалось a_skr Сб янв 05, 2013 22:00:58, всего редактировалось 1 раз.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Аlex писал(а):Извиняюсь, я адреса брал из "mega8.h", а там совсем видимо что-то другое...
Ага понятно где глюк сидел
Я как то думал что за фигня нет определения для MCUCR так оказалось МК не тот выбран.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ну, так то, кристалл правильный выбран. Иначе как бы он подключил именно этот хидер... 
Ладно, разобрались. ТС'у значит можно смело создавать массивы из 12-ти указателей и 12-ти номеров бита. А дальше по индексу, из массивов, работать с портами.
Ладно, разобрались. ТС'у значит можно смело создавать массивы из 12-ти указателей и 12-ти номеров бита. А дальше по индексу, из массивов, работать с портами.
Re: CodeVision AVR в вопросах и ответах
пожалуйста , ткните носом где в проге сокрыт файл I2C.c ?
хидер I2С я нашол я вот сишный нет
хидер I2С я нашол я вот сишный нет
Tell Me The Truth
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Вероятно там же, где и файл I2C.h, в папке include вроде программы.
Re: CodeVision AVR в вопросах и ответах
его там нет, как и многих других. эти библиотеки спрятаны "где-то внутри". 
Re: CodeVision AVR в вопросах и ответах
а где именно ?
как достать ?
она мне ОЧЕНЬ нужна
как достать ?
она мне ОЧЕНЬ нужна
Tell Me The Truth
Re: CodeVision AVR в вопросах и ответах
вполне возможно, что его в природе не существует. http://radiokot.ru/forum/viewtopic.php?f=20&t=60270
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
подскажите пожалуйста , пытаюсь реализовать цикл с помощью оператора "for" при компиляции вылазит 3 ошибки Error: D:\cvavr\zamok\zamok 2.c(248): undefined symbol 'i', как правильно это делается?.
И еще вопросик, объявил массив, дальше в функции делаю следующее
при компиляции вылазит Error: D:\cvavr\zamok\zamok 2.c(67): ';' expected, та же история и в другой функции, вот кусок из нее,
переменные KBD_STATUS и True_Value типа int, нужно как то преобразовывать их чтобы присвоить значение переменной типа char?, хотя и пробовал массив сделать из int, так же ругается.
Код: Выделить всё
for(i=0; i<1024; i++)И еще вопросик, объявил массив
Код: Выделить всё
unsigned char Value[4]={0,0,0,0};Код: Выделить всё
void DECODE_VALUE()// разложение числа на единицы, десятки и т.д
{
True_Value = VALUE_EEprom
Value[3] = True_Value % 10 ;
Value[2] = True_Value % 10 ;
Value[1] = True_Value % 10 ;
Value[0] = True_Value / 10 ;
}
при компиляции вылазит Error: D:\cvavr\zamok\zamok 2.c(67): ';' expected, та же история и в другой функции, вот кусок из нее
Код: Выделить всё
if (count == 0)
{
count++
if (Value[0] == KBD_STATUS)
{
SetBit(Status, 1);
}
else
{
ClearBit(Status, 1);
}
}переменные KBD_STATUS и True_Value типа int, нужно как то преобразовывать их чтобы присвоить значение переменной типа char?, хотя и пробовал массив сделать из int, так же ругается.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: CodeVision AVR в вопросах и ответах
Код: Выделить всё
Value[3] = True_Value % 10 ;
Value[2] = True_Value % 10 ;
Value[1] = True_Value % 10 ;
Value[0] = True_Value / 10 ;Что-то мне подсказывает, что так вы не получите десятки, единицы и т.п.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Код: Выделить всё
unsigned int i;
for(i=0; i<1023; i++)
переменные KBD_STATUS и True_Value типа int, нужно как то преобразовывать их чтобы присвоить значение переменной типа char?,
Код: Выделить всё
int KBD_STATUS=1000, True_Value=200;
unsigned char some_var=5;
some_var=( unsigned char) True_Value;//так обрежется все лишнее до чар.
KBD_STATUS =(int) some_var;//так увеличится размерность до инт
Последний раз редактировалось vitalik_1984 Чт янв 10, 2013 13:29:29, всего редактировалось 2 раза.
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
mr4ester писал(а):undefined symbol 'i'
внимательно читаем сообщения об ошибках
необъявлен символ i
Код: Выделить всё
unsigned int i;
for(i=0; i<1024; i++) или
Код: Выделить всё
for(unsigned int i=0; i<1024; i++) mr4ester писал(а): ';' expected
отсутствует ;
Код: Выделить всё
True_Value = VALUE_EEprom;Код: Выделить всё
count++;для начала исправляем эти ошибки, а потом смотрим дальше
Последний раз редактировалось unalex Чт янв 10, 2013 13:33:39, всего редактировалось 2 раза.
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
для справки
сообщения об ошибках надо читать внимательнее, например
здесь указана не только ошибка ';' expected но и ее месторасположение (67) - 67 строка, кроме того обычно при двойном клике на сообщение об ошибке курсор становится на нужное место в коде(не знаю как в кодевижн, у меня Эклипс)
сообщения об ошибках надо читать внимательнее, например
D:\cvavr\zamok\zamok 2.c(67): ';' expected
здесь указана не только ошибка ';' expected но и ее месторасположение (67) - 67 строка, кроме того обычно при двойном клике на сообщение об ошибке курсор становится на нужное место в коде(не знаю как в кодевижн, у меня Эклипс)
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
mr4ester писал(а):переменные KBD_STATUS и True_Value типа int, нужно как то преобразовывать их чтобы присвоить значение переменной типа char?
специально преобразовывать не нужно, компилятор сам может преобразовывать числа из большей разрядности в меньшую, естественно с уменьшением точности
или можно использовать преобразование типов
Код: Выделить всё
char newValue;
newValue = (char)KBD_STATUS;не заметил, на этот вопрос уже ответили
насчет того что ругается, см.выше, ругается он на другое
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
mr4ester Четыре ошибки на одном квадратном дециметре кода.
Выше вам правильно сказали- читайте что компилятор за ошибки пишет, особенно, если пропускаете символ ; может много ошибок вылазить.
В код вижне так же переводит курсор.
Выше вам правильно сказали- читайте что компилятор за ошибки пишет, особенно, если пропускаете символ ; может много ошибок вылазить.
В код вижне так же переводит курсор.
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
да уж, извините за такую тупость, просто ни как не могу привыкнуть ставить точку с запятой, спасибо за прямые наводки на ошибки, исправил вот этот оператор он все равно не ругается на то что я не объявил Error: D:\cvavr\zamok\zamok 2.c(246): must declare first in block, и еще одна ошибка, скорее наверно что я плохо синтаксис языка знаю, есть функция опроса сенсоров, вообщем вот она чтоб не возникало недопонимания
в прерывании пытаюсь вызвать эту функцию, на что получаю ошибку на неопределенный символ Error: D:\cvavr\zamok\zamok 2.c(80): undefined symbol 'CheckSensors' , функция обработчик прерывания
Код: Выделить всё
unsigned int i;
for(i=0; i<1024; i++)Код: Выделить всё
void CheckSensors() //Проверяем все сенсоры по очереди
{
unsigned char i=1,k=0;
TMP_STATUS=KBD_STATUS;
Ddr_X = &DDRD ; // присваиваю указателю адрес порта D
Pin_X = &PIND;
while(i!=0)
{
TCNT1=0x0000;
TCCR1B=0x01;
*Ddr_X = ~i;
while((*Pin_X&i)==0);
TCCR1B=0x00;
DDRD|=i;
if(TCNT1>SensorHI[k]) //Гистерезис, чтобы не дрыгалось при граничном значении емкости
TMP_STATUS|=i;
else if(TCNT1<=SensorLO[k])
TMP_STATUS&=~i;
k++;
i<<=1;
if (*Pin_X == 0x80) //если равно 0b100000000
{
i = 0x01;
Ddr_X = &PORTB;
Pin_X = &PINB;
}
if (k == 0x0C) // если к = 12 значит все 12 сенсоров опрошены, на порту B всего
{
i = 0x00; // 4 сенсора, обнуляю чтоб выйти из цикла.
}
}
KBD_STATUS=TMP_STATUS;
}в прерывании пытаюсь вызвать эту функцию, на что получаю ошибку на неопределенный символ Error: D:\cvavr\zamok\zamok 2.c(80): undefined symbol 'CheckSensors' , функция обработчик прерывания
Код: Выделить всё
interrupt [TIM0_OVF] void Timer0_OVF (void){
unsigned int EQU_STATUS = 0x0000; //
CheckSensors(); //Проверяем сенсоры
if (comp == 0)
{
KBD_STATUS = EQU_STATUS; //ЗАПИСЫВАЕМ ТЕКУЩЕЕ ЗНАЧЕНИЕ КЛАВИАТУРЫ
}
if (KBD_STATUS == EQU_STATUS)// ЕСЛИ РАВНО, ДЕСРЕМЕНТИРУЕМ ПЕРЕМЕННУЮ
{
comp++;
}
else
{
comp = 0x00; //НЕТ, ОБНУЛЯЕМ
}
if (comp == TRESHOLD)// ЕСЛИ В ТЕЧЕНИИ 20 ОПРОСОВ КНОПКА ВСЕ ЕЩЕ НАЖАТА
{
comp = 0x00; //ОБНУЛЯЕМ ВСЕ И устанавливаем флаг
EQU_STATUS = 0X0000;
Flag_Set = 1; // флаг для запуска функции из основного цикла
}
}
Последний раз редактировалось mr4ester Чт янв 10, 2013 17:19:55, всего редактировалось 1 раз.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)