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

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

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

Сообщение pyzhman »

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

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

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

Сообщение pashaumnov »

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

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

}
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 3
Зарегистрирован: Пт янв 10, 2014 11:03:27

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

Сообщение vic_le »

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

Сообщение uk8amk »

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

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

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

Сообщение vic_le »

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

Сообщение uk8amk »

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

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

Сообщение mihail07 »

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

Сообщение 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
Откуда: Москва

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

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

Сообщение Apparatchik »

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

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

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

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

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

Сообщение Apparatchik »

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

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

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

Изображение

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

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

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

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

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

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

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

Сообщение oleg110592 »

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

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