• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!

Alex

Moderators
  • Публикации

    4 585
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    3

Последний раз Alex выиграл 3 декабря

Публикации Alex были самыми популярными!

Репутация

524 Очень хороший

О Alex

  • Звание
    Убиватель МК
  • День рождения 01.01.1981

Контакты

  • ICQ
    461500721

Информация

  • Пол
    Мужчина
  • Интересы
    Микроконтроллеры, программирование.

Электроника

  • Стаж в электронике
    10-20 лет

Посетители профиля

195 180 просмотров профиля
  1. Вопросы От Начинающих По Мк

    Ну, вообще, запись и чтение - разные операции для подчинённых, и между ними должен быть рестарт. Почему в даташите только старт написан - не понимаю... Но, если работает только со стартом, то оставьте только его
  2. max7219 матрица и avr , перевернуть символы

    Это самое главное !
  3. Дак это - обычная переменная, в которой, судя по её названию, что-то суммируется
  4. max7219 матрица и avr , перевернуть символы

    Создай функцию обновления матрицы : void matrix_update(void){ unsigned char k, a, z; for(a=0; a<8; a++){ z=a*4; CS0; for(k=z; k<z+4; k++) led_out(a+1, data[k]); CS1; } } И вызывай её по необходимости : int i; for(i=MAX_X, i>-50; i--){ matrix_puts_xy(i, 0, "Hello world !!!"); matrix_update(); Delay(50); } Да незачто
  5. max7219 матрица и avr , перевернуть символы

    Да очень просто ) Добавь пару макросов #define MAX_X (4*8) #define MAX_Y (8) И в функции set_pixel сделай проверку : if((x<0)||(x>=MAX_X)) return; if((y<0)||(y>=MAX_Y)) return; И начинай выводить текст в цикле, по координатам от (MAX_X) до (- размер текста в пикселах). Например, размер текста = 50 пикселей. Тогда код будет : int i; for(i=MAX_X, i>-50; i--){ matrix_puts_xy(i, 0, "Hello world !!!"); Delay(50); } Теперь его можешь крутить хоть по X, хоть по Y И ещё. Вот этот вод код : for(a=0; a<8; a++){ z=a*4; CS0; for(k=z; k<z+4; k++) led_out(a+1, data[k]); CS1; } это вывод буфера data в матрицы. Его вовсе не обязательно выводить после каждого пиксела. Достатчно обновлять матрицу после вывода символа, или строки, или когда нужно её обновить.
  6. max7219 матрица и avr , перевернуть символы

    Ага, смущала меня эта единичка. Всё-таки она виновная была Блин, а точно... Почему я её туда воткнул, не понимаю ...
  7. max7219 матрица и avr , перевернуть символы

    Нету : void string(char char_, char pos) { char y=0, x=0; for(y=0; y<8; y++) { for(x=0; x<5; x++) { if(Font5x7[char_][x]&(1<<y))xy_max7219(y, x+pos, 1); else xy_max7219(y, x+pos, 0); } } } char_ прямиком выбирает символ. И я подумал, что ты таблицу сменил. Причём я внимание на это обратил. В общем, если завтра на работу попаду - гляну, что я там делал. Сейчас по шиту не очень хочется сидеть и разбираться. Но помню, что запустилось всё без каких-либо проблем...
  8. max7219 матрица и avr , перевернуть символы

    Ой. Сейчас глянул шит на max7219, оказывается, я совсем недавно (где-то месяца 3 назад), баловался с ней Вот такая платка у меня валяется на работе - http://tixer.ru/catalog/modules/indicate-modules/modul_led_indikatorov_8_znakomest/ Завтра на работе гляну что там я кодил... Блин, а я же специально не стал делать -32, т.к. в твоём коде этого нет... А в моём, который я выкладывал до этого - есть.
  9. max7219 матрица и avr , перевернуть символы

    Мистика...
  10. max7219 матрица и avr , перевернуть символы

    Ну вот, что-то в этой функции не то.
  11. max7219 матрица и avr , перевернуть символы

    Почему так думаешь ? Попробуй просто повыводить пикселы. Скорее всего, проблема в функции вывода пиксела. Смена координат местами что дала ?
  12. max7219 матрица и avr , перевернуть символы

    Такс, давай разбираться... Закинь в функцию matrix_set_pixel свой код вывода пиксела, который работал. И проверь.
  13. max7219 матрица и avr , перевернуть символы

    Что-то с matrix_set_pixel не то... Попробуй поменять местами координаты: void matrix_set_pixel(int y , int x, char val){ ........ ......... ......... Блин, тяжело так, без железа ... А вот это изменение, вообще, заработало : ?
  14. Вопросы От Начинающих По Мк

    Первое. После записи должна быть выдержана пауза, согласно даташиту. Обычно это около 5 мс. Второе. При чтении, после записи адреса, необходимо сделать рестарт (стоп->старт), а не просто старт.
  15. max7219 матрица и avr , перевернуть символы

    Далее, вывод символа. void matrix_putc(unsigned char ch){ unsigned char i, a, tmp; for(i=0; i<5; i++){ tmp=Font5x7[ch][i]; for(a=0; a<7; a++){ matrix_set_pixel(x_pos , y_pos, tmp&(1<<a)); y_pos+=1; } y_pos-=7; x_pos+=1; } x_pos+=1; } Блин, плохо писать вслепую и в форумном редакторе Проверяем : matrix_set_pos(5,5); matrix_putc('A'); Они будут использоваться. Дело в том, что правильнее всегда держать в памяти текущую позицию курсора и уже относительно её выводить данные на экран. Это позволит выводить текст символ за символом, не пересчитывая постоянно координаты, а просто их смещая на нужную позицию. Дальше вообще всё просто. Как кубики складываешь. Функция вывода строки : void matrix_puts(const char *str){ while(*str) matrix_putc(*str++); } Вывод строки по координатам : void matrix_puts_xy(int x, int y, const char *str){ matrix_set_pos(x, y); matrix_puts(str); } Итог : /* matrix.c */ static int x_pos, y_pos; static void matrix_set_pixel(int x , int y, char val){ unsigned char a, z; unsigned char offset = x*4+(y/8-1); unsigned char mask = 1<<(7-y%8); if(val) data[offset]|=mask; else data[offset]&=~mask; for(a=0; a<8; a++){ z=a*4; CS0; led_out(a+1, data[z]); led_out(a+1, data[z+1]); led_out(a+1, data[z+2]); led_out(a+1, data[z+3]); CS1; } } void matrix_set_pos(int x, int y){ x_pos=x; y_pos=y; } void matrix_putc(unsigned char ch){ unsigned char i, a, tmp; for(i=0; i<5; i++){ tmp=Font5x7[ch][i]; for(a=0; a<7; a++){ matrix_set_pixel(x_pos , y_pos, tmp&(1<<a)); y_pos+=1; } y_pos-=7; x_pos+=1; } x_pos+=1; } void matrix_puts(const char *str){ while(*str) matrix_putc(*str++); } void matrix_puts_xy(int x, int y, const char *str){ matrix_set_pos(x, y); matrix_puts(str); } /* matrix.h */ extern void matrix_set_pos(int x, int y); extern void matrix_putc(unsigned char ch); extern void matrix_puts(const char *str); extern void matrix_puts_xy(int x, int y, const char *str); Пробуем