Всем привет.... У меня тут есть небольшая проблема. Хочу перейти с CV на ATMEL studio7, естественно траблы. Код который работал в CV, не работает в Atmel studio. Вроде подкорректировал, настроил. Запустил, но что-то не алё =( Подскажите, где я не доглядел. Там в коде со студией ошибки в скобочках, я поправил, но что-то все равно не работает.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
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]
заставляете вы старика за вас думать
((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))
соответственно, нужно подправить и остальные логические выражения
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
ARV писал(а):соответственно, нужно подправить и остальные логические выражения
Спасибо большое, попробую. Вот вы мне скажите, а макросы как в Cv похоже использовать нельзя? Как-то например так: #define out _BV(PINB1)
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
проверять код досконально не буду, уж простите за лень.
но что-то мне подсказывает, что у вас с алгоритмом проблемы и/или с его реализацией - слишком много подозрительных повторов кода в разных местах. то есть я хочу намекнуть, что не работает не из-за ошибок в синтаксисе, а из-за ошибок в логике самого алгоритма.
ну и главное: не забывайте, что все переменные, которые используются в главном цикле, а изменяются в обработчике прерываний, должны быть обязательно volatile - это вам не CV.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
ARV писал(а):не забывайте, что все переменные, которые используются в главном цикле, а изменяются в обработчике прерываний, должны быть обязательно volatile - это вам не CV.
Я это делаю и в CV. Просто мне интересно, в CV алгоритм рабочий. В протеусе и на макетке работает. А тут я пока просто не разберусь, может где что не так про инициализировал. После CV Atmel studio прям как темный лес. Нахрапом не получается ) Логика ну совсем простая.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
простая логика, говорите? ну, расскажите мне тогда:
1. зачем в обработчике прерываний вы ДВАЖДЫ обнуляете TCNT? один раз в начале функции, другой раз в конце при каком-то условии.
2. if ((PINB &_BV(PINB1))==0){ tic_tac++;} else tic_tac = 0; это вы как бы считаете время присутствия низкого уровня на пине - верно? но тогда в главном цикле вы СНОВА проверяете уровень на пине? ведь у вас tic_tac либо равно нулю, либо растет - строго в соответствии с уровнем на пине! хватило бы просто проверки tic_tac.
3. если уровень на пине PB1 низкий очень долго, то tic_tac перекрутится, т.е. после того, как побудет больше 90 снова станет меньше и будет расти. у вас в коде этот момент никак не отрабатывается. может, так и надо, мне неизвестно...
это несколько вопросов с ходу, но можно и дальше задавать.
если у вас "простая логика", которая приводит к такому отнюдь не простому коду - я удивлен, что он работает. честно - удивлен. и мои подозрения все равно остаются в силе. наводите в коде порядок, заодно с алгоритмом разберитесь. и все заработает.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Jman писал(а):Хочу перейти с CV на ATMEL studio7, естественно - траблы.
Устами ребенка глаголет Истина, мля! Или, как говаривал Шахрияр, эти слова должны быть записаны алмазными иглами в уголках (ваших) глаз!
Поговорить любой мастак, я задал конкретные вопросы и выложил исходники.
Надо изначально было не отвлекаться на CV...
Надо было изначально не отвлекаться на мой пост. Я задал вопрос, ветка форума как-бы предполагает. Надо было, или не надо было, поздно пить боржоми.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
Jman писал(а):Надо было, или не надо было, поздно пить боржоми.
О, как Вы заблуждаетесь! Этот "боржоми" - тухлый изначально и, поскольку испортиться еще больше он не может, он вечен! Жертв ЦВ так много и они им так отравлены, что любой положительный пример хорош уже хотя бы тем, что он высказан. Так что - спасибо, что не промолчали.
Pnjom-Penb писал(а): Так что - спасибо, что не промолчали.
1. Вы знаете, мне с пеной у рта доказывали люди обратное =);
2. FlowCode - некоторые даже деньги зарабатывают, отравляя себя рисованием;
3. О! Arduino!;
ATMEL Studio? А как же IAR Workbench?
Лучше помогите, дайте, как вы говорите "отравленному", противоядие
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]