Stránka 1 z 2
preklad z C do Bascom
Napsal: 13 říj 2009, 11:30
od apam
Dobry den, najde se zde dobrovolnik, který dokáže přeložit program pro atmega 32 napsany v avr c do kodu bascom, jde mi hlavne o pasaze tykajici se snimani hodnoty z adc a naslednem zobrazeni na glcd a ovladani glcd s radicem ks0108,
Nelze pouzit ovladani pomoci knihovny glcdks108.lib!!!
kdo si na to troufa tomu zaslu komplet v C
Cecko moc neumim a v bascomu se mi porad nedari vytvorit to same co dela puvodni program napsany v c ,lepe napsano neumim ovladat glcd s ks0108 jinym zpusobem jak pomoci glcdks108.lib a to zde neni mozne.
potrebuji to pro dalsi rozsireni programu coz v C u mne nehrozi.
Napsal: 14 říj 2009, 16:30
od apam
preci to neni nemozne... je tu alespon nekdo kdo umi ovladat tento radic lcd jinak nez pomoci glcdks108.lib? staci aspon jak inicializovat, zobrazit a smazat pixel aby pri taktu megy32 16mhz vse fungovalo jak ma.
Napsal: 14 říj 2009, 16:40
od Návštěvník
Dyť si stáhni datašít, tam je všechno potřebné popsané.
Napsal: 14 říj 2009, 16:54
od apam
kdybych vedel jak to napsat tak tu nezadam o pomoc.
Napsal: 14 říj 2009, 16:59
od Návštěvník
A co nevíš jak napsat? V datašítu je všechno popsané a jestli neumíš v Bascomu, tak nechápu proč to v něm má být.
Napsal: 14 říj 2009, 17:17
od apam
jeste jsem se s tim nesetkal a dost dobre tomu nerozumim pac jsem nikde nenasel nic podobneho napsaneho v bascomu, takze nemam ani paru jak by to melo vypadat tak se tu snazim najit radu jak mam zacit nebo jestli to trebas uz nekdo neresil.
a co vyctu z toho datasheetu kdyz polovinu veci vidim poprve... ? bascom se ucim 2 mesice a vzhledem k tomu, ze jsem nikdy nic neprogramoval tak neni nic spatneho na tom ze se tu na to ptam ne, jak jinak se to mam asi naucit kdyz siroko daleko neznam nikoho kdo by se tomu venoval a mohl by mi s tim pomoct.
Napsal: 14 říj 2009, 17:22
od ujosvec
Jde taky o to jak je zapojený k tý M32.Podle toho nastavuješ LCD.Chtělo by to také schéma.
Napsal: 14 říj 2009, 17:30
od apam
Db0 - DB7 = PortD.0 - PortD.7
RW = PortB.7
Rs = PortB.6
E = PortB.2
Cs1 = PortB.5
Cs2 = PortB.4
Napsal: 14 říj 2009, 17:32
od ujosvec
Napsal: 14 říj 2009, 18:08
od apam
no ma to jeden maly problem ukazkovy program neni v bascomu. ale snad bych to mohl zvladnout je to docela dost popsane...
Asi blba otazecka, co jsou to busy a reset priznaky?
Napsal: 14 říj 2009, 18:39
od Návštěvník
To jsou bity ve stavovém slově, kterými řadič displeje říká, v jakém je stavu. Máš je popsané v té tabulce, B je Busy a R je Reset.
Kód: Vybrat vše
čtení stavového slova
B=1 - řadič zaneprázdněn, B=0 - připraven
D=1 - LCD zapnut, D=0 - LCD vypnut
R=1 - probíhá reset, R=0 - reset ukončen
Napsal: 14 říj 2009, 19:20
od apam
dokazete to nekdo napsat v bascomu tak jak to je tu v c, ja tomu proste nerozumim...
Kód: Vybrat vše
#include <util/delay.h>
#define lcdrs 6 // LCD's RS pin is connected to Pin0 of AVR 0
#define lcdrw 7 // LCD's r/w pin is connected to Pin1 of AVR 1
#define lcde 2 // LCD's e pin is connected to Pin2 of AVR
#define lcdcs1 5 // LCD's CS1 pin is connected to Pin5 of AVR
#define lcdcs2 4 // LCD's CS2 pin is connected to Pin4 of AVR
#define lcdrst 3 // LCD's RST pin is connected to Pin3 of AVR
#define ctrl_port PORTB
#define ctrl_port_ddr DDRB
#define ctrl_port_pins PINB
#define data_port PORTD
#define data_port_ddr DDRD
#define data_port_pins PIND
...
void glcdInit (void)
{
data_port_pins = 0; //DATA Port Low
data_port_ddr = 0xff; //Make DATA port output
ctrl_port = 0; //CONTROL Port Low
ctrl_port_ddr = 0xff; //Make CONTROL port outputs
ctrl_port |= (1<<lcdrst);
ctrl_port |= (1<<lcdcs1); //Enable the CS1 of the display
ctrl_port |= (1<<lcdcs2); //Enable the CS2 of the display
ctrl_port &= ~(1<<lcdrs); //Clear RS \_
ctrl_port &= ~(1<<lcdrw); //Clear RW / Command mode
_delay_us(42);
data_port = 0b11000000; //Display start line = 0 (0-63)
eStrobe();
_delay_us(42);
data_port = 0b01000000; //Set address = 0 (0-63)
eStrobe();
_delay_us(42);
data_port = 0b10111000; //Set page = 0 (0-7)
eStrobe();
_delay_us(42);
data_port = 0b00111111; //Display ON
eStrobe();
ctrl_port &= ~(1<<lcdcs1); //Disable the CS1 of display
ctrl_port &= ~(1<<lcdcs2); //Disable the CS2 of display
createRaster(); // raster...
showTheWave(); // LCD.
}
====================================================================
Napsal: 14 říj 2009, 20:45
od Návštěvník
V C neumím a v Bascomu tuplem ne, ale mohlo by to vypadat nějak takhle:
Kód: Vybrat vše
lcdrs ALIAS Portb.6
lcdrw ALIAS Portb.7
lcde ALIAS Portb.2
lcdcs1 ALIAS Portb.5
lcdcs2 ALIAS Portb.4
lcdrst ALIAS Portb.3
ctrl_port ALIAS Portb
data_port ALIAS Portd
data_port_pins ALIAS Pind
glcdInit:
data_port = 0
config data_port = output
ctrl_port = 0
config ctrl_port = output
lcdrs = 1
lcdcs1 = 1
lcdcs2 = 1
lcdrs = 0
lcdrw = 0
waitus 42
data_port = &B11000000
gosub eStrobe
waitus 42
data_port = &B10111000
gosub eStrobe
atd.........
return
Napsal: 15 říj 2009, 14:04
od nepřihlášen
Proč nelze použít "glcdks108.lib" ?
Pro zobrazování pixelů existuje příkaz PSET X,Y,Value
Jen pro inspiraci: jednoduchý osciloskop v Bascomu
http://www.avr64.com/English/Projects/Index.htm
Napsal: 15 říj 2009, 20:46
od apam
proc ji nejde pouzit? no protoze pri 16mhz je nestabilni, nebo nevim cim to je po chvili nekdy driv nekdy pozdeji se vypne pulka lcd a pak zhasne uplne, nebo sem tam stridave zobrazuje a maze pixely ktere nema. pri 8Mhz to nedela.jenze to je zase dost pomale pro ucel ke kteremu to potrebuju.jestli lze toto nejak osetrit tak by to snad i s tou knihovnou slo.
ten odkaz je zajimavy, ale jen bych dodal ze s verzi pana seratidise to nelze srovnat. mam to odzkousene.