Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   668 / 1320
(#) nyarfa válasza vicsys hozzászólására (») Feb 9, 2010 /
 
örök hála

estére referálok mennyire sikerült a dolog

köszi
(#) vicsys válasza nyarfa hozzászólására (») Feb 9, 2010 /
 
A lábkiosztás lemaradt...

LCD_DB4 A2
LCD_DB5 C0
LCD_DB6 C1
LCD_DB7 C2
LCD_E A1
LCD_RS A0
(#) watt válasza nyarfa hozzászólására (») Feb 9, 2010 /
 
Azt megbocsátom, hogy türelmetlen vagy, azt nehezebben, hogy trehány(kisbetűvel mondatkezdés, írásjelek hiánya.) Kérlek tisztelj meg mindket, hogy érthetően, szépen írsz! Köszi!
(#) nyarfa válasza watt hozzászólására (») Feb 9, 2010 /
 
Elnézést a hibákért de ha kapkodok akkor jön sajnos az MSN betegség és ömlesztve minden. Kipróbáltam valami gyors karakter folyam látható a kijelzőn, de nem értelmezhető. De ez csak az egyik. Most próbálom a többit. De az már biztos, hogy a c kódom nem jó amit írtam.
(#) vicsys válasza nyarfa hozzászólására (») Feb 9, 2010 /
 
Tedd be melléklektként a C kódot.
(#) nyarfa válasza watt hozzászólására (») Feb 9, 2010 /
 
Tedd meg nekem még légyszives azt az egy szivességet, hogy a c kódot is küld el, mert már az biztos, hogy nem jól kezelem a portokat, és a lcd.c-t.


Köszönöm meghálálom
(#) nyarfa válasza watt hozzászólására (») Feb 9, 2010 /
 
"Hello-bello" ha ez a megoldás, akkor az egyik két soros üzemképes, és a gazdája nemtud programozni
(#) The_Saint hozzászólása Feb 9, 2010 /
 
Sziasztok!

Ezúton szeretnék köszönetet mondani Watt-nak az oldalán található osztó-szorzó rutinokért!! Szóval osztottam szoroztam és végül működik a C-F konverzió.
Köszi még1x!
(#) Attila86 válasza The_Saint hozzászólására (») Feb 9, 2010 /
 
Látod, mondtam én hogy nem olyan bonyolult ez!
(#) vicsys válasza nyarfa hozzászólására (») Feb 9, 2010 /
 
Igaz watt mesternek címezted, de azért lehet, hogy én is tudok segíteni. Igen, a megoldás ez volt. Tehát tényleg figyelmetlen vagy. (kétszeresen is :beka3: )
Mivel a program 2x16-osra íródott, ezért ezzel fog kielégítően futni.
(#) nyarfa válasza vicsys hozzászólására (») Feb 9, 2010 /
 
Nekem is leesett, csak először írtam azután kezdtem a hibát keresni. De mostmár a következő a kód megfejtése lesz.
(#) watt válasza The_Saint hozzászólására (») Feb 9, 2010 /
 
Örülök, hogy hasznodra lehettem! :help:
(#) nyarfa hozzászólása Feb 9, 2010 /
 
Kérlek watt a c kódot is oszd meg velem. Szeretném megtalálni mit rontottam el.
(#) vicsys válasza watt hozzászólására (») Feb 9, 2010 /
 
Watt! Megint Te jössz! Kép: Hivatkozás
(#) trudnai válasza nyarfa hozzászólására (») Feb 9, 2010 /
 
K. Nyarfa! Inkabb Te csatoldd a kododat, es igy meg tudjuk nezni mit rontottal el...

Udv,
(#) nyarfa válasza trudnai hozzászólására (») Feb 9, 2010 /
 
#include <16F887.h>
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES LP //Low power osc < 200 khz
#FUSES NOPUT //No Power Up Timer
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOWRT //Program memory not write protected
#FUSES BORV40 //Brownout reset at 4.0V

#use delay(clock=20000000)

#int_AD
void AD_isr(void)
{
// ITT MÉR ÉS ÍR KI
}



#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D2
#define LCD_RW_PIN PIN_D3
#define LCD_DATA_PORT D4, D5, D6, D7
#include
void main()
{
lcd_init();



setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
enable_interrupts(INT_AD);
enable_interrupts(GLOBAL);
setup_oscillator(OSC_1MHZ);

lcd_putc("\fBekapcs.....\n");

for(;{
}

}


Nos ez lenne az. Valami nagyon elkerüli a figyelmemet de mint mondtam most kezdem a c-t is.>
(#) trudnai válasza nyarfa hozzászólására (») Feb 9, 2010 /
 
Ez melyik C forditora keszult? Es mi az a PICWizzard?

Na mindegy, elobb a PORT-okat kellene beallitani, es tana kellene az lcd initet szerintem.

Azonkivul egyszer azt irod, hogy a delay clock-ja 20MHz, majd azt, hogy az oszci 1MHz-en ketyeg... Kozben meg LP osc modba kapcsolod a fuses-nel...

Aztan az ADC-t off-ba teszed, de az interruptjat engedelyezed...

Most tenyleg komolyan tanacsolnam, hogy elobb kezdd el LED villogtatassal, es ha az megy, akkor menj fokozatosan tovabb. Az LCD-t egyenlore hagyd ki a jatekbol!

Ja, es ha kodot illesztesz be, akkor hasznaldd legyszi a "Kod" gombot, ill. ha hoszabb a kod akkor inkabb Fajmellekletkent csatold.
(#) nyarfa válasza trudnai hozzászólására (») Feb 9, 2010 /
 
CCS-nek a beépített dolgait akartam felhasználni, de ezekszerint ha konfigurálom az lcd-t azzal a portot nem intézi ja az órajelek ... nos mivel mérgemben letöröltem az eredetit amivel szórakoztam, most próbáltam összerakni ezt, és bocsi a figyelmetlenségemet. Ezekszerint mégsem annyira egyszerű a c na nem baj majd valahogy rájövök.
(#) potyo válasza nyarfa hozzászólására (») Feb 9, 2010 /
 
Idézet:
„Ezekszerint mégsem annyira egyszerű a c na nem baj majd valahogy rájövök.”


Inkább jobb lenne, ha ezt a CCS-t hagynád a francba. Ott van a Hi-Tech C az MPLAB telepítőjében, inkább azt használd.

Amúgy szerintem az a gond, hogy nem LCD_DATA_PORT-ot kellene definiálni, hanem az egyes lábakat külön-külön. Link
(#) nyarfa hozzászólása Feb 9, 2010 /
 
Javítottam rajta de hiába. A ledeken túl vagyok, de attól még ez nem megy. No de itt van a
  1. main.c
amit írtál, szerintem kijavítottam vagy nem.

main.c
    
(#) nyarfa válasza potyo hozzászólására (») Feb 9, 2010 /
 
Lehet, hogy az lcd.c-vel vannak gondok nállam is?
(#) vilmosd válasza nyarfa hozzászólására (») Feb 9, 2010 / 1
 
Hali
A CCS C-nek vannak peldajai LCD-re. A telepitett CCS C konyvtaraban talalod meg oket. Van egy egyszeru pelda LCD es tasztatura kezelesre. EX_LCDKB.C neven talalhato. A driver alkonyvtarban van a LCD.C ami a LCD portot kezeli. Ha egy portra rakod az LCD-t ez jo lesz neked. Ha Te akarod meghatarozni a labak sorrendjet akkor a FLEX_LCD.C includ kell. Megtalalhato a CCS forumon. Maga a kezelo program eleg egyszeru:
  1. #include <16F877.H>
  2. #fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
  3. #use delay(clock = 4000000)
  4.  
  5. #include "flex_lcd.c"
  6.    
  7. //==========================
  8. void main()
  9. {
  10. lcd_init();  // Always call this first.
  11.  
  12. lcd_putc("\fHello World\n");
  13. lcd_putc("Line Number 2");
  14.  
  15. while(1);
  16. }


A FLEX_LCD.C Igy nez ki:
  1. // flex_lcd.c
  2.  
  3. // These pins are for the Microchip PicDem2-Plus board,
  4. // which is what I used to test the driver.  Change these
  5. // pins to fit your own board.
  6.  
  7. #define LCD_DB4   PIN_D0
  8. #define LCD_DB5   PIN_D1
  9. #define LCD_DB6   PIN_D2
  10. #define LCD_DB7   PIN_D3
  11.  
  12. #define LCD_E     PIN_A1
  13. #define LCD_RS    PIN_A3
  14. #define LCD_RW    PIN_A2
  15.  
  16. // If you only want a 6-pin interface to your LCD, then
  17. // connect the R/W pin on the LCD to ground, and comment
  18. // out the following line.
  19.  
  20. #define USE_LCD_RW   1    
  21.  
  22. //========================================
  23.  
  24. #define lcd_type 2        // 0=5x7, 1=5x10, 2=2 lines
  25. #define lcd_line_two 0x40 // LCD RAM address for the 2nd line
  26.  
  27.  
  28. int8 const LCD_INIT_STRING[4] =
  29. {
  30.  0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
  31.  0xc,                    // Display on
  32.  1,                      // Clear display
  33.  6                       // Increment cursor
  34.  };
  35.                              
  36.  
  37. //-------------------------------------
  38. void lcd_send_nibble(int8 nibble)
  39. {
  40. // Note:  !! converts an integer expression
  41. // to a boolean (1 or 0).
  42.  output_bit(LCD_DB4, !!(nibble & 1));
  43.  output_bit(LCD_DB5, !!(nibble & 2));
  44.  output_bit(LCD_DB6, !!(nibble & 4));  
  45.  output_bit(LCD_DB7, !!(nibble & 8));  
  46.  
  47.  delay_cycles(1);
  48.  output_high(LCD_E);
  49.  delay_us(2);
  50.  output_low(LCD_E);
  51. }
  52.  
  53. //-----------------------------------
  54. // This sub-routine is only called by lcd_read_byte().
  55. // It's not a stand-alone routine.  For example, the
  56. // R/W signal is set high by lcd_read_byte() before
  57. // this routine is called.    
  58.  
  59. #ifdef USE_LCD_RW
  60. int8 lcd_read_nibble(void)
  61. {
  62. int8 retval;
  63. // Create bit variables so that we can easily set
  64. // individual bits in the retval variable.
  65. #bit retval_0 = retval.0
  66. #bit retval_1 = retval.1
  67. #bit retval_2 = retval.2
  68. #bit retval_3 = retval.3
  69.  
  70. retval = 0;
  71.    
  72. output_high(LCD_E);
  73. delay_cycles(1);
  74.  
  75. retval_0 = input(LCD_DB4);
  76. retval_1 = input(LCD_DB5);
  77. retval_2 = input(LCD_DB6);
  78. retval_3 = input(LCD_DB7);
  79.  
  80. output_low(LCD_E);
  81.    
  82. return(retval);  
  83. }  
  84. #endif
  85.  
  86. //---------------------------------------
  87. // Read a byte from the LCD and return it.
  88.  
  89. #ifdef USE_LCD_RW
  90. int8 lcd_read_byte(void)
  91. {
  92. int8 low;
  93. int8 high;
  94.  
  95. output_high(LCD_RW);
  96. delay_cycles(1);
  97.  
  98. high = lcd_read_nibble();
  99.  
  100. low = lcd_read_nibble();
  101.  
  102. return( (high<<4) | low);
  103. }
  104. #endif
  105.  
  106. //----------------------------------------
  107. // Send a byte to the LCD.
  108. void lcd_send_byte(int8 address, int8 n)
  109. {
  110. output_low(LCD_RS);
  111.  
  112. #ifdef USE_LCD_RW
  113. while(bit_test(lcd_read_byte(),7)) ;
  114. #else
  115. delay_us(60);
  116. #endif
  117.  
  118. if(address)
  119.    output_high(LCD_RS);
  120. else
  121.    output_low(LCD_RS);
  122.      
  123.  delay_cycles(1);
  124.  
  125. #ifdef USE_LCD_RW
  126. output_low(LCD_RW);
  127. delay_cycles(1);
  128. #endif
  129.  
  130. output_low(LCD_E);
  131.  
  132. lcd_send_nibble(n >> 4);
  133. lcd_send_nibble(n & 0xf);
  134. }
  135.  
  136. //----------------------------
  137. void lcd_init(void)
  138. {
  139. int8 i;
  140.  
  141. output_low(LCD_RS);
  142.  
  143. #ifdef USE_LCD_RW
  144. output_low(LCD_RW);
  145. #endif
  146.  
  147. output_low(LCD_E);
  148.  
  149. delay_ms(15);
  150.  
  151. for(i=0 ;i < 3; i++)
  152.    {
  153.     lcd_send_nibble(0x03);
  154.     delay_ms(5);
  155.    }
  156.  
  157. lcd_send_nibble(0x02);
  158.  
  159. for(i=0; i < sizeof(LCD_INIT_STRING); i++)
  160.    {
  161.     lcd_send_byte(0, LCD_INIT_STRING[i]);
  162.    
  163.     // If the R/W signal is not used, then
  164.     // the busy bit can't be polled.  One of
  165.     // the init commands takes longer than
  166.     // the hard-coded delay of 60 us, so in
  167.     // that case, lets just do a 5 ms delay
  168.     // after all four of them.
  169.     #ifndef USE_LCD_RW
  170.     delay_ms(5);
  171.     #endif
  172.    }
  173.  
  174. }
  175.  
  176. //----------------------------
  177.  
  178. void lcd_gotoxy(int8 x, int8 y)
  179. {
  180. int8 address;
  181.  
  182. if(y != 1)
  183.    address = lcd_line_two;
  184. else
  185.    address=0;
  186.  
  187. address += x-1;
  188. lcd_send_byte(0, 0x80 | address);
  189. }
  190.  
  191. //-----------------------------
  192. void lcd_putc(char c)
  193. {
  194.  switch(c)
  195.    {
  196.     case '\f':
  197.       lcd_send_byte(0,1);
  198.       delay_ms(2);
  199.       break;
  200.    
  201.     case '\n':
  202.        lcd_gotoxy(1,2);
  203.        break;
  204.    
  205.     case '\b':
  206.        lcd_send_byte(0,0x10);
  207.        break;
  208.    
  209.     default:
  210.        lcd_send_byte(1,c);
  211.        break;
  212.    }
  213. }
  214.  
  215. //------------------------------
  216. #ifdef USE_LCD_RW
  217. char lcd_getc(int8 x, int8 y)
  218. {
  219. char value;
  220.  
  221. lcd_gotoxy(x,y);
  222.  
  223. // Wait until busy flag is low.
  224. while(bit_test(lcd_read_byte(),7));
  225.  
  226. output_high(LCD_RS);
  227. value = lcd_read_byte();
  228. output_low(lcd_RS);
  229.  
  230. return(value);
  231. }
  232. #endif

Itt a portlabakat tetszes szerint tudod megvalasztani. En hasznalom ezt a kezelest, es nagyon jo.
Ha kerdesed van irj.
Udv Vili
(#) nyarfa válasza vilmosd hozzászólására (») Feb 9, 2010 /
 
Egyre jobb nincs flex_lcd.c-m hihetetlen. Viszont így, hogy innen lemásoltam egy file-ba működik minden örök hála most már van élő példám amit kielemezhetek.
(#) trudnai válasza vilmosd hozzászólására (») Feb 9, 2010 /
 
Uhh, jobb lett volna mellekelni a kodot
(#) nyarfa válasza trudnai hozzászólására (») Feb 9, 2010 /
 
De ez segített.
(#) vilmosd válasza trudnai hozzászólására (») Feb 9, 2010 /
 
Bocs a CCS forumrol masoltam be. Nem volt meg file-ban
Udv Vili
(#) nyarfa válasza vilmosd hozzászólására (») Feb 9, 2010 /
 
Egysoros esetén a flex_lcd.c behúzása után, vagy előtt legyen a "#define lcd_type 1"?
(#) icserny válasza nyarfa hozzászólására (») Feb 9, 2010 /
 
Idézet:
„Egysoros esetén a flex_lcd.c behúzása után, vagy előtt legyen a "#define lcd_type 1"?”
Ez úgy derül ki, hogy kis kezeddel megnyitod a flex_lcd.c állományt, és megnézed, hogy van-e benne feltételes fordítás az lcd_type paraméterrel.

Én most egy olyan változatot találtam, amiben már benne van a definíció és át kell szerkeszteni!
  1. #define lcd_type 2        // 0=5x7, 1=5x10, 2=2 lines
(#) nyarfa válasza icserny hozzászólására (») Feb 9, 2010 /
 
Akkor csinálok rögtön kettőt flex_lcd1.c és flex_lcd2.c és nincs több nyitott kérdés.
(#) vilmosd válasza nyarfa hozzászólására (») Feb 9, 2010 / 1
 
Hali
Itt vannak a 16x1 es a 20x4 proggik.
Arra vigyazzal hogy nem minden LCD kezdodik azonos cimen. Vannak amelyeknel mas cimen talalhato az elso es a masodik sor nem 0x00 es 0x40 cimeken. Erdemes megnezni az adatlapokat. En szivtam ilyennel.
Udv Vili
Következő: »»   668 / 1320
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem