Degson: клеммы, корпуса, источники питания

Обсуждение: Знакомство с микросхемой регистра сдвига 74HC595 - управление 16 светодиодами

Страница 1 из 5
Специалист
 
Аватар для Robot Rlocman
 
Регистрация: 24.11.2007
Сообщений: 2,532
Репутация: 260
251 0
14 0
 
29.04.2011 13:38 #1
Цитата:
Из этого руководства вы узнаете, как управлять 16 светодиодами используя всего 3 линии управления. Мы осуществим это путем последовательной передачи данных в сдвиговые регистры 74HC595.
Подробнее: Знакомство с микросхемой регистра сдвига 74HC595 - управление 16 светодиодами
Оценка
В многообразии литиевых батареек и аккумуляторов нет какого-то универсального или идеального варианта. Выбирая тот или иной вариант для питания устройства, разработчику приходится оперировать множеством параметров, используя наиболее оптимальное их сочетание для каждого приложения. Разберем параметры для различных приложений.
Новичок
 
Регистрация: 29.04.2011
Сообщений: 4
Репутация: 10
 
29.04.2011 13:38 #2
В програмке на 8 светодиодах есть ошибки... Исправьте, плиз...
Оценка
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 418
406 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
29.04.2011 19:48 #3
А вы знаете какие именно ошибки в программе. Или пробовали компилировать и получили ошибки при компиляции?
Как таковых ошибок в программе нет, но есть один нюанс, который был задуман автором, с целью использовать данный пример на разных контроллерах. Всего навсего...
Так же один момент - не указана тактовая частота в программе, но я не считаю что это ошибка, а даже наоборот, с этим параметром можно "поиграться" и увидеть результаты и изменения. Единственное, в тексте описания не говорится о том, что мега настроена на работу от внутреннего осциллятора.

У меня скомпилировать получилось, все без ошибок (AVRStudio).
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
Новичок
 
Регистрация: 29.04.2011
Сообщений: 4
Репутация: 10
 
03.05.2011 11:59 #4
Я компелировал в CodeVisionAVR. Ошибки в delay_ms это мелочи, компилятор не понимает _BV() и bit_is_set. Схему тестирую в протеусе. А как в АВРстудио писать на С++, там же вроде ассемблер...
Оценка
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 418
406 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
03.05.2011 12:36 #5
AVRStudio + компилятор WinAVR и пишем на Си в студии.
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
Новичок
 
Регистрация: 29.04.2011
Сообщений: 4
Репутация: 10
 
03.05.2011 13:10 #6
Поставил WinAVR, не понимает delay.h Какая библиотека в аврстудио для паузы?
Оценка
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 418
406 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
03.05.2011 16:24 #7
Используем: include <avr/io.h> и include <util/delay.h>
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
Новичок
 
Регистрация: 29.04.2011
Сообщений: 4
Репутация: 10
 
04.05.2011 06:43 #8
../new.c:2:26: util/delay.h: No such file or directory
текст программы в АВРСтудио 4:
#include <avr/io.h>
#include <avr/delay.h>
#define DS_PORT PORTC
#define DS_PIN 0
#define ST_CP_PORT PORTC
#define ST_CP_PIN 1
#define SH_CP_PORT PORTC
#define SH_CP_PIN 2
#define DS_low() DS_PORT&=~_BV(DS_PIN)
#define DS_high() DS_PORT|=_BV(DS_PIN)
#define ST_CP_low() ST_CP_PORT&=~_BV(ST_CP_PIN)
#define ST_CP_high() ST_CP_PORT|=_BV(ST_CP_PIN)
#define SH_CP_low() SH_CP_PORT&=~_BV(SH_CP_PIN)
#define SH_CP_high() SH_CP_PORT|=_BV(SH_CP_PIN)
//Define functions
//======================
int i;
void ioinit(void);
void output_led_state(unsigned char __led_state);
//======================
void ioinit (void)
{
DDRC = 0b00000111; //1 = output, 0 = input
PORTC = 0b00000000;
}
void output_led_state(unsigned char __led_state)
{
SH_CP_low();
ST_CP_low();
for (i=0;i<8;i++)
{
if (bit_is_set(__led_state, i))
DS_high();
else
DS_low();
SH_CP_high();
SH_CP_low();
}
ST_CP_high();
}
int main (void)
{
ioinit(); //Setup IO pins and defaults
while(1)
{
for (i=7; i>0; i--)
{
output_led_state(_BV(i));
_delay_ms(100);
}
for (i=0; i<8; i++)
{
output_led_state(_BV(i));
_delay_ms(100);
}
}
}
Запускаю в протеусе. Один огонек горит =(((
Последний раз редактировалось Crazy_Volt19; 04.05.2011 в 10:11.
Оценка
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 418
406 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
10.05.2011 09:17 #9
Разобрался с регистром или проблемы остались (а то был занят, поэтому не отвечал). Если чего, выложи проект в протеусе, гляну.
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
Новичок
 
Регистрация: 01.05.2020
Сообщений: 7
Репутация: 10
0 2
0 0
 
01.05.2020 18:42 #10

Вопросец

void output_led_state(unsigned char __led_state)
{
SH_CP_low();
ST_CP_low();

........ т.е. на SH_CP и ST_CP "подается 0", далее по коду:

if (bit_is_set(__led_state, i))
DS_high();

.... т.е. на DS подается единица. Но как тогда эта единица сохраниться в в сдвиговом регистре ?

Для сохранения нулей условия выполняются, цитирую статью: "Когда уровень на выводе 11 (SH_CP, иногда обозначается как SRCLK) переходит из низкого в высокий, значение на выводе DS сохраняется в сдвиговом регистре, при этом данные..."
Оценка
Ответ
Страница 1 из 5
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

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

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 00:37.
Обратная связь РадиоЛоцман Вверх