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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Valek3306
Встал на лапы
Сообщения: 95
Зарегистрирован: Вт авг 03, 2010 22:51:57
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Valek3306 »

А нет ли у кого ни будь примера использования функции scanf() в CVAVR? Я ее попытался использовать, но при моделировании а Протеусе работает нормально до первый посылки 4 байтов, а потом появляется ошибка Pop Program stack: SP is not initialized

_____


Как использовать функцию scanf() разобрался, но она почему то работает только в бесконечном цикле, а мне надо ее по прерыванию приемника УАРТ использовать, но в прерывании она не работает почему то. Как ее правильно по прерыванию запустить?
Маленький хакер в подстанцию влез
Перенаправил поток он с АЭС
Клевая мощность два мегаватта,
Быстро горит материнская плата!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

пытаюсь в атмеге8 настроить первый таймер чтобы он срабатывал от регистра сравнения А и от регистра сравнения В.............., от регистра А он срабатывает, а вот от В нехочет..........., подскажите пожалуйста где я ошибся ?

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

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: On
TCCR1A=0x00;
TCCR1B=0x0A;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x02;
OCR1AL=0x71;
OCR1BH=0x30;
OCR1BL=0xD4;
Tell Me The Truth
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение R_ura »

Вот в общем-то приглянуля мне КодВижн. Но версия 2.5. весьма трмознутая. Доросла программа до 4000 строк и все - ввод одной буквы уже тормозит, прокрутка - тоже тормозит, компиляция тормозит.
И ко всему этому "великолепию" , как я понял КодВижн не умеет отслеживать изменения в открытом файле, внесенные в другом редакторе, что не дает возможности писать код в стороннем редакторе и компилировать вв КВ...
Как-то можно с этим бороться?
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

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

Сообщение Mr.Denis »

Подскажите, как сделать так чтоб кнопка срабатывала только при удержании её 10 секунд?
STM32F4 Discovery + KEIL + Windows 7
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Mr.Denis писал(а):Подскажите, как сделать так чтоб кнопка срабатывала только при удержании её 10 секунд?

При обнаружении нажатой кнопки ждем 10 секунд и опять проверяем нажата ли кнопка
«И всё-таки она вертится!»
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

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

Сообщение Mr.Denis »

Спасибо!

Еще интересует где можно почитать про форматирование строки (sprintf) ?
А то делаю часы и не как не могу вывести информацию на LCD в должном виде.
STM32F4 Discovery + KEIL + Windows 7
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

Mr.Denis писал(а):Еще интересует где можно почитать про форматирование строки (sprintf) ?
А то делаю часы и не как не могу вывести информацию на LCD в должном виде.

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

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

Сообщение pyzhman »

Apparatchik писал(а):
Mr.Denis писал(а):ждем 10 секунд и опять проверяем нажата ли кнопка

А если отпустили на первой секунде и опять нажали на девятой?
Docendo discimus
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

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

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

Сообщение vitalik_1984 »

R_ura писал(а):Доросла программа до 4000 строк и все - ввод одной буквы уже тормозит, прокрутка - тоже тормозит, компиляция тормозит.

Юр так зачем ты довел до такого размера?можно разделять на модули.По функциям на файлы разделить и вначале основного файла добавить эти файлы.Не забудь к проекту привязать,чтоб не было эксцессов.
В поисках истины человек развивается.
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

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

Сообщение Mr.Denis »

Спасибо за ответы!
Прочитал хелп, и что-то не как не пойму как мне сделать конструкцию вот такого вида 00:00
STM32F4 Discovery + KEIL + Windows 7
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

чтото вроде этого будет.

str_length=sprintf(buffer,"%d:%d",&hours,&minutes);
В поисках истины человек развивается.
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

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

Сообщение Mr.Denis »

Спасибо! Завтро попробую.
STM32F4 Discovery + KEIL + Windows 7
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

vitalik_1984 писал(а):чтото вроде этого будет.
str_length=sprintf(buffer,"%d:%d",&hours,&minutes);
будет что-то типа этого на самом деле:

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

sprintf(buffer,"%02d:%02d",hours,minutes);
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

pyzhman писал(а):
Apparatchik писал(а):
Mr.Denis писал(а):ждем 10 секунд и опять проверяем нажата ли кнопка

А если отпустили на первой секунде и опять нажали на девятой?

Я образно сказал, так сказать на мысль натолкнул... Ждать целых 10 секунд с помощью delay это мягко говоря расточительство процессорного времени. Если отпустили, значит щитать коротким нажатием.
«И всё-таки она вертится!»
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Мастер Ломастер писал(а):

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

sprintf(buffer,"%02d:%02d",hours,minutes);

Да точно,а еще в хелпе написано
The function returns the number of outputed characters.

То есть функция возвращает число символов в массиве при удачном исходе.
В поисках истины человек развивается.
Аватара пользователя
kvark85
Встал на лапы
Сообщения: 108
Зарегистрирован: Сб ноя 08, 2008 21:23:06
Откуда: Харьков
Контактная информация:

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

Сообщение kvark85 »

Здравствуйте. Уже несколько дней пытаюсо разобраться что это сделал CV:

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

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

зачем записывать в регистр CLKPR 0x80 и сразу за этим 0x00? Что значит pragma optsize- и pragma optsize+?
Как это работает? Не хочется оставлять непонятные моменты в программировании, хочется во всем разобраться.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

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

// Crystal Oscillator division factor: 1
#pragma optsize- //отключаем оптимизацию. Чтобы нижние строки скомпилировались именно так, как написаны. Ибо 4 такта однако.
CLKPR=0x80; //разрешаем запись в клоковый прескалер.
CLKPR=0x00; //и пишем туда нули. На всякий случай. При старте, конечно, там нули, но для надеги...
#ifdef _OPTIMIZE_SIZE_ //если опция оптимизации есть
#pragma optsize+ //то включаем ее
#endif // так надо
Docendo discimus
master3763
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб дек 10, 2011 17:45:25
Контактная информация:

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

Сообщение master3763 »

Здравствуйте ! У меня CodeVision 2.05.4 .

Хочу собрать вот этот термостат. http://my-avr.at.ua/publ/1-1-0-11

Вот весь исходник.

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

#include <mega8.h>
#include <delay.h>
#asm
   .equ __w1_port=0x18 ;PORTB
   .equ __w1_bit=0
#endasm
#include <1wire.h>

#include <ds18b20.h>
void main(void)
{

  unsigned char devices;
  int temp;
  devices = w1_init();
 
PORTD = 0x00; //Выставляем все выходы порта D на 0, то есть, выключаем весь порт D
DDRD = 0xFF;
while (1)
{           
           
      temp=ds18b20_temperature(0);  //читаем температуру                     
     
          if (temp>1000)                      //если датчик выдаёт больше 1000
            {             
                temp=4096-temp;            //отнимаем от данных 4096
                temp=-temp;                //и ставим знак "минус"
             }

       if (temp<18)                          // устанавливаем нижней порог
         PORTD.0 = 1;   
         else PORTD.0=0;
       if (temp>28)                         // установим верхний порог
          PORTD.1=1;
       else PORTD.1=0;
     
        }   

}


Для конфугурации деляю так :

Project --> Configure --> C Compiler -- > Libraries --> 1 Wire --> и выставляю порт и пин с которого будет приниматся информация с датчика DS18b20.

Не получается некак скомпилировать проэкт.
Выводит :
Error: C:\Users\...\Desktop\Thermometer\List\termometer.asm(2294): Invalid redefinition of '__w1_port'
Error: C:\Users\...\Desktop\Thermometer\List\termometer.asm(2295): Invalid redefinition of '__w1_bit'

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

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

Сообщение pyzhman »

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

#asm
   .equ __w1_port=0x18 ;PORTB
   .equ __w1_bit=0
#endasm
#include <1wire.h>

Эти строки уже назначены лапки. Вы их пытаетесь переназначить. О чем честно говорит компилятор.
Docendo discimus
Ответить

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