We hebben nu een code voor 8 bits lcd. Nu wil ik graag uitzoeken hoe je een 4 bits lcd aanstuur. Wat gaat er allemaal veranderen in de code?
void lang();
void kort();
void commando();int current; //dit is de plaats waar je in het menu bent
void lang()
{
int x;
for (x=0; x<=20000;x++)
asm("nop");
}void kort()
{
int x;
for (x=0; x<=800;x++)
asm("nop");
}void commando(int x)
{
PORTC=0x04;
kort();
PORTA=x;
PORTC=0x00;
kort();
PORTA=0x00;
kort();
}void ascii(char x)
{
PORTC=0x05;
kort();
PORTA=x;
PORTC=0x00;
kort();
PORTA=0x00;}
init()
{
DDRA=0xFF; //lcd
DDRC=0xFF; //lcd
DDRD=0xFF; //led
DDRB=0x00; //switchesPORTA=0x00;
PORTC=0x00;
PORTD=0xFF; //inverteren voor ledjes!lang();
commando(0x38);
kort();
commando(0x0F);
kort();
commando(0x06);
kort();
commando(0x01);
kort();}
nieuweregel()
{
commando((0x80+40)); //Nieuwe Regel
}clearscreen()
{
commando(0x01);
}tekst(char y[16])
{
int x;
for (x=0;x<=15;x++)
{
if (y[x] == '\0')
{
break;
}if (y[x] != '\0')
ascii(y[x]);
}}
home()
{
clearscreen();
tekst("# Athon Solar #");
nieuweregel();
tekst("ok=0 nxt=1 pre=2");
current=0;
}menuitems()
{clearscreen();
tekst("#->Settings");
nieuweregel();
tekst("#->History");
current=1;}
settings()
{
clearscreen();
tekst("#->Pomp");
nieuweregel();
tekst("#->Winterstand");
current=2;}
pomp_aan()
{
clearscreen();
tekst("###POMP");
nieuweregel();
tekst("#->AAN");
current=3;}
pomp_uit()
{
clearscreen();
tekst("###POMP");
nieuweregel();
tekst("#->UIT");
current=4;}
main()
{
init();
home();do{
if ((!(PINB & 0x01)) && (current==0))
{
menuitems();do { }while (!(PINB & 0x01)); //wacht tot knop weer los is gelaten
}if ((!(PINB & 0x01)) && (current==1))
{
settings();do { }while (!(PINB & 0x01)); //wacht tot knop weer los is gelaten
}if ((!(PINB & 0x01)) && (current==2))
{
pomp_aan();do { }while (!(PINB & 0x01)); //wacht tot knop weer los is gelaten
}if ((!(PINB & 0x02) && (current==4)))
{
pomp_aan();do { }while (!(PINB & 0x02)); //wacht tot knop weer los is gelaten
}if ((!(PINB & 0x02) && (current==3)))
{
pomp_uit();do { }while (!(PINB & 0x02)); //wacht tot knop weer los is gelaten
}if (!(PINB & 0x04) && current ==1)
{
home();
do { }while (!(PINB & 0x04)); //wacht tot knop weer los is gelaten}
if (!(PINB & 0x04) && current ==2)
{
menuitems();
do { }while (!(PINB & 0x04)); //wacht tot knop weer los is gelaten}
if (!(PINB & 0x04) && (current ==4 || current==3))
{
settings();
do { }while (!(PINB & 0x04)); //wacht tot knop weer los is gelaten
}}while(1);
}
[\quote]: mensen die teveel tijd overhebben kunnen ook wel 4 bits code maken:P :
Het moet wel in C
- Sommige mensen moeten werken voor hun geld. Die zijn dus niet de hele dag online
- Je moet maar net iemand treffen die interesse in jouw probleem heeft
- Diegene moet er dan ook nog de kennis voor denken te hebben om er wat zinnigs over te zeggen
Nou is het niet zo spannend om eea. te wijzigen. Wat heb je zelf al uitgezocht en ontdekt?
Rik_J
Problems do not concern me. I want solutions, not excuses!
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
de routines commando en ascii zul je moeten herschrijven , alsook je init ( die is trouwens nu ook niet volgens het boekje ... je initialiseert niet betrouwbaar .. )
De code hebben we zelf geschreven.. Ik zou niet weten hoe ik de code moet veranderen eigenlijk, heb wel beetje info over 4 bit, maar ik weet niet hoe de code gaat veranderen precies..
Heb je ook info over Nederlands? 'kzou' is geen woord, 'kweet' ook niet en we zitten hier niet op MSN. Maar goed...
Zoek met google eens op 44780. Aardige kans dat je de datasheet van de HD44780 tegen komt. Daar staat tot op bit niveau in hoe eea. werkt.
En nee, ik ga de code niet voor je schrijven. Het is jouw schoolopdracht.
met die datasheet kom ik ook niet echt verder eigenlijk... ik ben een beetje newbie met microcontrollers maar moet wel een 4 bits lcd hebben, ik heb de 8 bits code wel, maar weet niet hoe ik er 4 bits van moet maken...
Wat is er mis met die datasheet?? Kijk evt. ook eens hier. Dat je niets van uC weet heeft niets te maken met een datasheet niet begrijpen. Welke datasheet heb je gebruikt en welk voorbeeld snap je niet?
die datasheet heb ik gebruikt... ik snap alles niet omdat ik een newbie ben... ja wel iets snap ik.. maar van 4 bits niks....
ik zit nu hier al 2 weken mee te kloten met info zoeken enz maar ik kom gewoon niet verder ik zit laat maar zeggen vast! kweet ook niet waar ik moet beginnen met de code veranderen en waarin ik het moet veranderen enz..
Hier staat het complete timing diagram. Wat is daar dan niet aan te begrijpen? Ongeacht of je newbie bent of niet, elk lijntje staat getekend, dus eh...??????? Het is nauwelijks anders dan de 8-bit versie, alleen moet je nu 2 transfers doen.
Het enige wat een beetje tricky is is de 4-bit intialisatie. Maar ook die staat tot op bit niveau beschreven.
Kan het zijn dat iemand anders die code geschreven heeft (en dat je de huidige code ook niet begrijpt) en dat jij dat nu om moet bouwen? Ik kan me nauwelijks voorstellen dat voor iemand die aan deze code gewerkt heeft dit uberhaupt het plaatsen van een post waard is...
deze code hebben we met de groep gemaakt, ik iets minder maar de de meeste snapten het wel. Ik moet er nu 4 bits van maken, ik snap nu de code gedeeltelijk wel..
Ik wist ook dat ik het in 2 keer moest verzenden, maar hoe veranderd de code dan? Dat weet ik juist niet.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
die code hebben we zelf geschreven ... maar we snappen niet hoe het werkt ... jaja dat verhaal kennen we.
bon voor 4 bit mode moet je je byte in 2 stukken kappen.
je commando en ascii routines moeten ( die eignelijk het zelfde doen alleen met de pin A0 een andere setting te geven ) dus die gepasseerde byte in 2 kappen
we gaan van het volgende uit : we gebruiken 1 poort om de transfer te doen
( ik ken geen C syntax maar hier issie in een andere taal
declare LCD literally 'P0'
declare LCD_EN literally 'P0.4' /* enable */
declare LCD_WR literally 'P0.5' /* write strobe */
declare LCD_A0 literally 'P0.6'/* de A0 poot van de Lcd */
/* sommigen noemen A0 ook wel de RS Register select poot */
procedure command(in): do;
declare (in,low,high) byte;
low = (in or &h0F);
high = (in or &hF0);
shr High ,4; /* shift right */
/* als je compiler geen shift right heeft kan je ook
delen door 16. en als dat niet gaat zal je het met
4 compares moeten doen of moet je een betere
compiler zoeken */
LCD = low or &hf0;
LCD_EN =0;
LCD_WR=0;
LCD_WR=1;
LCD = high or &hE0;
LCD_WR=0;
LCD_WR=1;
LCD_EN=1;
end command;
procedure ascii(in): do;
declare (in,low,high) byte;
low = (in or &h0F);
high = (in or &hF0);
shr High ,4;
LCD = low or &hf0;
LCD_A0=0;
LCD_EN =0;
LCD_WR=0;
LCD_WR=1;
LCD = high or &he0;
LCD_WR=0;
LCD_WR=1;
LCD_EN=1;
end command;
voila. das uit de losse pols. tkan zijn dat je de polariteiten moet aanpassen ( kweet niet of je logica zitten hebt tussen je cpu en lcd , kheb diene nest C niet bekeken (ik krijg buikpijn van die taal. veel te veel haakskes en krullekes), indien niet dan zou de code moeten goed zijn ) . ik kan me alleen niet herineneren of je eerst low moeten sturen of high ( draai die om als t moet.
Hoe die code verandert... Volgens mij zit je net zo lang te drammen tot iemand het voor je schrijft. Not me!
Pak nou eerst eens 1 routine, kijk wat die nu doet (inderdaad, tot op bit niveau) en kijk dan eens wat-ie moet gaan doen. Als je die datasheet gelezen hebtm weet je ook dat er 2 manieren zijn om dat ding te schrijven: de busy flag pollen of gewoon traag genoeg zijn. Bepaal vooraf ook even wat je huidige code doet. free_electron heeft je al aangegeven welke routines je zult moeten herschrijven. Tip van Marco: begin bij de ASCII of de COMMAND. die INIT is niet moeilijk, maar net even anders dan die andere twee.
En eh.. Ik laat het hier bij. Het enige wat ik lees is 'ik snap het niet', 'ik snap het niet', 'ik snap het niet'.
oke dus wat ik moet veranderen aan de code is:
void commando
void ascii
init
en de rest blijft allemaal hetzelfde?
Op 31 oktober 2005 21:41:44 schreef DJCapitalM:
oke dus wat ik moet veranderen aan de code is:
void commando
void ascii
initen de rest blijft allemaal hetzelfde?
En je hebt hier zelf aan meegewerkt? Yeah, sure...
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
ken je eigenlijk wel C ?
void commando en void ascii ... Void is gewoon een aanduiding die zegt dat die functies niks retourneren.
(ik net genoeg c om dat te snappen. eigenlijk kan ik perfect c lezen en er desnoods iets in schrijven maar ik blijf die taal mijden als de pest)
ik heb je de code daar gegeven. herschrijf ze in c en tzal werken.
Op 31 oktober 2005 21:49:22 schreef free_electron:
ken je eigenlijk wel C ?
void commando en void ascii ... Void is gewoon een aanduiding die zegt dat die functies niks retourneren.(ik net genoeg c om dat te snappen. eigenlijk kan ik perfect c lezen en er desnoods iets in schrijven maar ik blijf die taal mijden als de pest)
ik heb je de code daar gegeven. herschrijf ze in c en tzal werken.
ik bedoel de code die in de void staat
Rik_J
Problems do not concern me. I want solutions, not excuses!
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Op 31 oktober 2005 22:04:35 schreef DJCapitalM:
[...]ik bedoel de code die in de void staat
aaaaaargh. er staat helemaal geen code in de void. Void is leeg ! raadpleeg eens een engels woordenboek. void eis de waarde die terugkeert uit de functie
de code staat tussen de parentheseis {} achter de functienaam.
ben je er nu mee aant rammelen of hoe zit het ?
ik ben niet een persoon die iemand rap aanvalt maar in dit geval zou ik toch mijn naam veranderen in DJCapitalL ...
[Bericht gewijzigd door free_electron op ]
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
godverdekleurpotloden ... ik zie nu net dat je daarover een paar dagen terug ook al een ander topic lopen had
http://www.circuitsonline.net/forum/view/26310
daarin heeft iemand je zelfs de C code cadeau gedaan.
ik geef het op . k'ga de rest van de dag in een hoekje een beetje depressief wezen zitten. Als iemand nog een potje prozac heeft, mag ie het altijd opsturen.
die code deed het niet, compile ging niet goed...
probeer em zelf maar is te compilen..
en is die code voor 4 bits?

