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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

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

Сообщение sachok »

T O S H KA писал(а):нет я конечно понимаю, что в этом вопросе руки у меня кривые... но 50 $ у меня нет((( я разобраться пытаюсь, но не работает(( нет если есть у кого проги дайте для примера....заранее спасибо

Что я не вижу Ваших попыток разобраться. Покажите их, поможем.
Для примера - http://avr.inf.ua/timer_v2.html http://avr.inf.ua/clock.html
По первой ссылке таймер по второй пример работы с индикаторами. Только это примеры...сейчас бы я это всё по другому сделал)
50$ нету... А сколько есть? :)))
Я не Сашок!!!
Реклама
T O S H KA
Родился
Сообщения: 12
Зарегистрирован: Чт янв 12, 2012 20:03:46

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

Сообщение T O S H KA »

вот программа мы с другом написали что не так часы не работуют почему?? почему цифры мерцают? нормально на индикатор не выводятся вообщем не работуют!! подскажите

/*****************************************************
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
*****************************************************/

#include <mega8.h>
unsigned int k;
unsigned int i;
unsigned int sek;
unsigned int min1;
unsigned int min2;
unsigned int hour1;
unsigned int hour2;
unsigned char number[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
if(sek==60) // если сек = 60
{
min1++; // добавляем 1 к переменной "минута"
sek=0; // зануляем переменную "секунда"
}
if(min1==10) // если мин = 60
{
min2++; // добавляем 1 к переменной "час"
min1=0; // зануляем переменную "минута"
}
if(min2==6) // если мин = 60
{
hour1++; // добавляем 1 к переменной "час"
min2=0; // зануляем переменную "минута"
}
if(hour1==10) // если мин = 60
{
hour2++; // добавляем 1 к переменной "час"
hour1=0; // зануляем переменную "минута"
}
k++;
if (k==3) {i++;k=1;}
if (i==5) {i=1;}
if (i==1) {PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=0;
PORTB= number[min1];}
if (i==2) {PORTD.0=1;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
PORTB= number[min2];}
if (i==3) {PORTD.0=1;
PORTD.1=0;
PORTD.2=1;
PORTD.3=1;
PORTB= number[hour1];}
if (i==4) {PORTD.0=0;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTB= number[hour2];}

}
void main(void)
{

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
TCCR0=0x04;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// 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: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;



#asm("sei")

while (1)
{ if (PINC.0==1)
{
min1++;
}

if (PINC.1==1)
{
hour1++;
}


}
}
Реклама
T O S H KA
Родился
Сообщения: 12
Зарегистрирован: Чт янв 12, 2012 20:03:46

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

Сообщение T O S H KA »

sachok писал(а):
T O S H KA писал(а):нет я конечно понимаю, что в этом вопросе руки у меня кривые... но 50 $ у меня нет((( я разобраться пытаюсь, но не работает(( нет если есть у кого проги дайте для примера....заранее спасибо

Что я не вижу Ваших попыток разобраться. Покажите их, поможем.
Для примера - http://avr.inf.ua/timer_v2.html http://avr.inf.ua/clock.html
По первой ссылке таймер по второй пример работы с индикаторами. Только это примеры...сейчас бы я это всё по другому сделал)
50$ нету... А сколько есть? :)))


А сколько надо? я то думал мы как то все братья человеки и т.п. :cry:
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

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

Сообщение sachok »

Во первых есть тег code
Во вторых где увеличение sek ?
А сколько надо? я то думал мы как то все братья человеки и т.п.

Та я не против что братья, просто своим временем никто раскидаться просто так не будет...
Я не Сашок!!!
Реклама
Эиком - электронные компоненты и радиодетали
T O S H KA
Родился
Сообщения: 12
Зарегистрирован: Чт янв 12, 2012 20:03:46

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

Сообщение T O S H KA »

sachok писал(а):Во первых есть тег code
Во вторых где увеличение sek ?
А сколько надо? я то думал мы как то все братья человеки и т.п.

Та я не против что братья, просто своим временем никто раскидаться просто так не будет...


что такое тег code? сначала нужно с индекаторыми разобраться что не мерцали! чтоб нули нормально горели! помогите плз
Реклама
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

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

Сообщение sachok »

Тег сверху от текста сообщения.
Изображение
Мерцают - значит малая частота для динамической индикации. Для 4 разрядов нужна частота таймера от 280Гц.
Пример динамической индикации есть тут http://avru.cwx.ru/uchebnik/7sigmentnik ... d_avr.html
Извиняйте но сейчас просто нет времени Вам всё расписывать, возможно вечером.
А если не осилите то или собирайте $ или начните с чего то попроще
Я не Сашок!!!
Реклама
T O S H KA
Родился
Сообщения: 12
Зарегистрирован: Чт янв 12, 2012 20:03:46

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

Сообщение T O S H KA »

спасибо за советы большое!!! будем думать!!!
T O S H KA
Родился
Сообщения: 12
Зарегистрирован: Чт янв 12, 2012 20:03:46

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

Сообщение T O S H KA »

Ребята ну помогите мне с этим таймером пожалуста!!! :shock:
demiurg301
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

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

Сообщение demiurg301 »

T O S H KA писал(а):Ребята ну помогите мне с этим таймером пожалуста!!! :shock:


А чо это такое мутное вы в прерывании делаете?
T O S H KA
Родился
Сообщения: 12
Зарегистрирован: Чт янв 12, 2012 20:03:46

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

Сообщение T O S H KA »

а че мы там такое мутим???????????
demiurg301
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

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

Сообщение demiurg301 »

T O S H KA писал(а):а че мы там такое мутим???????????


Вот от нефиг делать набросал - незнаю может и лажа - проверять в железе надо (с динамикой никогда не сталкивался юзаю ЖКИшки) , да и ТЯПНИЦА :)))

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

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.5 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 13.01.2012
Author  :                         
Company :                       
Comments:


Chip type           : ATmega8
Program type        : Application
Clock frequency     : 8,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega8.h>
// Timer 1 output compare A interrupt service routine
unsigned char sec_flag=0;
unsigned char sec_buf=0;
unsigned char N=1;
unsigned char number[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
unsigned char znach[3];
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
if(N==4){N=1;};
PORTB=*(number+znach[N-1]); 
PORTD&=~(2<<N++);
sec_buf++;
if(sec_buf==100){sec_buf=0;sec_flag=1;};
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
TCCR0=0x05;
TCNT0=0x00;

// 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
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0xFB;
OCR1AL=0x1E;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
      if (sec_flag==1)
        {
        sec_flag=0;
        //Тут вставить обработку счётчков секунд и минут( которые ещё и объявить надо!!!)
        znach[0]=1; //0 Заполнить значение 1 знакоместа вместо 1 конкретной цифрой
        znach[1]=1;//1 Заполнить значение 2 знакоместа  вместо 1 конкретной цифрой
        znach[2]=1; //2 Заполнить значение 3 знакоместа вместо 1 конкретной цифрой
        };

      };
}
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

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

Сообщение sachok »

Я бы сделал это всё на двух отдельных таймерах, первый обеспечивает динамическую индикацию, второй считает время. Народ, а дайте не заси*** тему если уже пошло дело на то что нужен таймер...всё же здесь вопросы по CVAVR
Я не Сашок!!!
T O S H KA
Родился
Сообщения: 12
Зарегистрирован: Чт янв 12, 2012 20:03:46

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

Сообщение T O S H KA »

всем большое спасибо))) написал ура!!! работает кое как))) СПАСИБО ребят правда!!!!
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Друзья,не кто не подскажет где скачать версию 2.03.9 с таблеткой?
demiurg301
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

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

Сообщение demiurg301 »

отлистай страниц 10 назад.... 2.05 с таблеткой была...
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Здравствуйте.
Я сейчас пытаюсь вникнуть в функцию самопрограммирования(self-program) и у меня возникает несколько вопросов:
1. Область памяти AVR(Мега32 и М64) разделена на 2 секции- RWW и NRWW. Может ли код приложения(т.е. из секции RWW) использовать инструкции SPM и LPM для самомодофикации? Просто везде рассмотрен только случай когда независимый загрузчик из NRWW переписывает всю флешь в RWW, а мне же надо изменить только небольшую часть программы(таблицы данных).
2. CVAVR и его линкер судя по документации не имеют дирректив или настроек для размещения разных подпрограмм по жестко фиксированным адресам(например для подпрограммы-загрузчика в памяти NRWW). Я знаю, что в AVRASM для этого есть дирректива .ORG. Я написал внутри функции ассемблерную вставку:

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

/*---------- 
Modify Flash
----------*/
void load_flash(void)
{
        #asm(".org $3e00");
        //тело функции
}

Дизассемблер сказал, что функция теперь находится по указанному адресу. Однако меня интересует поведение компилятора, ведь при вызове этой функции он может использовать инструкции с ограниченной областью действия(типа относительных переходов PC+). Учитывает ли С компилятор CVAVR при вызове подпрограмм диррективы ORG чтобы ф-ция была в пределах досягаемости?
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

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

Сообщение wellcom »

И снова МЯУ!
Подскажите плз, какая часть начнется выполняться первой?
левая или правая??????

"левая & правая"

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

 if(((ulScannedNValue&ulKeyMask)==0)&((ulScannedNValue_OLD&ulKeyMask)!=0))
:solder: 32-х ядерный процессор из П213В
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

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

wellcom писал(а):И снова МЯУ!
Подскажите плз, какая часть начнется выполняться первой?
левая или правая??????

"левая & правая"

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

 if(((ulScannedNValue&ulKeyMask)==0)&((ulScannedNValue_OLD&ulKeyMask)!=0))

во-первых, если следовать стандарту языка Си, то ответ неопределен, т.к. стандарт не устанавливает порядка вычисления операндов в выражении. если учесть, что CVAVR не очень озабочен соблюдением стандартов, можно предположить, что вычисляться будет слева направо - но это чисто мои домыслы.

кстати, вы вообще точно уверены, что "посредине" у вас должен быть оператор &, а не && ?
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
wellcom
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Чт фев 24, 2011 13:00:49

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

Сообщение wellcom »

Мастер Ломастер писал(а):
кстати, вы вообще точно уверены, что "посредине" у вас должен быть оператор &, а не && ?


скорее всего так и должно быть &&, но работает и с 1 -м &, видимо компилятор об этом не задумывается....
:solder: 32-х ядерный процессор из П213В
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

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

wellcom писал(а):
Мастер Ломастер писал(а):
кстати, вы вообще точно уверены, что "посредине" у вас должен быть оператор &, а не && ?


скорее всего так и должно быть &&, но работает и с 1 -м &, видимо компилятор об этом не задумывается....


работать-то может и работает, и даже понятно, почему именно (компилятор ни при чем)... но вообще это не хорошо - битовые и логические опреации это разные вещи! тем более что стандарт Си, если я не ошибаюсь, не устанавливает однозначно, что истинным выражением логической операции всегда должно быть число 1 - по идее может быть ЛЮБОЕ НЕНУЛЕВОЕ число, и тогда разница в работе & и && будет очень заметна.
битва с дураками проиграна, победители торжествуют. слава победителям!
Ответить

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