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

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

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

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

Адрес, в виде числа, не работает. Компилятор глотает без проблем, но до портов ничего не доходит :)
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

у меня 2.05.0 позволяет.
1-й способ гарантированно работает в любом компиляторе, если не ошибиться в адресе.

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

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

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

Извиняюсь, я адреса брал из "mega8.h", а там совсем видимо что-то другое...

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

sfrb DDRB=0x17;
sfrb PORTB=0x18;
По этому у меня ничего и не получалось. Беру свои слова обратно, про неработоспособность портов через указатели. Был не прав.

PS: Что за sfrb такой ? Что это за таинственный тип... И где смотреть реальные адреса, кроме ДШ ? В каких хидерах они прописаны ?
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

это таинственный внутренний "закидон" 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. этот таинственный тип это учитывает
Последний раз редактировалось a_skr Сб янв 05, 2013 22:00:58, всего редактировалось 1 раз.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Аlex писал(а):Извиняюсь, я адреса брал из "mega8.h", а там совсем видимо что-то другое...

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

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

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

Ну, так то, кристалл правильный выбран. Иначе как бы он подключил именно этот хидер... :roll:
Ладно, разобрались. ТС'у значит можно смело создавать массивы из 12-ти указателей и 12-ти номеров бита. А дальше по индексу, из массивов, работать с портами.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

пожалуйста , ткните носом где в проге сокрыт файл I2C.c ?
хидер I2С я нашол я вот сишный нет
Tell Me The Truth
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Вероятно там же, где и файл I2C.h, в папке include вроде программы.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

там его НЕТ
Tell Me The Truth
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

его там нет, как и многих других. эти библиотеки спрятаны "где-то внутри". ;)
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

а где именно ?
как достать ?
она мне ОЧЕНЬ нужна
Tell Me The Truth
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

вполне возможно, что его в природе не существует. http://radiokot.ru/forum/viewtopic.php?f=20&t=60270
Аватара пользователя
mr4ester
Держит паяльник хвостом
Сообщения: 900
Зарегистрирован: Чт авг 27, 2009 20:09:01
Откуда: Приднестровье г.Бендеры
Контактная информация:

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

Сообщение mr4ester »

подскажите пожалуйста , пытаюсь реализовать цикл с помощью оператора "for"

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

for(i=0; i<1024; i++)
при компиляции вылазит 3 ошибки Error: D:\cvavr\zamok\zamok 2.c(248): undefined symbol '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 в вопросах и ответах

Сообщение Gudd-Head »

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

  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 в вопросах и ответах

Сообщение vitalik_1984 »

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

 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 в вопросах и ответах

Сообщение unalex »

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 в вопросах и ответах

Сообщение unalex »

для справки
сообщения об ошибках надо читать внимательнее, например
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 в вопросах и ответах

Сообщение unalex »

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 в вопросах и ответах

Сообщение vitalik_1984 »

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

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

Сообщение mr4ester »

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

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

unsigned int i;
for(i=0; i<1024; i++)
он все равно не ругается на то что я не объявил Error: D:\cvavr\zamok\zamok 2.c(246): must declare first in block, и еще одна ошибка, скорее наверно что я плохо синтаксис языка знаю, есть функция опроса сенсоров, вообщем вот она чтоб не возникало недопонимания

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

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 раз.
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
Ответить

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