Например TDA7294

Форум РадиоКот • Просмотр темы - Изменение кода для счетчика
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн авг 18, 2025 02:10:38

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 44 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 12:46:24 
Первый раз сказал Мяу!

Зарегистрирован: Вт май 23, 2017 15:41:09
Сообщений: 26
Рейтинг сообщения: 0
Конечно, лучше учить поэтапно. Но у меня получается, что выполняю такие задания параллельно с чтением теории, задания такие уже задают, знаний не хватает. Ищу по кускам, но куски вместе не склеиваются. В учебниках упражнения приводятся для выполнения непосредственно в ОС, как правило. Поэтому самостоятельная практика началась с уроков того сайта, откуда был взят изначальный код.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 13:06:37 
Друг Кота
Аватар пользователя

Карма: 51
Рейтинг сообщений: 2108
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7003
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
давай по шагам...
1) объяви переменную i для счетчика
и опиши массив (10 элементов, с кодами цифр - можешь скопировать их (коды) из соих примеров (если не подойдут потом поправим))

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 13:38:22 
Первый раз сказал Мяу!

Зарегистрирован: Вт май 23, 2017 15:41:09
Сообщений: 26
Рейтинг сообщения: 0
Массив знаков получился такой:

Код:
for (i=0; i<10; i+1) // i должна быть от нуля до 9 включительно, т. к. строго меньше 10, шаг отсчета 1
char dig [10]=  // Массив символов для индикатора
 {
   0b00000110;
   0b01011011;
   0b01001111;
   0b01100110;
   0b01101101;
   0b01111101;
   0b00000111;
   0b01111111;
   0b01101111;
   0b00111111;
       }


Добавлено after 6 minutes 12 seconds:
А может быть и так можно:

Код:
char dig [i=0; i<10; i+1]=   
 {
   0b00000110;
   0b01011011;
   0b01001111;
   0b01100110;
   0b01101101;
   0b01111101;
   0b00000111;
   0b01111111;
   0b01101111;
   0b00111111;
       }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 13:45:05 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
mnirti писал(а):
for (i=0; i<10; i+1)
i+1 здесь не будет давать нужного вам эффекта, т.к. результат выражения ничему не присваивается. здесь или i++ надо писать, или i+=1 или i = i + 1 иначе цикл у вас будет вечным
mnirti писал(а):
char dig [10]=  // Массив символов для индикатора
 {
   0b00000110;
   0b01011011;
   0b01001111;
   0b01100110;
   0b01101101;
   0b01111101;
   0b00000111;
   0b01111111;
   0b01101111;
   0b00111111;
       }
это всё магические числа, что плохо по определению.
mnirti писал(а):
char dig [i=0; i<10; i+1]
так точно нельзя.

вы по какой книге язык Си изучаете? неужели там такое написано?!

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 13:59:47 
Первый раз сказал Мяу!

Зарегистрирован: Вт май 23, 2017 15:41:09
Сообщений: 26
Рейтинг сообщения: 0
Получается:

Код:
for (i=0; i<10; i++) // инкремента

char dig [10]=  // Массив чисел
 {
    1<<2; // например, 4
.....................
   
       }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 14:05:13 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 37
Зарегистрирован: Вт фев 09, 2010 17:52:26
Сообщений: 457
Рейтинг сообщения: 0
[/quote]это всё магические числа, что плохо по определению.

Чем это плохо я не знаю(если достаточно памяти), но инициализация массива делается примерно так:
Код:
char dig [10]=  // Массив символов для индикатора
 {
   0b00000110,
   0b01011011,
   0b01001111,
   0b01100110,
   0b01101101,
   0b01111101,
   0b00000111,
   0b01111111,
   0b01101111,
   0b00111111
       };

https://prog-cpp.ru/c-massiv/

а заодно почитайте и это http://cpp.com.ru/kr_cbook/ch5kr.html скоро понадобиться


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 14:26:40 
Друг Кота
Аватар пользователя

Карма: 51
Рейтинг сообщений: 2108
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7003
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
mnirti писал(а):
char dig [10]=  // Массив символов для индикатора
 {
   0b00000110;
   0b01011011;
   0b01001111;
   0b01100110;
   0b01101101;
   0b01111101;
   0b00000111;
   0b01111111;
   0b01101111;
   0b00111111;
       }
это всё магические числа
я считаю это — настройка периферии, а как без них предлагаете знакогенератор собрать?
mnirti массив лучше:
1. сделать константным - мы в нём по ходу программы ни чего менять не будем,
2. объявлять не в цикле for (почитайте про область видимости переменных)
3. если массив заполняется при объявлении — его размер можно не писать, компилятор сам сощитает ... dig[]={...};
4. элементы массива разделяются запятыми

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 14:37:46 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
codenamehawk писал(а):
Чем это плохо я не знаю
жаль
Ivanoff-iv писал(а):
если массив заполняется при объявлении — его размер можно не писать
можно, но не нужно, иначе сложнее контролировать его правильное заполнение.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 15:16:19 
Первый раз сказал Мяу!

Зарегистрирован: Вт май 23, 2017 15:41:09
Сообщений: 26
Рейтинг сообщения: 0
Читаю и слушаю всех, код выходит таким:

Код:
#include <avr/io.h>
#define F_CPU 8000000L
#include <avr/io.h>
#include <util/delay.h>
unsigned int i;

int main(void)
{
   unsigned char butcount=0;
   
   DDRD = 0xFF;
   DDRB = 0x00;
   PORTD = 0b00000000; // Весь регистр на выход
   PORTB = 0b00000001; // Младший бит, нулевая нога на вход
   
    const char dig [10]=  // Константный массив чисел,
    //объявлен в основной  функции
 {
   0b00000110,
   0b01011011,
   0b01001111,
   0b01100110,
   0b01101101,
   0b01111101,
   0b00000111,
   0b01111111,
   0b01101111,
   0b00111111
       };
   //----------

   while ((PINB&0b00000001)==1)) // Пустой цикл: кнопка не нажата
   if ((PINB&0b00000001)==1))
   {
      
   }
 
   //----------
   
   while ((PINB&0b00000001)==0)) // Цикл выполняется до тех пор, пока на нулевой ноге есть логический ноль
{
 
   for (i=0; i<10; i++) //
   if ((PINB&0b00000001)==0))
    _delay_ms(1500);



//----------
while ((PINB&0b00000001)==0)) // Пустой цикл: кнопка нажата
if ((PINB&0b00000001)==0))
{
   
}
}

//----------
PORTD=const char dig[i]; // Вывод значений в порт D

}


Счетчик пока еще не работает. Наверное неправильно написаны пустые циклы, ко всему прочему пропадает питание после нажатия кнопки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 16:09:45 
Друг Кота
Аватар пользователя

Карма: 51
Рейтинг сообщений: 2108
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7003
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
9 строка: переменная не нужна (она ни где не используется).
32-36: дополнительной проверки не надо,достаточно только цикла.
40: этот цикл сделай закольцованным навсегда, без учета кнопки.
43: циклу for добавь операторные скобки и в них впиши
задержку,
пустой цикл с условием по кнопке
и вывод iтой цифры в порт.

всё дальнейшее стирай.

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 18:46:36 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 37
Зарегистрирован: Вт фев 09, 2010 17:52:26
Сообщений: 457
Рейтинг сообщения: 0
Что бы написать программу, надо ее себе представить.
Удобней всего это сделать на бумаге, например в графическом виде.
http://www.maksakov-sa.ru/Algol/SpPrAlg ... index.html

Программа в процессоре никогда не должна "закончиться", для этого в функции main создается
бесконечный цикл
Код:

int main(void)
//main start
{
//инициализация переменных и настройка железа(настройка портов на вход- выход)
   while (1)
   {
          // Тут будет основной код
   }
}//main end


В вашем случае удобнее ввести переменную в которую считать состояние кнопки(кнопок) и в зависимости от нее делать разветвления программы.
Код:
unsigned char knopka;
unsigned int   perevennaja=0;
while (1)
{
  knopka = PINB;
  // если кнопка нажата делаем то
  if ((knopka & 0b00000001) == 0 )
  {
     //Если надо добавляете проверку на мах значение, с учетом того ее увеличите
     perenennaja++;
     
  } else //если кнопка не нажата делаем то
  {
     //Если надо добавляете проверку на min значение, с учетом того ее уменьшите
     peremennaja--;
  }
  //тут удобное место написать код для отображения  значения "perenennaja"
  _delay_ms(300); перед следующим опросом кнопки, пропускаем дребезг кнопки
}




Для того, чтобы определить какое это нажатие первое или второе нужна еще одна переменная.
В ней будет хранится информация о том это первое или второе нажатие кнопки.
(Или внутри блока еще один опрос кнопки, немного усложняется программа)



Добавлено after 6 minutes 54 seconds:
codenamehawk писал(а):
Чем это плохо я не знаю
жаль


Покажите как вы бы "правильно" сделали хранение символов, для отображения их на LED.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Пт июн 09, 2017 19:54:59 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
codenamehawk писал(а):
Покажите как вы бы "правильно" сделали хранение символов, для отображения их на LED
так 100500 раз уже было показано...
Код:
#define _A  _BV(0)
#define _B _BV(1)
#define _C _BV(2)
#define _D _BV(3)
#define _E _BV(4)
#define _F _BV(5)
#define _G _BV(6)
#define _H _BV(7)

#define _dig_0 (_A | _B | _C | _D | _E | _F)
#define _dig_1 (_B | _C)
#define _dig_2 (_A | _B | _G | _E | _D)
// и так далее все цифры и другие знаки, которые нужны

char DIG[10] = {_dig_0, _dig_1, _dig_2, /* и так далее */ _dig_9};

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Сб июн 10, 2017 07:59:37 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 37
Зарегистрирован: Вт фев 09, 2010 17:52:26
Сообщений: 457
Рейтинг сообщения: 0
Код:
#define _A  _BV(0)
#define _B _BV(1)
#define _C _BV(2)
#define _D _BV(3)
#define _E _BV(4)
#define _F _BV(5)
#define _G _BV(6)
#define _H _BV(7)

#define _dig_0 (_A | _B | _C | _D | _E | _F)
#define _dig_1 (_B | _C)
#define _dig_2 (_A | _B | _G | _E | _D)
// и так далее все цифры и другие знаки, которые нужны


Это нужно только если кто сам создает знаки.

Намного проще один раз рассчитать в проге
http://www.getchip.net/posts/080-konver ... ndikatora/
и далее просто использовать константы.
Код получится одинаковым, а не нужной писанины меньше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Сб июн 10, 2017 14:08:12 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 3
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
codenamehawk писал(а):
Это нужно только если кто сам создает знаки
много раз слышал фразу "математика мне не нужна, я люблю историю и пойду учиться в на истфак" - найдите 7 отличий от вашего утверждения...

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

как минимум затем, чтобы самого себя уважать не за лень, а за аккуратность.

извините за оффтоп.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Вс июн 11, 2017 16:21:59 
Первый раз сказал Мяу!

Зарегистрирован: Вт май 23, 2017 15:41:09
Сообщений: 26
Рейтинг сообщения: 0
Теперь код переписан так, но отладчик выдает 7 ошибок:

Код:
#include <avr/io.h>
#define F_CPU 8000000L
#include <avr/io.h>
#include <util/delay.h>
// unsigned int i; переменная не используется

int main(void)
{
   unsigned char butcount=0;
   
   DDRD = 0xFF;
   DDRB = 0x00;
   PORTD = 0b00000000; // Весь регистр на выход
   PORTB = 0b00000001; // Младший бит, нулевая нога на вход
   
    const char dig [10]=  // Константный массив чисел,
    //объявлен в основной  функции
 {
   0b00000110,
   0b01011011,
   0b01001111,
   0b01100110,
   0b01101101,
   0b01111101,
   0b00000111,
   0b01111111,
   0b01101111,
   0b00111111
       };
   //----------

   while ((PINB&0b00000001)==1)) // Пустой цикл: кнопка не нажата
   // if ((PINB&0b00000001)==1)) Без дополнительной проверки
   {
      
   }
 
   //----------
   
   while (1) // Бесконечный цикл
    if ((PINB&0b00000001)==0))
   
   for (i=0; i<10; i++)
  {
    _delay_ms(1500);
 
}
 



//----------
while ((PINB&0b00000001)==0)) // Пустой цикл: кнопка нажата
if ((PINB&0b00000001)==0))
{
   
}
PORTD=const char dig[i]; // Вывод значений в порт D
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Вс июн 11, 2017 16:59:21 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
вы пытаетесь протестировать интуицию остальных? или к чему эти интригующие слова про 7 ошибок? нам надо угадать, какие именно?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Вс июн 11, 2017 18:57:04 
Мучитель микросхем

Карма: 24
Рейтинг сообщений: 144
Зарегистрирован: Ср июн 08, 2011 20:25:20
Сообщений: 438
Рейтинг сообщения: 0
while (1) // Бесконечный цикл
скобки {} добавите для всего куска кода, где это цикл :)) , а так работает только для след. строки. И т.д для других while.....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Вт июн 13, 2017 07:50:28 
Первый раз сказал Мяу!

Зарегистрирован: Вт май 23, 2017 15:41:09
Сообщений: 26
Рейтинг сообщения: 0
Список ошибок, выданных компилятором, теперь новый, код немного подправлен, в циклах есть дополнительные скобки.

Код:
#include <avr/io.h>
#define F_CPU 8000000L
#include <avr/io.h>
#include <util/delay.h>
// unsigned int i; переменная не используется

int main(void)
{
   unsigned char butcount=0;
   
   DDRD = 0xFF;
   DDRB = 0x00;
   PORTD = 0b00000000; // Весь регистр на выход
   PORTB = 0b00000001; // Младший бит, нулевая нога на вход
   
   const char dig [10]=  // Константный массив чисел,
   //объявлен в основной  функции
   {
      0b00000110,
      0b01011011,
      0b01001111,
      0b01100110,
      0b01101101,
      0b01111101,
      0b00000111,
      0b01111111,
      0b01101111,
      0b00111111
   };
   //----------

   while ((PINB&0b00000001)==1)) // Пустой цикл: кнопка не нажата
   // if ((PINB&0b00000001)==1)) Без дополнительной проверки
   {
      
   }
   
   //----------
   
   while (1) // Бесконечный цикл
   {
      
   
   if ((PINB&0b00000001)==0))
   
   for (i=0; i<10; i++)
   {
      _delay_ms(1500);
      
   }
   }



   //----------
   while ((PINB&0b00000001)==0)) // Пустой цикл: кнопка нажата
   {
      if ((PINB&0b00000001)==0))
   
      
   }
   PORTD=const char dig[i]; // Вывод значений в порт D
}


Вложения:
Отладка.jpg [235.26 KiB]
Скачиваний: 421
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Вт июн 13, 2017 07:57:27 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 37
Зарегистрирован: Вт фев 09, 2010 17:52:26
Сообщений: 457
Рейтинг сообщения: 0
Код:
PORTD=const char dig[i]; // Вывод значений в порт D

Что тут делает const char?
Почитайте про глобальные и локальные переменные.

Компилятор показывает строку с ошибкой и тип ошибки.

Добавлено after 6 minutes 35 seconds:
Комментируйте, что делает каждый блок программы.

Что делает этот блок

Код:
   while ((PINB&0b00000001)==1)) // Пустой цикл: кнопка не нажата
   // if ((PINB&0b00000001)==1)) Без дополнительной проверки
   {
     
   }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Изменение кода для счетчика
СообщениеДобавлено: Вт июн 13, 2017 08:07:20 
Первый раз сказал Мяу!

Зарегистрирован: Вт май 23, 2017 15:41:09
Сообщений: 26
Рейтинг сообщения: 0
Константа была добавлена в дополнение к массиву, который посоветовали сделать константным. Указанный Вами блок выполняется только, если на ножке появляется логическая единица, то есть кнопка не нажата.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 44 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: akl и гости: 284


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y