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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

fan2005 писал(а)::" SBIC instruction: bit in I/O=X (unknown)". Я так понимаю что жалуется на то что я в программе часто использую PIN_X.n....


Часть кода для начала киньте, там посмотрим. Я на датчике холла делаю опрос пина в каждом цикле программы, и ничё, не ругается... Может в одном месте значение Х ошиблись, или саму команду описываете не правильно...
Реклама
fan2005
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Вт авг 26, 2008 00:38:28
Откуда: г. Бобруйск

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

Сообщение fan2005 »

Часть кода для начала киньте, там посмотрим

void auto_1 (void)
{
while (PIND.4==0&PINB.3==1)
{
PORTB.2=0;
PORTB.1=1;
delay_ms(150);
if (PIND.6==0) { //сработка датчика №1
PORTB.2=0; //Выкл всё
PORTB.1=0;
};
}

if (PIND.4==1&PINB.3==1) //Кнопки не нажаты, то стоим на месте
{
PORTB.2=0; //Выкл всё
PORTB.1=0;
}

if (PIND.4==1&PINB.3==0) //нажата кнопка вверх
{
zero_t();
}

if (PIND.1==1) //проверка галетника, выход
{
zero_t ();
return;
}
}
все мы учились - чему-нибудь и как-нибудь
Реклама
Аватара пользователя
Panda_Y2K
Грызет канифоль
Сообщения: 258
Зарегистрирован: Пт сен 23, 2011 06:44:41
Откуда: ЮФО
Контактная информация:

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

Сообщение Panda_Y2K »

В условиях if и while напишите вместо
while (PIND.4==0&PINB.3==1)

while (!PIND.4 & PINB.3)
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
fan2005
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Вт авг 26, 2008 00:38:28
Откуда: г. Бобруйск

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

Сообщение fan2005 »

Спасибо, Panda_Y2K!
Сделал все как ты написал, заработало! Попутно пробовал использование битовых масок, тоже помогает, но более тяжелее. Я так понял что не стоит использовать прямое сравнение (==) бита в КодеВизион, а лучше использовать конструкции проверки бита на 0 или 1!?
все мы учились - чему-нибудь и как-нибудь
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Panda_Y2K писал(а):while (!PIND.4 & PINB.3)

А я всегда скобки ставлю, дабы уже ни раз возникали проблемы с приоритетом при использовании переменных (почему не знаю, но с числами багов не замечал). Скобки еока ни раз не подводили :)
Реклама
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

наверное, имелось ввиду логическое И, а не битовое:
&&
Реклама
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

Ребята, может кто поможет чем сможет?!
Уже месяца два борюсь с 74HC595. вот прихожу к выводу что нужно больше ног и достаю из пакетика эту микросхему.
к Q0-Q7 подключаю диоды(через резистор) к земле.
далее питалку(Vcc на +), землю на землю.
Ds вешаю на PB0 (в коде DataPin)
OE на землю
ST_CP на PB1 (в коде RunPin)
SH_CP на PB2 (в коде ClockPin)
MR на +
Q7' весит в воздухе.

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

#include <tiny2313.h>
#include <delay.h>
#define DataPin PORTB.0
#define ClockPin PORTB.2
#define RunPin PORTB.1
#define wait delay_ms(1)
void main(void) {
PORTB=0x00;
DDRB=0x00;
while (1) {
wait; RunPin = 1; wait; RunPin = 0; wait;
delay_ms(300);
DataPin = 0;
wait; ClockPin = 1; wait; ClockPin = 0; wait;
DataPin = 1;
wait; ClockPin = 1; wait; ClockPin = 0; wait;
DataPin = 0;
wait; ClockPin = 1; wait; ClockPin = 0; wait;
DataPin = 1;
wait; ClockPin = 1; wait; ClockPin = 0; wait;
DataPin = 0;
wait; ClockPin = 1; wait; ClockPin = 0; wait;
DataPin = 1;
wait; ClockPin = 1; wait; ClockPin = 0; wait;
DataPin = 0;
wait; ClockPin = 1; wait; ClockPin = 0; wait;
DataPin = 1;
wait; ClockPin = 1; wait; ClockPin = 0; wait;
wait; RunPin = 1; wait; RunPin = 0; wait;
}
}

Далее загоняю код в контроллер, и ничего не работает.
иногда загораются рандомные диоды, но чаще всего вообще ничего не происходит, а если дёрнуть проводки то загорятся все.
Пробовал вешать 0.1мкф на RunPin но ничего не дало.
До этого пытался делать на кнопках(вместо контролера) -ничего не вышло. :(
Требуется срочно увеличить число выводов на контроллере.
З.Ы. Облазил кучу форумов конечно. то ли я такой тупой то ли микросхемы палёные но не пашет.
Я так понял что когда состояние ноги часов меняется с 0 на 1 она считывает состояние даты, так делаешь 8 раз и потом переводишь RunPin в 1?
Если возникнут вопросы - посмотрите на мой аватар.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Лол. Это вся программа?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

Ну да...
Я думал больше и не надо чтоб "шашечки" вывести.
Если возникнут вопросы - посмотрите на мой аватар.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Во-первых, RunPin, DataPin и ClockPin хорошо бы настроить на вывод. А это совсем не

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

DDRB=0x00;

Во-вторых, что такое wait?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

Вот это фейл так фейл:) а wait это delay_ms(1)(cм #define wait delay_ms(1))
Если возникнут вопросы - посмотрите на мой аватар.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

0867532, ноги надо настроить на выход. а у вас все ноги работают в режиме входа ( DDRB = 0x00 )
Ставим плюсы: )
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

да, я ж вроде ставил 0xFF
ну хз, почему стояло 0x00 Но теперь всё работает!!!
Доволен как слон:)
Если возникнут вопросы - посмотрите на мой аватар.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

и это реально два месяца заняло????
Ставим плюсы: )
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

Ну с контроллером только сегодня попробовал.
А когда кнопки ставил не вешал MR на +(не знал.)
И пытался раз в 2 недели.
Если возникнут вопросы - посмотрите на мой аватар.
Импульс
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Пн ноя 29, 2010 05:52:05
Откуда: Иркутск

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

Сообщение Импульс »

0867532 писал(а):а что ты хотел? ты на кнопки ничего не повесил.
и.т.д.

Во первых это не пограмма ,а кусок кода)черновик(...

Спойлер#include <tiny2313.h>
#include <delay.h>
unsigned char flag = 0;void main(void)
void main(void)
{
PORTA=0x07;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTD=0x3F;
DDRD=0x40;

Программу переделывать пришлось полностью,глядя на первоначальную версию...
Как посоветовал
urry

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

Код:
#define F_IN 8000000
#define F_OUT 1000
#define TM1_C 65536 - (F_IN/F_OUT)

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1+=TM1_C;
// выставляем флаг, что прошла миллисекунда

Я поступил так-же
unalex писал(а):эта программа некритична



И поэтому завёл таймер TIM0
urry писал(а):Тема - многозадачные процессы - ему еще понадобится.

Полностью согласен!
vadd
Открыл глаза
Сообщения: 75
Зарегистрирован: Сб апр 19, 2008 18:17:46
Откуда: г. Курск

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

Сообщение vadd »

Здраствуйте, подскажите пожалуйста как правильно записать условие:
Если PORTB.O=1 (кнопка нажата), то PORTC.0=1
если кнопка выкл, то PORTC.0=0
Если PORTB.O=1 в течение 0,3 сек(кнопку нажали и отпустили), то PORTС.O=1 в течение 5 сек
Если на PORTD.O=1, то PORTC.0=0
Спасибо.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

как правильно записать условие

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

if(...){
  ....
}

Если интересуют кнопки, в разделе "Периферия" есть тема по ним, почитайте, там есть примеры.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

vadd писал(а):PORTB.O=1 (кнопка нажата), то PORTC.0=1
если кнопка выкл, то PORTC.0=0

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

PORTC.0= PINB.0;

vadd писал(а):Если PORTB.O=1 в течение 0,3 сек(кнопку нажали и отпустили), то PORTС.O=1 в течение 5 сек

Использовать отслеживание по времени.
vadd писал(а):Если на PORTD.O=1, то PORTC.0=0

А как это согласуется с первым условием?
Docendo discimus
vadd
Открыл глаза
Сообщения: 75
Зарегистрирован: Сб апр 19, 2008 18:17:46
Откуда: г. Курск

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

Сообщение vadd »

Я хотел сделать так, чтобы при появлении 1 на портуD.0 - порт С.0 оключался , в каком бы состоянии не была кнопка вкл или выкл.

А можно ссылку на раздел "Периферия"
Ответить

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