Jump to content

Laz

Members
  • Content Count

    13
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Laz

  • Rank
    Новенький

Информация

  • Город
    Н.Новгород

Электроника

  • Стаж в электронике
    1-2 года
  1. Сие тема не актуальна, ибо понимание посетило меня.
  2. Геннадий Я писал уже, что при исправлении портов в том коде что я привел, компилятор начинает ругаться на неизвестную функцию , PORTB|= _BV(E); // Импульс записи скорее не хватает понимания языка чем религии
  3. Программа AVRStudio 4работаю на железе на вот такой прелести=) По вопросу "И где код?" интернет зависал(
  4. Всем здрасте! Ребят подскажите, я в Си не очень хорош, но так уж вышло что пришлось. Есть программа для графического ЖК, написана под atmega8. При компиляции на amega16 ошибок не выдает но и ничего не показывает. Нужно для правильного перевода на atmega16? Танцы с бубном не помогают...я пробывал =) Есть вариант что напутаны порты в\в даже глядя по схемам они разные, при исправлении портов в коде компилятор начинает ругатся на неизвестную функцию(((( Вот код. #include <avr/io.h> #include "symbol.h" #define DI 0 #define RW 1 #define E 2 #define CS1 3 #define CS2 4 #define RST 5 void pause (unsigned int a) { unsigned int i; for (i=a;i>0;i--) ; } void lcd_dat (unsigned char data) { PORTD=data; //Выводим данные PORTB|=_BV(DI); //Говорим дисплею что передаются данные asm("nop"); PORTB|= _BV(E); //Импульс записи asm("nop"); PORTB&=~_BV(E); PORTB&=~_BV(DI); } void lcd_com (unsigned char comm) { PORTD=comm; //Выводим команду asm("nop"); PORTB|= _BV(E); // Импульс записи asm("nop"); PORTB&=~ _BV(E); } void gotoxy (unsigned char x, unsigned char y) { if (x<64) PORTB|=_BV(CS1); //Если x<64 включаем CS1 else { PORTB|=_BV(CS2); //else включаем CS2 x=x-64; } lcd_com(0x40+x); //Выставляем X координату lcd_com(0xb8+y/8); //Выставляем Y координату } void clear_screen (void) { unsigned char i,j; PORTB|=_BV(CS1)|_BV(CS2); //Включаем оба чипа for (j=0;j<8;j++) { lcd_com(0xb8+j); for (i=0;i<64;i++) lcd_dat(0x00); //Очищаем } } void wg12864_init(void) { DDRD=0xff; //PD0-7 как выхода PORTD=0x00; PORTB=_BV(RST)|_BV(CS1)|_BV(CS2); //Включаем оба чипа DDRB=_BV(DI)|_BV(RW)|_BV(E)|_BV(CS1)|_BV(CS2)|_BV(RST); //PB0-5 как выхода asm("nop"); lcd_com(0x3f); //Разрешаем отображение lcd_com(0xc0); //Устанавливаем начало отображения lcd_com(0x40); //Ставим X=0 lcd_com(0xb8); //Ставим Y=0 clear_screen(); PORTB&=~(_BV(CS1)|_BV(CS2)); } void put_pixel (const unsigned char x, const unsigned char y, const unsigned char color) { unsigned char temp=0; PORTB=_BV(RST); if ( (x>128)||(y>64) ) return; gotoxy (x,y); PORTD=0xff; DDRD=0x00; //PD0-7 как входа PORTB|=(_BV(RW)|_BV(DI)); //Считываем данные pause(1); PORTB|= _BV(E); asm("nop"); PORTB&=~_BV(E); asm("nop"); PORTB|= _BV(E); asm("nop"); temp=PIND; PORTB&=~_BV(E); if (color==1) temp|= _BV(y%8); //Выставляем/снимаем нужный нам бит else temp&=~_BV(y%8); PORTB&=~(_BV(RW)|_BV(DI)); DDRD=0xff; //PD0-7 как выхода asm("nop"); gotoxy(x,y); //Переходим к X,Y lcd_dat(temp); //Записываем данные PORTB=_BV(RST); } int sign (int x) { if (x<0) return -1; if (x>0) return 1; return 0; } int abs (int x) { if (x<0) return -x; else return x; } void line (unsigned char x1,unsigned char y1,unsigned char x2, unsigned char y2,unsigned char color) { int dx,dy,i,sx,sy,check,e,x,y; dx=abs(x1-x2); dy=abs(y1-y2); sx=sign(x2-x1); sy=sign(y2-y1); x=x1; y=y1; check=0; if (dy>dx) { dx=dx+dy; dy=dx-dy; dx=dx-dy; check=1; } e=2*dy - dx; for (i=0;i<=dx;i++) { put_pixel(x,y,color); if (e>=0) { if (check==1) x=x+sx; else y=y+sy; e=e-2*dx; } if (check==1) y=y+sy; else x=x+sx; e=e+2*dy; } } void rectangle (unsigned char x1,unsigned char y1,unsigned char x2, unsigned char y2,unsigned char color) { line (x1,y1,x2,y1,color); line (x2,y1,x2,y2,color); line (x2,y2,x1,y2,color); line (x1,y2,x1,y1,color); } void put_char (unsigned char x0, unsigned char y0, unsigned char code, unsigned char mode) { unsigned char i,x,y; x=x0; y=y0; PORTB=_BV(RST)|_BV(CS1); if ( (x>128)||(y>64) ) return; for (i=0;i<6;i++) { if (x>=64) { //Включить CS2 x=x-64; PORTB|=_BV(CS2); PORTB&=~_BV(CS1); } lcd_com(0x40+x); //Перейти X,Y lcd_com(0xb8+y); if (i<=4) { if (mode==1) lcd_dat(~sym[code][i]); //Пишем колонку else lcd_dat (sym[code][i]); //Пишем инвертированную колонку } if (i==5) { if (mode==1) lcd_dat(0xff); //Рисуем разделитель else lcd_dat(0x00); //Рисуем инвертированный разделитель } x=x+1; } } int main(void) unsigned char data2[8]={0x20,0x10,0x01,0x02,0x08,0x06,0x04,0x0a}; //"WG12864A" unsigned char i; pause(5000); //Задержка для включения ЖКИ wg12864_init(); //Инициализация ЖКИ rectangle(0,0,127,63,1); //Рисуем контур line (127,0,0,63,1); //Рисуем линии line (127,5,5,63,1); line (127,10,10,63,1); line (127,15,15,63,1); line (127,20,20,63,1); line (127,25,25,63,1); line (127,30,30,63,1); line (127,35,35,63,1); line (127,40,40,63,1); line (127,45,45,63,1); line (127,50,50,63,1); line (127,55,55,63,1); line (127,60,60,63,1); for (i=0;i<8;i++) put_char (10+6*i,3,data2[i],0); //Пишем "WG12864A" while (1) ; return 1; } И схема на atmega8 к которой он написан. ============================================== А вот схема atmega16 к которой надо запилить этот код..
  5. Есть у кого-нибудь любая программа для графического ЖК на АВР??? ОООЧень надо! Любой пример. В интернете их куча но нигде нет полного комплекта, т.е. какие то файлы отсутствуют, чаще всего с функциями((
  6. подключен по 8ми битной шине, так и прописано в библиотеке команды именно для этого подключения. Завтра поковыряюсь еще с платой, попробую пару идей, поюзаю ее, доступ к ней у меня так же ограничен
  7. Я работаю с лабораторной платой, где потключение LCD заключается в простом "насаживание" в пазы, его не правильно просто нереально воткнуть, ну если очень посторатся кончно...=) Контрастность регулируется вручную очень удобным барашком, с ней все норм - покрутил, все работает. Вопрос в самой программе. Я написал то что скинул исходя из логических умозаключений после просмотра примеров в интернете и просмотра скачаной библиотеки, до этого момента мои познания в Си => 0 и после того как я заставлю работать эту плату с вероятностью в 90% Си мне больше никогда не понадобится, поскольку моя основная работа да и все мои увлечения не требуют знаний в Си. В данном случае меня просто поставили перед фактом что я должен это сделать и все. Плата пришла, как и что с ней делать НИКТО не имеет ни малейшего понятия, и тут мой ДП плавно перетек в эту плату. Сроки очень сжаты, поэтому изучать основательно Си нет смысла, мне требуется наваять прогу которая будет чтото там рисовать на жк по заданным точкам и прогу которая напишет на БЦ индикаторе нужную надпись. Помочь мне там никто не может по простой причине, никто не знает Си. поэтому я и прошу помощи в програмировании, не написать программу за меня конечно, а просто указать в данном мной варианте что не так и чего может не хватает. как я понимаю прога пустячная, сама запара наверно в начальных установках МК которые прописываются в любой программе. думаю каких то из них и не хватает.
  8. примера как такогого нет, была просто библиотека, могу скинуть но она большая, а спойлер я тут не нашел, огромный пост получится. там все расписано, и вроде норма все, на сколько я смог судить. подключение..могу схему скинуть конечно же, ну это все, на что у меня хватило знаний на данный момент. Именно поэтому я и обратился к вам. P.S. \Я прекрастно понимаю что инфы очень мало от меня, но это все что я смог сделать за это время, с учетом того что мне пришлось с нуля разбиратся в си, а это еще и не основная моя работа..
  9. Народ, посмотрите опытным взором =) совместно с библиотекой и парой тройкой функций и кучей инфы из инета наваял вот это: #include "LCD.HD4478.Driver.c" #include "LCD_func_v1_0.h" void main() { LCD_init();//инициализация прописана в библиотеке LCD.HD4478.Driver.c LCD_Bus_Write(); //оставить скобки пустыми??? clear(); WriteXY(6,2,LCD_CS1); //функция вывода как я понял Delay_ms(10); WriteData(0b01000100,LCD_CS1); WriteData(0b00100011,LCD_CS1); WriteData(0b00100100,LCD_CS1); WriteData(0b00100101,LCD_CS1); WriteData(0b00100110,LCD_CS1); WriteData(0b00100100,LCD_CS1); WriteXY(6,5,LCD_CS1); Delay_ms(10); WriteData(0b01000100,LCD_CS1); WriteData(0b00100011,LCD_CS1); WriteData(0b00100100,LCD_CS1); WriteData(0b00100101,LCD_CS1); WriteData(0b00100110,LCD_CS1); WriteData(0b00100100,LCD_CS1); while(1); } чего не хватает подскажите пожалуйста.. для полноты картины наверно стоит и оба инклуда добавить..как тут в спойлер засунуть?)
  10. Alexeyslav, спасибо за совет. Сегодня пробывал, вроде норм все. но не работало ничего, монитор не реагировал на программу. Свелись к тому что библиотеки не рабочие(я их где-то на просторах нашел.) может у кого-нибудь есть 100% рабочие библиотеки для ЖК и Б-Ц дисплеев под Atmega16? Буду ну просто ооооочень благодарен, поскольку нет 100% уверенности что дело в библиотеках...
  11. Дак вот с программами как раз таки и проблемма! Я Си не знаю, + какие то настройки/библиотеки. Изначально когда обговаривалось что я займусь этим речь шла об Ассемблере, по причине громозкости кода условием стало чтобы это было на Си. Я полтора месяца киплю, моих знаний в програмировании хватило не на много, в целом то что нашел в инете, но это не работает и что поправить\исправить я не понимаю. Может есть какие то базовые прогрраммы, или части кода, или еще чтото. Help! Сдача на носу а по сути имею ничего.
  12. Добрый день. Сам юзаю Асемблер но заставили написать код на Си для ЖКИ на лабстенде. Проблемма собственно такого плана, с ЖКИ никогда не работал да и на Си не писал, по сути инфы в интеренете предостаточно так что примерно разобрался, но не могу найти таблицы кодировок! Помогите пожалуйста кто чем может, мне в описание нужно вставить обязательно! И еще момент, зависимы ли кодировки от определенного ЖКИ или они стандартные?ну это так, для развития P.S. Собственно графический дисплей WG12864A и буквенно-цифровой WH1602. Заранее спасибо!)
×
×
  • Create New...