Forum: Mikrocontroller und Digitale Elektronik LCD vertauscht Zeichen


von Christian (Gast)


Lesenswert?

Grüß euch!

Ich habe ein Problem,wo ich einfach nicht mehr weiter weiß!

Ich versuche die ganze Zeit mit meinem Atmega32 einen LCD 
Display(4Zeilig 16*40 anzusteuern)

Initialisieren lässt er sich, nur wenn ich dann Zeichen (Buchstaben oder 
Zahlen) an das LCD senden möchte, zeigt dieser statt z.B. 123456789 - 
#CScs an!

Vorgegangen bin ich laut dem LCD-Ansteuerung Tutorial welches hier auf 
dieser Seite angeboten wird!

Das einzige was ich verändert habe ist die Taktfrequenz bzw. habe ich 
die Datenpins von PDx auf PA0-PA3 verlegt.

Achja und nachlöten hilft leider auch nichts!

Bitte um eure Hilfe!

Dankeschön!

Mit freundlichen Grüßen,

Christian


Daten:

Atmega32 (Taktung 16MHz)
Display Optex 16433 mit HD44780A Controller
4 Bit Ansteuerung

von Klaus W. (mfgkw)


Lesenswert?

Datenleitungen wirklich korrekt?

Ansonsten mehr Infos (Programm, Fuses, Anschluß komplett, immer 
dieselben Zeichen oder variabel, welche Zeichen werden gegen welche 
getauscht)...

Um stundenlang zu raten ist das Wetter heute zu schön.

von Christian (Gast)


Lesenswert?

Hier die Infos:

 Programm:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung

zum Schluss habe ich die Pins wieder umgeändert von PA0-PA3 auf PD0-PD3

->Egal ob ich das Programm 1-1 übernehme,der LCD zeigt immer etwas 
anderes an!

Das Ergebnis #3CScs habe ich durch diesen c.Quelltext erhalten:
1
#include <avr/io.h>
2
#include "lcd-routines.h"
3
 
4
int main(void)
5
{
6
  
7
  // Initialisierung des LCD
8
  // Nach der Initialisierung müssen auf dem LCD vorhandene schwarze Balken
9
  // verschwunden sein
10
  lcd_init();
11
 
12
13
 
14
  lcd_home();
15
 
16
  // erneut Text ausgeben, aber diesmal komfortabler als String
17
  lcd_string("123456789");
18
 
19
  while(1)
20
  {
21
  }
22
 
23
  return 0;
24
}

 Fuses hab ich nur die gesetzt,welche man braucht um mit 16MHz arbeiten 
zu können

Anschluß komplett:

 Also DB7-DB4 war zuerst auf PA3-PA0 nun wieder auf PD3-PD0

Vee auf GND,E auf PD5,RS auf PD4,RW auf Ground!


Kann es sein,dass es mit dem Pullup Widerstand am Pin E etwas damit zu 
tun hat?

Weil laut Datenblatt heißt es:

E = Enable Signal (No pull-up Resister) ??


(Datenblatt:
http://datasheet.octopart.com/DMC-16433-Optrex-datasheet-56902.pdf)

Danke für die schnelle Antwort!

von spess53 (Gast)


Lesenswert?

Hi

Da sind die Nibbles vertauscht:

1234567  -> 0x31,0x32,0x33,0x34,0x35,0x36,0x37.....

 #3CScs  -> (0x13),0x23,0x33,0x43,0x53,0x63,0x73

MfG Spess

von Charly B. (charly)


Lesenswert?

Takten den µC mal mit 1Mhz (interner RC) und
berichte obs dann funktioniert

vlG
Charly

von H.Joachim S. (crazyhorse)


Lesenswert?

PortA -> Hast du auch AVcc und AGnd angeschlossen?
edit: Spess ist auf dem richtigen Weg...

von Charly B. (charly)


Lesenswert?

@spess53

Christian schrieb:
> 4 Bit Ansteuerung

von Christian (Gast)


Lesenswert?

jap hängt richtig dran,ich bekomm ja die schwarzen Balken zu beginn , 
welche auch dann wieder sofort verschwinden!(also der Ablauf ist bis 
dahin richtig)

@spess53

Ich glaube das du Recht hast,weil egal was ich schreibe er vertauscht 
mir alle Zeichen,nur wie kann ich die Nibbels zurücktauschen,sodass ich 
die richtigen Zeichen bekomme?

@charly

Müsste das nicht hier egal sein mit welcher Taktfrequenz ich arbeite?

Nochmal danke für die schnellen Antworten

von spess53 (Gast)


Lesenswert?

Hi

>Ich glaube das du Recht hast,weil egal was ich schreibe er vertauscht
>mir alle Zeichen,nur wie kann ich die Nibbels zurücktauschen,sodass ich
>die richtigen Zeichen bekomme?

Ich würde auf deine Zeichenausgabe-Routine tippen. Dort werden die 
Nibbles in der falschen Reihenfolge ausgegeben.

MfG Spess

von Michael R. (mexman) Benutzerseite


Lesenswert?

> mir alle Zeichen,nur wie kann ich die Nibbels zurücktauschen,sodass ich
> die richtigen Zeichen bekomme?

Na, das Programm richtig schreiben!


Gruss

Michael


Das richtige Vorgehen hier ist - wie immer - den uC im Debugger im 
Single Step Betrieb laufen zu lassen und bei jedem Schritt mit einem 
einfachen Multimeter die Spannungen an den Pins zu messen!

von Charly B. (charly)


Lesenswert?

Christian schrieb:
> @charly
>
> Müsste das nicht hier egal sein mit welcher Taktfrequenz ich arbeite?

f. einen AVR mit 16Mhz ist ein LCD eine lahme Schnecke,
d.h. der AVR muss jede menge Waits einfuegen; i kenn mich mit
deiner C umgebung nicht aus aber irgendwo muesstest du dem
Compiler mitteilen was der AVR fuer einen Takt hat

vlG
Charly

von Klaus2m5 (Gast)


Lesenswert?

Christian schrieb:
> Müsste das nicht hier egal sein mit welcher Taktfrequenz ich arbeite?

Nur wenn Du auch die passende Frequenz für die Delays angegeben hast:

#define F_CPU 16000000

von Christian (Gast)


Lesenswert?

Danke dir spess53,diesen Trick werde ich morgen gleich ausprobieren!

@Klaus2m5

jap ich habe die 16MHz definiert!

Danke nochmal für die zahlreichen Antworten!

Mit freundlichen Grüßen,

Christian

von spess53 (Gast)


Lesenswert?

Hi

>Danke dir spess53,diesen Trick werde ich morgen gleich ausprobieren!

Das ist kein Trick, sondern ganz normale Programmierung.

MfG Spess

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.