Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: помогите с регистром сдвига
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
sadfeel
Всем привет, подключил регистр сдвига 74HC164 к меге8535, но никак не удаётся управлять им....мучаюсь уже 3тий день..... подключал как сдесь
только вместо индикатора у меня табло 8х8

проблема в том что не наблюдаю никаких изменений, а иногда регистр ведет себя странно, вписывает левые значения) привожу текст проги :

Код
#include <MEGA8535.h>

char i;

void main(void)
{
  DDRA = 0b11111111;
  PORTA = 0b11111111;            //тут висят + матрицы  (плюсы включают строки)
  
  DDRB = 0x00000011;            
  PORTB = 0b00000010;           //PORTB.0 - C1, PORTB.1 - Data (регистр)
                  

   for (i = 0; i<= 7; i++) {       //очищаем регистр (записываем во все выводы 1)
      PORTB.0 = 0;
      PORTB.0 = 1;
    };
  
while (1)
{  
   PORTB.1 = 0;                      //включаем первый столбец
   PORTB.0 = 0;
   PORTB.0 = 1;
   delay_ms(100);
   PORTB.1 = 1;

   for (i = 0; i<= 6; i++) {       //как-бы выводим каждый раз новый столбец матрицы справа налево
      PORTB.0 = 0;
      PORTB.0 = 1;
      delay_ms(100);
    };
}
}



помогите пожалуста!
Палыч
Цитата(sadfeel @ Feb 15 2011, 21:18) *
PORTB.0 - C1, PORTB.1 - Data (регистр)
Что-то я не понял... На рисунке, ведь, наоборот! Или как?
sadfeel
Цитата(Палыч @ Feb 15 2011, 21:31) *
Что-то я не понял... На рисунке, ведь, наоборот! Или как?



у меня мега8535, там тини, я подключил так.....
yakub_EZ
Добрый вечер!
По моему мнению, в момент вывода надо на выход CLK давать меандр, типа такого:
Код
PORTB.1 = 1;
delay_ms(100);
PORTB.1 = 0;
delay_ms(100);

А на вход данных - DATA собственно последовательность данных
Код
if (d[i])
{
PORTB.0 = 1;
}
delay_ms(100);
PORTB.0 = 0;
delay_ms(100);

где d[i]- биты данных
Учитывая параллельную работу DATA/CLK, должно получится что то типа
Код
for (i=0;i<7;i++)
{
if (d[i])
{
PORTB.0 = 1;
}
PORTB.1 = 1;
delay_ms(100);
PORTB.0 = 0;
PORTB.1 = 0;
delay_ms(100);
}

Как то так laughing.gif
alexeyv
У меня это реализуется примерно так:
Код
#define  tb_clock_hi()     PORTB.1=1
#define  tb_clock_lo()     PORTB.1=0
#define  tb_data_hi()      PORTB.0=1
#define  tb_data_lo()      PORTB.0=0

void shift_byte(byte byt)
{
  byte i=0x01;
  while(i)
   {
    if(byt & i) tb_data_hi ();
      else      tb_data_lo ();
    tb_clock_hi ();
    tb_clock_lo ();
    i <<=1;
   }
}


P.S. Максимальная частота HC164 при V=5В равна 24 МГц, поэтому никаких задержек не надо!
XVR
Цитата
только вместо индикатора у меня табло 8х8
У 'табло 8х8' должно быть как минимум 16 входов (8 столбцов + 8 строк). С HC164 идет 8, куда подсоединены остальные 8?

Кроме того, ваша прога вообще делает непонятно что.
Цитата
а иногда регистр ведет себя странно, вписывает левые значения
Что вы в него записываете, то он и 'вписывает' sm.gif

Вы что от него хотели получить?
sadfeel
Цитата(XVR @ Feb 16 2011, 14:26) *
У 'табло 8х8' должно быть как минимум 16 входов (8 столбцов + 8 строк). С HC164 идет 8, куда подсоединены остальные 8?

Вы что от него хотели получить?



PORTB - тут висят плюсы от матрицы, минусы идут на регистр....

хочу попрактиковаться с регистром сдвига......
Палыч
Цитата(XVR @ Feb 16 2011, 13:26) *
Что вы в него записываете, то он и 'вписывает' Вы что от него хотели получить?
Очевидно, что человек только учится работать со сдвиговым регистром. Также очевидно, что получить хотел "бегущий" ноль на выходах...
sadfeel
Всем спасибо, нашел ошибку, вы не поверите но такое не с каждым случается, если присмотреться, то можно увидеть что я вместо 0b00000011 написал 0x00000011, ну что ж поделаешь....но зато есть другая проблема,


вчера от злости начал менять фьюзы.....думал что то с кварцем нето) доменялся, теперь 8535 не перепрошивается, менял фьюзы

cksel sut ckopt (просто от фанаря в них вбивал значения) у меня стоял кварц мини версия на 16 МГц..... сейчас не перепрошивается....как я думаю, я поставил какую-то комбинацию, наверно на другой кварц, если кто сталкивался с таким пожалуста не дайте умереть меге!!! =)

не помню какие выставил фъюзы....я их сбил потом )))
Палыч
Цитата(sadfeel @ Feb 16 2011, 21:18) *
не дайте умереть меге!!!
Если воспользоваться поиском, то решение легко найдется - внешняя тактовая частота...
sadfeel
Цитата(Палыч @ Feb 16 2011, 22:30) *
Если воспользоваться поиском, то решение легко найдется - внешняя тактовая частота...



посмотрел по форуму, пишут что можно взять частоту с программатора stk200, но не написано от куда....не подскажите где оно там?)
2891oleg
Насколько я знаю, на выходе LED в этом программаторе около 100 кГц

Цитата(2891oleg @ Feb 16 2011, 23:00) *
Насколько я знаю, на выходе LED в этом программаторе около 100 кГц

Вроде как идет с пина 8 LPT через буфер. Но ты перепроверь, т.к. своей схемы под рукой сейчас нет.

подключать на вывод XTAL1 МК.
sadfeel
Купил новый МК....) потом разберусь со старым.....


пишу прогу для бегущей строки, основу уже накатал, все движется все круто, но вот есть одна проблема. я обновляю ин-фо на табло вот так:

PORTA = текущий столбец; //записываем в буфер первый столбец справа
PORTB.1 = 0; //впихиваем в регистр 0
PORTB.0 = 0;
PORTB.0 = 1; //обновляем

тоесть сначала включаю плюсы матрицы от МК, а потом подключаю нужную ножку в регистре сдвига....

проблема в том, что из-за того что включение происходит не одновременно, наблюдается некая тень, тоесть столбец, который находится перед тем, что выводим, тоже слегка видно.....а хотелось бы, чтобы выводился только сам рисунок, без "тени"

может кто встречался с таким, подскажите плиз что делать?
Палыч
Цитата(sadfeel @ Feb 18 2011, 18:19) *
подскажите плиз что делать?
Не очень понятно объяснили проблему... Отвечаю как понял вопрос. Вывод на светодиодную матрицу осуществляется так:
1. Выдаём данные на столбец, соответствующие всем погашенным светодиодам столбца
2. Включаем\переключаем столбец
3. Выдаём данные на диоды столбца в соответствии с "рисунком"
4. Ничего не делаем некоторое время и - на п.1
При такой последовательности действий паразитных свечений диодов при переключении столбцов не будет
lisstret
Мне кажется здесь красиво было бы использовать SPI интерфейс. Зачем заниматься ногодрыганьем когда есть уже готовый контроллер, только управляй им.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.