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

Обсуждаем контроллеры компании Atmel.
SabitofF
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Сб июн 26, 2010 12:08:42

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

Сообщение 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);
             };
    };
}
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Если на пине5 нет внешнего подтягивающего резистора, то еще и так:

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

PORTB=0b00100000;
Docendo discimus
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение pashaumnov »

если у вас будет на portb.5 ==0 , то будет происходить ресет микроконтролера, если вы конечно не отключите во фьюзах ресет. но тогда повторная перезапись микроконтролера будет затруднительна, я бы посоветовал выбрать вам другой порт для индикации нуля. а порт 5 оставил бы под ресет.
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение 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

}
turion
Родился
Сообщения: 3
Зарегистрирован: Пт янв 10, 2014 11:03:27

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

Сообщение 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?
vic_le
Родился
Сообщения: 2
Зарегистрирован: Сб янв 11, 2014 23:12:25

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

Сообщение vic_le »

Кто может обяснить на пальцах как работь с бутлоадером. Есть проэкт в CodeVision AVR программирую из CVAVR, есть бутлоадер здесь же. Я так понимаю нужно программировать бутлоадер с определённого адреса а основной код с 0-го адреса. Как указать в коде или при программировании что куда программировать???. Прошу не пинать программирую на Си давно но с этой темой работаю впервой, поиски не дают внятного ответа (может не правильно искал). Все решения котоые я нашол то нужно программировать бутлоадер отдельным программатором.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

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

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

Явно указать адрес подпрограммы или константных данных можно с помощью ассемблерной директивы .ORG
Я пробовал, вроде работает.
vic_le
Родился
Сообщения: 2
Зарегистрирован: Сб янв 11, 2014 23:12:25

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

Сообщение vic_le »

Если проблема с прерываниями то я думаю она решаема. Так всё таки есть возможность обединения бутлоадера и основного кода, или нет в CVAVR. Ведь не обязательно указывать стартовать с бутлоадера, а запускать его из основного кода.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

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

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

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

Сообщение mihail07 »

подскажите плиз CodeVision AVR с прогером громова работает?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение 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 (тут на РадиоКоте все есть...)
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

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

Коты,доброй ночи! Подскажите, как сделал генератор случайных чисел от 1 до 10 на Атмеге8.
Спасибо!
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

На GCC это делается так:

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

random_number = 1 + rand() % 10;
Последний раз редактировалось Apparatchik Вс янв 19, 2014 19:35:39, всего редактировалось 2 раза.
«И всё-таки она вертится!»
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

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

А в cvavr?
P. s. Попробовал в CV - не работает
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Не может не работать, в её справке есть такая функция. Генерируются псевдослучайные числа.
«И всё-таки она вертится!»
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

В хелпе на компиль это всё есть.

Изображение

Странно, что вообще подобные вопросы возникают. Неужели банальная лень читать ? :dont_know:
Вложения
cvavr_rand.jpg
(197.12 КБ) 955 скачиваний
Aмstroн
Встал на лапы
Сообщения: 107
Зарегистрирован: Сб июл 27, 2013 10:52:37
Откуда: Украина

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

Сообщение Aмstroн »

Откуда такие мысли, что лень прочитать? вы обвели, но я так и не понял, прочитать не могу! шо там написано?
Черт возьми, что-то интересное там написано...,и про другое тоже, только как - бы его, и остальные интерестности про которые там написано еще и применить???????
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Того, что я обвёл, вполне достаточно, чтобы понять что делает эта функция и как её применить. Если Вам этого не понятно - курите литературу по языку.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

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

Хорошо,другой вопрос. Каким образом она генерит эти числа?
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

генерит случайным образом, поиск рулит: viewtopic.php?f=20&t=70355
Ответить

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