AVR studio в вопросах и ответах
Re: AVR studio в вопросах и ответах
И не только RAM, но и все остальное
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: AVR studio в вопросах и ответах
Всем привет.... У меня тут есть небольшая проблема. Хочу перейти с CV на ATMEL studio7, естественно траблы. Код который работал в CV, не работает в Atmel studio. Вроде подкорректировал, настроил. Запустил, но что-то не алё =( Подскажите, где я не доглядел. Там в коде со студией ошибки в скобочках, я поправил, но что-то все равно не работает.
Код: Выделить всё
while ((PINB &(1<<PINB1))==0 && (tic_tac>=90)) {
PORTB &= ~(1<<3);}
}
else {
adc_read (); //Функция чтения значения из АЦП (0-255);
if ((on>=90) && ((PINB &(1<<PINB0))==0) && ((PINB &(1<<PINB1))==1) && (outdoor_sensor>=sensivity)) {
PORTB |= (1<<3);} // Порт включен;- Вложения
-
- Titty13.rar
- (16.92 КБ) 123 скачивания
-
- PIR_Garage09022016.rar
- (23.77 КБ) 157 скачиваний
-
- PIR_Garage09022016.rar
- (23.77 КБ) 130 скачиваний
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
вот здесь while ((PINB &(1<<PINB1))==0 && (tic_tac>=90)) скобочку переставьте вот так: while ((PINB &(1<<PINB1)==0) && (tic_tac>=90))
да, ниже та же самая песня - скобочка в коде не там стоит - в самом нижнем if в самом правом выражении с ==
да, ниже та же самая песня - скобочка в коде не там стоит - в самом нижнем if в самом правом выражении с ==
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: AVR studio в вопросах и ответах
Кликните в одном из окон памяти, допустим Program.
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: AVR studio в вопросах и ответах
ARV писал(а):вот здесь while ((PINB &(1<<PINB1))==0 && (tic_tac>=90)) скобочку переставьте вот так: while ((PINB &(1<<PINB1)==0) && (tic_tac>=90))
да, ниже та же самая песня - скобочка в коде не там стоит - в самом нижнем if в самом правом выражении с ==
Ругается, я изначально так и сделал. (Warning suggest parentheses around comparison in operand of '&' [-Wparentheses])
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
заставляете вы старика за вас думатьJman писал(а):Ругается
((PINB &(1<<PINB1))==0 && (tic_tac>=90)) - я так понимаю, вы хотите, чтобы одновременно пин стал равным 0 и переменная была больше 90, верно?
так вот, условие "пин равен нулю" записывается так !(PINB & _BV(PB1))
если уж хотите явно написать, то так ((PINB & _BV(PB1)) == 0)
в стандартных библиотеках AVR-GCC есть и макрос для удобства bit_is_clear(sfr, bit), то есть можно записать еще "понятнее" bit_is_clear(PINB, PB1)
у вас проблема в том, что вы не учитываете приоритет операций: логические операции, как правило, имеют меньший приоритет по сравнению с другими.
таким образом конкретное выражение должно быть правильно записано одним из следующих способов:
while (((PINB & _BV(PINB1))==0) && (tic_tac>=90))
while (!(PINB & _BV(PINB1)) && (tic_tac>=90))
while (bit_is_clear(PINB, PINB1) && (tic_tac >= 90))
соответственно, нужно подправить и остальные логические выражения
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: AVR studio в вопросах и ответах
ARV писал(а):соответственно, нужно подправить и остальные логические выражения
Спасибо большое, попробую. Вот вы мне скажите, а макросы как в Cv похоже использовать нельзя? Как-то например так: #define out _BV(PINB1)
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
макросы? очень даже можно использовать. только их делать надо корректно.Jman писал(а):а макросы как в Cv похоже использовать нельзя?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: AVR studio в вопросах и ответах
ARV писал(а):макросы? очень даже можно использовать. только их делать надо корректно.Jman писал(а):а макросы как в Cv похоже использовать нельзя?
Если вас не затруднит, проверьте пожалуйста код (объем кстати получается больше чем в CV);
Код: Выделить всё
while (1)
{
if ((PINB &_BV(PINB1)) ==0) { // Если кнопка нажата и на входе PB1=0;
//_delay_ms(100); // "антидребезг" =);
PORTB |=(1<<3); // Приоритет включения по клавише, пока нажат, не реагируем на сенсоры;
while (((PINB & _BV(PINB1))==0) && (tic_tac>=90)) {
PORTB &= ~(1<<3);}
}
else {
adc_read (); //Функция чтения значения из АЦП (0-255);
if ((on>=90) && ((PINB &_BV(PINB0))==0) && ((PINB &_BV(PINB1))==1) && (outdoor_sensor>=sensivity)) {
PORTB |= (1<<3);} // Порт включен;
else{
PORTB &= ~(1<<3); } // Порт выключен;
}
}На кнопку реагирует, но промаргивает и не выключает. По сенсору ждет задержку 5 сек и промаргивает (светодиод не горит).
Прерывание:
Код: Выделить всё
ISR (TIM0_COMPA_vect)
{
TCNT0=0x00;
if ((PINB &_BV(PINB1))==0){
tic_tac++;}
else tic_tac=0;
if (((PINB &_BV(PINB0))==0) && ((PINB &_BV(PINB1))==1) && (outdoor_sensor>=sensivity)){ // Задержка на включение, антидребезг ПИР дачика;
on++;
}
else {
on=0;
TCNT0=0;
}
}
Частота 128кГц, прескаллер 256.
Код: Выделить всё
TIMSK0=0x06;
TIMSK0 |= 0<<OCIE0B;
TIMSK0 |= 1<<OCIE0A;
TIMSK0 |= 0<<TOIE0;
СLKPR |= 1<<CLKPCE; // Предделитель;[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
проверять код досконально не буду, уж простите за лень.
но что-то мне подсказывает, что у вас с алгоритмом проблемы и/или с его реализацией - слишком много подозрительных повторов кода в разных местах. то есть я хочу намекнуть, что не работает не из-за ошибок в синтаксисе, а из-за ошибок в логике самого алгоритма.
ну и главное: не забывайте, что все переменные, которые используются в главном цикле, а изменяются в обработчике прерываний, должны быть обязательно volatile - это вам не CV.
но что-то мне подсказывает, что у вас с алгоритмом проблемы и/или с его реализацией - слишком много подозрительных повторов кода в разных местах. то есть я хочу намекнуть, что не работает не из-за ошибок в синтаксисе, а из-за ошибок в логике самого алгоритма.
ну и главное: не забывайте, что все переменные, которые используются в главном цикле, а изменяются в обработчике прерываний, должны быть обязательно volatile - это вам не CV.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: AVR studio в вопросах и ответах
ARV писал(а):не забывайте, что все переменные, которые используются в главном цикле, а изменяются в обработчике прерываний, должны быть обязательно volatile - это вам не CV.
Я это делаю и в CV. Просто мне интересно, в CV алгоритм рабочий. В протеусе и на макетке работает. А тут я пока просто не разберусь, может где что не так про инициализировал. После CV Atmel studio прям как темный лес. Нахрапом не получается ) Логика ну совсем простая.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
простая логика, говорите? ну, расскажите мне тогда:
1. зачем в обработчике прерываний вы ДВАЖДЫ обнуляете TCNT? один раз в начале функции, другой раз в конце при каком-то условии.
2. if ((PINB &_BV(PINB1))==0){ tic_tac++;} else tic_tac = 0; это вы как бы считаете время присутствия низкого уровня на пине - верно? но тогда в главном цикле вы СНОВА проверяете уровень на пине? ведь у вас tic_tac либо равно нулю, либо растет - строго в соответствии с уровнем на пине! хватило бы просто проверки tic_tac.
3. если уровень на пине PB1 низкий очень долго, то tic_tac перекрутится, т.е. после того, как побудет больше 90 снова станет меньше и будет расти. у вас в коде этот момент никак не отрабатывается. может, так и надо, мне неизвестно...
это несколько вопросов с ходу, но можно и дальше задавать.
если у вас "простая логика", которая приводит к такому отнюдь не простому коду - я удивлен, что он работает. честно - удивлен. и мои подозрения все равно остаются в силе. наводите в коде порядок, заодно с алгоритмом разберитесь. и все заработает.
1. зачем в обработчике прерываний вы ДВАЖДЫ обнуляете TCNT? один раз в начале функции, другой раз в конце при каком-то условии.
2. if ((PINB &_BV(PINB1))==0){ tic_tac++;} else tic_tac = 0; это вы как бы считаете время присутствия низкого уровня на пине - верно? но тогда в главном цикле вы СНОВА проверяете уровень на пине? ведь у вас tic_tac либо равно нулю, либо растет - строго в соответствии с уровнем на пине! хватило бы просто проверки tic_tac.
3. если уровень на пине PB1 низкий очень долго, то tic_tac перекрутится, т.е. после того, как побудет больше 90 снова станет меньше и будет расти. у вас в коде этот момент никак не отрабатывается. может, так и надо, мне неизвестно...
это несколько вопросов с ходу, но можно и дальше задавать.
если у вас "простая логика", которая приводит к такому отнюдь не простому коду - я удивлен, что он работает. честно - удивлен. и мои подозрения все равно остаются в силе. наводите в коде порядок, заодно с алгоритмом разберитесь. и все заработает.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: AVR studio в вопросах и ответах
Какой чип вы выбрали в студии? У некоторых самых мелких нет ОЗУ, например Tiny11, Tiny15.
Копейки бывают важны. В старых версиях могут содержаться ошибки в базе данных устройств и симуляторов.
креазот писал(а):авр студия 4скопейками
Копейки бывают важны. В старых версиях могут содержаться ошибки в базе данных устройств и симуляторов.
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: AVR studio в вопросах и ответах
Устами ребенка глаголет Истина, мля!Jman писал(а):Хочу перейти с CV на ATMEL studio7, естественно - траблы.
Или, как говаривал Шахрияр, эти слова должны быть записаны алмазными иглами в уголках (ваших) глаз!-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: AVR studio в вопросах и ответах
Надо изначально было не отвлекаться на CV...
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: AVR studio в вопросах и ответах
Pnjom-Penb писал(а):Устами ребенка глаголет Истина, мля!Jman писал(а):Хочу перейти с CV на ATMEL studio7, естественно - траблы.Или, как говаривал Шахрияр, эти слова должны быть записаны алмазными иглами в уголках (ваших) глаз!
Поговорить любой мастак, я задал конкретные вопросы и выложил исходники.
Надо изначально было не отвлекаться на CV...
Надо было изначально не отвлекаться на мой пост. Я задал вопрос, ветка форума как-бы предполагает. Надо было, или не надо было, поздно пить боржоми.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: AVR studio в вопросах и ответах
О, как Вы заблуждаетесь!Jman писал(а):Надо было, или не надо было, поздно пить боржоми.
- Jman
- Мучитель микросхем
- Сообщения: 414
- Зарегистрирован: Ср янв 26, 2011 13:43:30
- Откуда: С того берега моря
- Контактная информация:
Re: AVR studio в вопросах и ответах
Pnjom-Penb писал(а): Так что - спасибо, что не промолчали.
1. Вы знаете, мне с пеной у рта доказывали люди обратное =);
2. FlowCode - некоторые даже деньги зарабатывают, отравляя себя рисованием;
3. О! Arduino!;
ATMEL Studio? А как же IAR Workbench?
Лучше помогите, дайте, как вы говорите "отравленному", противоядие
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]