CodeVision AVR в вопросах и ответах
-
demiurg301
- Опытный кот
- Сообщения: 812
- Зарегистрирован: Ср мар 18, 2009 21:14:33
Re: CodeVision AVR в вопросах и ответах
Попробуйте не стирать, а прошить с проверкой стирания.
У мну такое бывает. То либо квавр, толи само жлезо глючит. На LPT подключаете?
У мну такое бывает. То либо квавр, толи само жлезо глючит. На LPT подключаете?
Re: CodeVision AVR в вопросах и ответах
Подскажите пожалуйста где копать хорошо бы логический алгоритм
в общем потихоньку осваиваю АВР в среде КВАВР
вопрос в том как примерно реализовать общение Авр с GPS модулем по УАРТ сейчас
тыркаюсь написал программу в протеусе использовал виртуальны терминал с выводом на LM016
код {
lcd_puts (rx_buffer);
}
понятно что все просто все что попало по уарт в буфер летит на экран
Gps модуль мне будет отправлять постоянно координаты на скорости 9600 без запроса и следовательно переполнять в конечном итоге буфер
как бы организовать алгоритм работы чтобы все работало
скажем получать от него данные раз в минуту и обрабатывать их и выводить на экран
направьте меня на нужный путь где почитать где посмотреть
программирую в КВАВР на двоечку или троечку но с УАРТ ещё не сталкивался
в общем потихоньку осваиваю АВР в среде КВАВР
вопрос в том как примерно реализовать общение Авр с GPS модулем по УАРТ сейчас
тыркаюсь написал программу в протеусе использовал виртуальны терминал с выводом на LM016
код {
lcd_puts (rx_buffer);
}
понятно что все просто все что попало по уарт в буфер летит на экран
Gps модуль мне будет отправлять постоянно координаты на скорости 9600 без запроса и следовательно переполнять в конечном итоге буфер
как бы организовать алгоритм работы чтобы все работало
скажем получать от него данные раз в минуту и обрабатывать их и выводить на экран
направьте меня на нужный путь где почитать где посмотреть
программирую в КВАВР на двоечку или троечку но с УАРТ ещё не сталкивался
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Копать можно начать тут...
В поисках истины человек развивается.
Re: CodeVision AVR в вопросах и ответах
vitalik_1984 писал(а):Копать можно начать тут...
спасибо много раз читал открыл для себя много
НО!!!
когда я эмулирую данный девайс в протеусе я несказанно обламываясь !!! тк в эмуляции не работает =(
Re: CodeVision AVR в вопросах и ответах
demiurg301 писал(а):Попробуйте не стирать, а прошить с проверкой стирания.
а не подскажете как прошить с поверкой стирания?
demiurg301 писал(а): У мну такое бывает. То либо квавр, толи само жлезо глючит. На LPT подключаете?
ну в моём случае не получается зетереть чип как в квавре так и понипроге. а программатор LPT использую, и на COM программаторе пробовал так же при попытке зетереть чип, или же вообще что то в нем изменить, просто блокируется и сигнатуры становятся FF FF FF, хотя при чтении сигнатуры в норме.
Помогите пожелуйста кто нить.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
dnhftm писал(а):когда я эмулирую данный девайс в протеусе я несказанно обламываясь !!! тк в эмуляции не работает =(
Эмулируйте в железе:)
В поисках истины человек развивается.
Re: CodeVision AVR в вопросах и ответах
vitalik_1984 писал(а):dnhftm писал(а):когда я эмулирую данный девайс в протеусе я несказанно обламываясь !!! тк в эмуляции не работает =(
Эмулируйте в железе:)
я отрабатываю все виртуально потом делаю в железе тк опыта ещё маловато
я долго думал и придумал что делать итак
я перепрограммирую Gps модуль на отправку по запросу вот и все
буду получать данные и обрабатывать когда захочу до приёма я смогу подготовить и очистить буфер
Re: CodeVision AVR в вопросах и ответах
Скажите, а есть ли в квавр инструменты для оценки быстродействия проекта? Например прерывание таймера по переполнению, без предделителя:
interrupt [TIM0_COMP] void TIM0COMP(void){
PORTA = array[++counter];
}
так вот, с какой частотой будет изменяться код на выходе порта А при частоте кристалла 8 МГц?
И можно ли эту частоту как-то увеличить?(может, использование регистров, размещение архива в пзу или оперативной памяти)
Ну и вобще самое главное - как считать)
interrupt [TIM0_COMP] void TIM0COMP(void){
PORTA = array[++counter];
}
так вот, с какой частотой будет изменяться код на выходе порта А при частоте кристалла 8 МГц?
И можно ли эту частоту как-то увеличить?(может, использование регистров, размещение архива в пзу или оперативной памяти)
Ну и вобще самое главное - как считать)
[color=#FF80FF]Не втыкать.[/color]
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Нетути. Прогонять через отладчик, тот же AVRStudio. Там в CVAVR есть быстрая кнопочка для вызова отладчика, настраиваемая.
Docendo discimus
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
элементарно, Ватсон! на вашем порту изменения будут происходить с частотой 8000000/256=31250 Гц. увеличить частоту можно только изменив прерывание на прерывание по совпадению и задав значение регистра OCRx 255 и менее. но не для любого таймера этот метод подходит: только для того, в котором есть аппаратная функция "сравнения".VannO))) писал(а):Например прерывание таймера по переполнению, без предделителя:
interrupt [TIM0_COMP] void TIM0COMP(void){
PORTA = array[++counter];
}
так вот, с какой частотой будет изменяться код на выходе порта А при частоте кристалла 8 МГц?
И можно ли эту частоту как-то увеличить?(может, использование регистров, размещение архива в пзу или оперативной памяти)
Ну и вобще самое главное - как считать)
битва с дураками проиграна, победители торжествуют. слава победителям!
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
самая максимальная частота может получиться по прерыванию таймера если выставить начальное значение 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 в вопросах и ответах
там я точно не помню вроде написано,что нужно режим выставить вроде Стс.Нужно почитать еще раз аппнот.Я же все не могу запомнить.
И тем более в любом случае сначала выставляется флаг прерывания,а потом уже когда они разрешены уже обработка прерывания идет.
И тем более в любом случае сначала выставляется флаг прерывания,а потом уже когда они разрешены уже обработка прерывания идет.
В поисках истины человек развивается.
- svetl1928
- Потрогал лапой паяльник
- Сообщения: 305
- Зарегистрирован: Пт сен 03, 2010 19:29:56
- Откуда: Планета Земля
Re: CodeVision AVR в вопросах и ответах
Здравствуйте форумчане. Прошу помощи по программке.
Алгоритм понятен по комментариям.
По изменению температуры на 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;
};
}
Опрос датчика должен идти постоянно. Светодиоды должны загораться каждый в отдельности, если наступила очередь желтого после зеленого, то зеленый должен потухнуть, а также должен тухнуть желтый при наступлении очереди красного.
Алгоритм понятен по комментариям.
По изменению температуры на 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;
};
}
Опрос датчика должен идти постоянно. Светодиоды должны загораться каждый в отдельности, если наступила очередь желтого после зеленого, то зеленый должен потухнуть, а также должен тухнуть желтый при наступлении очереди красного.
Re: CodeVision AVR в вопросах и ответах
отсутствует точка с запятой. Вот тут:
if (temp>70) // Если температура больше 70, моргаем желтым светодиодом
PORTD.2=1;
delay_ms(200);
PORTD.2=0;
delay_ms(200) НЕТУНЕТУНЕТУ!!1
if (temp>100) // Если температура выше 100, зажигаем красный светодиод
PORTD.3=1;
};
}
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]
Re: CodeVision AVR в вопросах и ответах
Вопрос вдогонку. В примере с прерыванием выше мне ответили так, будто МК не тратит такты на вход и выход из прерывания, инкремент счетчика, обращение по адресам переменных. Это действительно так? Где можно увидеть АСМ-овский код сгенерённый компилятором?
[color=#FF80FF]Не втыкать.[/color]
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
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 в вопросах и ответах
Подскажите пожалуйста как принять 4 переменных по UART. Как принять одну переменную понятно. Но когда у меня в любой момент времени может перейти эта последовательность из 4 байт я не понимаю как это ловить. Вообщем не мне приходят эти байты, а как мне их значения присвоить переменным?
Маленький хакер в подстанцию влез
Перенаправил поток он с АЭС
Клевая мощность два мегаватта,
Быстро горит материнская плата!
Перенаправил поток он с АЭС
Клевая мощность два мегаватта,
Быстро горит материнская плата!
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Для приема нескольких байт есть буфер.То есть принимаем заполняем ячейки но для контроля целостности данных тоже нужно придумать метод. Либо строгий временной протокол,либо контрольная сумма.Ну вообще много вариантов.
Применяется в си функция scanf(формат,переменные_для_внесения_данных).
scanf() в яндексе
Применяется в си функция scanf(формат,переменные_для_внесения_данных).
scanf() в яндексе
В поисках истины человек развивается.
- svetl1928
- Потрогал лапой паяльник
- Сообщения: 305
- Зарегистрирован: Пт сен 03, 2010 19:29:56
- Откуда: Планета Земля
Re: CodeVision AVR в вопросах и ответах
Спасибо большое за помощь по программе!