Forum: Mikrocontroller und Digitale Elektronik LCD funktioniert nach Wechsel von Atmega8515L auf Atmega8 nicht mehr


von Roman (Gast)


Lesenswert?

Hallo zusammen
Ich bin ein relativer Neuling was Mikrocontroller anbelangt.

Ich habe mir vor einigen Tagen das STK 500 board besorgt und mit dem 
dazugelieferten Atemga8515L erfolgreich einen 16x1 LCD angesteuert.

Nun wollte ich einen AD Wandler benutzen und kaufte mir desshalb den 
Atmega8 16PU von Conrad. Ich konnte diesen auch erfolgreich anschliessen 
und programmieren. Allerdings tut sich auf dem LCD nichts mehr. Mein 
erster Gedanke war, dass ich vielleicht eine unterschiedliche 
Taktfrequenz im Makefile und in den Fuses in AVRStudio 5 eingestellt 
habe. Ich benutzte bei den Fuses die EXTCLK_6CK_64ms option, so wie ich 
das auch vorhin tat. Das bedeutet meines Wissens nach, dass der 
Mikrocontroller den Takt von dem STK board bekommt, welcher mit 3686400 
Hz läuft.

Ich habe, da es so nicht geklappt hat auch mal den internen Takt des 
Atmega8 genutzt (z.B. 4mHz ) und natürlich auch wieder in dem Makefile 
den Eintrag F_CPU dementsprechend angepasst.

Ich habe auch, nur um zu sehen, ob der Controller überhaupt etwas tut 
ein LED- Blinkprogramm draufgeladen, welches funktionerte, das heisst 
der Chip lässt sich programmieren und funktionert.

Ich habe im obigen Teil meiner Beschreibung eigentlich nur die 
Taktfrequenz angesprochen, weil der LCD für die Initialisierung gewisse 
Wartezeiten fordert, welche vielleicht nicht mehr eingehalten werden?

Kann mir jemand weiterhelfen, vielleicht übersehe ich ja etwas 
grundlegendes? Ach ja, habe gerade vorher wieder den alten Chip 
eingebaut und der LCD ging wieder, das heisst, es ist alles richtig 
gesteckt.

Liebe Grüsse,
Roman

: Verschoben durch User
von J.-u. G. (juwe)


Lesenswert?

Atemga8515 und Atmega8 haben doch ein völlig anderes Pin-Layout. 
Möglicherweise hast Du bei der Konfiguration der Ausgangspins des 
Atmega8 einen Fehler gemacht.

von Timo (Gast)


Lesenswert?

- Programm für den M8 kompiliert?

- gibt es beim M8 auch die Portpins an denen das LCD programmtechnisch 
hängt, der 8151 hat mehr davon als der M8

- JTAG deaktiviert um die Portpins frei zu bekommen

Gruß

Timo

von Roman (Gast)


Lesenswert?

Hallo Juwe

Danke für die schnelle Antwort!

Ich benutze für den LCD nur PORT B (Daten) und PORTD (Control). Diese 
PORTS kann ich doch  bei beiden Controllern identisch ansprechen, bzw. 
sie existieren bei beiden Controllern?

von Roman (Gast)


Lesenswert?

Hallo Timo

Danke auch dir für die Antwort.

Ja, ich habe im Makefile den MCU als Atmega8 angegeben.

Über die Sache mit dem JTAG war ich mir bisher gar nicht im klaren. 
Allerdings benutze ich den PORTC gar nicht für den LCD.
Ausserdem kann ich im AVRStudio 5 das Fusebit JTAGEN nirgendwo finden, 
was auch immer das bedeutet.

> - gibt es beim M8 auch die Portpins an denen das LCD programmtechnisch
> hängt, der 8151 hat mehr davon als der M8

hier weiss ich nicht genau was du damit meinst, kannst du mir das bitte 
genauer erklären?

Liebe Grüsse
Roman

von Roman (Gast)


Lesenswert?

Ich sollte vielleicht etwas konkreter zu der PIN Belegung werden.

Ich benutze für den Datenaustausch mit dem LCD wie gesagt den ganzen 
PORTB, also alles 8 PINS.
Für die Controls, als RS, RW und Enable benutze ich die PINS 2,5 und 7 
des PORTD.

Gibt es irgendwelche dieser PINS welche ich ohne Voreinstellungen nicht 
benutzen kann? Wenn nicht, dass bin ich der Meinung, dass die PIN 
Belegung nicht das Problem ist.

Was meint Ihr?

Liebe Grüsse
Roman

von Karl H. (kbuchegg)


Lesenswert?

Roman schrieb:

> Gibt es irgendwelche dieser PINS welche ich ohne Voreinstellungen nicht
> benutzen kann?

Wenn du den ISP Programmer zur Sicherheit auch noch abziehst, dann 
sollten da keine Probleme auftauchen.

> Was meint Ihr?

Das wahrscheinlichste ist, dass dein Timing nicht stimmt. LCD darf man 
nicht überfahren, d.h. zu schnell takten. FÜr alle Vorgänge gibt es 
Mindestzeiten, die einzuhalten sind. Langsamer ist kein Problem. Aber 
schneller als diese Mindestzeiten geht in die Hose.

von Joe (Gast)


Lesenswert?

Klappt das Programmieren?

Stimmt die Quarzfrequenz?

Programm hier mit angeben!

Sind alle PINs als Output definiert?

Ist ein einfacher Spannungswechsel an den LCD-Ports B mit dem Oszi 
nachweisbar?


joe

von Joe (Gast)


Lesenswert?

ISP läuft auch über Port B.

ISP-Kabel nach dem Programmieren entfernen!

Joe

von Roman (Gast)


Lesenswert?

Hallo Karl

Das mit dem ISP Kabel habe ich auch versucht, hat aber nichts gebracht.
Meiner Meinung nach hat es auch etwas mit den Wartezeiten des LCDs zu 
tun.
Das muss ja dann heissen, dass meine _delays im Programm falsch 
ausgeführt werden, sprich es stimmt etwas mit der Taktfrequenz nicht.

Allerdings habe ich da alles soweit ich weiss richtig eingestellt.

Wie gesagt im Makefile steht F_CPU 3686400
Im AVR Studio unter Board Settings steht bei Clock Generator 3.686 MHz
Das Fuse Bit, welches die Taktquelle bestimmt habe ich auf 
EXTCLK_6CK_64ms gestellt, das heisst der Chip sollte genau die Frequenz 
des Clock Generators verwenden und alles sollte eigenlich gut gehen.

Wie gesagt mit dem Atemga8515 funktioniert der LCD einwandfrei...

von holger (Gast)


Lesenswert?

>Das Fuse Bit, welches die Taktquelle bestimmt habe ich auf
>EXTCLK_6CK_64ms gestellt, das heisst der Chip sollte genau die Frequenz
>des Clock Generators verwenden und alles sollte eigenlich gut gehen.

Dummerweise hängt dein LCD Datenport aber an PB6, PB7.
Das sind XTAL1 und XTAL2. An einem von den beiden wird
der externe Clock eingespeist. Wie soll das gehen?

von Karl H. (kbuchegg)


Lesenswert?

Roman schrieb:

> EXTCLK_6CK_64ms gestellt, das heisst der Chip sollte genau die Frequenz

'sollte' ist schon mal schlecht.
Tut er es oder tut er es nicht?
Das sind deine einzigen 2 Möglichkeiten - aber kein sollte.

Wenn du nicht sicher bist, dann teste es eben!
SChreib dir ein Programm, welches mit _delay_ms eine LED blinkt (zb 1 
Sekunde an, 1 Sekunde aus). Da _delay_ms von der korrekten einstellung 
der Taktfrequenz abhängt, kannst du sehen, ob der µC mit 3.irgendwas Mhz 
läuft oder nicht. Entweder ein _delay_ms(1000) dauert 1 Sekunde oder er 
tut es nicht.

Wobei du nicht auf Zehntel-Sekunden schielen musst, denn du hast sowieso 
nur 3.irgendwas Mhz und 1Mhz zur Auswahl. Das ist ein Faktor von 3. Und 
1 Sekunde von 1/3 Sekunde oder von 3 Sekunden zu unterscheiden, dazu 
braucht man kein Messgerät.

von Spess53 (Gast)


Lesenswert?

Hi

>Ich benutze für den LCD nur PORT B (Daten) und PORTD (Control).

PB6 Ist in deinem Fall der Takteingang des Controllers.

MfG Spess

von Roman (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang ist noch mein C code und das Makefile, welches ich benutze.

Die Initialisierung habe ich in der Funktion LCD_Init() vorgenommen.
Ich weiss, ich habe dort nicht sehr viel kommentiert, aber ich habe die 
Befehle laut dem Datenblatt des LCD geschrieben und mit dem anderen Chip 
klappt ja alles. Ich denke also am Code sollte es nicht liegen.

von Karl H. (kbuchegg)


Lesenswert?

Spess53 schrieb:
> Hi
>
>>Ich benutze für den LCD nur PORT B (Daten) und PORTD (Control).
>
> PB6 Ist in deinem Fall der Takteingang des Controllers.

Mist.
Daran hab ich natürlich wieder mal nicht gedacht.

von Spess53 (Gast)


Lesenswert?

Hi

>Im Anhang ist noch mein C code und das Makefile, welches ich benutze.

Kapiere es doch mal: Mindestens ein Pin von PortB ist vom Takteingang 
belegt.

MfG Spess

von Roman (Gast)


Lesenswert?

@ Karl

Ich habe die Richtigkeit der Frequenz schon mit einem LED getestet.
Das LED blinkt bei _delay_ms(1000) schön im Sekundentakt so wie es 
sollte.
Ich bin mir deswegen eigentlich sicher, dass die Frequenz stimmt.

von Roman (Gast)


Lesenswert?

@ Spess

Wenn ich dich richtig verstehe, dann darf ich nicht den gesammten PORTB 
für die Datenübertragung verwenden, da ein Pin für die Taktversorgung 
des Chips dient?

Das heisst, ich benutze anstatt des PIN 6 vom Port B einen anderen?

von Spess53 (Gast)


Lesenswert?

Hi

>Das heisst, ich benutze anstatt des PIN 6 vom Port B einen anderen?

Ja. Ist natürlich etwas Bitschubsen nötig.

MfG Spess

von Roman (Gast)


Lesenswert?

Ok, vielen Dank, das werde ich mal versuchen.

Ich sehe gerade, dass bei dem Atemga8515 der PIN B6 NICHT für den 
Taktgenerator reserviert ist und daraus schliesse ich jetzt, dass darum 
mit dem Atmega8515 alles geklappt hat.

Schon wieder was neues gelernt...

Danke an alle, die sich die Zeit zum Schreiben genommen haben und 
besonderen Dank an Spess ;-)

lG
Roman

von Spess53 (Gast)


Lesenswert?

Hi

>Danke an alle, die sich die Zeit zum Schreiben genommen haben und
>besonderen Dank an Spess ;-)

Eigentlich war Holger schneller:

Beitrag "Re: LCD funktioniert nach Wechsel von Atmega8515L auf Atmega8 nicht mehr"

Hast du wahrscheinlich nicht gelesen.

MfG Spess

von Roman (Gast)


Lesenswert?

Ok, das stimmt...Also besten Dank auch an Holger!!!

von Roman (Gast)


Lesenswert?

Jetzt habe ich trotzdem noch eine kleine Frage.

Muss ich den die PINB6 und PINB7 mit irgendwas verbinden, oder wird das 
intern im STK 500 board durch den XTAL jumber schon erledigt. Irgendwie 
muss ja der Takt des Clock Generators an den Controller kommen.

Ich schliesse allerdings aus dem erfolgreichen Laufen des LED- 
Blinkprogramms, dass der Takt intern eingespeist wird, da das Programm 
sonst nicht laufen könnte. Liege ich da richtig?

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.