Forum: Mikrocontroller und Digitale Elektronik 4*20 zeilen lcd an mega8


von nuss (Gast)


Angehängte Dateien:

Lesenswert?

hallo zusammen,

bevor jetzt irgendwelche schreiben: "les das lcd tutorial *mecker*" , 
ich habe es gelesen.
stelle meine frage dennoch, da ich nicht mit der lcd.h arbeiten will.

ich habe folgendes problem:
das lcd zeigt nur streifen an ;) g

meine hardware sieht folgendermaßen aus:
Enable an PC2
RW an PC1
RS an PC0

D0-D7 sind an PortB

das wars eigentlich :)

nett wäre es wenn mir irgendwer meinen code anpassen könnte =)

mfg nuss


//edit:
kann mir wer zufällig noch sagen was dieser fehler in ponyprog heisst:
"unable to probe, bad device or devie locked"

von Michael U. (amiga)


Lesenswert?

Hallo,

falscher AVR-Typ eingestellt, Problem mit dem Zugriff auf den AVR oder 
Schutzbits gesetzt, bei letzterem sollte Erase helfen (macht aber Pony 
in der Default-Einstellung sowieso, wenn ich nicht irre.

Bin zwar kein C-Programmier, fast nur ASM, aber:

  PORTD=0x00&0x03;
 0 AND 3 ist bei mir 0, oder?

  for(k=0;k<7;k++)                                   //Ausgabeschleife 
für die 6 Befehle
  {
   PORTC = 0xff&0x04;
   PORTB = befehl[7];                                //Befehl ausgeben
   PORTC = 0x00&0x04;
 0 AND 4 ist bei mir auch 0, oder?

   for(i=0;i<800;i++);
Sicher, daß die Schleife nicht bei eingeschalteter Optimierung 
wegoptimiert wird bzw, wenn ohne, daß sie mehrere ms dauert? Die ersten 
Wartezeiten beim Init müssen recht lang sein (Datenblatt HD44780).


  init_lcd();
  PORTB=hallo;

Mehr am Rande: wie willst Du ein Array of Char ind das 8Bit-Register von 
PORTB bekommen???

Gruß aus Berlin
Michael

von holger (Gast)


Lesenswert?

>   PORTB = befehl[7];                                //Befehl ausgeben

Dein Array hat nur die Elemente befehl[0..6]

von nuss (Gast)


Lesenswert?

mhh komischer weise hat sich das problem von selbst gelöst...*kopf 
kratz*
war wohl nen wackelkontakt..
aber danke für die schnelle antwort


nur mein anderes problem hat sich leider noch ned von selbst behoben

von nuss (Gast)


Lesenswert?

das mit dem AND soll ja so sein das da ne null kommt.

und die for schleife da sollte eigentlich da bleiben und nicht 
wegoptimiert werden

und mit dem array...ehm hab mir das einfach so überlegt, dass ich da nen 
array reinschreibe. sollte doch gehen oder denke ich grad flasch?

von Marvin M. (Gast)


Lesenswert?

Öhm - nix für ungut, aber da würde ich Dir echt empfehlen, nochmal ein 
C-Buch in die Hand zu nehmen.
Wozu Du eine Schleife für Befehle veranstaltest und dann doch eine 
(falsche) Konstante in den Index schreibst, ist mir völlig rätselhaft.
Außerdem ist die Notation PORTD=0x00&0x03 ziemlich von hinten durch die 
Brust ins Auge.
Mehr Sinn macht es, z.B. die Bits zu bezeichnen und für bessere 
Lesbarkeit mit Shift-Befehlen zu verwenden wie PORTD = (1 << CS)|(1 << 
Enable)

von Karl H. (kbuchegg)


Lesenswert?

nuss wrote:
> das mit dem AND soll ja so sein das da ne null kommt.

Warum schreibst du das dann so kompliziert und schreibst nicht
einfach

   PORTD = 0;

denn genau das macht deine VerUNDung letztendlich :-)

>
> und die for schleife da sollte eigentlich da bleiben und nicht
> wegoptimiert werden

Warum sollte der Compiler sie übrig lassen?
Sie verbraucht nur Rechenzeit, ohne etwas Sinnvolles zu tun.
Und da es die nobelste Aufgabe eines Optimizers ist, Rechenzeit
frei zu bekommen, wo immer er sie kriegen kann, .....

Wenn du im Programm etwas warten willst, dann gibt es dafür die
_delay_xx Funktionen. Details dazu finden sich auch im Tutorial.

>
> und mit dem array...ehm hab mir das einfach so überlegt, dass ich da nen
> array reinschreibe. sollte doch gehen oder denke ich grad flasch?

Du denkst falsch.

Wenn in einer Garage nur 1 Auto Platz hat, dann wird es ziemlich
schwierig sein 6 Stück Autos hineinzuquetschen.

> da ich nicht mit der lcd.h arbeiten will.

Du wärst bei deinem derzeitigen Kenntnissstand aber gut beraten,
die LCD Routinen aus dem Tutorial einfach mal so zu übernehmen.
Eine Alternative wäre noch die sog. Fleury Lib (nach
'Peter Fleury LCD' googeln)

von Bluehorn (Gast)


Lesenswert?

Faszinierend. Ein Array mit 7 Elementen, eine Schleife, die von 0 bis 6 
zaehlt, um die Elemente auszugeben, und dann wird jeweils das (nicht 
vorhandene) siebte Element ausgegeben. Kann so nicht gehen...

Gruss, Torsten

von nuss (Gast)


Angehängte Dateien:

Lesenswert?

Das mit dem array hab ich hier ausm forum. da wurde behauptet, dass das 
so funktioniert grml

so hab das dann mal alles einzeln gemacht.
und nen bissl programmiert und probiert
und nun gehts!

hab den code im anhang

jetzt hab ich nur noch ne frage, wie mache ich das, dass der µC die 
zweite zeile nicht überspringt zur zeit sieht das so aus:

1. zeile: beschrieben
2. zeile: leer
3. zeile: beschrieben
4. zeile: leer

und dann würde ich gerne noch wissen, wie ich das mache, dass ein langer 
text nur in der ersten zeile angezeigt wird.
muss ich dazu zwischen dem schreiben "display shift" einschalten?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.