Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Динамическая индикация на 4-разрядном индикаторе

Непрочитано 07.08.2023, 07:39  
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 91
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Динамическая индикация на 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]; //вывожу первый разряд на индикатор (должна быть единичка, но индикатор отключается)
	}
}
Миниатюры:
Нажмите на изображение для увеличения
Название: Схема индикатора.png
Просмотров: 0
Размер:	177.3 Кб
ID:	177679   Нажмите на изображение для увеличения
Название: фьюзы.png
Просмотров: 0
Размер:	22.7 Кб
ID:	177680  
Реклама:

Последний раз редактировалось Falconist; 07.08.2023 в 09:08.
Devil Byte вне форума  
Непрочитано 07.08.2023, 10:06  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 349
Сказал спасибо: 181
Сказали Спасибо 65 раз(а) в 57 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

Посмотрите в отладчике, чему равна razr1, перед SEG7_PORT = numbers[razr1];
Проще всего посмотреть в протеусе или в авр студио.

Или попробуйте volatile unsigned int razr1 =0;
CodeNameHawk вне форума  
Непрочитано 07.08.2023, 12:25  
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 91
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

Сообщение от CodeNameHawk Посмотреть сообщение
Посмотрите в отладчике, чему равна
Нулю, я же ее инициализирую нулем.
А вот потом почему после того как в в функцию число ввожу значение, то разряд на сегменте не отображается
Devil Byte вне форума  
Непрочитано 07.08.2023, 12:53  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

Devil Byte,
Цитата:
unsigned int razbivka_chisla
разрядности хватает?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 07.08.2023, 13:16  
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 91
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

Сообщение от akegor Посмотреть сообщение
Devil Byte,

разрядности хватает?
Да! смысл в том что я в режиме отладки вижу как razr1 принимает значение 1, после того функция число получила 1987 на вход и поделила его на 1000;
Но на индикаторе в железе получаю мусор. Может это фьюзы все таки?
Миниатюры:
Нажмите на изображение для увеличения
Название: фьюзы.png
Просмотров: 0
Размер:	22.7 Кб
ID:	177687   Нажмите на изображение для увеличения
Название: РАЗРЯД.png
Просмотров: 0
Размер:	111.9 Кб
ID:	177688  

Последний раз редактировалось Devil Byte; 07.08.2023 в 13:30.
Devil Byte вне форума  
Непрочитано 07.08.2023, 13:31  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

Сообщение от Devil Byte Посмотреть сообщение
на индикаторе в железе получаю мусор
А если подробней? Что за мусор? Повторяемость в мусоре?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 07.08.2023, 13:43  
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 91
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

Сообщение от akegor Посмотреть сообщение
А если подробней? Что за мусор? Повторяемость в мусоре?
Повторяемость 100%, при этом я уже в тулчейне снизил уровень отладки и оптимизации.
Получается что razr1 получает значение 1, а 1 это значение единицы в массиве numbers. А значит на индикаторе должна вывестись 1, ы водится хер пойми что, как будто он просто зажигает все сегменты
Миниатюры:
Нажмите на изображение для увеличения
Название: 20230807_163515.jpg
Просмотров: 0
Размер:	431.0 Кб
ID:	177689  

Последний раз редактировалось Devil Byte; 07.08.2023 в 13:56.
Devil Byte вне форума  
Непрочитано 07.08.2023, 13:58  
j-Roger
Гражданин KAZUS.RUN
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 839
Сказал спасибо: 379
Сказали Спасибо 943 раз(а) в 451 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию 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 вне форума  
Сказали "Спасибо" j-Roger
Devil Byte (10.01.2024)
Непрочитано 07.08.2023, 14:10  
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 91
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

Сообщение от j-Roger Посмотреть сообщение
Первое.
Таки стОит перепрограммировать фьюзы:
Для меня пока много букв)
Скрин фьюзов я приложил, стоят прямые.
Я правильно понятое что в случае с прямыми битами установленная галка означает что фьюз включен?
Если да то можете пожалуйста ткнуть в паинте зеленым что включить, а красным выключить?
Скриншот с текущими фьюзами прилагаю
Спасибо!
Миниатюры:
Нажмите на изображение для увеличения
Название: фьюзы.png
Просмотров: 0
Размер:	22.9 Кб
ID:	177694  
Devil Byte вне форума  
Непрочитано 07.08.2023, 14:20  
j-Roger
Гражданин KAZUS.RUN
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 839
Сказал спасибо: 379
Сказали Спасибо 943 раз(а) в 451 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

Поставить "галки" в фьюзах, выделенных красным :
Нажмите на изображение для увеличения
Название: fuses.png
Просмотров: 0
Размер:	14.5 Кб
ID:	177695
j-Roger вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Продаю 2-х разрядный 7-сегментный индикатор KEM-3261AG (зеленый ) GFIRSOFF Барахолка электронных компонентов 0 19.04.2017 08:24
Индикатор для китайского приёмника radiolubitel 512 Автоматика и аппаратура связи 6 17.06.2015 13:32
Статическая индикация текста на многосегментном индикаторе Vigvam13 TTL и CMOS логика 33 05.06.2014 07:02
7-ми сегментный индикатор, atmega и динамическая индикация ollycat Микроконтроллеры, АЦП, память и т.д 38 09.07.2011 19:09
Динамическая индикация mironov Микроконтроллеры, АЦП, память и т.д 4 02.07.2010 17:37


Часовой пояс GMT +4, время: 03:00.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.