Форум Херсона. Форум Херсонской молодежи, флейм, фотографии Херсона, политика в Херсоне, сетевой форум, сети Херсона


Приветствуем на Форум Херсона. Форум Херсонской молодежи..

На данный момент Вы находитесь на форуме как Гость и имеете очень ограниченные возможности и права. Что бы писать или отвечать в темах, загружать картинки, файлы на форуме Вам нужно зарегистрироваться, что совершенно бесплатно. Регистрация очень быстрая, не откладывайте эту процедуру!

Если возникнут проблемы с регистрацией напишите нам.

Галерея форума Блоги пользователей Список банов
Вернуться   Форум Херсона. Форум Херсонской молодежи. > > >
Регистрация СправкаСтатистика Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Программирование Все вопросы по написанию программ

Тема: Динамическая и статическая индикация на 7сегмент. и 74hc595 Ответить в теме
Ваше имя пользователя: Для входа нажмите здесь
Проверка вопроса системы антиспама "NoSpam!"
Краще місто в Украхні?
Image Verification
Пожалуйста, введите шесть букв и/или цифр, которые изображены на картинке.

Заголовок:
  
Сообщение:
Иконки для сообщения
Вы можете выбрать иконку, характеризующую сообщение:
 

Дополнительные опции
Другое

Просмотр темы (Новые вначале)
21.03.2016 18:47
ДмитрийТ Оно изначально так и было. Тут надо понять как раскидать полученные данные по разрядам.
21.03.2016 16:50
Lukas попробуй написать drob_tmp = temps & 0x000F;
21.03.2016 07:55
ДмитрийТ
Цитата:
Сообщение от Lukas Посмотреть сообщение
Доказывает, что протеус не всемогущий)))
А по теме - пока не вижу ошибок - завтра постараюсь дать совет.

Почесав затылок, юзер дописал через 1 минуту
Дело в том, что у меня функция преобразования выглядела совсем иначе. Завтра сравню.

Почесав затылок, юзер дописал через 8 минут

По коду вроде норм, а в комменте совсем противоречиво... Пока это не является ошибкой, но не советую комментировать так, как у Вас.

Почесав затылок, юзер дописал через 8 минут

С позволения автора может перенести тему в радиоаматорство?
Этот вариант кода взял с этого видео

Можно тему и в радиоаматорство, только тем кто занимается радиочастотами и аналоговой техникой навряд ли это будет интересно.
21.03.2016 00:00
Lukas Доказывает, что протеус не всемогущий)))
А по теме - пока не вижу ошибок - завтра постараюсь дать совет.

Почесав затылок, юзер дописал через 1 минуту
Дело в том, что у меня функция преобразования выглядела совсем иначе. Завтра сравню.

Почесав затылок, юзер дописал через 8 минут
Цитата:
Сообщение от ДмитрийТ Посмотреть сообщение
if*(temperature<0)
По коду вроде норм, а в комменте совсем противоречиво... Пока это не является ошибкой, но не советую комментировать так, как у Вас.

Почесав затылок, юзер дописал через 8 минут
Цитата:
Сообщение от ДмитрийТ Посмотреть сообщение
Вот только как температуру вывести с десятыми?
С позволения автора может перенести тему в радиоаматорство?
20.03.2016 21:55
ДмитрийТ Да, в протеусе не пашет вообще, в железе работает. Вот только как температуру вывести с десятыми?
Пробую вот так, и полный бред выводит. А без десятичных вроде нормально.
PHP код:
for(j=0;j<devices;)
{
temperature=ds18b20_temperature(&ds18b20_rom_codes[j][0]);
temps = (unsigned inttemperature;//Присвоим переменной temp значение переменной temperature с явным указанием типа данных
if (temperature<0)temps = ( ~temps ) + 0x0001// если число отрицательное перевести его в норм.вид 
    
celie = (temps >> 4);               // целая часть числа
    
drob_tmp temps 0x0F;          // дробная часть числа с точностью 1/16 градуса         
     
drob  = (unsigned int) ((drob_tmp 10) / 16); // преобразование дробной части в формате "1/16 градуса" в десятичный формат с точностью 0,1 градуса  
if (temperature<0) {//Если темп. плюсовая или 0
buf5=10;
}
buf0=13;
buf1=0;
buf2=drob;
buf3=celie%10^80;
buf4=celie/10;
j++;           
}
delay_ms(800);

12.03.2016 16:36
Lukas Я в протеусе свою задачу не проверял. сразу на железе.
12.03.2016 09:29
ДмитрийТ Что то в протеусе не запускается.
05.03.2016 19:46
Lukas Да вполне рабочий примерчик, использует аппаратный SPI.
Какие могут быть прерывания, если экран работает как slave, при этом у него подключено 3 входа. У него один единственный выход, и то он подключен к следующему экрану на вход, а от следующего просто висит в воздухе.
Можно поизвращатся с прерыванием окончания передачи данных, чтобы не передавать следующий байт, пока предыдущий не отправился, но это там реализовано одной строкой без прерываний while (!(SPSR & (1 << SPIF)));
Советую начинать с минимальной интенсивностью свечения, а то китайцы иногда мудрят(не тот резистор ставят) и у меня при минимальной интенсивности экраны горели довольно ярко, а при максимальной - было ощущение, что вот-вот сгорят
05.03.2016 16:10
ДмитрийТ
Цитата:
Сообщение от Lukas Посмотреть сообщение
Я так понимаю - если Вы на Ардуинке пишете - можно найти библиотеку... Но зачем? Там просто подключить к интерфейсу SPI и по даташиту посмотреть какие команды подавать... Опустили ногу /CS в ноль, передали 16 бит(адрес+команда), подняли ногу... Если использовать 2 экрана последовательно - то передаете 32 бита, сначала для дальнего 16, потом для ближнего. Ну в общем в даташите все четко описано, и никаких библиотек не нужно.
Не забудьте только, что по умолчанию дисплей выключен. То есть надо при включении подать команду 0x0C01. только тогда он загорится.
Я для Atmegи 168 делаю. Нужны ли прерывания для этого индикатора? Это пример нормальный http://electronvntu.blogspot.com/201...ision-avr.html ?
05.03.2016 12:54
Lukas Я так понимаю - если Вы на Ардуинке пишете - можно найти библиотеку... Но зачем? Там просто подключить к интерфейсу SPI и по даташиту посмотреть какие команды подавать... Опустили ногу /CS в ноль, передали 16 бит(адрес+команда), подняли ногу... Если использовать 2 экрана последовательно - то передаете 32 бита, сначала для дальнего 16, потом для ближнего. Ну в общем в даташите все четко описано, и никаких библиотек не нужно.
Не забудьте только, что по умолчанию дисплей выключен. То есть надо при включении подать команду 0x0C01. только тогда он загорится.
04.03.2016 19:41
ДмитрийТ Заказал такой дисплей на Max7219. Под него h- библиотека идёт или какой то код пишеться?
18.02.2016 09:37
Lukas Если тема еще не умерла - попробуйте MAX7219.
Пользовался таким экранчиком ссылка. и яркость регулируется и не нужно грузить контроллер. только говоришь по какому адресу какую цифру зажечь и все. управлять тоже просто им - с пол пинка заводится, главное не забыть сказать микрухе "Display On")))
А если же будете использовать 595, то советую делать статическую индикацию, чтобы не мучать контроллер динамикой. Начинать с печатной платы. Уверен, что у Вас будет миллион перемычек, зато в протеусе все по порядку.
У меня подключается так:
Вложение 261246
Вроде запутано, но зато печатная плата выглядит так:
Вложение 261247
Ну и в коде так:
Код:
unsigned char byCharacter[12] = {0xEB,     //0
                0x81,   //1
 	        0x73,   //2
	        0xD3,	//3 
	        0x99,     //4 
	        0xDA,     //5 
	        0xFA,     //6
                0x83,    //7 
                0xFB,      //8
                0xDB,      //9 
                0x00,      //blank   
                0x10,     //-
}
24.01.2016 18:43
Debian А смысл???
так как и написано в статье...
24.01.2016 16:11
ДмитрийТ А как по двумпроводам можно реализовать индикацию на 6 разрядов

Тут есть статья для 1го индикатора пример
http://kalobyte.com/upravlenie-regis...i-indikatorami
22.01.2016 23:53
Debian
Цитата:
Сообщение от ДмитрийТ Посмотреть сообщение
Работает. А второй индикатор с 6 разрядами возможно посадить параллельно на isp?
ну так же и вешаешь...
просто задвигаешь еще 6 байт перед 4мя байтами для часов и зажигаешь все...

PHP код:
void GetTime (void){
rtc_get_time(&hour, &min, &sec);
DesHours led_table[hour/10];
Hours = (led_table[hour%10]^0x01);
DesMinutes led_table[min/10];
Minutes led_table[min%10];

Digit1 hour/10;
Digit2 hour%10;
Digit3 min/10;
Digit4 min%10;
Digit5 sec/10;
Digit6 sec%10;

PHP код:
interrupt [TIM0_OVFvoid timer0_ovf_isr(void)
{
TIFR0 &= ~(<< TOV0); // reset interrupt flag
SS=0;
spi(led_table[Digit6]);
spi(led_table[Digit5]);
spi(led_table[Digit4]);
spi(led_table[Digit3]);
spi(led_table[Digit2]);
spi(led_table[Digit1]);
spi(0x08);
spi(DesHours);
SS=1;
delay_us(100);
SS=0;
spi(led_table[Digit6]);
spi(led_table[Digit5]);
spi(led_table[Digit4]);
spi(led_table[Digit3]);
spi(led_table[Digit2]);
spi(led_table[Digit1]);
spi(0x04);
spi(Hours);
SS=1;
delay_us(100);
SS=0;
spi(led_table[Digit6]);
spi(led_table[Digit5]);
spi(led_table[Digit4]);
spi(led_table[Digit3]);
spi(led_table[Digit2]);
spi(led_table[Digit1]);
spi(0x02);
spi(DesMinutes);
SS=1;
delay_us(100);
SS=0;
spi(led_table[Digit6]);
spi(led_table[Digit5]);
spi(led_table[Digit4]);
spi(led_table[Digit3]);
spi(led_table[Digit2]);
spi(led_table[Digit1]);
spi(0x01);
spi(Minutes);
SS=1;
delay_us(100);
SS=0;

22.01.2016 19:08
ДмитрийТ SPI - перепутал буквы местами.
22.01.2016 15:28
Debian А что такое isp?
22.01.2016 08:37
ДмитрийТ
Цитата:
Сообщение от Debian Посмотреть сообщение
работает ?
Работает. А второй индикатор с 6 разрядами возможно посадить параллельно на isp?
21.01.2016 21:13
Debian работает ?
21.01.2016 16:00
ДмитрийТ
Цитата:
Сообщение от Debian Посмотреть сообщение
Я понял, что с программизмом у тебя никак...
вот тебе проект ... смотри, изучай
Да я и не говорил что программист.

Компилятор ругается на ассемблерный файл, не нравится ему переменная min заменил на minut.
21.01.2016 11:35
Debian
Цитата:
Сообщение от ДмитрийТ Посмотреть сообщение
PHP код:
rtc_get_time(&hour, &min, &sec);
DesHours led_table[hour/10];
Hours = (led_table[hour%10]^0x01); // Надо же точечку нарисовать :)
DesMinutes led_table[min/10];
Minutes led_table[min%10]; 
При компиляции пишет declaration sintax error;

И как потом эту функцию прерываний выводить?
Я понял, что с программизмом у тебя никак...
вот тебе проект ... смотри, изучай
21.01.2016 09:53
ДмитрийТ
PHP код:
rtc_get_time(&hour, &min, &sec);
DesHours led_table[hour/10];
Hours = (led_table[hour%10]^0x01); // Надо же точечку нарисовать :)
DesMinutes led_table[min/10];
Minutes led_table[min%10]; 
При компиляции пишет declaration sintax error;

И как потом эту функцию прерываний выводить?
20.01.2016 21:24
Debian и что конкретно не работает?
вообще у тебя или код неправильный
или ты чего-то не договариваешь

я тут набросал специально, у меня все работает
и вообще правильнее делать прорисовку по прерыванию таймера, тогда играясь задержкой свечения сегмента можно управлять яркостью индикатора
прямо в лоб!
PHP код:
interrupt [TIM0_OVFvoid timer0_ovf_isr(void)
{
TIFR0 &= ~(<< TOV0); // reset interrupt flag
SS=0;
spi(0x08);
spi(DesHours);
SS=1;
delay_us(100);
SS=0;
spi(0x04);
spi(Hours);
SS=1;
delay_us(100);
SS=0;
spi(0x02);
spi(DesMinutes);
SS=1;
delay_us(100);
SS=0;
spi(0x01);
spi(Minutes);
SS=1;
delay_us(100);
SS=0;

в CodeVision есть библиотека работы с DS1307, которая сама собирает байты как надо...для ленивых!
тогда можно сделать еще проще

PHP код:
rtc_get_time(&hour, &min, &sec);
DesHours led_table[hour/10];
Hours = (led_table[hour%10]^0x01); // Надо же точечку нарисовать :)
DesMinutes led_table[min/10];
Minutes led_table[min%10]; 
Учись, Студент!
20.01.2016 18:12
ДмитрийТ
Цитата:
Сообщение от Debian Посмотреть сообщение
как-то так:

PHP код:
#include <spi.h> 
#define SS PORTB.2 
 
typedef unsigned char byte
typedef unsigned long ulong
 
byte led_table[10]={0b00000011,0b10011111,0b00100101,0b00001101,0b10011001,0b01001001,0b01000001,0b00011111,0b00000001,0b00001001}; 
ulong dig_data=0
byte dig_num=0//Отображаемый разряд
//----------------------------------------------------//
char Hours 0x00;
char DesHours =0x00;

char Minutes 0x00;
char DesMinutes =0x00;

// тут забираем данные из часов DS1307
void GetTime (void){
Hours DsReadHours();
Minutes DsReadMinutes();
DesHours Hours & (~((1<<7)|(1<<6)));
DesHours >>=4// значения десятков часов
Hours &= (~((1<<7)|(1<<6)|(1<<5)|(1<<4))); // значения часов
DesMinutes Minutes >>4// Десятки минут
Minutes &= (~((1<<7)|(1<<6)|(1<<5)|(1<<4))); // Единицы минут
}

void show_dig() { 
SS=0//Ни чего не кажем 
if (dig_num==16) { // пятый разряд
dig_num++; 

spi(dig_num); //Отправляем байт для отображения разряда

if (dig_num == 1){
spi(led_table[DesHours]); //Получаем разряд из dig_data и отправляем 
}
if (
dig_num == 2){
spi(led_table[Hours]); //Получаем разряд из dig_data и отправляем 
}
if (
dig_num == 4){
spi(led_table[DesMinutes]); //Получаем разряд из dig_data и отправляем 
}
if (
dig_num == 8){
spi(led_table[Minutes]); //Получаем разряд из dig_data и отправляем байт с цифрой 

dig_num<<=1//Смещаем бит для отображения следующего разряда 
SS=1//Показываем разряд 


void main(void) { 
PORTB=0
DDRB=0x2C//Настраиваем порт для SPI 
ACSR=0x80//Отключаем компаратор 
//Включаем SPI 
//Биты будем отправлять LSB-MSB, т.е. от младших к старшим 
SPCR=0x70
SPSR=0
while (
1) {
GetTime ();
show_dig(); //Показываем разряды 
    
}

Ты только массив byte led_table подкорректируй под индикатор...ибо не понятно что там за какие знакоместа отвечает

хотя можно и без ДСки обойтись, повешать часовой кварц как тактирование таймера, поставить пред делитель, и по переполнению таймера в прерывание делать все черные дела
Попробовал код, и что то not worked.
19.01.2016 17:39
ДмитрийТ
Цитата:
Сообщение от Viper70 Посмотреть сообщение
Вот ссылку на статью нашел https://www.drive2.ru/l/7499184/
Вроде тут читал
Китайцы, это уже прохавали, и стали готовые модули выпускать.
19.01.2016 12:17
Viper70 Вот ссылку на статью нашел https://www.drive2.ru/l/7499184/
Вроде тут читал
19.01.2016 09:52
ДмитрийТ
Цитата:
Сообщение от Viper70 Посмотреть сообщение
В другом проекте смотрел, человек использовал микросхему mp3 плеера (такие в китайских поделках стоят) Там все также. мп3 или вав на карте СД. На вход микросхемы задается номер трека и громкость. И комманды плей, стоп
Валяется у меня где-то схема от китайского плеера. Там контроллер китайский с I2c интерфейсом, только даташитов китайцы не дают на них.
19.01.2016 01:09
Viper70 В другом проекте смотрел, человек использовал микросхему mp3 плеера (такие в китайских поделках стоят) Там все также. мп3 или вав на карте СД. На вход микросхемы задается номер трека и громкость. И комманды плей, стоп
18.01.2016 10:27
Debian Яркостью можно и так играться
18.01.2016 07:07
ДмитрийТ
Цитата:
Сообщение от Debian Посмотреть сообщение
все кнопки - один вывод контроллера
датчик - один вывод контроллера
ИК приемник? - один вывод контроллера
говорилка - ХЗ

шо это за фигня будет?
ты сначала с наворотами определись, а дпльше уже камень под задачи подбирать надо
"Говорилка " от сюда http://www.getchip.net/posts/087-att...alking-device/
На схеме не дорисованы : анемометр + 1, датчик- влажности + 1, 1 выход шим, чтобы яркостью 6х разрядного индиктора в зависимости от времени суток управлять.
В этой теме более 30 ответов(а). Нажмите здесь, чтобы перезагрузить эту тему.

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

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

Время на сервере: 15:59.

Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

vBulletin 3, Copyright © 2000-2024, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co