Нескольно простых вопросов о программировании AVR на Си.
-
fomkin1912
- Открыл глаза
- Сообщения: 46
- Зарегистрирован: Пт дек 02, 2022 00:37:17
Re: Нескольно простых вопросов о программировании AVR на Си.
Что имеется ввиду под константой?
Re: Нескольно простых вопросов о программировании AVR на Си.
fomkin1912, любое число, которое не изменяется.
---
Константа в программировании — это переменная, значение которой не может быть изменено после её инициализации. Это отличает константы от обычных переменных, чьи значения могут варьироваться в процессе работы программы.
---
Совет Alex заключается в следующем - значение display быстро изменяется. И Вы, возможно, видите мельтешение цифр на индикаторе (хотя что Вы видите можно только предполагать). Вот Alex и посоветовал присвоить display какое-то конкретное число, чтобы знать, что именно должно выводиться.
А вообще, вопрос странный - в цикле переменная увеличивается от 0 до 9999 с шагом 1. Целые числа. О каких "десятых на индикаторе" говорится - непонятно.
---
Константа в программировании — это переменная, значение которой не может быть изменено после её инициализации. Это отличает константы от обычных переменных, чьи значения могут варьироваться в процессе работы программы.
---
Совет Alex заключается в следующем - значение display быстро изменяется. И Вы, возможно, видите мельтешение цифр на индикаторе (хотя что Вы видите можно только предполагать). Вот Alex и посоветовал присвоить display какое-то конкретное число, чтобы знать, что именно должно выводиться.
А вообще, вопрос странный - в цикле переменная увеличивается от 0 до 9999 с шагом 1. Целые числа. О каких "десятых на индикаторе" говорится - непонятно.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
-
fomkin1912
- Открыл глаза
- Сообщения: 46
- Зарегистрирован: Пт дек 02, 2022 00:37:17
Re: Нескольно простых вопросов о программировании AVR на Си.
[uquote="smacorp",url="/forum/viewtopic.php?p=4761317#p4761317"]fomkin1912
А вообще, вопрос странный - в цикле переменная увеличивается от 0 до 9999 с шагом 1. Целые числа. О каких "десятых на индикаторе" говорится - непонятно.[/uquote]
Как раз здесь-то все понятно. Значения в разрядах индикатора устанавливаются вот здесь:
А что такое константа, я знал когда Вы, вероятно, под стол пешком ходили, не сочтите за оскорбление. Тем не менее, данную простую учебную задачку понять не могу. Надеялся, что для тематического форума это плевый вопрос. Но что-то пошло не так. Дебугер мне в р...уки.
А вообще, вопрос странный - в цикле переменная увеличивается от 0 до 9999 с шагом 1. Целые числа. О каких "десятых на индикаторе" говорится - непонятно.[/uquote]
Как раз здесь-то все понятно. Значения в разрядах индикатора устанавливаются вот здесь:
Код: Выделить всё
switch(segcounter)
{
case 0:
PORTD = ~(SEGMENTE[display % 10000 / 1000]); // Тысячи
break;
case 1:
PORTD = ~(SEGMENTE[display % 1000 / 100]); // Сотни
break;
case 2:
PORTD = ~(SEGMENTE[display % 100 / 10]); // Десятки
break;
case 3:
PORTD = ~(SEGMENTE[display % 10]); // Единицы
break;
}Re: Нескольно простых вопросов о программировании AVR на Си.
[uquote="fomkin1912",url="/forum/viewtopic.php?p=4761321#p4761321"]А что такое константа, я знал когда Вы, вероятно, под стол пешком ходили[/uquote]
Что тут скажешь... Вообще, есть большая вероятность того, что когда я ходил под стол пешком, Вас ещё и в проекте не было, но Вы, похоже, считаете себя экстрасенсом раз берётесь определять возраст незнакомого человека по одному сообщению от него. А раз так, Вам нужно применить лишь малую толику своих супер способностей для разбора приведённого несложного примера динамической индикации. Не нужен Вам форум с таким мышлением и, самое главное, подходом.
Что тут скажешь... Вообще, есть большая вероятность того, что когда я ходил под стол пешком, Вас ещё и в проекте не было, но Вы, похоже, считаете себя экстрасенсом раз берётесь определять возраст незнакомого человека по одному сообщению от него. А раз так, Вам нужно применить лишь малую толику своих супер способностей для разбора приведённого несложного примера динамической индикации. Не нужен Вам форум с таким мышлением и, самое главное, подходом.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
[uquote="fomkin1912",url="/forum/viewtopic.php?p=4761316#p4761316"]Что имеется ввиду под константой?[/uquote] Не понятно, в чём вопрос, учитывая, что :
fomkin1912 писал(а):А что такое константа, я знал когда Вы, ......
-
fomkin1912
- Открыл глаза
- Сообщения: 46
- Зарегистрирован: Пт дек 02, 2022 00:37:17
Re: Нескольно простых вопросов о программировании AVR на Си.
Убил не мало времени, но разобрался, в первом приближении.
Скорость индикации таймера зависит от вот этого регистра.
Почему делитель влияет на функцию delay_ms(), уже другой вопрос.
PS Причем влияет с обратной пропорциональностью. Если устанавливаю делитель = 1 (без деления), таймер замедляется. Увеличиваю делитель - таймер ускоряется и начинает считать сотые доли секунды.
Скорость индикации таймера зависит от вот этого регистра.
Код: Выделить всё
TCCR2 |= (1 << CS21); // Предделитель на 8PS Причем влияет с обратной пропорциональностью. Если устанавливаю делитель = 1 (без деления), таймер замедляется. Увеличиваю делитель - таймер ускоряется и начинает считать сотые доли секунды.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
При частых и быстрых прерываниях ваша задержка _delay_ms(10); вероятно, изменилась. Можете напр. перенести задержку на другой таймер. (но тогда начнут действовать другие факторы: которым следует отдать приоритет). MK не является многозадачной системой. Лучше всего распределить нагрузку МК между процессами.
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Нескольно простых вопросов о программировании AVR на Си.
[uquote="fomkin1912",url="/forum/viewtopic.php?p=4761457#p4761457"]
Почему делитель влияет на функцию delay_ms(), уже другой вопрос.
PS Причем влияет с обратной пропорциональностью. Если устанавливаю делитель = 1 (без деления), таймер замедляется. Увеличиваю делитель - таймер ускоряется и начинает считать сотые доли секунды.[/uquote]Надеюсь не так увеличиваете делитель:и т.д.
Код: Выделить всё
TCCR2 |= (1 << CS21); // Предделитель на 8PS Причем влияет с обратной пропорциональностью. Если устанавливаю делитель = 1 (без деления), таймер замедляется. Увеличиваю делитель - таймер ускоряется и начинает считать сотые доли секунды.[/uquote]Надеюсь не так увеличиваете делитель:
Код: Выделить всё
TCCR2 |= (2 << CS21); // Предделитель на 8Код: Выделить всё
TCCR2 |= (3 << CS21); // Предделитель на 8Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
-
fomkin1912
- Открыл глаза
- Сообщения: 46
- Зарегистрирован: Пт дек 02, 2022 00:37:17
Re: Нескольно простых вопросов о программировании AVR на Си.
CS20, CS21, CS22, по даташиту. Чукча знает.
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Нескольно простых вопросов о программировании AVR на Си.
_delay_ms() вообще не использует никакой таймер.veso74 писал(а):Можете напр. перенести задержку на другой таймер.
а частые прерывания замедляют работу программной задержки _delay_ms(). именно поэтому без предделителя задержка работает медленнее, чем с предделителем 8, когда прерывание таймера происходит в 8 раз реже, чем без предделителя.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Starichok51, да. Именно это и имел в виду (возможно, я неправильно выразился: БГ->РУ). И предложил: delay перенести на другой свободный таймер.
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Нескольно простых вопросов о программировании AVR на Си.
veso74, нет разницы, какой использовать таймер, так как прерывание любого таймера будет задерживать выполнение delay.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Меня не понимаете 2 раза.
Задержка можно быть выполненна оставшимся свободным таймером, а не через _delay_ms().
Однако пользователю по-прежнему приходится расставлять приоритеты: какой таймер должен выполнять какую функцию.
приоритеты: TIMER2 OVF, TIMER1 OVF, TIMER0 OVF: Table 18. Reset and Interrupt Vectors
Задержка можно быть выполненна оставшимся свободным таймером, а не через _delay_ms().
Однако пользователю по-прежнему приходится расставлять приоритеты: какой таймер должен выполнять какую функцию.
приоритеты: TIMER2 OVF, TIMER1 OVF, TIMER0 OVF: Table 18. Reset and Interrupt Vectors
- Starichok51
- Модератор
- Сообщения: 19039
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Нескольно простых вопросов о программировании AVR на Си.
если бы ты сразу написал, что задержку выполнять таймером, а ты писал название функции _delay_ms(), поэтому я тебя не понял.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
-
fomkin1912
- Открыл глаза
- Сообщения: 46
- Зарегистрирован: Пт дек 02, 2022 00:37:17
Re: Нескольно простых вопросов о программировании AVR на Си.
Для тренировки сделал задержку на 16-битовом таймере
и прерывание
Все работает, от частоты первого таймера вроде не зависит, но не понятно, как образуется частота счетчика. Вроде должно быть 8МГц / 65536 = 122 цикла за секунду, но индикатор крутиться раз 8-10 медленнее. Но это так, наблюдение, без цели дальнейших "раскопок".
Код: Выделить всё
TCCR2 |= (1 << CS20); // Предделитель не установлен
TCCR1B |= (1 << CS10);
TIMSK |= (1 << TOIE2)|(1<<TOIE1)Код: Выделить всё
ISR(TIMER1_OVF_vect)
{
display++;
}-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Как фюзы? Проверьте CKSEL. Значение по умолчанию для нового МК - 1 MHz.
(Включите логический анализатор, есть как модуль по оч. низкой цене (8 входа, 24 MHz). Показывает много, полезный инструмент).
(Включите логический анализатор, есть как модуль по оч. низкой цене (8 входа, 24 MHz). Показывает много, полезный инструмент).
-
watchmaker
- Поставщик валерьянки для Кота
- Сообщения: 2177
- Зарегистрирован: Вс ноя 15, 2009 23:13:59
- Откуда: Харьков
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Ровно в 8 раз? Не столько проверить CKSEL, сколько CKDIV8. По названию фьюза понятно, что он делает. Если стоит (0, по умолчанию с завода так) - снять (1).индикатор крутиться раз 8-10 медленнее
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
[uquote="fomkin1912",url="/forum/viewtopic.php?p=4761300#p4761300"]... секундомер на Атмеге8 ...[/uquote]
watchmaker, в ATmega8 ... нет fuse bit CKDIV8.
CKSEL = 0010 -> вн. RC 1 MHz
CKSEL = 0100 -> вн. RC 8 MHz
watchmaker, в ATmega8 ... нет fuse bit CKDIV8.
CKSEL = 0010 -> вн. RC 1 MHz
CKSEL = 0100 -> вн. RC 8 MHz
-
watchmaker
- Поставщик валерьянки для Кота
- Сообщения: 2177
- Зарегистрирован: Вс ноя 15, 2009 23:13:59
- Откуда: Харьков
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
А, точно, это у 88 и у мелочи типа tiny25 уже CKDIV8 отдельно.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...