Fórum témák
- • Kapcsolási rajzot keresek
- • Elektromos kerékpár, robogó házilag
- • Klíma szervizelés, javítás
- • Felajánlás, azaz ingyen elvihető
- • Számítógép hiba, de mi a probléma?
- • Rádió építés a kezdetektől a világvevőig
- • Westen 240 Fi gázkazán hiba
- • Kondenzátor feltöltés
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • VF3 - 6 végerősítő
- • Villanypásztor
- • Mosógép vezérlők és általános problémáik
- • Villanymotor
- • Vásárlás, hol kapható?
- • Quad 405-ös erősítő tapasztalatok és hibák
- • LM1875, LM3875, LM3886, stb. TI végerősítők
- • Villanyszerelés
- • Folyamatábrás mikrokontroller programozás Flowcode-dal
- • RFID Miértek és hogyanok
- • Li-Po - Li-ion akkumulátor és töltője
- • Audiofil, High End Audio
- • Alternativ HE találkozó(k)
- • PLC alapismeretek
- • PIC - Miértek, hogyanok haladóknak
- • Páratartalom érzékelő
- • Gitár Pickup
- • Kondenzátor
- • Inverteres hegesztőtrafó
- • Erősítő mindig és mindig
- • TV hiba, mi a megoldás?
- • Elektromos fűnyíró probléma
- • Li-Ion saját akkucsomag készítése
- • Ki hol gyártatja a NYÁK-ot ?
- • Flip-Flop? Bistabil? Buffer?
- • Egyfázisú motor forgásirány váltása mágneskapcsolóval
- • Indukciós főzőlap javítása
- • Espressif mikrokontrollerek
- • Hörmann kapuk
- • Műveleti erősítő
- • Kombikazán működési hiba
- • Codefon kaputelefon
- • Autóelektronika
- • Porszívó javítás
- • Rádióamatőrök topikja
- • Muzeális készülékek-alkatrészek restaurálása
- • Analóg oszcilloszkóp javítása
- • Elektromos távirányítós kapunyitó
- • Érdekességek
- • Sütő javítás
- • DVB-T - Földfelszíni digitális problémák
- • Frekvencia - feszültség átalakító
- • Mosogatógép hiba
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • Oszcilloszkóp, avagy hogyan kell használni?
- • Tápegységgel kapcsolatos kérdések
» Több friss téma
|
Fórum » PIC - Miértek, hogyanok haladóknak
örök hála
estére referálok mennyire sikerült a dolog
köszi
A lábkiosztás lemaradt...
LCD_DB4 A2
LCD_DB5 C0
LCD_DB6 C1
LCD_DB7 C2
LCD_E A1
LCD_RS A0
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!
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.
Tedd be melléklektként a C kódot.
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
"Hello-bello" ha ez a megoldás, akkor az egyik két soros üzemképes, és a gazdája nemtud programozni
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!
Látod, mondtam én hogy nem olyan bonyolult ez!
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.
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.
Örülök, hogy hasznodra lehettem! :help:
Kérlek watt a c kódot is oszd meg velem. Szeretném megtalálni mit rontottam el.
K. Nyarfa! Inkabb Te csatoldd a kododat, es igy meg tudjuk nezni mit rontottal el...
Udv,
#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.>
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.
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.
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
Javítottam rajta de hiába. A ledeken túl vagyok, de attól még ez nem megy. No de itt van a amit írtál, szerintem kijavítottam vagy nem.
Lehet, hogy az lcd.c-vel vannak gondok nállam is?
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:
#include <16F877.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock = 4000000)
#include "flex_lcd.c"
//==========================
void main()
{
lcd_init(); // Always call this first.
lcd_putc("\fHello World\n");
lcd_putc("Line Number 2");
while(1);
}
A FLEX_LCD.C Igy nez ki:
// flex_lcd.c
// These pins are for the Microchip PicDem2-Plus board,
// which is what I used to test the driver. Change these
// pins to fit your own board.
#define LCD_DB4 PIN_D0
#define LCD_DB5 PIN_D1
#define LCD_DB6 PIN_D2
#define LCD_DB7 PIN_D3
#define LCD_E PIN_A1
#define LCD_RS PIN_A3
#define LCD_RW PIN_A2
// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.
#define USE_LCD_RW 1
//========================================
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xc, // Display on
1, // Clear display
6 // Increment cursor
};
//-------------------------------------
void lcd_send_nibble(int8 nibble)
{
// Note: !! converts an integer expression
// to a boolean (1 or 0).
output_bit(LCD_DB4, !!(nibble & 1));
output_bit(LCD_DB5, !!(nibble & 2));
output_bit(LCD_DB6, !!(nibble & 4));
output_bit(LCD_DB7, !!(nibble & 8));
delay_cycles(1);
output_high(LCD_E);
delay_us(2);
output_low(LCD_E);
}
//-----------------------------------
// This sub-routine is only called by lcd_read_byte().
// It's not a stand-alone routine. For example, the
// R/W signal is set high by lcd_read_byte() before
// this routine is called.
#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
int8 retval;
// Create bit variables so that we can easily set
// individual bits in the retval variable.
#bit retval_0 = retval.0
#bit retval_1 = retval.1
#bit retval_2 = retval.2
#bit retval_3 = retval.3
retval = 0;
output_high(LCD_E);
delay_cycles(1);
retval_0 = input(LCD_DB4);
retval_1 = input(LCD_DB5);
retval_2 = input(LCD_DB6);
retval_3 = input(LCD_DB7);
output_low(LCD_E);
return(retval);
}
#endif
//---------------------------------------
// Read a byte from the LCD and return it.
#ifdef USE_LCD_RW
int8 lcd_read_byte(void)
{
int8 low;
int8 high;
output_high(LCD_RW);
delay_cycles(1);
high = lcd_read_nibble();
low = lcd_read_nibble();
return( (high<<4) | low);
}
#endif
//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_RS);
#ifdef USE_LCD_RW
while(bit_test(lcd_read_byte(),7)) ;
#else
delay_us(60);
#endif
if(address)
output_high(LCD_RS);
else
output_low(LCD_RS);
delay_cycles(1);
#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_cycles(1);
#endif
output_low(LCD_E);
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
//----------------------------
void lcd_init(void)
{
int8 i;
output_low(LCD_RS);
#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif
output_low(LCD_E);
delay_ms(15);
for(i=0 ;i < 3; i++)
{
lcd_send_nibble(0x03);
delay_ms(5);
}
lcd_send_nibble(0x02);
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
{
lcd_send_byte(0, LCD_INIT_STRING[i]);
// If the R/W signal is not used, then
// the busy bit can't be polled. One of
// the init commands takes longer than
// the hard-coded delay of 60 us, so in
// that case, lets just do a 5 ms delay
// after all four of them.
#ifndef USE_LCD_RW
delay_ms(5);
#endif
}
}
//----------------------------
void lcd_gotoxy(int8 x, int8 y)
{
int8 address;
if(y != 1)
address = lcd_line_two;
else
address=0;
address += x-1;
lcd_send_byte(0, 0x80 | address);
}
//-----------------------------
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;
}
}
//------------------------------
#ifdef USE_LCD_RW
char lcd_getc(int8 x, int8 y)
{
char value;
lcd_gotoxy(x,y);
// Wait until busy flag is low.
while(bit_test(lcd_read_byte(),7));
output_high(LCD_RS);
value = lcd_read_byte();
output_low(lcd_RS);
return(value);
}
#endif
Itt a portlabakat tetszes szerint tudod megvalasztani. En hasznalom ezt a kezelest, es nagyon jo.
Ha kerdesed van irj.
Udv Vili
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.
Uhh, jobb lett volna mellekelni a kodot
Bocs a CCS forumrol masoltam be. Nem volt meg file-ban
Udv Vili
Egysoros esetén a flex_lcd.c behúzása után, vagy előtt legyen a "#define lcd_type 1"?
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!
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
Akkor csinálok rögtön kettőt  flex_lcd1.c és flex_ lcd2.c és nincs több nyitott kérdés.
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
|
|