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

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

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

Сообщение vitalik_1984 »

как как? двойной клик на ошибке и телепортация курсора к месту ошибки обеспечена, судя по всему кто то забыл нажать шифт при наборе текста и поэтому такая фень вышла.
Обратите внимание на то, что я написал переменную именно так, как у вас в ошибке, а вы написали так, как у вас в функции применяется.
Язык Си чувствителен к регистру символов.
Реклама
infinity19891
Встал на лапы
Сообщения: 141
Зарегистрирован: Вс дек 18, 2011 10:26:43
Откуда: Пинск

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

Сообщение infinity19891 »

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

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

Сообщение vitalik_1984 »

Блин ошибка только в одном месте, не важно в каком регистре запись, главное, чтобы она по всему тексту соответствовала формату
1 объявление (int RDat;)
2 назначение (RDat=122;)
3 использование.(lcd_print(RDat);)

Если второй можно опустить совмещая со первым (int RDat=122;), то первый пропускать никак нельзя.
Когда встречается переменная в другом регистре в любом символе(rdat,Rdat,rDAT,rDat), то она считается новой и ей нужен отдельный первый пункт.
infinity19891 писал(а):То что ошибся - факт, но не в регистре ошибка.

Ну нам видно только те ошибки, которые вы сами нам показали, если вы их специально делаете, как мы ТУТ вам ТАМ поможем?
vitalik_1984 писал(а):двойной клик на ошибке и телепортация курсора к месту ошибки обеспечена,

Делайте двойной клик и думайте сами что в коде не так - мы его не видим.
А маленькими было написано только для проверки,
Где было написано? В функции или в объявлении? Или в той строке где ошибка?
infinity19891
Встал на лапы
Сообщения: 141
Зарегистрирован: Вс дек 18, 2011 10:26:43
Откуда: Пинск

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

Сообщение infinity19891 »

Так, покопался по коду программы, и не нашел объявления RDat. Эту часть программы выкусил из другого исходника, но и в том исходнике не нашёл объявления. Мне не первый раз попадаются исходники, с подобными ошибками. Как например были ошибки при компиляции исходника, из-за отсутствия void. Т.е. должно было быть так:

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

void main(void)
{
//текст программы
}

А было:

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

void main()
{
//текст программы
}


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

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

Сообщение vitalik_1984 »

Э, батенька, вам похоже совсем вдругую тему нужно.
Есть прекрасная книга от создателей си
Керниган и Ричи

Между прочим я уже приводил пример как нужно правильно делать
vitalik_1984 писал(а):int RDat=122;
Во многих Работающих примерах тоже можно посмотреть.

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

тип_переменной имя_переменной =[ начальное_значение];

То что в скобках можно пропустить.
Про типы данных как раз в книге можно почитать.
Реклама
infinity19891
Встал на лапы
Сообщения: 141
Зарегистрирован: Вс дек 18, 2011 10:26:43
Откуда: Пинск

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

Сообщение infinity19891 »

Спасибо, всё получилось!
Реклама
ARV.net
Родился
Сообщения: 4
Зарегистрирован: Чт янв 24, 2013 18:44:59

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

Сообщение ARV.net »

Все привет! Написал я тут простенькую программу для лабораторного блока питания на ATmega8. Вольтметр+Амперметр, семи сегментная индикация на сдвиговых регистрах, контроль за перегревам на DS18B20. Писал на CVAVR, в общем-то всё работает, только с датчик маленькие проблемы, но вопрос не в этом.
Понадобилось мне перевести в AVR Studio, вот тут и началось. Переправил обработчики прерываний, обращения к регистрам порта, код скомпилировался, без ошибок и варненгов, но конечно же не заработал :)
Я решил его прописывать постепенно, написал в хлам простую программу, которая через регистр HC164 должна зажигать все сегменты, она то же не заработала, раньше в студии кроме мигания диодом нечего не писал, не понимаю в чём дело. Подскажите где что не так, в моём демо проекте. Заранее спасибо.
Вложения
Foto.JPG
(150.82 КБ) 477 скачиваний
AVR Studio+Proteus.rar
(55.68 КБ) 163 скачивания
Аватара пользователя
U235
Встал на лапы
Сообщения: 135
Зарегистрирован: Вт фев 21, 2012 20:42:26
Откуда: Санкт-Петербург, Россия, Земля

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

Сообщение U235 »

В функции demo получается, что все разряды порта D сбрасываются.

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

    PORTD = 0<<PD3;         // Ставим в 0                                           
    PORTD = 1<<PD3;         // Ставим в 1

Так наверно немного лучше будет

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

    PORTD &= ~(1<<PD3);         // Ставим в 0                                           
    PORTD |= 1<<PD3;         // Ставим в 1
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
ARV.net
Родился
Сообщения: 4
Зарегистрирован: Чт янв 24, 2013 18:44:59

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

Сообщение ARV.net »

И в прямь заработало, вот блин :)) Спасибо!
Только не понятно я же конкретно побитово обращаюсь к 3 выводу?

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

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

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

Сообщение pyzhman »

Ой ли? Смотрите откомпилированное:

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

                ; 0000 0039 PORTD = 0<<PD3;
0000a6 e0e0         LDI  R30,LOW(0)
0000a7 bbe2         OUT  0x12,R30
                 ; 0000 003A PORTD = 1<<PD3;
0000a8 e0e8         LDI  R30,LOW(8)
0000a9 bbe2         OUT  0x12,R30
Docendo discimus
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

ARV.net писал(а):я же конкретно побитово обращаюсь к 3 выводу?

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

PORTD = 0<<PD3;         // Ставим в 0                                           
PORTD = 1<<PD3;         // Ставим в 1
За базар ответишь! :))) :)))
В Вашем выражении Вы присваиваете значение порту, а не работаете с битами.
Выражение "0<<PD3" определяет константу, которая вычисляется по формуле "сдвинуть значение "ноль"(0) влево(<<) PD3 раз." Именно так. PD3 - это число! оно равно 3(трем). получается "сдвинуть значение "ноль" влево 3 раза". Получается константа = 00000000 = 0x00
Аналогично 1<<PD3 = "сдвинуть единицу влево 3 раза" = 00001000 = 0x08
Следовательно PORTD = 0<<PD3 соответствует выражению PORTD = 0x00;
Аналогично PORTD = 1<<PD3 соответствует выражению PORTD = 0x08;

Чтобы работать с битами нужно накладывать маску на текущее состояние порта.
Популярнее: Считываете значение порта, сбрасываете/устанавливаете нужные биты, записываете обратно в порт.
Все это можно записать в одну строчку :
1) PORTD = PORTD | (1<<PD3) - Установка бита PD3
2) PORTD = PORTD & ~(1<<PD3) - Сброс бита PD3

Если Вы заметили, оба эти выражения используют исходное состояние порта, для записи в него же, после некоторых изменений значения. Язык Си в таких случаях имеет сокращение, позволяющее опустить повторное упоминание переменной в выражении справа путем переноса производимой операции влево за знак равенства.
Тогда
PORTD = PORTD | (1<<PD3) соответствует выражению PORTD |= (1<<PD3)
PORTD = PORTD & ~(1<<PD3) соответствует выражению PORTD &= ~(1<<PD3)

Вообще говоря это азы Си и никоим образом не относится к AVRStudio 4. Ай-яй-яй! Матчасть учить надо!
Ставим плюсы: )
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

При том, что на АСМе можно дёргать отдельными ногами командами sbi и cbi. Почему компилятор не применяет их?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

применяет еще как:

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

  while(1)
  {
    PORTB |= 4;
    PORTB &= ~4;
  }

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

  while(1)
  {
    PORTB |= 4;
  26:   c2 9a          sbi   0x18, 2   ; 24
    PORTB &= ~4;
  28:   c2 98          cbi   0x18, 2   ; 24
  2a:   fd cf          rjmp   .-6         ; 0x26 <main+0x4>
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

А если 2 бита, он сразу перейдёт на LDI-OUT? :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

если должны появиться одновременно:

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

    PORTB |= 6;
  26:   88 b3          in   r24, 0x18   ; 24
  28:   86 60          ori   r24, 0x06   ; 6
  2a:   88 bb          out   0x18, r24   ; 24
    PORTB &= ~6;
  2c:   88 b3          in   r24, 0x18   ; 24
  2e:   89 7f          andi   r24, 0xF9   ; 249
  30:   88 bb          out   0x18, r24   ; 24
если по очереди, то:

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

    PORTB |= 4;
  26:   c2 9a          sbi   0x18, 2   ; 24
    PORTB |= 2;
  28:   c1 9a          sbi   0x18, 1   ; 24
    PORTB &= ~4;
  2a:   c2 98          cbi   0x18, 2   ; 24
    PORTB &= ~2;
  2c:   c1 98          cbi   0x18, 1   ; 24
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

В общем, логично.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
ARV.net
Родился
Сообщения: 4
Зарегистрирован: Чт янв 24, 2013 18:44:59

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

Сообщение ARV.net »

Ну теперь почти всё ясно,
Я в CVAVR использовал такую функцию последовательный вывод на индикацию

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

void amper_print(unsigned int data)
{
    unsigned char i;                                                   
    unsigned int  digit;
    if (rank_counter == 0){       //Если разряд 1
      digit = buf[data] | (1<<0); //ставим после него точку
      }
    else{
        digit = buf[data];        //Берём число из массива
        }                                                   
    for( i=0; i<8; i++){          //и последовательно выводим
       PORTD.2 = digit & 1<<i;
       PORTD = (0<<3);            //Выстовлям такт в лог.0                                                                                 
       PORTD = (1<<3);            //затем в 1
       }                                       
}   


догнать не могу как перевести в AVR studio строчку

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

 PORTD.2 = digit & 1<<i; 
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

if (digit & (1<<i))
PORTD |= (1<<PD2);
else
PORTD &=~(1<<PD2);
Ставим плюсы: )
ARV.net
Родился
Сообщения: 4
Зарегистрирован: Чт янв 24, 2013 18:44:59

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

Сообщение ARV.net »

Блин в CVAVR мне больше нравиться обращение к портам. Спасибо всем за консультацию.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Можно ли в Студии на АСМе использовать что-то вроде макроса для работы с портами?
Мне надо ноги переключать в "1" и "0", хочу как-то так: сbi LED1 или LED1=0 вместо cbi PORTX, N.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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