| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Библиотека LCD для CodeVision https://radiokot.ru/forum/viewtopic.php?f=57&t=190056 |
Страница 1 из 2 |
| Автор: | Alex_ka [ Сб сен 23, 2023 09:51:46 ] | ||
| Заголовок сообщения: | Библиотека LCD для CodeVision | ||
Для одной стендовой конструкции, при написании программы пришлось задействовать Т0, Т1 и Т2. На ATmega8 подключить индикатор проблем не составила, но для Tiny2313 применить стандартную библиотеку не получается, так как порты PB используются как выхода сигналов определённых частот и индикатор надо подключать к порту PD, а там не 8 выходов, а семь. Открыл библиотеку, посмотрел как баран на неё и закрыл. Помогите или подскажите, как в стандартной библиотеке сместить порт, т.е. чтобы D4 индикатора подключался не к PD4 контроллера и далее по порядку, а к PD3 и следующие по порядку со смещением на один порт по сравнению со стандартной библиотекой.
|
|||
| Автор: | Alex_641 [ Вс сен 24, 2023 10:42:21 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Там любые порты можно назначать на любые сигналы LCD. |
|
| Автор: | Alex_ka [ Вс сен 24, 2023 17:00:06 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Где в библиотеке это исправить? |
|
| Автор: | codenamehawk [ Вс сен 24, 2023 19:52:43 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Где в библиотеке это исправить? CodeWizard? Не не слышал. Интересно как вы его (lcd) подключили. |
|
| Автор: | Alex_ka [ Вс сен 24, 2023 21:07:22 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
CodeVisionAVR. LCD 16х2 подключается с помощью библиотеки <lcd.h>. #asm .equ __lcd_port=0x12;PORTD #endasm 12, 15 и 18 указывают подключение к портам D, С и В. Дальше инициализация lcd_init(16) и всё, пиши что хочешь выводить. |
|
| Автор: | codenamehawk [ Вт сен 26, 2023 08:47:13 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Проще так: Вложение:
|
|
| Автор: | Alex_ka [ Вт сен 26, 2023 16:14:38 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Что здесь проще? Там инициализация 8-ми символьного LCD и пустые пояснения в программе. |
|
| Автор: | Alex_641 [ Вт сен 26, 2023 17:57:55 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
#include <alcd.h> вот так подключается библиотека лсд в кодевижн авр. |
|
| Автор: | Alex_641 [ Вт сен 26, 2023 19:37:19 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Открываем ссылку на моё последнее .... и оно работает у других на симуляторе... viewtopic.php?f=17&t=190090&p=4481509#p4481509 Там есть файл 1.с Добавлено after 3 minutes 26 seconds: Alex_ka писал(а): ткрываем инструкцию по пользованию программой CodeVision п.5.15.1 и охреневаем, там библиотека lcd.h и буквы "а" впереди никакой нет. Значит кто то подправил кривую библиотеку кодевижн , под нужды людей ! Добавлено after 2 minutes 12 seconds: Я тоже исправлял какуюто библиотеку под русский язык, но это было для пик ссс |
|
| Автор: | Alex_ka [ Вт сен 26, 2023 19:56:31 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Открываем ссылку на моё последнее .... и оно работает у других на симуляторе... Никто эту библиотеку LCD не правил. Она существует с версии 1.24, ниже у меня нет и до версии 3.14. Под русский язык библиотеку в CodeVision править нет смысла, так как перевод на русский там прописывается в экзешнике программы и русский заканчивается на версии 1.24, в которой перед написанием русского текста необходимо прописать #pragma rl+ и закрыть написание #pragma rl- . В последующих версиях русский отсутствует.
Значит кто то подправил кривую библиотеку кодевижн , под нужды людей ! Добавлено after 2 minutes 12 seconds: Я тоже исправлял какуюто библиотеку под русский язык, но это было для пик ссс |
|
| Автор: | codenamehawk [ Ср сен 27, 2023 08:38:02 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Что здесь проще? Там инициализация 8-ми символьного LCD и пустые пояснения в программе. Проще, так как позволяет сделать то, что спрашиваете в первом посте. Пояснения проще и полезней всего смотреть в справке. Цитата: The following LCD formats are supported in alcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters.
|
|
| Автор: | Alex_ka [ Ср сен 27, 2023 16:06:42 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Пояснения проще и полезней всего смотреть в справке. Причём здесь смотреть? Или не понятно я написал что надо? Могу больше сказать, что я препалагаю, что изменить библиотеку нельзя, так это подключение прописано в компиляторе. Но, а вдруг у кого-то есть решение.
Цитата: The following LCD formats are supported in alcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters. |
|
| Автор: | codenamehawk [ Ср сен 27, 2023 19:29:34 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Могу больше сказать, что я препалагаю, что изменить библиотеку нельзя, так это подключение прописано в компиляторе. Предположения ваши неверны. Подключения прописаны не в компиляторе, а в самой библиотеке. Не ясно зачем лезть в библиотеку, исходников которой нету в открытом доступе. Библиотеку, если нет исходников, изменить сложнее(т.е. никто не запрещает ее изменить, если автор не в счет), чем написать библиотеку индикатора самому. Alex_ka писал(а): Или не понятно я написал что надо? Может это вы не понимаете, что вам советуют не лезть в библиотеку, если то что вы хотите, можно сделать на С, а точнее просто сконфигурировать в визарде и использовать на С. |
|
| Автор: | Alex_ka [ Ср сен 27, 2023 19:55:20 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Предположения ваши неверны. Алло гараж. Библиотека выложена в первом сообщении. Вы там на какой волне находитесь? Открой этот файл и толкни умную мысль глядя на данные ассемблера.
Подключения прописаны не в компиляторе, а в самой библиотеке. Не ясно зачем лезть в библиотеку, исходников которой нету в открытом доступе. Библиотеку, если нет исходников, изменить сложнее(т.е. никто не запрещает ее изменить, если автор не в счет), чем написать библиотеку индикатора самому. |
|
| Автор: | Alex_641 [ Ср сен 27, 2023 20:10:16 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Создай визардом проект, назначь пины какие хочешь на лсд, и не ипи мозги себе и людям ! |
|
| Автор: | OKF [ Чт сен 28, 2023 08:24:03 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Так а PD7 у вас где то ещё используется? Как вход, или как выход? СпойлерКод: /* LCD driver routines CodeVisionAVR C Compiler (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L. */ /* подскажите, как в стандартной библиотеке сместить порт, т.е. чтобы D4 индикатора подключался не к PD4 контроллера и далее по порядку, а к PD3 и следующие по порядку со смещением на один порт по сравнению со стандартной библиотекой. */ #asm .equ __lcd_direction=__lcd_port-1 .equ __lcd_pin=__lcd_port-2 .equ __lcd_rs=0 .equ __lcd_rd=1 .equ __lcd_enable=2 .equ __lcd_busy_flag=6 #endasm #pragma used+ static unsigned char _base_y[4]={0x80,0xc0}; unsigned char _lcd_x,_lcd_y,_lcd_maxx; #pragma used- static void _lcd_delay(void) { #asm ldi r31,15 __lcd_delay0: dec r31 brne __lcd_delay0 #endasm } void _lcd_ready(void) { #asm in r26,__lcd_direction andi r26,0b00000111 ;set as input out __lcd_direction,r26 sbi __lcd_port,__lcd_rd ;RD=1 cbi __lcd_port,__lcd_rs ;RS=0 __lcd_busy: #endasm _lcd_delay(); #asm sbi __lcd_port,__lcd_enable ;EN=1 #endasm _lcd_delay(); #asm in r26,__lcd_pin cbi __lcd_port,__lcd_enable ;EN=0 #endasm _lcd_delay(); #asm sbi __lcd_port,__lcd_enable ;EN=1 #endasm _lcd_delay(); #asm cbi __lcd_port,__lcd_enable ;EN=0 sbrc r26,__lcd_busy_flag rjmp __lcd_busy #endasm } static void _lcd_write_nibble(void) { #asm lsr r26 andi r26,0b01111000 or r26,r27 out __lcd_port,r26 ;write sbi __lcd_port,__lcd_enable ;EN=1 #endasm _lcd_delay(); #asm cbi __lcd_port,__lcd_enable ;EN=0 #endasm _lcd_delay(); } void _lcd_write_data(unsigned char data) { #asm cbi __lcd_port,__lcd_rd ;RD=0 in r26,__lcd_direction ori r26,0b01111000 | (1<<__lcd_rs) | (1<<__lcd_rd) | (1<<__lcd_enable) ;set as output out __lcd_direction,r26 in r27,__lcd_port andi r27,0b00000111 ld r26,y ;data #endasm _lcd_write_nibble(); //RD=0, write MSN #asm ld r26,y swap r26 #endasm _lcd_write_nibble(); //write LSN #asm sbi __lcd_port,__lcd_rd ;RD=1 #endasm } /* write a byte to the LCD character generator or display RAM */ void lcd_write_byte(unsigned char addr, unsigned char data) { _lcd_ready(); _lcd_write_data(addr); _lcd_ready(); #asm sbi __lcd_port,__lcd_rs ;RS=1 #endasm _lcd_write_data(data); } static void _lcd_read_nibble(void) { #asm sbi __lcd_port,__lcd_enable ;EN=1 #endasm _lcd_delay(); #asm in r30,__lcd_pin ;read cbi __lcd_port,__lcd_enable ;EN=0 #endasm _lcd_delay(); #asm andi r30,0b01111000 lsl r30 #endasm } static unsigned char lcd_read_byte0(void) { _lcd_delay(); _lcd_read_nibble(); // read MSN #asm mov r26,r30 #endasm _lcd_read_nibble(); // read LSN #asm cbi __lcd_port,__lcd_rd ;RD=0 swap r30 or r30,r26 #endasm } /* read a byte from the LCD character generator or display RAM */ unsigned char lcd_read_byte(unsigned char addr) { _lcd_ready(); _lcd_write_data(addr); _lcd_ready(); #asm in r26,__lcd_direction andi r26,0b00000111 ;set as input out __lcd_direction,r26 sbi __lcd_port,__lcd_rs ;RS=1 #endasm return lcd_read_byte0(); } /* set the LCD display position x=0..39 y=0..3 */ void lcd_gotoxy(unsigned char x, unsigned char y) { _lcd_ready(); // RS=0 _lcd_write_data(_base_y[y]+x); _lcd_x=x; _lcd_y=y; } // clear the LCD void lcd_clear(void) { _lcd_ready(); // RS=0 _lcd_write_data(2); // cursor home _lcd_ready(); _lcd_write_data(0xc); // cursor off _lcd_ready(); _lcd_write_data(1); // clear _lcd_x=_lcd_y=0; } #pragma keep+ void lcd_putchar(char c) { #asm push r30 push r31 ld r26,y set cpi r26,10 breq __lcd_putchar1 clt #endasm ++_lcd_x; if (_lcd_x>_lcd_maxx) { #asm("__lcd_putchar1:") ++_lcd_y; lcd_gotoxy(0,_lcd_y); #asm("brts __lcd_putchar0") }; #asm rcall __lcd_ready sbi __lcd_port,__lcd_rs ;RS=1 ld r26,y st -y,r26 rcall __lcd_write_data __lcd_putchar0: pop r31 pop r30 #endasm } #pragma keep- // write the string str located in SRAM to the LCD void lcd_puts(char *str) { char k; while (k = *str++) lcd_putchar(k); } // write the string str located in FLASH to the LCD void lcd_putsf(char flash *str) { char k; while (k = *str++) lcd_putchar(k); } static void _long_delay(void) { #asm clr r26 clr r27 __long_delay0: sbiw r26,1 ;2 cycles brne __long_delay0 ;2 cycles #endasm } static void _lcd_init_write(unsigned char data) { #asm cbi __lcd_port,__lcd_rd ;RD=0 in r26,__lcd_direction ori r26,0b01111111 ;set as output out __lcd_direction,r26 in r27,__lcd_port andi r27,0b00000111 ld r26,y #endasm _lcd_write_nibble(); //RD=0, write MSN #asm sbi __lcd_port,__lcd_rd ;RD=1 #endasm } // initialize the LCD controller unsigned char lcd_init(unsigned char lcd_columns) { #asm cbi __lcd_port,__lcd_enable ;EN=0 cbi __lcd_port,__lcd_rs ;RS=0 #endasm _lcd_maxx=lcd_columns; _base_y[2]=lcd_columns+0x80; _base_y[3]=lcd_columns+0xc0; _long_delay(); _lcd_init_write(0x30); _long_delay(); _lcd_init_write(0x30); _long_delay(); _lcd_init_write(0x30); _long_delay(); _lcd_init_write(0x20); _long_delay(); _lcd_write_data(0x28); _long_delay(); _lcd_write_data(4); _long_delay(); _lcd_write_data(0x85); _long_delay(); #asm in r26,__lcd_direction andi r26,0b00000111 ;set as input out __lcd_direction,r26 sbi __lcd_port,__lcd_rd ;RD=1 #endasm if (lcd_read_byte0() != 5) return 0; _lcd_ready(); _lcd_write_data(6); lcd_clear(); return 1; } |
|
| Автор: | Alex_ka [ Чт сен 28, 2023 17:17:09 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Мне надо LCD 16x2 на PB0-PB6 подключить к тине 2313, а PD, это я в качестве примера привёл. Но библиотека с версии 1.24, так как мне нужен русский на индикаторе. |
|
| Автор: | OKF [ Чт сен 28, 2023 17:32:24 ] |
| Заголовок сообщения: | Re: Библиотека LCD для CodeVision |
Я библиотеку для вас исправил. Порт задаётся вне её. Так же как и тип LCD. |
|
| Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


