реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> помогите с регистром сдвига
sadfeel
сообщение Feb 15 2011, 18:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 7-10-10
Пользователь №: 59 988



Всем привет, подключил регистр сдвига 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);
    };
}
}



помогите пожалуста!
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 15 2011, 18:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(sadfeel @ Feb 15 2011, 21:18) *
PORTB.0 - C1, PORTB.1 - Data (регистр)
Что-то я не понял... На рисунке, ведь, наоборот! Или как?
Go to the top of the page
 
+Quote Post
sadfeel
сообщение Feb 15 2011, 18:42
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 7-10-10
Пользователь №: 59 988



Цитата(Палыч @ Feb 15 2011, 21:31) *
Что-то я не понял... На рисунке, ведь, наоборот! Или как?



у меня мега8535, там тини, я подключил так.....
Go to the top of the page
 
+Quote Post
yakub_EZ
сообщение Feb 15 2011, 21:43
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 329
Регистрация: 6-12-08
Из: Москва
Пользователь №: 42 252



Добрый вечер!
По моему мнению, в момент вывода надо на выход 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
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Feb 16 2011, 05:22
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



У меня это реализуется примерно так:
Код
#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 МГц, поэтому никаких задержек не надо!

Сообщение отредактировал alexeyv - Feb 16 2011, 05:28
Go to the top of the page
 
+Quote Post
XVR
сообщение Feb 16 2011, 10:26
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата
только вместо индикатора у меня табло 8х8
У 'табло 8х8' должно быть как минимум 16 входов (8 столбцов + 8 строк). С HC164 идет 8, куда подсоединены остальные 8?

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

Вы что от него хотели получить?
Go to the top of the page
 
+Quote Post
sadfeel
сообщение Feb 16 2011, 17:11
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 7-10-10
Пользователь №: 59 988



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

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



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

хочу попрактиковаться с регистром сдвига......
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 16 2011, 17:12
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(XVR @ Feb 16 2011, 13:26) *
Что вы в него записываете, то он и 'вписывает' Вы что от него хотели получить?
Очевидно, что человек только учится работать со сдвиговым регистром. Также очевидно, что получить хотел "бегущий" ноль на выходах...
Go to the top of the page
 
+Quote Post
sadfeel
сообщение Feb 16 2011, 18:18
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 7-10-10
Пользователь №: 59 988



Всем спасибо, нашел ошибку, вы не поверите но такое не с каждым случается, если присмотреться, то можно увидеть что я вместо 0b00000011 написал 0x00000011, ну что ж поделаешь....но зато есть другая проблема,


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

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

не помню какие выставил фъюзы....я их сбил потом )))
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 16 2011, 18:30
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(sadfeel @ Feb 16 2011, 21:18) *
не дайте умереть меге!!!
Если воспользоваться поиском, то решение легко найдется - внешняя тактовая частота...
Go to the top of the page
 
+Quote Post
sadfeel
сообщение Feb 16 2011, 19:02
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 7-10-10
Пользователь №: 59 988



Цитата(Палыч @ Feb 16 2011, 22:30) *
Если воспользоваться поиском, то решение легко найдется - внешняя тактовая частота...



посмотрел по форуму, пишут что можно взять частоту с программатора stk200, но не написано от куда....не подскажите где оно там?)
Go to the top of the page
 
+Quote Post
2891oleg
сообщение Feb 16 2011, 21:09
Сообщение #12





Группа: Новичок
Сообщений: 5
Регистрация: 1-02-11
Из: Запорожье
Пользователь №: 62 620



Насколько я знаю, на выходе LED в этом программаторе около 100 кГц

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

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

подключать на вывод XTAL1 МК.
Go to the top of the page
 
+Quote Post
sadfeel
сообщение Feb 18 2011, 15:19
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 7-10-10
Пользователь №: 59 988



Купил новый МК....) потом разберусь со старым.....


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

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

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

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

может кто встречался с таким, подскажите плиз что делать?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 18 2011, 17:00
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(sadfeel @ Feb 18 2011, 18:19) *
подскажите плиз что делать?
Не очень понятно объяснили проблему... Отвечаю как понял вопрос. Вывод на светодиодную матрицу осуществляется так:
1. Выдаём данные на столбец, соответствующие всем погашенным светодиодам столбца
2. Включаем\переключаем столбец
3. Выдаём данные на диоды столбца в соответствии с "рисунком"
4. Ничего не делаем некоторое время и - на п.1
При такой последовательности действий паразитных свечений диодов при переключении столбцов не будет
Go to the top of the page
 
+Quote Post
lisstret
сообщение Mar 18 2011, 10:45
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 10-06-10
Из: Владивосток
Пользователь №: 57 835



Мне кажется здесь красиво было бы использовать SPI интерфейс. Зачем заниматься ногодрыганьем когда есть уже готовый контроллер, только управляй им.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01595 секунд с 7
ELECTRONIX ©2004-2016