Страница 193 из 421

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

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

_______________________


Как использовать функцию scanf() разобрался, но она почему то работает только в бесконечном цикле, а мне надо ее по прерыванию приемника УАРТ использовать, но в прерывании она не работает почему то. Как ее правильно по прерыванию запустить?

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

Добавлено: Пн мар 26, 2012 17:45:32
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;

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

Добавлено: Пн мар 26, 2012 20:59:29
R_ura
Вот в общем-то приглянуля мне КодВижн. Но версия 2.5. весьма трмознутая. Доросла программа до 4000 строк и все - ввод одной буквы уже тормозит, прокрутка - тоже тормозит, компиляция тормозит.
И ко всему этому "великолепию" , как я понял КодВижн не умеет отслеживать изменения в открытом файле, внесенные в другом редакторе, что не дает возможности писать код в стороннем редакторе и компилировать вв КВ...
Как-то можно с этим бороться?

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

Добавлено: Пн мар 26, 2012 22:24:53
Mr.Denis
Подскажите, как сделать так чтоб кнопка срабатывала только при удержании её 10 секунд?

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

Добавлено: Пн мар 26, 2012 23:16:58
Apparatchik
Mr.Denis писал(а):Подскажите, как сделать так чтоб кнопка срабатывала только при удержании её 10 секунд?
При обнаружении нажатой кнопки ждем 10 секунд и опять проверяем нажата ли кнопка

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

Добавлено: Пн мар 26, 2012 23:58:22
Mr.Denis
Спасибо!

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

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

Добавлено: Вт мар 27, 2012 07:40:14
Мастер Ломастер
Mr.Denis писал(а):Еще интересует где можно почитать про форматирование строки (sprintf) ?
А то делаю часы и не как не могу вывести информацию на LCD в должном виде.
в хелпе

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

Добавлено: Вт мар 27, 2012 07:53:00
pyzhman
Apparatchik писал(а):
Mr.Denis писал(а):ждем 10 секунд и опять проверяем нажата ли кнопка
А если отпустили на первой секунде и опять нажали на девятой?

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

Добавлено: Вт мар 27, 2012 08:16:12
urry
завести счетчик и, скажем, через каждые 10 мс инкрементировать его, если кнопка нажата. если отжата, скажем, в течении 3 проверок, счетчик обнуляется. Если счетчик достиг значения 100*10 - 10 секунд кнопка нажата.

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

Добавлено: Вт мар 27, 2012 09:29:56
vitalik_1984
R_ura писал(а):Доросла программа до 4000 строк и все - ввод одной буквы уже тормозит, прокрутка - тоже тормозит, компиляция тормозит.
Юр так зачем ты довел до такого размера?можно разделять на модули.По функциям на файлы разделить и вначале основного файла добавить эти файлы.Не забудь к проекту привязать,чтоб не было эксцессов.

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

Добавлено: Вт мар 27, 2012 10:25:47
Mr.Denis
Спасибо за ответы!
Прочитал хелп, и что-то не как не пойму как мне сделать конструкцию вот такого вида 00:00

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

Добавлено: Вт мар 27, 2012 14:54:07
vitalik_1984
чтото вроде этого будет.

str_length=sprintf(buffer,"%d:%d",&hours,&minutes);

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

Добавлено: Вт мар 27, 2012 21:20:52
Mr.Denis
Спасибо! Завтро попробую.

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

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

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

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

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

Добавлено: Вт мар 27, 2012 23:08:18
Apparatchik
pyzhman писал(а):
Apparatchik писал(а):
А если отпустили на первой секунде и опять нажали на девятой?
Я образно сказал, так сказать на мысль натолкнул... Ждать целых 10 секунд с помощью delay это мягко говоря расточительство процессорного времени. Если отпустили, значит щитать коротким нажатием.

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

Добавлено: Вт мар 27, 2012 23:09:25
vitalik_1984
Мастер Ломастер писал(а):

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

sprintf(buffer,"%02d:%02d",hours,minutes);
Да точно,а еще в хелпе написано
The function returns the number of outputed characters.
То есть функция возвращает число символов в массиве при удачном исходе.

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

Добавлено: Ср мар 28, 2012 10:28:23
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+?
Как это работает? Не хочется оставлять непонятные моменты в программировании, хочется во всем разобраться.

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

Добавлено: Ср мар 28, 2012 11:11:31
pyzhman

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

// Crystal Oscillator division factor: 1
#pragma optsize- //отключаем оптимизацию. Чтобы нижние строки скомпилировались именно так, как написаны. Ибо 4 такта однако.
CLKPR=0x80; //разрешаем запись в клоковый прескалер.
CLKPR=0x00; //и пишем туда нули. На всякий случай. При старте, конечно, там нули, но для надеги...
#ifdef _OPTIMIZE_SIZE_ //если опция оптимизации есть
#pragma optsize+ //то включаем ее
#endif // так надо

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

Добавлено: Ср мар 28, 2012 20:39:32
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'

Что я не так делаю ?

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

Добавлено: Ср мар 28, 2012 20:43:49
pyzhman

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

#asm
   .equ __w1_port=0x18 ;PORTB
   .equ __w1_bit=0
#endasm
#include <1wire.h>
Эти строки уже назначены лапки. Вы их пытаетесь переназначить. О чем честно говорит компилятор.