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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

vitalik_1984 писал(а):Ну даже если из байта сдвигом вытягивать 24 бита все равно должно получиться.
Интересно, это как ? Что должно получится, вытянуться 24 бита ? :)
То, что выведется всего один байт (кстати, остальные не обязательно будут нули), всё равно это неправильно. Я лишь указал человеку на грубую ошибку, естественно не решающую его проблему с выводом белеберды.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение 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   

Вот работающий пример для вывода байта
При выводе последовательно трех байт получится то, что нужно :)

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

for (n=0;n<3;n++){
f_shift_reg(gears[n])); 
Вложения
_shift.rar
(15.93 КБ) 145 скачиваний
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Ну попробуйте что получится если сдвинуть байт на 24
Виталий, Вы мне предлагаете заняться глупостью. :) Зачем мне это нужно ? Любой результат этого опыта мне, в дальнейшем, не понадобиться. Нули там будут или единички - мне "до лампочки" :)
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Аlex писал(а):Виталий, Вы мне предлагаете заняться глупостью. Зачем мне это нужно ?

Чтобы потом не задавать таких вопросов :)))
Аlex писал(а):Интересно, это как ? Что должно получится, вытянуться 24 бита ?

24 бита не вытянется, будет один байт, а в случае когда результат выводится на регистры через ((data>>i)&1) будет байт и 16 нулей

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

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

Сообщение a_skr »

да хоть миллион раз сдвигать usigned char - после 8 сдвигов будут нули. вывод на 74595 не работает?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

vitalik_1984 писал(а):Чтобы потом не задавать таких вопросов :)))
Мой вопрос не касался остальных 16-ти бит, мне пофиг что там выведется, ещё раз говорю. Вопрос был касательно фразы "должно получиться". Отвечаю - нихрена не должно получиться, т.к. из байта не вдвинешь 24 бита, на что я и указал вопрошающему. Это грубая ошибка в программе и, повторюсь, не касающаяся его проблем с абракадаброй. Я же не говорил, что не работает из-за этого. Для решения проблемы нужен весь код и схема.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Я вкурил в чем проблема :) просто нужно строб то не поднимать в начале цикла :))

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

void send_byte_74595 (unsigned char data){ 
unsigned char i
;
 for (= 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)// так выводится все число      


По мне так лучше побайтно выводить из массива.

Черновик схемы прилагается
Вложения
74hc595.rar
(38.13 КБ) 147 скачиваний
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

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

Сообщение Сериг »

Спасибо за проведенную дискуссию! :)))
Попробую сегодня доразобраться :))
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Здравствуйте. У меня такая беда,весь мозг вынес.
Написал пограмму термометра в CV AVR(в программировании далеко не мастер).
Термометр на 2х датчикахDS18B20,2х индикаторах 7сегм. Контроллер мега 16. Т.е. температура считывается и
выводится с каждого датчика на свой индикатор. Считываться-то считывается,но при этом
переключение катодов какое-то заторможенное.Как-будто прога слишком часто опрашивает шину.
Подскажите,кто может,как всё исправить???
Или подобное вообще нереально сделать???
Файлы прилагаются. Спасибо.
Вложения
термометр.rar
(98.85 КБ) 136 скачиваний
Последний раз редактировалось eduardo Пн сен 30, 2013 18:16:38, всего редактировалось 2 раза.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Потому, что ds18b20_temperature вешает программу до окончания преобразования. Как исправить, думаю, теперь догадаетесь. Впрочем, вопрос уже множество раз обсуждался на форуме, в том числе в теме по ds1820.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Т.е. это нужно время преобразования увеличить... Или уменьшить? Я правильно понял? Только вот я не знаю как...
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Преобразовывает датчик, и его время вы никак не увеличите и не уменьшите (точнее можете, с потерей точности, 18B20 конфигурируется), но вот пока он закончит - ждать совсем необязательно, можно заниматься своими делами.
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

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

Сообщение 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
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение 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;
   }
Docendo discimus
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

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

Сообщение Marchello »

Спасибо Дружище, буду пробовать, а то вчера мозг себе вынес экспериментами! Как приятно все таки с вами котами работать и осваивать новые навыки!
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

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

Сообщение eduardo »

Аlex писал(а):Потому, что ds18b20_temperature вешает программу до окончания преобразования. Как исправить, думаю, теперь догадаетесь. Впрочем, вопрос уже множество раз обсуждался на форуме, в том числе в теме по ds1820.

Честно говоря,даже не представляю. Я попробовал сделать так,чтобы запрет на прерывания выдавался между переключениями разрядов.
Переключение разрядов стало нормальным,без тормозов,но выводится ерунда какая-то. Датчики как-то коряво читаются.(Если они вообще читаются...)
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение 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; 
                    
} 
          
}
}
 
Последний раз редактировалось vitalik_1984 Пт окт 04, 2013 16:15:00, всего редактировалось 1 раз.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

eduardo писал(а):Честно говоря,даже не представляю.
Всё просто - изучаете 1-Wire, потом читаете даташит на датчик, выкидываете из головы все библиотечные функции и пишете свои, которые будут работать так, как Вам нужно.
Greymand
Родился
Сообщения: 5
Зарегистрирован: Пн окт 07, 2013 09:20:53

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

Сообщение Greymand »

Здравствуйте уважаемые!
Сильно не пинайте,новичек я.
Есть,вообщем,динамическая индикация.Три разряда и точка.
Кода под рукой нет,но вообщем,логика такая:
Прерывание таймера;
Гасим все;
i++;
swith(i)
case 1: включаем первый индикатор;выводим циферку1;
case 2: включаем второй;выводим циферку2;
case 3: включаем третий,выводим циферку3;i=0;зажигаем точку;

Так вот,как сделать чтобы цифра мигала с периодом 0,5-1 сек?
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

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

Сообщение Marchello »

И у меня похожий вопрос! Вывожу на LCD значение текущего времени, как сделать так чтобы при корректировке времени мигал курсор (точнее подчеркивалось бы время)?
Ответить

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