Страница 277 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср сен 25, 2013 20:08:23
Аlex
vitalik_1984 писал(а):Ну даже если из байта сдвигом вытягивать 24 бита все равно должно получиться.
Интересно, это как ? Что должно получится, вытянуться 24 бита ?
То, что выведется всего один байт (кстати, остальные не обязательно будут нули), всё равно это неправильно. Я лишь указал человеку на грубую ошибку, естественно не решающую его проблему с выводом белеберды.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср сен 25, 2013 20:47:42
vitalik_1984
Ну попробуйте что получится если сдвинуть байт на 24. тупо ноли одни и будут. Насколько я знаю такое описание операции сдвига.
Код: Выделить всё
/*******************************************
Подпрограмма подачи CLK
********************************************/
void f_Clk(void) {
PORT_OUT|=_BV(Clk_pin);
PORT_OUT&=~_BV(Clk_pin);
}
/*******************************************
Подпрограмма подачи STROBE
********************************************/
void f_strobe(void) {
PORT_OUT|=_BV(Strobe_pin);
PORT_OUT&=~_BV(Strobe_pin);
}
/*******************************************
Программа ввода в регистр нового значения
********************************************/
void f_shift_reg(unsigned char gear) {
for (char i=0;i<=7;i++){
(gear&0x01)? PORT_OUT|=_BV(D_pin): PORT_OUT&=~_BV(D_pin);
f_Clk();
gear>>=1;
};//for
f_strobe();
}//f_shift_reg
Вот работающий пример для вывода байта
При выводе последовательно трех байт получится то, что нужно
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср сен 25, 2013 20:59:34
Аlex
Ну попробуйте что получится если сдвинуть байт на 24
Виталий, Вы мне предлагаете заняться глупостью.

Зачем мне это нужно ? Любой результат этого опыта мне, в дальнейшем, не понадобиться. Нули там будут или единички - мне "до лампочки"

Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср сен 25, 2013 21:14:59
vitalik_1984
Аlex писал(а):Виталий, Вы мне предлагаете заняться глупостью. Зачем мне это нужно ?
Чтобы потом не задавать таких вопросов
Аlex писал(а):Интересно, это как ? Что должно получится, вытянуться 24 бита ?
24 бита не вытянется, будет один байт, а в случае когда результат выводится на регистры через ((data>>i)&1) будет байт и 16 нулей
Однозначно какая то неправильная последовательность, попробовал в протеусе бегает, даже если восемь бит вытаскивать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср сен 25, 2013 21:16:47
a_skr
да хоть миллион раз сдвигать usigned char - после 8 сдвигов будут нули. вывод на 74595 не работает?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср сен 25, 2013 21:40:06
Аlex
vitalik_1984 писал(а):Чтобы потом не задавать таких вопросов

Мой вопрос не касался остальных 16-ти бит, мне пофиг что там выведется, ещё раз говорю. Вопрос был касательно фразы "должно получиться". Отвечаю - нихрена не должно получиться, т.к. из байта не вдвинешь 24 бита, на что я и указал вопрошающему. Это грубая ошибка в программе и, повторюсь, не касающаяся его проблем с абракадаброй. Я же не говорил, что не работает из-за этого. Для решения проблемы нужен весь код и схема.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср сен 25, 2013 22:08:28
vitalik_1984
Я вкурил в чем проблема

просто нужно строб то не поднимать в начале цикла
Код: Выделить всё
void send_byte_74595 (unsigned char data){
unsigned char i;
for (i = 0; i <24; i++) {
if ( (temp=data>>i)&1) MOSI = 1;
else MOSI = 0;
#asm("nop")
SCK = 1;
#asm("nop")
SCK = 0;
#asm("nop")
}
ss = 1;
ss = 0;
}
И получается как раз только один байт в последнем регистре. Остальное обрезается типом.
Код: Выделить всё
void send_byte_74595 (unsigned long int data)// так выводится все число
По мне так лучше побайтно выводить из массива.
Черновик схемы прилагается
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт сен 26, 2013 18:29:57
Сериг
Спасибо за проведенную дискуссию!

Попробую сегодня доразобраться

Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс сен 29, 2013 19:04:33
eduardo
Здравствуйте. У меня такая беда,весь мозг вынес.
Написал пограмму термометра в CV AVR(в программировании далеко не мастер).
Термометр на 2х датчикахDS18B20,2х индикаторах 7сегм. Контроллер мега 16. Т.е. температура считывается и
выводится с каждого датчика на свой индикатор. Считываться-то считывается,но при этом
переключение катодов какое-то заторможенное.Как-будто прога слишком часто опрашивает шину.
Подскажите,кто может,как всё исправить???
Или подобное вообще нереально сделать???
Файлы прилагаются. Спасибо.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс сен 29, 2013 19:09:12
Аlex
Потому, что ds18b20_temperature вешает программу до окончания преобразования. Как исправить, думаю, теперь догадаетесь. Впрочем, вопрос уже множество раз обсуждался на форуме, в том числе в теме по ds1820.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 30, 2013 18:13:23
eduardo
Т.е. это нужно время преобразования увеличить... Или уменьшить? Я правильно понял? Только вот я не знаю как...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 30, 2013 18:42:54
ploop
Преобразовывает датчик, и его время вы никак не увеличите и не уменьшите (точнее можете, с потерей точности, 18B20 конфигурируется), но вот пока он закончит - ждать совсем необязательно, можно заниматься своими делами.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 02, 2013 13:26:39
Marchello
Уважаемые коты, подскажите как вот эти проверки
if (PINA.1==0)
{
delay_ms(50);
N=1;
}
if (PINA.2==0)
{
delay_ms(50);
N=2;
}
if (PINA.3==0)
{
delay_ms(50);
M=1;
}
загнать в switch? Т.е. как задать параметры switch чтобы по нажатию той или иной кнопки срабатывал определенный case
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 02, 2013 13:41:57
pyzhman
Код: Выделить всё
switch(~PINA & 0x0E)
{
case 0x02:
delay_ms(50);
N= 1;
break;
case 0x04:
delay_ms(50);
N= 2;
break;
case 0x08:
delay_ms(50);
M= 1;
break;
}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср окт 02, 2013 13:54:29
Marchello
Спасибо Дружище, буду пробовать, а то вчера мозг себе вынес экспериментами! Как приятно все таки с вами котами работать и осваивать новые навыки!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 03, 2013 21:30:42
eduardo
Аlex писал(а):Потому, что ds18b20_temperature вешает программу до окончания преобразования. Как исправить, думаю, теперь догадаетесь. Впрочем, вопрос уже множество раз обсуждался на форуме, в том числе в теме по ds1820.
Честно говоря,даже не представляю. Я попробовал сделать так,чтобы запрет на прерывания выдавался между переключениями разрядов.
Переключение разрядов стало нормальным,без тормозов,но выводится ерунда какая-то. Датчики как-то коряво читаются.(Если они вообще читаются...)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 03, 2013 21:45:04
vitalik_1984
Спасибо Дружище, буду пробовать, а то вчера мозг себе вынес экспериментами
Вообще это называется опрос кнопок и есть специальная тема для этого.
Можно еще так. простая функция антидребезг
Спойлер
Код: Выделить всё
temp= (~PINA & 0x0E);
if (temp){
delay_ms(50);
if (temp== (~PINA & 0x0E)
{
switch(temp)
{
case 0x02:
N= 1;break;
case 0x04:
N= 2;break;
case 0x08:
M= 1;break;
}
}
}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 03, 2013 23:40:34
Аlex
eduardo писал(а):Честно говоря,даже не представляю.
Всё просто - изучаете 1-Wire, потом читаете даташит на датчик, выкидываете из головы все библиотечные функции и пишете свои, которые будут работать так, как Вам нужно.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 07, 2013 10:31:01
Greymand
Здравствуйте уважаемые!
Сильно не пинайте,новичек я.
Есть,вообщем,динамическая индикация.Три разряда и точка.
Кода под рукой нет,но вообщем,логика такая:
Прерывание таймера;
Гасим все;
i++;
swith(i)
case 1: включаем первый индикатор;выводим циферку1;
case 2: включаем второй;выводим циферку2;
case 3: включаем третий,выводим циферку3;i=0;зажигаем точку;
Так вот,как сделать чтобы цифра мигала с периодом 0,5-1 сек?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 07, 2013 13:32:59
Marchello
И у меня похожий вопрос! Вывожу на LCD значение текущего времени, как сделать так чтобы при корректировке времени мигал курсор (точнее подчеркивалось бы время)?