sadfeel 0 15 февраля, 2011 Опубликовано 15 февраля, 2011 · Жалоба Всем привет, подключил регистр сдвига 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); }; } } помогите пожалуста! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 15 февраля, 2011 Опубликовано 15 февраля, 2011 · Жалоба PORTB.0 - C1, PORTB.1 - Data (регистр)Что-то я не понял... На рисунке, ведь, наоборот! Или как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sadfeel 0 15 февраля, 2011 Опубликовано 15 февраля, 2011 · Жалоба Что-то я не понял... На рисунке, ведь, наоборот! Или как? у меня мега8535, там тини, я подключил так..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yakub_EZ 0 15 февраля, 2011 Опубликовано 15 февраля, 2011 · Жалоба Добрый вечер! По моему мнению, в момент вывода надо на выход 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- биты данных Учитывая параллельную работу 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 16 февраля, 2011 Опубликовано 16 февраля, 2011 (изменено) · Жалоба У меня это реализуется примерно так: #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 МГц, поэтому никаких задержек не надо! Изменено 16 февраля, 2011 пользователем alexeyv Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 16 февраля, 2011 Опубликовано 16 февраля, 2011 · Жалоба только вместо индикатора у меня табло 8х8У 'табло 8х8' должно быть как минимум 16 входов (8 столбцов + 8 строк). С HC164 идет 8, куда подсоединены остальные 8? Кроме того, ваша прога вообще делает непонятно что. а иногда регистр ведет себя странно, вписывает левые значенияЧто вы в него записываете, то он и 'вписывает' :) Вы что от него хотели получить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sadfeel 0 16 февраля, 2011 Опубликовано 16 февраля, 2011 · Жалоба У 'табло 8х8' должно быть как минимум 16 входов (8 столбцов + 8 строк). С HC164 идет 8, куда подсоединены остальные 8? Вы что от него хотели получить? PORTB - тут висят плюсы от матрицы, минусы идут на регистр.... хочу попрактиковаться с регистром сдвига...... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 16 февраля, 2011 Опубликовано 16 февраля, 2011 · Жалоба Что вы в него записываете, то он и 'вписывает' Вы что от него хотели получить? Очевидно, что человек только учится работать со сдвиговым регистром. Также очевидно, что получить хотел "бегущий" ноль на выходах... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sadfeel 0 16 февраля, 2011 Опубликовано 16 февраля, 2011 · Жалоба Всем спасибо, нашел ошибку, вы не поверите но такое не с каждым случается, если присмотреться, то можно увидеть что я вместо 0b00000011 написал 0x00000011, ну что ж поделаешь....но зато есть другая проблема, вчера от злости начал менять фьюзы.....думал что то с кварцем нето) доменялся, теперь 8535 не перепрошивается, менял фьюзы cksel sut ckopt (просто от фанаря в них вбивал значения) у меня стоял кварц мини версия на 16 МГц..... сейчас не перепрошивается....как я думаю, я поставил какую-то комбинацию, наверно на другой кварц, если кто сталкивался с таким пожалуста не дайте умереть меге!!! =) не помню какие выставил фъюзы....я их сбил потом ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 16 февраля, 2011 Опубликовано 16 февраля, 2011 · Жалоба не дайте умереть меге!!!Если воспользоваться поиском, то решение легко найдется - внешняя тактовая частота... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sadfeel 0 16 февраля, 2011 Опубликовано 16 февраля, 2011 · Жалоба Если воспользоваться поиском, то решение легко найдется - внешняя тактовая частота... посмотрел по форуму, пишут что можно взять частоту с программатора stk200, но не написано от куда....не подскажите где оно там?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
2891oleg 0 16 февраля, 2011 Опубликовано 16 февраля, 2011 · Жалоба Насколько я знаю, на выходе LED в этом программаторе около 100 кГц Насколько я знаю, на выходе LED в этом программаторе около 100 кГц Вроде как идет с пина 8 LPT через буфер. Но ты перепроверь, т.к. своей схемы под рукой сейчас нет. подключать на вывод XTAL1 МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sadfeel 0 18 февраля, 2011 Опубликовано 18 февраля, 2011 · Жалоба Купил новый МК....) потом разберусь со старым..... пишу прогу для бегущей строки, основу уже накатал, все движется все круто, но вот есть одна проблема. я обновляю ин-фо на табло вот так: PORTA = текущий столбец; //записываем в буфер первый столбец справа PORTB.1 = 0; //впихиваем в регистр 0 PORTB.0 = 0; PORTB.0 = 1; //обновляем тоесть сначала включаю плюсы матрицы от МК, а потом подключаю нужную ножку в регистре сдвига.... проблема в том, что из-за того что включение происходит не одновременно, наблюдается некая тень, тоесть столбец, который находится перед тем, что выводим, тоже слегка видно.....а хотелось бы, чтобы выводился только сам рисунок, без "тени" может кто встречался с таким, подскажите плиз что делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 18 февраля, 2011 Опубликовано 18 февраля, 2011 · Жалоба подскажите плиз что делать?Не очень понятно объяснили проблему... Отвечаю как понял вопрос. Вывод на светодиодную матрицу осуществляется так: 1. Выдаём данные на столбец, соответствующие всем погашенным светодиодам столбца 2. Включаем\переключаем столбец 3. Выдаём данные на диоды столбца в соответствии с "рисунком" 4. Ничего не делаем некоторое время и - на п.1 При такой последовательности действий паразитных свечений диодов при переключении столбцов не будет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lisstret 0 18 марта, 2011 Опубликовано 18 марта, 2011 · Жалоба Мне кажется здесь красиво было бы использовать SPI интерфейс. Зачем заниматься ногодрыганьем когда есть уже готовый контроллер, только управляй им. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться