Отговори на тема  [ 12 мнения ] 
LCD & CCS PIC C 
Автор Съобщение
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Съб Сеп 25, 2004 4:33 pm
Мнения: 273
Местоположение: София
Мнение LCD & CCS PIC C
Реших и аз да се прехвърля на CCS C-то.
Опитвам се да пусна LCD-то ми в следния вариант:
PortD.4-7 : data lines
PortE.0 : rs
PortE.1 : enable
PortE.2 : rw

Оригиналния lcd.c файл дава възможност да си закача дисплея на ПортА или ПортБ. На мен обаче ми трябва, както съм го описал горе. Изтеглих един файл от форума, който уж дава възможност да си направя каквата искам комбинация, но нещо не се получава. При компилация получавам съобщение за грешка в lcdd.c файла още на първия ред: "illegal C character in input file 0xA0"

Ето го lcdd.c (променял съм само първите 2 структури)
Код:
////////////////////////////////////////////////////////////////////////////
////                             LCDD.C                                 ////
////                 Driver for common LCD modules                      ////
////                                                                    ////
////  lcd_init()   Must be called before any other function.            ////
////                                                                    ////
////  lcd_putc(c)  Will display c on the next position of the LCD.      ////
////                     The following have special meaning:            ////
////                      \f  Clear display                             ////
////                      \n  Go to start of second line                ////
////                      \b  Move back one position                    ////
////                                                                    ////
////  lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)     ////
////                                                                    ////
////  lcd_getc(x,y)   Returns character at position x,y on LCD          ////
////                                                                    ////
////////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,1997 Custom Computer Services            ////
//// This source code may only be used by licensed users of the CCS C   ////
//// compiler.  This source code may only be distributed to other       ////
//// licensed users of the CCS C compiler.  No other use, reproduction  ////
//// or distribution is permitted without written permission.           ////
//// Derivative programs created using this software in object code     ////
//// form are not restricted in any way.                                ////
////////////////////////////////////////////////////////////////////////////

// This structure is overlayed onto the data ports so that you may use
// whatever ports you desire
struct lcd_pin_map {
 
  int unusedA;
  int unusedB;
  int unusedC;
  int unusedD : 4;     //lower nibble of portD is not used
  int data : 4;        //high nibble of portD data       
  BOOLEAN rs;          //portE.0 -> rs
  BOOLEAN enable;      //portE.1 -> enable
  BOOLEAN rw;          //portE.2 -> rw
  int unusedE : 5;     //rest of portE unused

} lcd;

#if defined(__PCH__)
   #locate lcd = 0xF80
#else
   #locate lcd = 5
#endif

struct lcd_tris_map {

   int unusedA;
   int unusedB;
   int unusedC;
   int unusedD : 4;   //lower nibble of portD
   int data : 4;      //high nibble of portD
   int control : 3;   
   int unusedE : 5;

} lcdtris;

#if defined(__PCH__)
   #locate lcdtris = 0xF92
#else
   #locate lcdtris = 0x85
#endif

#define set_tris_lcd(x) lcdtris.data = (x); lcdtris.control = 0;

#define lcd_type 2
#define lcd_line_two 0x40

Byte const LCD_INIT_STRING[4] = {8, 0xc, 1, 6};

#define LCD_WRITE    0
#define LCD_READ     0xFF

BYTE lcd_read_byte() {

   BYTE data;
   set_tris_lcd(LCD_READ);
   lcd.rw = 1;
   delay_cycles(1);
   lcd.enable = 1;
   delay_cycles(1);
   data = lcd.data;
   lcd.enable = 0;
   set_tris_lcd(LCD_WRITE);
   return(data);

}

void  lcd_send_nibble(BYTE n) {

   lcd.data = n;
   delay_cycles(1);
   lcd.enable = 1;
   delay_us(2);
   lcd.enable = 0;

}

void lcd_send_byte(BYTE adress, BYTE n) {

   lcd.rs = 0
   while(bit_test(lcd_read_byte(),7));
   lcd.rs = adress;
   delay_cycles(1);
   lcd.rw = 0;
   delay_cycles(1);
   lcd.enable = 0;
   lcd.data = n;
   delay_cycles(1);
   lcd.enable = 1;
   delay_us(2);
   lcd_enable = 0;

}

void lcd_init() {

   BYTE i;
   set_tris_lcd(LCD_WRITE);
   lcd.rs = 0;
   lcd.rw = 0;
   lcd.enable = 0;
   delay_ms(15);
   for(i=1; i<=3; ++i) {
      lcd_send_byte(0, 0x38);
      delay_ms(5);
   }
   for(i=0; i<=3; ++i)
      lcd_send_byte(0,LCD_INIT_STRING[i]);
}

void lcd_gotoxy(BYTE x, BYTE y) {

   BYTE adress;
   if (y!=1)
      adress = lcd_line_two;
   else
      adress = 0;
   adress += x-1;
   lcd_send_byte(0, 0x80|adress);

}

void lcd_putc(char c) {
   switch(c) {
      case '\f' : lcd_send_byte(0, 1);
                  delay_ms(2); break;
      case '\n' : lcd_gotoxy(1, 2); break;
      case '\b' :lcd_send_byte(0, 0x10); break;
      default   : lcd_send_byte(1, c); break;
   }
}

char lcd_getc(BYTE x, BYTE y) {
   char value;

   lcd_gotoxy(x,y);
   lcd.rs = 1;
   value = lcd_read_byte();
   lcd.rs = 0;
   return(value);

}

Ето и тестовата програма
Код:
#include <18F452.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP
#include "lcdd.c"


//======================= MAIN ============================//
void main(void) {
  lcd_init();
  printf(lcd_putc,"hello world");
  printf(lcd_putc,"\n\rSecond line");
  while(1) {
  }
}


Имате ли идея какво не е наред?
Пробвах с 3.190 и 3.206

_________________
Adios
Mozfet


Вто Ное 30, 2004 2:25 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Ся щи кажа ве :D На мене подобно нещо ми прави като напиша "#use fast_io(C)", обаче не го прави ако напиша В или А вместо С. Има някакъв бъг, ако не се лъжа е свързано с шрифта с който пишеш. Това го има и в MPLAB :!: Решавам си проблема, като избягвам да го пиша 8)


Вто Ное 30, 2004 3:26 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Съб Сеп 25, 2004 4:33 pm
Мнения: 273
Местоположение: София
Мнение 
Открих проблемите. Сега мога да си пускам LCD-то на произволни крачета в 4 и 8-битов режим.
В двете програми, които съм дал горе има грешки. Сега са ОК.

_________________
Adios
Mozfet


Сря Дек 01, 2004 12:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
A на моя проблем имаш ли някакъв отговор???


Сря Дек 01, 2004 12:04 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Съб Сеп 25, 2004 4:33 pm
Мнения: 273
Местоположение: София
Мнение 
Ами глупавото съoбщение за грешка изчезна, когато върнах редовете в началото им. При копи и паст на някои редове, които са по-навътре се получава този бъг. Върнах всички до началото после пак навътре и се оправи.
Странно е.
Така, че пробвай и ти така. Няколко интервала на ляво и на дясно докато стане. Много професиоанелн продукт от CCS :D

_________________
Adios
Mozfet


Сря Дек 01, 2004 12:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Бе, да ги и*ъ....Добре че не съм плащал за CCS... :lol:


Сря Дек 01, 2004 12:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Mozfet написа:
Ами глупавото съoбщение за грешка изчезна, когато върнах редовете в началото им. При копи и паст на някои редове, които са по-навътре се получава този бъг. Върнах всички до началото после пак навътре и се оправи.
Странно е.
Така, че пробвай и ти така. Няколко интервала на ляво и на дясно докато стане. Много професиоанелн продукт от CCS :D


това е често срещано явление при копи-пейст, при всички IDE-та с които съм имал работа. Шитовете на Борланд, например, е почти невъзможно да им копи-пейстнеш от собствениуя им хелп без да се налага да връщаш редове, да триеш от зад и т.н.


Сря Дек 01, 2004 12:46 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
IAR-а даже възприема 'я' за край на файл, та винаги се налага да го пиша като 0xFF :? .


Сря Дек 01, 2004 1:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Dimitar написа:
IAR-а даже възприема 'я' за край на файл, та винаги се налага да го пиша като 0xFF :? .


Верно е :cry: . Само че на времето, докато го открия си застрелях един ден.


Сря Дек 01, 2004 1:26 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Той го пише бе - само трябва да си знаел, че 0xFF е 'я' :D .


Сря Дек 01, 2004 1:37 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
някои програмисти са за публичен линч. :guillotine:


Сря Дек 01, 2004 1:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
както и някой хардуеристи от въпросните програмисти 8) , ама това вече въпрос на друга тема, щото на тая и е***ме мамата :? .


Сря Дек 01, 2004 1:54 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 12 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни