Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

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

Ответ
Опции темы
Непрочитано 07.08.2023, 07:39   #1
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 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   #2
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 181
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

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

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

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

Devil Byte,
Цитата:
unsigned int razbivka_chisla
разрядности хватает?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor на форуме   Ответить с цитированием
Непрочитано 07.08.2023, 13:16   #5
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 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   #6
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,084
Сказал спасибо: 2,564
Сказали Спасибо 11,898 раз(а) в 5,971 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

Сообщение от Devil Byte Посмотреть сообщение
на индикаторе в железе получаю мусор
А если подробней? Что за мусор? Повторяемость в мусоре?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor на форуме   Ответить с цитированием
Непрочитано 07.08.2023, 13:43   #7
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 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   #8
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 731
Сказал спасибо: 363
Сказали Спасибо 807 раз(а) в 379 сообщении(ях)
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   #9
Devil Byte
Временная регистрация
 
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Devil Byte на пути к лучшему
По умолчанию Re: Динамическая индикация на 4-разрядном индикаторе

Сообщение от j-Roger Посмотреть сообщение
Первое.
Таки стОит перепрограммировать фьюзы:
Для меня пока много букв)
Скрин фьюзов я приложил, стоят прямые.
Я правильно понятое что в случае с прямыми битами установленная галка означает что фьюз включен?
Если да то можете пожалуйста ткнуть в паинте зеленым что включить, а красным выключить?
Скриншот с текущими фьюзами прилагаю
Спасибо!
Миниатюры:
Нажмите на изображение для увеличения
Название: фьюзы.png
Просмотров: 0
Размер:	22.9 Кб
ID:	177694  
Devil Byte вне форума   Ответить с цитированием
Непрочитано 07.08.2023, 14:20   #10
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 731
Сказал спасибо: 363
Сказали Спасибо 807 раз(а) в 379 сообщении(ях)
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, время: 22:25.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot