Специалист
Регистрация: 24.11.2007
Сообщений: 2,637
Репутация: 265
![]() ![]() ![]() |
Цитата:
Из этого руководства вы узнаете, как управлять 16 светодиодами используя всего 3 линии управления. Мы осуществим это путем последовательной передачи данных в сдвиговые регистры 74HC595.
|
||
Оценка
|
Специалист
|
А вы знаете какие именно ошибки в программе. Или пробовали компилировать и получили ошибки при компиляции?
Как таковых ошибок в программе нет, но есть один нюанс, который был задуман автором, с целью использовать данный пример на разных контроллерах. Всего навсего... Так же один момент - не указана тактовая частота в программе, но я не считаю что это ошибка, а даже наоборот, с этим параметром можно "поиграться" и увидеть результаты и изменения. Единственное, в тексте описания не говорится о том, что мега настроена на работу от внутреннего осциллятора. У меня скомпилировать получилось, все без ошибок (AVRStudio).
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота. |
||
Оценка
|
Специалист
|
AVRStudio + компилятор WinAVR и пишем на Си в студии.
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота. |
||
Оценка
|
Специалист
|
Используем: include <avr/io.h> и include <util/delay.h>
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота. |
||
Оценка
|
Новичок
Регистрация: 29.04.2011
Сообщений: 4
Репутация: 10
![]() |
../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.
|
||
Оценка
|
Специалист
|
Разобрался с регистром или проблемы остались (а то был занят, поэтому не отвечал). Если чего, выложи проект в протеусе, гляну.
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота. |
||
Оценка
|
Новичок
Регистрация: 01.05.2020
Сообщений: 7
Репутация: 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 сохраняется в сдвиговом регистре, при этом данные..." |
||
Оценка
|
Обратная связь РадиоЛоцман Вверх |