7 сегментный индикатор + 74hc595 + atmega 8

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение WiseLord »

Завести массив dig[4], к котором хранить _коды_ символов.

В прерывании таймера выводить эти коды поочерёдно, и за 4 прерывания вывести все разряды, активируя в каждом из прерываний свой разряд.

Написать функцию showNumber(int num), которая будет просто выкладывать в этот массив коды нужных цифр

Написать функцию showWord(), которая будет просто выкладывать в этот массив коды нужных букв.
Реклама
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение dr.doc »

Присвоить числам 11,12,13,...,n буквы и выводить их. Например, косвенной адресацией.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение oleg110592 »

#if директива условной компиляции
http://lord-n.narod.ru/download/books/w ... 0/1005.htm
можно завести переменную для флагов:
uint8_t flags;
сам флаг:
#define WORDS 1<<0

Код: Выделить всё

flags |= WORDS; // установить флаг
flags &= ~WORDS; // сбросить флаг

ISR(TIMER0_OVF_vect)
{
 if ((flags & WORDS) == 0)
 {
   //выводим число
   set_led_data(i);
 } 
 else
 {
   //выводим в разряд
   set_led_data_position(number, position_digit);
 }
}
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

Что бы тем не плодить, задам тут вопросик..

Допустим у меня устройство сидит на пинах SPI мк, и я хочу внутрисхемно программировать мк, что нужно сделать? где то слышал что надо поставить резисторы между пинами spi и пинами устройства, и до резисторов цеплять выводы программатора? Так ли?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение oleg110592 »

если устройство spi только принимает данные, то мешать программированию мк не должно. Если устройство еще и передает данные желательно предусмотреть установку в лог. "1" вывода CS spi устройства. Делал проектик без всяких специальных наворотов по такой схеме - все нормально прошивалось:
Изображение
Реклама
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

oleg110592 писал(а):если устройство spi только принимает данные, то мешать программированию мк не должно.
Только принимает. Я на отладке заметил что шьется нормально. Так решил уточнить на всякий случай.
Реклама
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

Вот нарисовал схемку управления 7 сегментным индикатором. резисторы еще не подбирал как и транзисторы.. гляньте, индикатор общий анод.
СпойлерИзображение
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение oleg110592 »

имхо резисторы R21-R24 не нужны. Резисторы R29-R32 зачем такой ток в базу - 2К хватит, если транзисторы типа BC857(надо посчитать). Резисторы R25-R32 не на землю, а на V 12. Если V 12 это 12В, то выходы 74HC595 не погорят ли, надо бы еще npn транзисторов дополнительных поставить.
http://radioparty.ru/prog-avr/program-c ... nt-npn-pnp
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

oleg110592 писал(а): Резисторы R29-R32 зачем такой ток в базу - 2К хватит,
то выходы 74HC595 не погорят ли, надо бы еще npn транзисторов дополнительных поставить.
Я же написал что еще не подбирал выше про резисторы..

Про транзисторы вот это не подумал к U2 поставить, исправлю. Она же 5 в, а я туда 24 в.

учту замечания.
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

Поправил. Гляньте пожалуйста)

Изображение

И заоодно схемку управления реле)

Изображение
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение oleg110592 »

понадежней думаю так:
Изображение
UPD: резисторы в сегменты надо добавить!
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение amd9800 »

Добрый день в соседней теме я сделал вариант подключения 7 сегментного LED + LCD 1602 либо 1604 любой с контроллером HD4470 к одной шине на базе регистров 595.
Притом вы можете к атмеге 8 подключить к хардверному SPI либо к любым другим ножкам и отправлять данные обычным подергиванием ног МК. Но в любом случае за вас все сделает библиотека. Библиотеки можете скачать ниже. На данном этапе готовы библиотеки для работы в режиме SPI и частично в софтерном режиме.
Также я предвидел разное подключение ног семисегментника к регистрам, но подключение как на схеме самое оптимальное поскольку проще всего трассировать плату иначе нужно слишком много перемычек.
СпойлерИзображение
СпойлерИзображение
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

amd9800 писал(а):Добрый день в соседней теме я сделал вариант подключения 7 сегментного LED + LCD 1602 либо 1604 любой с контроллером HD4470 к одной шине
У меня при создании схемы стояла цель минимизировать количество используемых ножек мк для индикации, у меня вышло всего 3 пина под это дело, что меня вполне устроило. Плюс индикатор у меня будет питаться от 9 и выше вольт, примерно до 12. То есть ваши схемы не подойдут.
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение amd9800 »

так в моих схемах и есть 3 пин
2 пина это земля и питание
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

Уважаемый oleg110592, не подскажете как установить avr-gcc компилятор в windows 7? В линуксе то все просто... и как настроить его с саблаймом или с атомом например? Не люблю тяжелые среды типа авр студио.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение WiseLord »

Я когда-то свой проект (делался под Linux) пробовал ради интереса скомпилировать в Windows (в VirtualBox). Записал скринкаст, если интересно.

Правда, в качестве IDE я и там выбрал QtCreator, но, по большому счёту, не важно, откуда дёргать make / make flash.

Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

Установил avr-gcc. Вывод в cmd.exe такой:
Изображение
avr gcc установился нормально

Makefile такой, как скидывал oleg110592 в теме этой. Под линем он работал.
Спойлер

Код: Выделить всё

# Задаем имя проекта, в результате получатся файлы test.hex test.bin
TARG=test

CC = avr-gcc
OBJCOPY = avr-objcopy

# Задаем из каких файлов собирать проект, можно указать несколько файлов
SRCS= rele.c indication.c

OBJS = $(SRCS:.c=.o)

# Задаем для какого микроконтроллера будем компилировать (atmega8)
MCU=atmega8

# Флаги компилятора, при помощи F_CPU определяем частоту на которой будет работать контроллер,
CFLAGS = -mmcu=$(MCU) -Wall -g -Os -Werror -lm  -mcall-prologues -DF_CPU=11059200
LDFLAGS = -mmcu=$(MCU)  -Wall -g -Os  -Werror

all: $(TARG)

$(TARG): $(OBJS)
	$(CC) $(LDFLAGS) -o $@.elf  $(OBJS) -lm
	$(OBJCOPY) -O binary -R .eeprom -R .nwram  $@.elf $@.bin
	$(OBJCOPY) -O ihex -R .eeprom -R .nwram  $@.elf $@.hex

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

clean:
	rm -f *.elf *.bin *.hex  $(OBJS) *.map
Добавил скрипт в саблайм

Код: Выделить всё

{
	"shell_cmd": "make"
}
в саблайме делаю make, получаю такое:

Код: Выделить всё

[Finished in 0.0s with exit code 1]
[shell_cmd: make]
[dir: C:\work\rele]
[path: C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\CooCox\CoIDE\gcc\bin;C:\avr-gcc\bin;C:\Users\alexander\AppData\Local\atom\bin]
то есть не чего не происходит.. где зарыта собакен? :cry:

урраа) собралось, надо было перезагрузить кампутер :)) :)) :)) :)) :))
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение oleg110592 »

alex38779 писал(а):Уважаемый oleg110592, не подскажете как установить avr-gcc компилятор в windows 7?
тоже просто:
* скачать GNU toolchain from ARM тут https://launchpad.net/gcc-arm-embedded (я скачивал zip файл)
* распаковать в папку (имхо папка должна быть в корне) - у меня на диске D:\GCCARM
* скачать Sublime Text (у меня версия 2), немного подшаманить примерно как тут: http://we.easyelectronics.ru/CADSoft/su ... r-gcc.html
только я настроил кнопку F5 для очистки проекта, ctrl+B и F7 остались для сборки по умолчанию:
Спойлер

Код: Выделить всё

[
	{ "keys": ["f5"], "command": "run_multiple_commands", "args": {"commands": [
	 	{"command": "save", "context": "window" },
	 	{"command": "exec", "args": {
	 		"cmd": "c:/Winavr/utils/bin/make clean",
	 		"file_regex": "(.*\\w+\\.[(c|cpp|h|hpp)]):(\\d+):(\\d+:|)\\s.*", "encoding": "cp1251"
	 	}, "context": "window" }
	]}}
]
make.exe использую от Winavr

* сделать New Build System - меню Tools-> Build System (у меня называется GCC ARM):
Спойлер

Код: Выделить всё

{
   "cmd": ["c:/Winavr/utils/bin/make"],
   "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
   "working_dir": "${file_path}",
   "selector": "source.c",
   "shell": true,
   "path": "D:\\GCCARM\\bin\\"
}
вроде все

upd: ошибся - надо было для GCC AVR - в принципе все то же самое, только toolchain отсюда например: http://sourceforge.net/projects/mobilec ... 8Win32%29/
Аватара пользователя
alex38779
Потрогал лапой паяльник
Сообщения: 386
Зарегистрирован: Чт окт 31, 2013 10:54:32
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение alex38779 »

Как повысить быстродействие кода. Использовать указатели и ссылки?

Как авр относится к обработке многомерных массивов? Просто хочу хранить настройки в массиве, примерно 5 на 10. Обращаться к массиву через указатели. Хранить в eeprom, перезаписывать только по изменению.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: 7 сегментный индикатор + 74hc595 + atmega 8

Сообщение ARV »

alex38779 писал(а):Как повысить быстродействие кода. Использовать указатели и ссылки?
однозначных рекомендаций нет, слишком специфичная тема. самое простое - использовать оптимизацию -O3. указатели не всегда дают выигрыш в скорости.
alex38779 писал(а):Как авр относится к обработке многомерных массивов?
ему по барабану, массивы обрабатываются компилятором - ему, в принципе, тоже все равно.
alex38779 писал(а):Обращаться к массиву через указатели.
не логично. массив подразумевает индексное обращение, в чем смысл отдельного указателя?
alex38779 писал(а):Хранить в eeprom, перезаписывать только по изменению.
логично. напрямую с EEPROM даже с указателями работать не получится, придется повозиться с функциями чтения-записи
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Вернуться в «AVR»