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

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

Добавлено: Пн янв 06, 2014 03:53:34
SabitofF
если я правильно понял то должно быть так

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

#include <tiny13.h>
#include <delay.h>

void main(void)
{
    PORTB=0b00000000;
    DDRB= 0b00001111;
while (1)
    {
      
             while (PINB.5==0) 
             {
             PORTB=0b00000101;
             delay_ms(100);  
             PORTB=0b00001010;
             delay_ms(100);
             };
    };
}

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

Добавлено: Пн янв 06, 2014 07:31:31
pyzhman
Если на пине5 нет внешнего подтягивающего резистора, то еще и так:

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

PORTB=0b00100000;

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

Добавлено: Пн янв 06, 2014 15:03:24
pashaumnov
если у вас будет на portb.5 ==0 , то будет происходить ресет микроконтролера, если вы конечно не отключите во фьюзах ресет. но тогда повторная перезапись микроконтролера будет затруднительна, я бы посоветовал выбрать вам другой порт для индикации нуля. а порт 5 оставил бы под ресет.

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

Добавлено: Пн янв 06, 2014 15:15:22
pashaumnov
уважаемые коты , помогите разбудить тини 13 по ватчдогу??
Спойлер#include <tiny13.h>
#include <delay.h>
#include <sleep.h>
#define ADC_VREF_TYPE 0x62 //режим включен внутренний ион на 1.1, вывод данных в порт адц 2 РВ4

unsigned char napruga;


// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input) //програма созданая в визарде для выведения значений ацп в переменную read_adc
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH; //8 битный результат
}

// Declare your global variables here



void main(void)
{

// Declare your local variables here
char v;
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
// State5=T State4=T State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0x0F;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;


// ADC initialization
// ADC Clock frequency: 150,000 kHz
// ADC Bandgap Voltage Reference: Off
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
DIDR0&=0x03;
DIDR0|=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x86;
// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/64k
// Watchdog Timer interrupt: On

PORTB.3=1;
delay_ms(150);
PORTB.2=1;
delay_ms(150);
PORTB.1=1;
delay_ms(150);
PORTB.0=1;
delay_ms(150);


napruga= read_adc(2); //присваиваем read_adc переменной напруга в скобочках указывается какой адц работает у нас (адц 2)

if(napruga > 85) PORTB.0= 1;
else PORTB.0= 0;
if(napruga > 65) PORTB.1= 1;
else PORTB.1= 0;
if(napruga > 57) PORTB.2= 1;
else PORTB.2= 0;
if(napruga >53 ) PORTB.3= 1;
else
{
for (v=0;v<=6;v++) //задержка на мигание светодиодом пследним
{ //мигаем 5 раз и переходим дальше
PORTB.3= 1;
delay_ms(100);
PORTB.3= 0;
delay_ms(1100);
};
};
delay_ms(3000); //задержка выведения показаний на светодиоды
//тушим все порты(светодиоды)
PORTB.0=0;
delay_ms(150);
PORTB.1=0;
delay_ms(150);
PORTB.2=0;
delay_ms(150);
PORTB.3=0;
delay_ms(150);

PORTB=0x00;
MCUCR=0x30;
//включаем режим сна повер довн
#asm ("sleep") //спим до нажия на кнопку ресет которая перезапустит программу
}
в визарде настроено прерываение по ватчдогу через 8 сек после сна. но прерываение не происходит((( в прерывании нужно вызывать функцию проверки ацп и сели папряжение больше 2.5в то снова заснуть. если ниже тогда будем мигать светодиодом на порте Б3.
вот то что визард создает для прерывания по ватчдогу
Спойлер// Watchdog timeout interrupt service routine
interrupt [WDT] void wdt_timeout_isr(void)
{
WDTCR|=0x40;
// Place your code here

}

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

Добавлено: Пт янв 10, 2014 11:41:33
turion
Ребят, помогите разобраться с таймерами. Перерыл весь инет, нашел пару более менее статей написанных доступным языком, но некоторые моменты всеравно не ясны.
Я хочу использовать таймер в следующих целях:
На один из входов (а) МК поступает сигнал (в течении например 0,005-0,01 секунды) и будет повторяться через промежуток 0,01-0,015 сек.
После поступления сигнала на вход (а) мне нужно подать напряжение на выход МК (б) либо сразу, либо через 0,002 секунды например в течении 0,003 секунд.
Не понимаю какой выбрать таймер и его режим для этой задачи.
Использовать хочу МК Atmega 8. Так понимаю по умолчанию частота 1МГц работы внутреннего тактового генератора. То есть брать предделитель 256 нормально. Это получается 1024000/256=4000Гц. Т.е. один такт за 0,00025 секунды и если мне понадобится отсчитать интервал времени 0,005 секунды, то это пройдет 20 тактов. Еще как раз запас есть, если интервал времени потребуется меньше отсчитывать.
Верно?
И как задать условие, что если досчитает до 20, подать напряжение туда то. Как обратиться к этой переменной? Глупый вопрос наверное. Вообщем то работал и с датчиками, и с прерыванием. Проблем не было. Но опыта еще маловато.
Может у кого пример с комментариями есть? Буду очень благодарен.
Это все лучше делать используя CodeWizardAVR?

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

Добавлено: Сб янв 11, 2014 23:30:56
vic_le
Кто может обяснить на пальцах как работь с бутлоадером. Есть проэкт в CodeVision AVR программирую из CVAVR, есть бутлоадер здесь же. Я так понимаю нужно программировать бутлоадер с определённого адреса а основной код с 0-го адреса. Как указать в коде или при программировании что куда программировать???. Прошу не пинать программирую на Си давно но с этой темой работаю впервой, поиски не дают внятного ответа (может не правильно искал). Все решения котоые я нашол то нужно программировать бутлоадер отдельным программатором.

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

Добавлено: Вс янв 12, 2014 11:03:46
uk8amk
Насколько знаю, бутлоадер создаётся как отдельное приложение. При компиляции и создании HEX в него помещается с нужного адреса boot-сектора в соответствии с настройками проекта.
Boot прошивается программатором, приложение можно уже залить через boot.

Для удобства прошивки серии hex boot-а и hex приложения можно соединить в один файл сторонними инструментами. Однако в одной программе их лучше не соединять т.к. они используют разные таблицы прерываний. Были вроде еще какие-то другие противоречия между ними.

Явно указать адрес подпрограммы или константных данных можно с помощью ассемблерной директивы .ORG
Я пробовал, вроде работает.

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

Добавлено: Вс янв 12, 2014 12:36:30
vic_le
Если проблема с прерываниями то я думаю она решаема. Так всё таки есть возможность обединения бутлоадера и основного кода, или нет в CVAVR. Ведь не обязательно указывать стартовать с бутлоадера, а запускать его из основного кода.

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

Добавлено: Вс янв 12, 2014 13:10:59
uk8amk
Я думаю, что принципиального ограничения тут нет.
1. Прерывания можно отключить все и использовать исключительно опрос флагов состояния.
2. Подпрограммы бутлодера разместить в пределах бут-сектора и просто сделать вызов СИ-шной функции или JMP/RJMP на неё.

Над чем подумать стоит.
Для бута надо напрямую обращаться к регистрам процессора. При этом объявление регистровых переменных совсем не гарантирует назначение им РОН. Всё на усмотрение СИ-шного оптимизатора.

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

Добавлено: Сб янв 18, 2014 19:28:33
mihail07
подскажите плиз CodeVision AVR с прогером громова работает?

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

Добавлено: Сб янв 18, 2014 19:37:47
oleg110592
сайт Codevision вроде доступен:
The following programmers are supported:

Atmel STK500 (serial connection)

Atmel STK600 (USB connection)

Atmel AVRISP (serial connection)

Atmel AVRISP MkII (USB connection)

Atmel AVR Dragon (USB connection)

Atmel JTAGICE MkII (USB connection)

Atmel JTAGICE 3 (USB connection)

Atmel AVR910 Application Note (serial connection)

Kanda Systems STK200 and STK300 (LPT parallel port connection)

Vogel Elektronic VTEC ISP (LPT parallel port connection)

Dontronics DT006 (LPT parallel port connection)
рекомендую Atmel AVRISP MkII (тут на РадиоКоте все есть...)

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

Добавлено: Вс янв 19, 2014 00:36:46
Сериг
Коты,доброй ночи! Подскажите, как сделал генератор случайных чисел от 1 до 10 на Атмеге8.
Спасибо!

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

Добавлено: Вс янв 19, 2014 00:43:57
Apparatchik
На GCC это делается так:

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

random_number = 1 + rand() % 10;

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

Добавлено: Вс янв 19, 2014 18:20:59
Сериг
А в cvavr?
P. s. Попробовал в CV - не работает

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

Добавлено: Вс янв 19, 2014 19:34:55
Apparatchik
Не может не работать, в её справке есть такая функция. Генерируются псевдослучайные числа.

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

Добавлено: Вс янв 19, 2014 20:30:28
Аlex
В хелпе на компиль это всё есть.

Изображение

Странно, что вообще подобные вопросы возникают. Неужели банальная лень читать ? :dont_know:

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

Добавлено: Вс янв 19, 2014 21:32:50
Aмstroн
Откуда такие мысли, что лень прочитать? вы обвели, но я так и не понял, прочитать не могу! шо там написано?
Черт возьми, что-то интересное там написано...,и про другое тоже, только как - бы его, и остальные интерестности про которые там написано еще и применить???????

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

Добавлено: Вс янв 19, 2014 21:41:07
Аlex
Того, что я обвёл, вполне достаточно, чтобы понять что делает эта функция и как её применить. Если Вам этого не понятно - курите литературу по языку.

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

Добавлено: Вс янв 19, 2014 22:03:23
Сериг
Хорошо,другой вопрос. Каким образом она генерит эти числа?

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

Добавлено: Вс янв 19, 2014 23:09:17
oleg110592
генерит случайным образом, поиск рулит: http://radiokot.ru/forum/viewtopic.php?f=20&t=70355