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
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.
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!
Hi Da sind die Nibbles vertauscht: 1234567 -> 0x31,0x32,0x33,0x34,0x35,0x36,0x37..... #3CScs -> (0x13),0x23,0x33,0x43,0x53,0x63,0x73 MfG Spess
Takten den µC mal mit 1Mhz (interner RC) und berichte obs dann funktioniert vlG Charly
PortA -> Hast du auch AVcc und AGnd angeschlossen? edit: Spess ist auf dem richtigen Weg...
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
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
> 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!
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.