Forum: Mikrocontroller und Digitale Elektronik LCD am AVR Problem


von Alex (Gast)


Lesenswert?

Hallo! Bin ein totaler Anfänger, und gebe schon fast auf!
Habe ein 8x2 LCD... ist aber glaube ich dasselbe wie 16x1!
habe so ein programm geschreiben:
 $lib "lcd4busy.lbx"
 $regfile = "m32def.dat"
 $crystal = 16000000

 Config Lcd = 16 * 1
 Const _lcdport = Portc
 Const _lcdddr = Ddrc
 Const _lcdin = Pinc
 Const _lcd_e = 1
 Const _lcd_rw = 2
 Const _lcd_rs = 3


 Cls
 Locate 1 , 1
 Lcd "Hello world."
Habe Atmega 16 genommen!
Schlisse durch einen Wannenstecker ans Test-Programmierboard an!
Board ist 100%ig in Ordnung.. ISP auch! Bekomme das Programm auf µC!
LCD auch richtig verlötet!!! Bin Elektroniker, aber mit AVR, LCD keine
Erfahrung!
Also auf dem LCD Ist nichts!
Muss man noch was beachten, was ich nicht weiss?????
Bin schon echt am Verzweifeln......

von Markus Boremski (Gast)


Lesenswert?

ein paar fragen zur einstimmung:

was für ein programiergerät benutzt du?
Was für ein Test-Programmierboard hast du?
(eigene elektronik oder was selbstgebautes?)
Schonmal was auf den Controller geladen bekommen?

und noch eien frage die mir selbst etwas blöd vorkommt:
Was iss das für ne Sprache die du da benutzt?

g Markus

von Alex (Gast)


Lesenswert?

Ein Selbstgebautes Programmierboard!
Das soll basic sein.

Das programm kann ich auf den Controller laden!

von Markus Boremski (Gast)


Lesenswert?

...
"(eigene elektronik oder was selbstgebautes?)"
nee iss klar.. gigl
meine natürlich n gekauftes board oder was selbst gebautes..

nochwas..
Beschreib doch mal deine Umgebung etwas genauer.. (Software u.Ä.)

g Markus

von Alex (Gast)


Lesenswert?

Meine Umgebung:
Bin elektroniker für Geräte und Systeme...
sitze jetzt gerade auf der arbeit, und versuche schon seit 7 Uhr
morgens auf die Reihe zu kriegen! Klappt aber nicht!
nochmal zum Board: Ist zwar selbstgebautes, funzt aber 100%ig!
Lcd ist ein ganz einfaches ding mit 14 pins!
Software: Bascom.

von Markus Boremski (Gast)


Lesenswert?

Also wenn du das prog hingeladen bekommst iss ja schonmal ok..

aber Basic...
hmm..
muss gestehen: Da kenn ich mich net mit aus.

Falls du gerade erst den Einstieg in die µC Technik machst...
Würde ich dir raten C zu benutzen.
Da gibt es hier viele hilfen für und es gibt auch libs für LCD module
die sehr komfortabel zu bedienen sind.
(möcht hier keine Diskusion lostreten! iss nur ein tip von mir.)

Muss mich also hier ausklinken.. sorry..
Trotzdem noch viel Erfolg..

g Markus

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

schade :((((
Lade mal Layout von meinem Board hoch!
Vllt kann mir jemand anderer helfen!!!! BITTTTEEEE!!!!!

von Marc M. (bytewood) Benutzerseite


Lesenswert?

@Alex
in BASCOM hast Du die Möglichkeit Dein LCD mittels Konfiguration auf
die diversen Pins einzustellen und das LCD auszuwählen:
Options-Compiler-LCD

Was Dein Code-Schnipsel angeht, weiss ich nicht, was das sein soll.
LCD Ansteuerung könnte z.B. so aussehen:

Config Lcd = 16 * 2                         'LCD 16x2 konfigurieren
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 ,
Db7 = Portb.2 , E = Portb.1 , Rs = Portb.0
Cls
Upperline
Lcd "Dies ist Zeile 1"
Lowerline
Lcd "Dies ist Zeile 2"

Gruß

von Alex (Gast)


Lesenswert?

Danke, Marc! Probiere ich SOFORT aus!

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Schon ein Fehler! Sieh Bild

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Habe das Ganze SO verlötet: Sieh bild

von Marc M. (bytewood) Benutzerseite


Lesenswert?

Die Config LCDPIN ist eine Zeile!

von Asterix-007 (Gast)


Lesenswert?

Hallo,

bin zwar kein BASIC-Fan, aber was hat es mit der Bezeichnung
" Config Lcdpin = Pin , Db4 = Portb.5..." auf sich? Genauer, was
bedeutet hier das Wort "Pin"? Bevor hier einer klugscheißt: Ich
meinte in der Syntax und nicht die wörtliche Bedeutung!!!

Ansonsten: nimm das Tutorial (oben links) und gib das im Assembler ein!
Das Studio kannst du dir ja eh kostenlos downloaden und um C wirst du
auch nicht herumkommen!

Viel Glück!!!

Asterix-007

von Marc M. (bytewood) Benutzerseite


Lesenswert?

Hab mir gerade Dein Beschaltungsschema angesehen:
Mein Code ist ein Beispiel, und Du solltest den Port entsprechend
anpassen.
Die nicht benutzten DB0 bis DB3 könntest Du am LCD mit GND verbinden.

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Marc, das wird dann noch schlimmer! Guck das bild

von Marc M. (bytewood) Benutzerseite


Lesenswert?

@Asterix-007
"PIN" - Bascom kennt die Pinansteuerung und die Busansteuerung eines
LCD.

von Marc M. (bytewood) Benutzerseite


Lesenswert?

@Alex
Schau Dir mal Dein eigenes Beschaltungsschema an!
Erst denken, dann proggen!
Du beschaltest PortC und proggst auf PortB -> das kann nichts werden.
Außerdem hast Du ein 8x2 LCD und konfiguerierst 16x2 -> ob das was
werden kann?

Bascom hat auch noch ne nette Hilfefunktion...

Grüße

von Alex (Gast)


Lesenswert?

Leute, ich mach das Ganz einfach:
Ich habe alles von Hier:
http://www.roboternetz.de/wissen/index.php/LCD-Modul_am_AVR
und zwar "4-Bit Ansteuerung mit Busy(I/O Mode)"
Was stimmt da nicht??????

von Alex (Gast)


Lesenswert?

und nun?

von Marc M. (bytewood) Benutzerseite


Lesenswert?

Schmeiss die Zeile $lib "lcd4busy.lbx" raus und leg PC.2 auf output
ohne  Pullup. Diese Busy/IO Geschichte ist was für die Katz...

von Marc M. (bytewood) Benutzerseite


Lesenswert?

Sorry, meinte PC.3

von Mtron (Gast)


Lesenswert?

Nimm aus dem Roboternetz die 4-Bit Ansteuerung OHNE Busy(I/O Mode).

Dann wäre der Bascom-Code:

$regfile = "m16def.dat"
Config Lcd = 16 * 2                'damit läuft auch ein 8*2 LCD
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 ,
Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Cls
Cursor off
locate 1,1
Lcd "Zeile 1"
locate 2,1
Lcd "Zeile 2"
end

Gruß

von Mtron (Gast)


Angehängte Dateien:

Lesenswert?

siehe Anhang

von Asterix-007 (Gast)


Lesenswert?

@Alex:
Du kannst noch einen anrufen, den 50%-Joker nutzen oder das Publikum
fragen....

Wie sehen denn Deine Programmierkenntnisse aus????
Ich denke du solltest oben links (wie vorhin schon vermerkt) das
Tutorial lesen und durcharbeiten!!!!

Ich glaube hier fehlen fundamentale Kenntnisse in der Programmierung
und da erscheint es mir falsch gleich mit einem Display anzufangen!!

Du solltest ganz einfach erst mal Ports mit LED's wackeln lassen (der
Beweis das die Leitungen von dir in dem Programm richtig angesprochen
werden) und dich dann dem Display widmen!   Der Punkt 4 (im Tut.) ist
ja schon die Displayansteuerung.

Zu deinem Link: an den einzelnen Programmen wird nix falsch sein, nur
entweder in Zusammenhang mit Deiner Hardware oder dein komplettes
Programm selbst.

Es ist schon immer schlecht in sich laufende Programmfragmente zusammen
zu kopieren und dann zu erwarten das das funktioniert!

Ich habe den Eindruck, bitte sei nicht böse, das Du hier schnell mal
ein Display ansteuern willst, ohne Dich vorher mit den Grundlagen zu
beschäftigen (da kenne ich noch jemanden ;-) ). Das geht aber meistens
in die Hose!!!!

Übrigens kannst Du sämtliche Quelltexte aus dem Tutorial in Dein
Programm kopieren, die laufen sicher (Ein großes Lob mal an Andreas,
falls das von ihm ist!!).

Wenn Du klein anfängst, weißt Du was in den einzelnen Protgrammen
passiert, so dass Du dann auch mehrere Teile zu einem großen Programm
mergen kannst!!

Aber wie das halt so ist, vor dem Preis hat auch hier der liebe Gott
den Schweiß gesetzt!!!!

mfg
Asterix-007

von Alex (Gast)


Lesenswert?

also, ich kann es kaum glauben, aber es geht einfach nicht! Vielleicht
ist auch Display kaputt, und ich reiss mir den Arsch auf! Danke an
alle! Ich gebe es einfach auf!

von Mtron (Gast)


Lesenswert?

Wird denn wenigstens eine Zeile auf dem Display schwarz (8 schwarze
Kästchen)? Dann stimmt zumindest die Kontrasteinstellung
(Konstrastspannung). Wenn nicht, könnte es ein Display welches eine
negative Konstrastspannung an VEE haben muss. Die Anschlüsse müssen
natürlich mit der Hard- und Software übereinstimmen. Sonst wird das
nix. ATMega16 hat den Port C von PIN 22-29.

von Alex (Gast)


Lesenswert?

Ja, kontrast kann ich einstellen! Wird schwarz!wo port C ist, weiss ich
auch! So blöd bin ich auch nicht, aber es funktioniert einfach
nicht!!!!!!!!
Am Liebsten würde ich jetzt die ganze scheisse vegschmeissen, und über
alles vergessen! Sitze schon genau 8 stunden ohne pause umd kriege das
nicht hin "Hallo World" angezeigt zu haben!
Das nervigste ist, ich bin mir sicher, alles ist richtig verlötet!!!!!

von Asterix-007 (Gast)


Lesenswert?

@Alex:  mag ja sein, das Du alles richtig verlötet hast!!!

ABER, der Rest ist Software! Wie sieht es denn damit aus?????

"Der Beginn einer jeden Katastrophe ist eine beschissene
Vermutung..." (Zitat aus "Alarmstufe RotII") Wie wahr!!

Kleiner Tip: Fange da an zu suchen, wo Du sicher bist, das alles
richtig ist und funktioniert!!!

mfg

Asterix-007

von Markus Boremski (Gast)


Lesenswert?

hey..

nicht den Mut verlieren..

hab bis zu meinem ersten LCD funktionierenden ca. drei Tage
gebraucht..

Nochmals den Tip: "Machs in C"
wie eben schon von Asterix-007 angesprochen: Auf dauer wirst du nicht
drumherum kommen.

nimm dir Zeit und lies dich in die Materie ein..
dann wird das schon..

und die freude wenns nacher läuft (un man weiß warum) ist dann umso
größer.. ;-)

g Markus

von Alex (Gast)


Lesenswert?

ich habe nichts gegen C...
Das problem ist.. ich fange an ein Tutorial zu lesen......
und schon ich der 3. zeile kommt das was ich nicht verstehe... es ist
einfach da, und man weiss nicht, wochen man es genommen hat... also den
Beispiel kann ich mir nicht erklähren....
wenn man weiter ließt, dann versteht man sowieso NICHT mehr!

von Gregor Renka (Gast)


Lesenswert?

hast du die fuse-bits gesetzt? am port c ist nämlich das jtag-interface
und das muss man vorher per fuse-bit deaktivieren.

von Alex (Gast)


Lesenswert?

Was sind die fuse-bits? Deaktivieren?

von Karl heinz B. (kbucheg)


Lesenswert?

Also, wenn du nicht weist was die fuse-bits sind,
dann duerfte das hier

$crystal = 16000000

auch gelogen sein.

Die Fuse-Bits sind sowas wie Konfigurationsschalter im µC.
Normalerweise hat jedes Brennprogramm irgendwo einen Dialog
oder eine Möglichkeit wie man die Dinger umstellen kann.

WICHTIG: Sei vorsichtig damit! Man kann sich mit den Fuse-Bits
ganz schnell aus dem µC aussperren.

Du musst an 2 Baugruppen im Mega drehen:
* Zum ersten musst du das JTAG Interface abschalten. Das krallt
  sich nämlich sonst ein paar Pins vom PortC, die dann für
  dich nicht mehr zur Verfügung stehen. Da du aber das LCD
  am PortC hängen hast, ...
* Zum anderen kannst du im BASCOM noch so oft mitteilen, dass
  du einen Quarz mit 16 Mhz dran hängen hast. Das interessiert
  den Mega nicht die Bohne. Der richtet sich ausschliesslich nach
  den Fuse-Bits. Und in denen ist standardmässig eingestellt, dass
  der interne Oszillator den Takt liefert. Damit ist dein Quarz
  ein nettes Anhängsel, mehr aber auch nicht. Erst durch die
  richtige Stellung der Fuse-Bits wird der Quarz aktiviert.

Habe ich schon gesagt?
WICHTIG: Sei vorsichtig damit! Man kann sich mit den Fuse-Bits
ganz schnell aus dem µC aussperren.

von Karl heinz B. (kbucheg)


Lesenswert?

Ich weiss nicht ob ich das schon gesagt habe: :-)
WICHTIG: Sei vorsichtig mit den Fuse-Bits! Man kann sich mit denen
ganz schnell aus dem µC aussperren.

Zum Bearbeiten der Fuse-Bits ist meistens ein Studium des
Datenblattes des µC eine notwendige Voraussetzung! Das
Forum hier wimmelt nur so von Fragen, die sich alle um dasselbe
drehen:
"Wollte den Quarz aktivieren und jetzt geht nichts mehr. Hilfe!"

von Asterix-007 (Gast)


Lesenswert?

@Alex:

Hier hat sich meine Vermutung bzgl. Deiner Programmierkenntnisse und
-fähigkeiten bestätigt.

Ich kann Dir nur noch einmal das Tutorial empfehlen. Einfach Punkt für
Punkt durcharbeiten und nebenbei auch mal in das Datenblatt des
jeweiligen Atmels schauen!!! Das bringt Durchblick!!!
Auch das GCC-Tut ist nicht schlecht (ich hab nur oberflächlich drüber
geschaut) und erklärt bzgl. C sehr viel, auch mit Grundlagen! Also
LESEN!!!!!!

Und übrigens, alles der Reihe nach abarbeiten und nicht in der Mitte
anfangen!!!! ;-))


@Adreas: vielleicht solltest Du in dem Tutorial noch ein Kapitel über
die Fuses anhängen. Wäre für unsere Newbies bestimmt nicht schlecht!!!

Und zum Schluß: "Künstler" kommt von "Können" und nicht von
"Wollen"! sonst würde das "Wünstler" heißen ! Oder???  ;-)

mfg
Asterix-007

von Gregor Renka (Gast)


Lesenswert?

eine bequeme art die fuse-bits zu setzten bietet avr-studio von atmel.
das kann man sich kostenlos bei atmel runterladen.
ob es mit deinem selbstgebauten programmer funktioniert, kann ich dir
leider nicht sagen. sorry.

wenn du die möglichkeit hast, das lcd vorerst an einen anderen port
anzuschließen, dann mach das doch und teste so deine ansteuerung des
lcd.

karl-heinz hat auch das problem mit dem quarz erkannt. der atmel ist
per default auf 1 mhz interner oszillator eingestellt. du kannst also
vorerst die zeile: $crystal = 16000000 rauskommentieren. du brauchst
sie erst wenn du per fuse-bit auf externen oszillator umgestellt hast.


viel erfolg!

von Asterix-007 (Gast)


Lesenswert?

P.S.: vielleicht listest Du mal die Dir zur verfügung stehende Hard- und
Software auf und das, was Du machen willst! Dann haben wir einen
Überblick und können gezielter helfen!

mfg
Asterix-007

von Karl heinz B. (kbucheg)


Lesenswert?

> @Adreas: vielleicht solltest Du in dem Tutorial noch ein Kapitel
> über die Fuses anhängen. Wäre für unsere Newbies bestimmt nicht
> schlecht!!!

Gibts doch schon
http://www.mikrocontroller.net/articles/AVR_Fuses

Ist schwer zu finden, ich weiss. Bin auch nur durch Zufall mal
drüber gestolpert.

von Asterix-007 (Gast)


Lesenswert?

@H.K.:

Dann sollte man drüber nachdenken, vielleicht noch eine Copy dorthin zu
verlegen! Die Sache scheint mir zu wichtig um sie irgendwo zu
"vergraben"!! Und die Fragen würden das ja bestätigen!

Oder?

mfg
Asterix-007

von Karl heinz B. (kbucheg)


Lesenswert?

Geb ich dir recht.
Es gibt noch ein paar andere Dinge die im Tutorial gemacht
werden muessten. Ein paar Leute stehen sicher schon in den
Startlöchern und warten darauf, dass Andy die Tutorialseiten
ins Wiki verlagert und den Zugriff darauf freigibt.
Vielleicht erbarmt sich auch wer und kopiert die Texte
'aus der Ferne' auf ein paar Wiki-Seiten und bittet Andy
den Link auszutauschen.

von Mtron (Gast)


Angehängte Dateien:

Lesenswert?

Die Anzeige würde auch mit den internen 1MHz laufen. Da kann er ja zu
Sicherheit erst mal die Finger von den Fuses lassen. Leg die ganze
Sache auf Port B und dann läuft dat dingen.

von pumpkin (Gast)


Lesenswert?

jo, auf jeden fall besser als an den fuses rumzufingern.

pumpkin

von Marc M. (bytewood) Benutzerseite


Lesenswert?

@Alex
Die Geschichte mit den Fuses hat Hand und Fuß.
In BASCOM hast Du auch die Möglichkeit die Fuses zu setzen, ist ein
Reiter im Program-Fenster und ist zudem auch gut bezeichnet (was, was
ist). Such Dir den Eintrag JTAG Enable/Disable heraus, setze ihn auf
Disable und dann 'Rpogram Fuses High' (soweit aus meiner
Erinnerung).
Verändere sonst nichts an anderen Fuses...
An sonsten kann ich mich den Anderen nur anschliessen.

Grüße

von Alex (Gast)


Lesenswert?

Also! Ich habe es mit einem At8535 ??? probiert!
Hat die selbe pinbelegung!
Habe aber statt m16, m8535 geschrieben...
alles andere so gelassen!
FUNKTIONIERT!!!!
Aber wieso geht das mit Atmega16 nicht??????????????????????????

von Karl H. (kbuchegg)


Lesenswert?

Nochmal:

* Gibst du immer noch am Port C aus?
  Ist das JTAG Interface abgeschaltet (falls du am C Port ausgibst)?

* Läuft der Mega auch wirklich mit der Taktfrequenz, die du dem
  BASCOM mitteilst.

Beide Punkte sind absolute K.O. Punkte.

von Alex (Gast)


Lesenswert?

ja, ich probiere immernoch mit port C
Wie schalte ich JTAG Interface ab??
Nein, ich habe kein Quarz auf dem Board! Also mit 1Mhz.

von Marc M. (bytewood) Benutzerseite


Lesenswert?

>Wie schalte ich JTAG Interface ab??

Lies mein letztes Posting - da steht das drin

von Alex (Gast)


Lesenswert?

Also jetzt weiss ich waran das liegt!
Ich muss JTAG Interface abschalten!
Sagt mal bitte, wie das geht.
Am besten eine Code, wenn es geht! Wäre ich seeeeehhr dankbar!

von MrBonsai (Gast)


Lesenswert?

Hallo ihr.
Habe ein ähnliches Problem:
Habe das DOGM162W-A Display (Kontroller st7036),
allerdings sehe ich dort auch nichts.
Kann mir mal jemand sagen, wie ich wenigstens den Kontrast so
einstellen kann, dass alles schwarz wird, um zu sehen, ob es überhaupt
funktioniert?
Wollte es im 8Bit und 5V Modus betreiben. Habe soweit alles verlötet
und gemessen, dass es funktionieren müsste.
Benutze ATmega8515, AVR-GCC, 8MHz Quarz.
Wofür stelle ich die fOSC des Displays ein?

Habe alles wie in der mitgelieferten Kurzbeschreibung angeschlosse:
VDD, VIN, VOUT, RESET, PSB auf +5V
VSS, CSB aus GND

RS, RW, D0-D7 an PORTB und PORTC des ATMega8515
Habe auch gemessen, dass alles korrekt angeschlossen ist und die
Signale ankommen.

Besten Dank im voraus,

mgvfG
Peter

von Marko (Gast)


Lesenswert?

also, du hast doch deinen mega16 auf external Crystal, also externen
Quarz umgestellt, nur so geht der dann nämlich auf 16MHz, wie dus ja in
Deinem Listing drinstehen hast.
Dafür hast Du dann ja die Fuses geändert, indem du auf F4 gedrückt
hast, damit das Programmer fenster aufgeht. Dann haste auf den Reiter
Lock / Fuses geklickt und da auf Quarz (external Crystal) umgestellt.
Dort in der Spalte gibts auch nen Menüpunkt JTAG eable/disable und da
stellste halt auf disable ein und fertig.
Das JTAG ist im Übrigen bei Allen Bausteinen serienmäßig aktiviert,
also dicken Knoten ins Taschentuch

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.