CodeVision AVR в вопросах и ответах
Объясните пожалуйста, как в CodeVision нужно правильно установить галочки для фьюзов&?чтобы использовать встроенный тактовый генератор на 8МГц для ATmega16!
- Реклама
Смотрите в теме о фьюзах.Александр 071 писал(а):Объясните пожалуйста, как в CodeVision нужно правильно установить галочки для фьюзов&?чтобы использовать встроенный тактовый генератор на 8МГц для ATmega16!
Если объявить глобальную переменную так:
то она хранится в flash?
С чем может быть связана проблема самообнуления так объявленной переменной? Она просто в процесе работы сама обнуляется и не могу понять почему. Если например хранить ее в еерrom :
то всё работает нормально.
Код: Выделить всё
unsigned long int distance = 0;С чем может быть связана проблема самообнуления так объявленной переменной? Она просто в процесе работы сама обнуляется и не могу понять почему. Если например хранить ее в еерrom :
Код: Выделить всё
eeprom unsigned long int distance = 0;Я не Сашок!!!
А вы её изменяете где нибудь в программе?sachok писал(а): С чем может быть связана проблема самообнуления так объявленной переменной? Она просто в процесе работы сама обнуляется и не могу понять почему..
Возможно стоит объявить её как static, прочитайте об этом в хелпе компилятора в разделе Variables
static не помогло.
Метод в котором происходит изменение переменной
Метод в котором происходит изменение переменной
Код: Выделить всё
void set_distance (int dist)
{
distance=distance+dist;
sprintf(str, "DIST: %u km",distance);
lcd_gotoxy(0,2);
lcd_putstr(str);
all_distance (dist);
}
set_distance(200); //вызов метода
Я не Сашок!!!
- Реклама
- Сообщения: 23
- Зарегистрирован: Вт мар 23, 2010 01:24:22
Привет, решил помучиться с микроконтроллерами - вот какая беда:
нажимаю кнопку Run the chip programmer и вываливается окошко настройки программатора. Но в нем нет закладки Chip Clock.

вот как это должно выглядить. Программатор stk200 выбран (на деле - 5 проводков).
В чем может быть загвоздка? При попытке зашить он вываливает окошко примерно такого содержания:
нажимаю кнопку Run the chip programmer и вываливается окошко настройки программатора. Но в нем нет закладки Chip Clock.

вот как это должно выглядить. Программатор stk200 выбран (на деле - 5 проводков).
В чем может быть загвоздка? При попытке зашить он вываливает окошко примерно такого содержания:
адрес порта я в XP, честно, не знаю как узнать, AVR вроде целая, тип программатора тоже, Питание - ну насколько я знаю, достаточно просто воткнуть батарейку в схему.Ошибка соединения, проверьте следующие вещи:
_Питание программатора включено
_Тип программатора в настройках выбран верно
_Адрес порта принтера выбран верно
_AVR чип не поврежден
Народ помогите пожалуйста!
Посмотрите правильно я настроил USART по этой спецификации.

Моя настройка
Посмотрите правильно я настроил USART по этой спецификации.

Моя настройка
Код: Выделить всё
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
STM32F4 Discovery + KEIL + Windows 7
не помогло(Lavra писал(а):volatile
- Вложения
-
- source.txt
- исходник
- (5.27 КБ) 392 скачивания
Я не Сашок!!!
Была такая же проблемма. Зайдите в диспетчер устройств. Выберите порты и щёлкните "обновить конфигурацию оборудования". Это глюк винды.Несип писал(а):Привет, решил помучиться с микроконтроллерами - вот какая беда:
нажимаю кнопку Run the chip programmer и вываливается окошко настройки программатора. Но в нем нет закладки Chip Clock.![]()
вот как это должно выглядить. Программатор stk200 выбран (на деле - 5 проводков).
В чем может быть загвоздка? При попытке зашить он вываливает окошко примерно такого содержания:
адрес порта я в XP, честно, не знаю как узнать, AVR вроде целая, тип программатора тоже, Питание - ну насколько я знаю, достаточно просто воткнуть батарейку в схему.Ошибка соединения, проверьте следующие вещи:
_Питание программатора включено
_Тип программатора в настройках выбран верно
_Адрес порта принтера выбран верно
_AVR чип не поврежден
Подскажите, пожалуйста, что сделать чтобы удавалось задержку устанавливать в микросекунды?
Я писал вот так:
while(1)
{
for (i=0;i<=63;i++)
{
if (PIND.2==0)
{
n=n+0,001;
delay_ms(200);
}
if (PIND.3==0)
{
n=n-0,001;
delay_ms(200);
}
if(n<=0)
{
n=0,01;
}
PORTD.7=M;
delay_ms(n);
}
}
Если писать n целое в миллисекундах то всё хорошо работает. Если так как в коде то ничего не работает.
Если писать delay_us(n), то он ругается.
Я писал вот так:
while(1)
{
for (i=0;i<=63;i++)
{
if (PIND.2==0)
{
n=n+0,001;
delay_ms(200);
}
if (PIND.3==0)
{
n=n-0,001;
delay_ms(200);
}
if(n<=0)
{
n=0,01;
}
PORTD.7=M;
delay_ms(n);
}
}
Если писать n целое в миллисекундах то всё хорошо работает. Если так как в коде то ничего не работает.
Если писать delay_us(n), то он ругается.
только что попробовал, компилит без вопросов. как ругается то?
абажаю мой KIA CEED [img]http://www.kolobok.us/smiles/madhouse/to_become_senile.gif[/img]
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
Дело не в ошибке. Всё компилит нормально. он не компилит если ввместо delay_ms(n) поставить delay_us(n), мне нужны задержки в микросекундах.sema писал(а):только что попробовал, компилит без вопросов. как ругается то?
- Сообщения: 326
- Зарегистрирован: Сб сен 06, 2008 12:56:13
Функция задержки по определению предназначена для работы с целыми числами: void delay_ms(unsigned int n); А вы пытаетесь ей подсунуть значение переменной float. По поводу ругани на delay_us, посмотрите частоту тактового генератора. Она должна быть согласована с той задержкой в микросекундах, которую хотите получить. Числа, определяющие задержку тоже должны быть целыми. Еще один момент: если в программе используются прерывания, то до вызова задержки они должны быть запрещены (после окончания разрешены).Александр 071 писал(а):Если писать n целое в миллисекундах то всё хорошо работает. Если так как в коде то ничего не работает. Если писать delay_us(n), то он ругается.
Спасибо. Я это только что понял, кода справку прочитал.
Спасибо, заработало.
Всем привет, не могу понять, как мне несколько интовских значений записать в строку? То есть имеется int a,b,c; соответственно равно 5,2,0. И есть char str; В результате мне нужно str="str=5,2,0";
Пробовал так
не помогло.
Мне важно именно строка а не вывод на экран...
Пробовал так
Код: Выделить всё
str=((char)a+(char)b+(char)c);
lcd_putchar (str);Мне важно именно строка а не вывод на экран...
Corporal писал(а):Всем привет, не могу понять, как мне несколько интовских значений записать в строку? То есть имеется int a,b,c; соответственно равно 5,2,0. И есть char str; В результате мне нужно str="str=5,2,0";
Пробовал такне помогло.Код: Выделить всё
str=((char)a+(char)b+(char)c); lcd_putchar (str);
Мне важно именно строка а не вывод на экран...
Код: Выделить всё
char str[25];
sprintf(str,"str=%d,%d,%d",a,b,c);если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Хорошо, я, наверное, не правильно задал вопрос.
есть:
допустим это все тикает и мне надо ( по нажатии на кнопку) фиксировать время и занести его в память одной строкой. Так у меня должно быть (сколько позволяет память) N значений времени.
ну, а дальше (еще не знаю как) должно определиться есть ли передача по ком порту? если есть то слить все данные.
есть:
Код: Выделить всё
eeprom char str ;
int dsec, //десятые секунды
edsec,//единицы секунды
dmin,// десятки минуты
edmin;// еденицы минуты
ну, а дальше (еще не знаю как) должно определиться есть ли передача по ком порту? если есть то слить все данные.
уважаемый, во-первых, eeprom char str обозначает всего-навсего один разъединственный байт, а вовсе не строку. и напихать туда кучу инфы никак не выйдет.Corporal писал(а):Хорошо, я, наверное, не правильно задал вопрос.
есть:допустим это все тикает и мне надо ( по нажатии на кнопку) фиксировать время и занести его в память одной строкой. Так у меня должно быть (сколько позволяет память) N значений времени.Код: Выделить всё
eeprom char str ; int dsec, //десятые секунды edsec,//единицы секунды dmin,// десятки минуты edmin;// еденицы минуты
ну, а дальше (еще не знаю как) должно определиться есть ли передача по ком порту? если есть то слить все данные.
во вторых, из ваших слов следует, что речь идет не о строке, а массиве строк - это так же меняет все дело, хоть и непринципиально.
в третьих, хранить строки в eeprom может оказаться весьма невыгодно: ее ресурс весьма ограничен и пишется туда довольно долго.
так что обдумайте сперва все, а потом задавайте конкретные вопросы.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


