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.