Обсуждаем контроллеры компании Atmel.
Ответить

Библиотека LCD для CodeVision

Сб сен 23, 2023 09:51:46

Для одной стендовой конструкции, при написании программы пришлось задействовать Т0, Т1 и Т2. На ATmega8 подключить индикатор проблем не составила, но для Tiny2313 применить стандартную библиотеку не получается, так как порты PB используются как выхода сигналов определённых частот и индикатор надо подключать к порту PD, а там не 8 выходов, а семь. Открыл библиотеку, посмотрел как баран на неё и закрыл. Помогите или подскажите, как в стандартной библиотеке сместить порт, т.е. чтобы D4 индикатора подключался не к PD4 контроллера и далее по порядку, а к PD3 и следующие по порядку со смещением на один порт по сравнению со стандартной библиотекой.
Изображение Изображение
Вложения
LCD.zip
(1.46 KiB) Скачиваний: 30

Re: Библиотека LCD для CodeVision

Вс сен 24, 2023 10:42:21

Там любые порты можно назначать на любые сигналы LCD.

Re: Библиотека LCD для CodeVision

Вс сен 24, 2023 17:00:06

Где в библиотеке это исправить?

Re: Библиотека LCD для CodeVision

Вс сен 24, 2023 19:52:43

Где в библиотеке это исправить?

CodeWizard? Не не слышал. Интересно как вы его (lcd) подключили.

Re: Библиотека LCD для CodeVision

Вс сен 24, 2023 21:07:22

CodeVisionAVR. LCD 16х2 подключается с помощью библиотеки <lcd.h>.
#asm
.equ __lcd_port=0x12;PORTD
#endasm
12, 15 и 18 указывают подключение к портам D, С и В. Дальше инициализация lcd_init(16) и всё, пиши что хочешь выводить.

Re: Библиотека LCD для CodeVision

Вт сен 26, 2023 08:47:13

Проще так:
Untitled.png
(37.87 KiB) Скачиваний: 35

Re: Библиотека LCD для CodeVision

Вт сен 26, 2023 16:14:38

Что здесь проще? Там инициализация 8-ми символьного LCD и пустые пояснения в программе.

Re: Библиотека LCD для CodeVision

Вт сен 26, 2023 17:57:55

#include <alcd.h>
вот так подключается библиотека лсд в кодевижн авр.

Re: Библиотека LCD для CodeVision

Вт сен 26, 2023 19:24:57

#include <alcd.h>
вот так подключается библиотека лсд в кодевижн авр.
Открываем инструкцию по пользованию программой CodeVision п.5.15.1
и охреневаем, там библиотека lcd.h и буквы "а" впереди никакой нет. И как подключить библиотеку, мне объяснять не надо.
Изображение

Re: Библиотека LCD для CodeVision

Вт сен 26, 2023 19:37:19

Открываем ссылку на моё последнее .... и оно работает у других на симуляторе...
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:
Я тоже исправлял какуюто библиотеку под русский язык, но это было для пик ссс

Re: Библиотека LCD для CodeVision

Вт сен 26, 2023 19:56:31

Открываем ссылку на моё последнее .... и оно работает у других на симуляторе...

Значит кто то подправил кривую библиотеку кодевижн , под нужды людей !

Добавлено after 2 minutes 12 seconds:
Я тоже исправлял какуюто библиотеку под русский язык, но это было для пик ссс
Никто эту библиотеку LCD не правил. Она существует с версии 1.24, ниже у меня нет и до версии 3.14. Под русский язык библиотеку в CodeVision править нет смысла, так как перевод на русский там прописывается в экзешнике программы и русский заканчивается на версии 1.24, в которой перед написанием русского текста необходимо прописать #pragma rl+ и закрыть написание #pragma rl- . В последующих версиях русский отсутствует.

Re: Библиотека LCD для CodeVision

Ср сен 27, 2023 08:38:02

Что здесь проще? Там инициализация 8-ми символьного LCD и пустые пояснения в программе.

Проще, так как позволяет сделать то, что спрашиваете в первом посте.
Пояснения проще и полезней всего смотреть в справке.
The following LCD formats are supported in alcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters.

Re: Библиотека LCD для CodeVision

Ср сен 27, 2023 16:06:42

Пояснения проще и полезней всего смотреть в справке.
The following LCD formats are supported in alcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters.
Причём здесь смотреть? Или не понятно я написал что надо? Могу больше сказать, что я препалагаю, что изменить библиотеку нельзя, так это подключение прописано в компиляторе. Но, а вдруг у кого-то есть решение.

Re: Библиотека LCD для CodeVision

Ср сен 27, 2023 19:29:34

Могу больше сказать, что я препалагаю, что изменить библиотеку нельзя, так это подключение прописано в компиляторе.

Предположения ваши неверны.
Подключения прописаны не в компиляторе, а в самой библиотеке.
Не ясно зачем лезть в библиотеку, исходников которой нету в открытом доступе.
Библиотеку, если нет исходников, изменить сложнее(т.е. никто не запрещает ее изменить, если автор не в счет), чем написать библиотеку индикатора самому.
Alex_ka писал(а):Или не понятно я написал что надо?

Может это вы не понимаете, что вам советуют не лезть в библиотеку, если то что вы хотите, можно сделать на С, а точнее просто сконфигурировать в визарде и использовать на С.

Re: Библиотека LCD для CodeVision

Ср сен 27, 2023 19:55:20

Предположения ваши неверны.
Подключения прописаны не в компиляторе, а в самой библиотеке.
Не ясно зачем лезть в библиотеку, исходников которой нету в открытом доступе.
Библиотеку, если нет исходников, изменить сложнее(т.е. никто не запрещает ее изменить, если автор не в счет), чем написать библиотеку индикатора самому.
Алло гараж. Библиотека выложена в первом сообщении. Вы там на какой волне находитесь? Открой этот файл и толкни умную мысль глядя на данные ассемблера.

Re: Библиотека LCD для CodeVision

Ср сен 27, 2023 20:10:16

Создай визардом проект, назначь пины какие хочешь на лсд, и не ипи мозги себе и людям !

Re: Библиотека LCD для CodeVision

Ср сен 27, 2023 21:24:26

Создай визардом проект, назначь пины какие хочешь на лсд, и не ипи мозги себе и людям !
Ты в адеквате или на своей волне. Тебе по названию темы не понятно, что речь идёт о CodeVision? Догадайся с первого раза куда я тебе посоветую заткнуть свой визард. :))) Что ты мне посоветуешь в своём визарде с выводом русского на индикатор, умник. Может совет дашь, что бы я ещё хренью занимался в программе и недостающие буквы русского языка моделировал? Версия 1.24. Изображение

Re: Библиотека LCD для CodeVision

Чт сен 28, 2023 08:24:03

Так а 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;
}

Re: Библиотека LCD для CodeVision

Чт сен 28, 2023 17:17:09

Мне надо LCD 16x2 на PB0-PB6 подключить к тине 2313, а PD, это я в качестве примера привёл. Но библиотека с версии 1.24, так как мне нужен русский на индикаторе.

Re: Библиотека LCD для CodeVision

Чт сен 28, 2023 17:32:24

Я библиотеку для вас исправил. Порт задаётся вне её. Так же как и тип LCD.
Ответить