AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
07.08.2023, 07:39
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Динамическая индикация на 4-разрядном индикаторе
Приветствую всех! прошу помощи! начал осваивать МК atmega 128а, отладочная плата waveshare OpenM128a, тактирование от внешнего кварца. но хоть тресни код не работает. в описание кода все подписал.
Код:
|
#define F_CPU 16000000UL
#include ‹avr/io.h›
#include ‹util/delay.h›
/*#define seg1 PORTA= 0xF1;
#define seg2 PORTA= 0xF2;
#define seg3 PORTA= 0xF4;
#define seg4 PORTA= 0xF8;*/
#define SEG7_DDR DDRC //устанавливаю на регистр С дефайн SEG7_DDR (подключены индикаторы сегментные)
#define SEG7_PORT PORTC //устанавливаю на порт С дефайн SEG7_PORT (подключены индикаторы сегментные)
unsigned int numbers[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0}; // массив чисел от 0 до 9 (по порядку)
// Инициализация переменных для разбивки числа на разряды
unsigned int razr1 =0;
unsigned int razr2 =0;
unsigned int razr3 =0;
unsigned int razr4 =0;
unsigned char R1=0, R2=0;
// Создаю функцию деления числа на разряды
void chislo (unsigned int razbivka_chisla)
{
razr1 = razbivka_chisla/1000; // тысячи
razr2 = razbivka_chisla%1000/100; // сотни
razr3 = razbivka_chisla%100/10; // десятки
razr4 = razbivka_chisla%10; // единицы
}
int main(void)
{
DDRA |=(1‹‹PINA0) | (1‹‹PINA1); // Инициализирую пины порта А на выход (для управления индикаторами, стоит общий анод)
PORTA |=(1‹‹PINA0) | (1‹‹PINA1); // Инициализирую пины порта А на включение (для управления индикаторами, стоит общий анод)
SEG7_DDR = 0xFF; // Инициализирую пины порта С на выход
SEG7_PORT = 0x00; // Инициализирую на низкий уровень для того что бы зажечь весь индикатор
while(1)
{
chislo(1987); //ввожу в функцию число
//razr1 = 1987/1000; //но если сделать руками операцию, то еденичка выводится нормально
SEG7_PORT = numbers[razr1]; //вывожу первый разряд на индикатор (должна быть единичка, но индикатор отключается)
}
} |
Последний раз редактировалось Falconist; 07.08.2023 в 09:08.
|
|
|
|
07.08.2023, 10:06
|
|
Вид на жительство
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 181
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
|
Re: Динамическая индикация на 4-разрядном индикаторе
Посмотрите в отладчике, чему равна razr1, перед SEG7_PORT = numbers[razr1];
Проще всего посмотреть в протеусе или в авр студио.
Или попробуйте volatile unsigned int razr1 =0;
|
|
|
|
07.08.2023, 12:25
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Динамическая индикация на 4-разрядном индикаторе
Сообщение от CodeNameHawk
|
Посмотрите в отладчике, чему равна
|
Нулю, я же ее инициализирую нулем.
А вот потом почему после того как в в функцию число ввожу значение, то разряд на сегменте не отображается
|
|
|
|
07.08.2023, 12:53
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,121
Сказал спасибо: 2,569
Сказали Спасибо 11,944 раз(а) в 5,991 сообщении(ях)
|
Re: Динамическая индикация на 4-разрядном индикаторе
Devil Byte,
Цитата:
|
unsigned int razbivka_chisla
|
разрядности хватает?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
07.08.2023, 13:16
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Динамическая индикация на 4-разрядном индикаторе
Сообщение от akegor
|
Devil Byte,
разрядности хватает?
|
Да! смысл в том что я в режиме отладки вижу как razr1 принимает значение 1, после того функция число получила 1987 на вход и поделила его на 1000;
Но на индикаторе в железе получаю мусор. Может это фьюзы все таки?
Последний раз редактировалось Devil Byte; 07.08.2023 в 13:30.
|
|
|
|
07.08.2023, 13:31
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,121
Сказал спасибо: 2,569
Сказали Спасибо 11,944 раз(а) в 5,991 сообщении(ях)
|
Re: Динамическая индикация на 4-разрядном индикаторе
Сообщение от Devil Byte
|
на индикаторе в железе получаю мусор
|
А если подробней? Что за мусор? Повторяемость в мусоре?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
07.08.2023, 13:43
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Динамическая индикация на 4-разрядном индикаторе
Сообщение от akegor
|
А если подробней? Что за мусор? Повторяемость в мусоре?
|
Повторяемость 100%, при этом я уже в тулчейне снизил уровень отладки и оптимизации.
Получается что razr1 получает значение 1, а 1 это значение единицы в массиве numbers. А значит на индикаторе должна вывестись 1, ы водится хер пойми что, как будто он просто зажигает все сегменты
Последний раз редактировалось Devil Byte; 07.08.2023 в 13:56.
|
|
|
|
07.08.2023, 13:58
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 748
Сказал спасибо: 365
Сказали Спасибо 821 раз(а) в 385 сообщении(ях)
|
Re: Динамическая индикация на 4-разрядном индикаторе
Первое.
Таки стОит перепрограммировать фьюзы:
- запретить JTAG (перевести фьюз-бит JTAGEN в состояние UNPROGRAMMED)
- запретить режим совместимости с ATmega103 (перевести фьюз-бит M103C в состояние UNPROGRAMMED)
Перевести фьюз-бит в состояние UNPROGRAMMED - это "поставить галку" в окне фьюзов, судя по скриншоту.
Не забываем: сначала прочитать фьюзы, затем изменить и потом записать.
Второе.
Где в исходном коде управление РАЗРЯДАМИ индикатора?
Сначала следует наладить индикацию, а потом переходить к преобразованию чисел.
В общем случае (без изысков и нюансов для конкретного МК) алгоритм индикации выглядит так:
1.
В порт управления сегментами записать байт для включения нужных сегментов в 1-м разряде
В порт управления разрядами записать байт для включения 1-го разряда
Пауза несколько миллисекунд
2.
В порт управления сегментами записать байт для включения нужных сегментов в 2-м разряде
В порт управления разрядами записать байт для включения 2-го разряда
Пауза несколько миллисекунд
3.
В порт управления сегментами записать байт для включения нужных сегментов в 3-м разряде
В порт управления разрядами записать байт для включения 3-го разряда
Пауза несколько миллисекунд
4.
В порт управления сегментами записать байт для включения нужных сегментов в 4-м разряде
В порт управления разрядами записать байт для включения 4-го разряда
Пауза несколько миллисекунд
5.
Перейти к п. 1
|
|
|
Сказали "Спасибо" j-Roger
|
|
|
07.08.2023, 14:10
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Динамическая индикация на 4-разрядном индикаторе
Сообщение от j-Roger
|
Первое.
Таки стОит перепрограммировать фьюзы:
|
Для меня пока много букв)
Скрин фьюзов я приложил, стоят прямые.
Я правильно понятое что в случае с прямыми битами установленная галка означает что фьюз включен?
Если да то можете пожалуйста ткнуть в паинте зеленым что включить, а красным выключить?
Скриншот с текущими фьюзами прилагаю
Спасибо!
|
|
|
|
07.08.2023, 14:20
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 748
Сказал спасибо: 365
Сказали Спасибо 821 раз(а) в 385 сообщении(ях)
|
Re: Динамическая индикация на 4-разрядном индикаторе
Поставить "галки" в фьюзах, выделенных красным :
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:37.
|
|