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

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

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

Сообщение demiurg301 »

Попробуйте не стирать, а прошить с проверкой стирания.
У мну такое бывает. То либо квавр, толи само жлезо глючит. На LPT подключаете?
dnhftm
Родился
Сообщения: 11
Зарегистрирован: Чт янв 19, 2012 17:13:20

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

Сообщение dnhftm »

Подскажите пожалуйста где копать хорошо бы логический алгоритм
в общем потихоньку осваиваю АВР в среде КВАВР
вопрос в том как примерно реализовать общение Авр с GPS модулем по УАРТ сейчас
тыркаюсь написал программу в протеусе использовал виртуальны терминал с выводом на LM016
код {
lcd_puts (rx_buffer);
}
понятно что все просто все что попало по уарт в буфер летит на экран
Gps модуль мне будет отправлять постоянно координаты на скорости 9600 без запроса и следовательно переполнять в конечном итоге буфер
как бы организовать алгоритм работы чтобы все работало
скажем получать от него данные раз в минуту и обрабатывать их и выводить на экран
направьте меня на нужный путь где почитать где посмотреть
программирую в КВАВР на двоечку или троечку но с УАРТ ещё не сталкивался
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Копать можно начать тут...
В поисках истины человек развивается.
dnhftm
Родился
Сообщения: 11
Зарегистрирован: Чт янв 19, 2012 17:13:20

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

Сообщение dnhftm »

vitalik_1984 писал(а):Копать можно начать тут...

спасибо много раз читал открыл для себя много
НО!!!
когда я эмулирую данный девайс в протеусе я несказанно обламываясь !!! тк в эмуляции не работает =(
Timber
Родился
Сообщения: 3
Зарегистрирован: Вт мар 20, 2012 05:25:06

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

Сообщение Timber »

demiurg301 писал(а):Попробуйте не стирать, а прошить с проверкой стирания.

а не подскажете как прошить с поверкой стирания?
demiurg301 писал(а): У мну такое бывает. То либо квавр, толи само жлезо глючит. На LPT подключаете?

ну в моём случае не получается зетереть чип как в квавре так и понипроге. а программатор LPT использую, и на COM программаторе пробовал так же при попытке зетереть чип, или же вообще что то в нем изменить, просто блокируется и сигнатуры становятся FF FF FF, хотя при чтении сигнатуры в норме.
Помогите пожелуйста кто нить. :shock:
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

dnhftm писал(а):когда я эмулирую данный девайс в протеусе я несказанно обламываясь !!! тк в эмуляции не работает =(

Эмулируйте в железе:)
В поисках истины человек развивается.
dnhftm
Родился
Сообщения: 11
Зарегистрирован: Чт янв 19, 2012 17:13:20

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

Сообщение dnhftm »

vitalik_1984 писал(а):
dnhftm писал(а):когда я эмулирую данный девайс в протеусе я несказанно обламываясь !!! тк в эмуляции не работает =(

Эмулируйте в железе:)

я отрабатываю все виртуально потом делаю в железе тк опыта ещё маловато
я долго думал и придумал что делать итак
я перепрограммирую Gps модуль на отправку по запросу вот и все
буду получать данные и обрабатывать когда захочу до приёма я смогу подготовить и очистить буфер
Аватара пользователя
VannO)))
Открыл глаза
Сообщения: 49
Зарегистрирован: Вс дек 05, 2010 00:53:17
Откуда: Киев

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

Сообщение VannO))) »

Скажите, а есть ли в квавр инструменты для оценки быстродействия проекта? Например прерывание таймера по переполнению, без предделителя:
interrupt [TIM0_COMP] void TIM0COMP(void){
PORTA = array[++counter];
}
так вот, с какой частотой будет изменяться код на выходе порта А при частоте кристалла 8 МГц?
И можно ли эту частоту как-то увеличить?(может, использование регистров, размещение архива в пзу или оперативной памяти)
Ну и вобще самое главное - как считать)
[color=#FF80FF]Не втыкать.[/color]
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Нетути. Прогонять через отладчик, тот же AVRStudio. Там в CVAVR есть быстрая кнопочка для вызова отладчика, настраиваемая.
Docendo discimus
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

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

VannO))) писал(а):Например прерывание таймера по переполнению, без предделителя:
interrupt [TIM0_COMP] void TIM0COMP(void){
PORTA = array[++counter];
}
так вот, с какой частотой будет изменяться код на выходе порта А при частоте кристалла 8 МГц?
И можно ли эту частоту как-то увеличить?(может, использование регистров, размещение архива в пзу или оперативной памяти)
Ну и вобще самое главное - как считать)
элементарно, Ватсон! на вашем порту изменения будут происходить с частотой 8000000/256=31250 Гц. увеличить частоту можно только изменив прерывание на прерывание по совпадению и задав значение регистра OCRx 255 и менее. но не для любого таймера этот метод подходит: только для того, в котором есть аппаратная функция "сравнения".
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

самая максимальная частота может получиться по прерыванию таймера если выставить начальное значение 255для 8бит таймера и 65 536 для 16 битного.
получается прерывание будет происходить каждый такт.
я читал,что Тини можно использовать таким образом в режиме генератора.
думаю и для других контролеров может подойти.
В поисках истины человек развивается.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

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

vitalik_1984 писал(а):самая максимальная частота может получиться по прерыванию таймера если выставить начальное значение 255для 8бит таймера и 65 536 для 16 битного.

как всегда: скажете, а про "нюансики" умолчите. а они очень веские:
во-первых, задавать новое значение (вы сказали - начальное) счетчика придется в каждом прерывании
во-вторых, при значении счетчика 255 прерывание будет происходить НЕ КАЖДЫЙ такт. изменение значения порта будет происходить при этом в самом идеальном случае каждые 8 тактов и при этом для основной задачи процессорного времени почти не будет.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

там я точно не помню вроде написано,что нужно режим выставить вроде Стс.Нужно почитать еще раз аппнот.Я же все не могу запомнить.
И тем более в любом случае сначала выставляется флаг прерывания,а потом уже когда они разрешены уже обработка прерывания идет.
В поисках истины человек развивается.
Аватара пользователя
svetl1928
Потрогал лапой паяльник
Сообщения: 305
Зарегистрирован: Пт сен 03, 2010 19:29:56
Откуда: Планета Земля

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

Сообщение svetl1928 »

Здравствуйте форумчане. Прошу помощи по программке.
Алгоритм понятен по комментариям.
По изменению температуры на DS18B20, изменять состояние портов, на которых будут включены светодиоды.
Я в С еще зеленый, поэтому плохо понимаю.
Вроде проект компилируется, только в конце программы я что то видимо не так сделал с директивой If и Code Vision выдает ошибку.
Может подскажите что я тут накосячил?
Буду очень признателен за помощь!

Вот выкладываю код.

#include <tiny2313.h>
#include <1wire.h>
#include <DELAY.h>
#asm
.equ __w1_port=0x1B ;PORTA
.equ __w1_bit=0
#endasm
#include <ds18b20.h>

void main(void)
{
unsigned char devices;
int temp;

// Инициализация портов
// Port A initialization
PORTA=0x00;
DDRA=0x00;

// Port D initialization
PORTD=0x7F;
DDRD=0x7F;

// Инициализация 1 Wire шины
devices = w1_init();
while (1)
{
temp = ds18b20_temperature(0); // Читаем температуру с датчика
if (temp<70) // Если температура менее 70 градусов, зажигаем зеленый светодиод
PORTD.1 = 1;
else PORTD.1=0;


if (temp>70) // Если температура больше 70, моргаем желтым светодиодом

PORTD.2=1;
delay_ms(200);
PORTD.2=0;
delay_ms(200)


if (temp>100) // Если температура выше 100, зажигаем красный светодиод
PORTD.3=1;
};
}

Опрос датчика должен идти постоянно. Светодиоды должны загораться каждый в отдельности, если наступила очередь желтого после зеленого, то зеленый должен потухнуть, а также должен тухнуть желтый при наступлении очереди красного.
Аватара пользователя
VannO)))
Открыл глаза
Сообщения: 49
Зарегистрирован: Вс дек 05, 2010 00:53:17
Откуда: Киев

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

Сообщение VannO))) »

отсутствует точка с запятой. Вот тут:
if (temp>70) // Если температура больше 70, моргаем желтым светодиодом

PORTD.2=1;
delay_ms(200);
PORTD.2=0;
delay_ms(200) НЕТУНЕТУНЕТУ!!1


if (temp>100) // Если температура выше 100, зажигаем красный светодиод
PORTD.3=1;
};
}
[color=#FF80FF]Не втыкать.[/color]
Аватара пользователя
VannO)))
Открыл глаза
Сообщения: 49
Зарегистрирован: Вс дек 05, 2010 00:53:17
Откуда: Киев

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

Сообщение VannO))) »

Вопрос вдогонку. В примере с прерыванием выше мне ответили так, будто МК не тратит такты на вход и выход из прерывания, инкремент счетчика, обращение по адресам переменных. Это действительно так? Где можно увидеть АСМ-овский код сгенерённый компилятором?
[color=#FF80FF]Не втыкать.[/color]
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

svetl1928 писал(а):Может подскажите что я тут накосячил?
Буду очень признателен за помощь!

Как вам уже успели сказать не хватает точки с запятой,а еще если вы хотите, чтобы моргало только при желтом светодиоде нужно фигурные скобки.Как без них бы работало не думал-лень :)
if (temp>70){// Если температура больше 70, моргаем желтым светодиодом

PORTD.2=1;
delay_ms(200);
PORTD.2=0;
delay_ms(200)} ;

svetl1928 писал(а):Опрос датчика должен идти постоянно. Светодиоды должны загораться каждый в отдельности, если наступила очередь желтого после зеленого, то зеленый должен потухнуть, а также должен тухнуть желтый при наступлении очереди красного.


Советую применять такой принцип построения программы(Настройка портов)
он позволит быстро менять назначение выводов для других целей
и при переходе к другому компилятору тоже легче переделывать код
Спойлер

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

#include <tiny2313.h>
#include <1wire.h>
#include <DELAY.h>
#asm
.equ __w1_port=0x1B ;PORTA
.equ __w1_bit=0
#endasm


#include <ds18b20.h>
#define _BV(x) (1<<(x))
#define LED_Green  _BV(1)
#define LED_Red    _BV(2)
#define LED_Yellow _BV(3)
#define LEDS ((LED_Green)|(LED_Red)|(LED_Yellow)) 
void main(void)
{
//unsigned char devices; 
int temp;

// Инициализация портов
// Port A initialization
PORTA=0x00;
DDRA=0x00;

// Port D initialization
DDRD=LEDS;
PORTD=0x7F;


// Инициализация 1 Wire шины
w1_init();
//devices = w1_init(); 
while (1)
{
temp ds18b20_temperature(0); // Читаем температуру с датчика
PORTD&=~LEDS;
if (
temp<70){ // Если температура менее 70 градусов, зажигаем зеленый светодиод
PORTD|=LED_Green; }
else 
PORTD&=~LED_Green


if ((
temp>70)&&(temp<=100)){ // Если температура больше 70, моргаем желтым светодиодом 

PORTD|=LED_Red;
delay_ms(200);
PORTD&=~LED_Red;
delay_ms(200);}


if (
temp>100// Если температура выше 100, зажигаем красный светодиод
PORTD=LED_Red;
};
}   
 
В поисках истины человек развивается.
Аватара пользователя
Valek3306
Встал на лапы
Сообщения: 95
Зарегистрирован: Вт авг 03, 2010 22:51:57
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Valek3306 »

Подскажите пожалуйста как принять 4 переменных по UART. Как принять одну переменную понятно. Но когда у меня в любой момент времени может перейти эта последовательность из 4 байт я не понимаю как это ловить. Вообщем не мне приходят эти байты, а как мне их значения присвоить переменным?
Маленький хакер в подстанцию влез
Перенаправил поток он с АЭС
Клевая мощность два мегаватта,
Быстро горит материнская плата!
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Для приема нескольких байт есть буфер.То есть принимаем заполняем ячейки но для контроля целостности данных тоже нужно придумать метод. Либо строгий временной протокол,либо контрольная сумма.Ну вообще много вариантов.
Применяется в си функция scanf(формат,переменные_для_внесения_данных).
scanf() в яндексе
В поисках истины человек развивается.
Аватара пользователя
svetl1928
Потрогал лапой паяльник
Сообщения: 305
Зарегистрирован: Пт сен 03, 2010 19:29:56
Откуда: Планета Земля

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

Сообщение svetl1928 »

Спасибо большое за помощь по программе!
Ответить

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