Liste der Anhänge anzeigen (Anzahl: 1)
Problem mit LCD-Display
Hallo,
ich habe ein sehr großes Problem am welchem ich schon seit einigen Stunden sitze.
Und zwar bekomme ich mehrere Displays nicht zum Laufen. Eines der Displays hat definitiv vor c.a. 2 Jahren funktioniert.
Ich würde mich sehr freuen wenn ihr mir helfen könnt!
Das Display habe ich wie im RN-Wissen beschrieben über den 10 Poligen stecker angeschlossen. Genau so habe ich es vor 2 Jahren mit dem selben Display und dem selben Programm auch gemacht und damals hat es Funktioniert!
Im Anhang findet ihr ein Foto von dem Aufbau und das Datenblatt findet ihr hier: http://www.mikrocontroller.net/attac...Datenblatt.pdf
Anhang 18187
Davor habe ich es noch mit einem anderem Display Probiert, welches ich eigendlich verwenden wollte. Ich besitze davon 2 Stück und keines hat Funktioniert.
Hier das Datenblatt: http://home.arcor.de/wosm/AtmegaProj...2704M-1HNN.pdf
Angeschlossen habe ich alles im 4 bit-Modus.
Hier mein Bascom-Programm:
Code:
$prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 8
'44
$crystal = 16000000
Config Pinf.1 = Input 'Quarzfrequenz
Config Pind.5 = Output
Led Alias Portd.5
Config Pine.5 = Input
Usb Alias Pine.5
Start Adc 'Ist 1 wenn USB angeschlossen
Config Lcdpin = Pin , Rs = Portd.7 , E = Portd.5 , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0,
Waitms 100
Config Lcdbus = 4
Waitms 100
Config Lcd = 16 * 4
Waitms 100
Dim A As Integer
Initlcd
Cursor Off
A = 0
Do
Led = 0
Dim W0 As Word
W0 = Getadc(1)
Incr A
Cls
Locate 2 , 1
Lcd "Sensorwert:"
Locate 2 , 12
Lcd W0
Locate 1 , 1
Lcd "Messungen"
Locate 1 , 11
Lcd A
Waitms 100
Led = 1
Waitms 400
Loop
End
Für das eigendliche Display habe ich noch eine Seite gefunden: http://plischka.at/Displays_WINTEK_WD-C2704M.html
Und das angepot bei Pollin (wo ich es her habe): http://www.pollin.de/shop/dt/NzY3OTc...704M_1HNN.html
genauso habe ich es auch gemacht, es funktioniert nur leider nicht.
Für hilfe oder Verweis auf die Lösung bin ich sehr dankbar.
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
also schonmal vielen dank für eure Hilfe!
Um eines Klarzustellen: ich habe schonmal damit gearbeitet und weiss auch wie ich es Programmieren muss. Nur leider Funktioniert es nicht wie gedacht.
Ich habe nochmal im Schaltplan nachgeschaut: es gibt keine Besonderheiten.
@rolber, da du gerne den Schaltplan hättest und damit alle es kontrollieren können findet ihr im Anhang den Schaltplan das Boardes
Ich habe jetzt auch mal alle Leitungen mit dem Durchgangsprüfer durchgemessen: Alle Leitungen sind wie im Programm beschrieben angeschlossen. Ich weiss nun echt nichtmehr weiter und würde mich über eine Lösung sehr freuen!
Hier nochmal der Aktuelle Code:
Code:
$prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 8
'44
$crystal = 16000000
config LCD = 16*4
Config Lcdpin = Pin , Rs = Portd.7 , E = Portd.5 , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0
Config Lcdbus = 4
Initlcd
waitms 100
Do
Cls
Locate 1 , 1
Lcd "Sensorwert:"
Waitms 500
Loop
Gruß Sebasti
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,
Entschuldigung für die Wartezeit, aber jetzt geht es weiter.
@Michael: Ich weiss. Nach meinen Kenntnisstand sollte die obere Displayhälfte auch was anzeigen wenn man nur das obere Initalisiert. Außerdem laufen meine Versuche im Moment mit dem 16 * 4 Display da dies vor 2 Jahren definitiv mal funktioniert hat. Ich hatte für das große Display auch das Testprogramm wie in der Wiki beschrieben verwendet.
Mal so eine kleine Zwischenfrage: die Funktion Ddrb = &B11111111 verstehe ich nicht ganz. Ich weis das man mit dieser Funktion Ports als Eingang und Ausgang definieren kann, ich weiss nur nicht wie sich die Funktion aufbaut! Kannst du mir das bitte erklären?
@peterfido: Nein es läuft nicht an einem anderem Port.
Ich habe einfach mal das Display abgeklemmt und ein paar LEDs angeschlossen. Das Ergebnis ist das der Controller definitiv arbeitet da die LEDs Leuchten, blinken.... auf jedenfall mehrfach den Zustand wechseln. Außerdem kann ich die Bordeigene LED (Portd.1) blinken lassen.
Der Watchdog war mir bis jetzt unbekannt. Leider bringt der Einbau des Befehls stop watchdog auch nichts...
Ich denke schon das die Fuses stimmen, kann das aber nicht genau beurteilen.
Deswegen findest du im Anhang einen Screenshot von den Fusbites.
Bei der Überprüfung ist mir aufgefallen das die Frequenz im Programm auf 16 MHz eingestellt war obwohl der Atmega im Moment nur mit einem MHz intern arbeitet.
Leider bringt die Korrektur auch nichts.
Zwichendurch ist mir noch aufgefallen das der Reset auf dem Atmega32-Board nicht funktioniert. Weiss jemand ob das was mit dem Fusebites oder dem Layout zu tun hat? (im Anhang ist das Layout)
Gruß Sebasti
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sheff,
gut, das nächste mal sollte ich noch ausführlicher schreiben.
Zitat:
Zitat:
beide Controller sollen einen ESD-Schaden haben obwohl das Blinkprogramm Funktioniert?
Ja, mit ESD muss man nicht unbedingt ganzen µC zerschossen haben.
Das musste ich leider feststellen. Bis jetzt war ich der Überzeugung das es nur ein geht/geht nicht gibt.
Zitat:
Zitat:
Der Port auf welchem die Enable-Leitung liegt funktioniert NICHT!
Wie jetzt? Weder HIGH noch LOW?
Mhhhh, jetzt funktioniert sie. Gestern war die LED immer aus (Low). Das deutet wohl auf einen Wackelkontakt :(
Zitat:
Zitat:
Beim Beobachten mit den LEDs habe ich aber festgestellt das PortB.3 (Db4) PortB.7 (Rs) ständig High sind. Ist das Normal?
Hast du während das LCD-Programm lief, die LEDs beobachtet oder anderes Programm füer LEDs geschrieben?
Ich habe das Display abgeklemmt und meine LEDs angeschlossen. Im Anhang findest du übrigens den Schaltplan der Platine.
Zitat:
Zitat:
$crystal = 1000000
1MHz Quarz?
Internen Quarz, 1 MHz. Im Screenshot von den Fusebites erkennt man das auch.
Mir ist noch etwas aufgefallen:
Und zwar benutze ich auf dem RnMega2560-Board immer folgendes Programm um sehen zu können ob das Teil noch funktioniert (Blinkprogramm):
Code:
$prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$crystal = 16000000 'Quarzfrequenz
Config Pind.5 = Output
Led Alias Portd.5
Const Cdebug = 1
$baud = 9600
Dim I As Long
I = 0
Led = 0
Wait 1
Led = 1
Wait 1
Do
I = I + 1
Led = 1
Waitms 50
Led = 0
Waitms 60
Loop Until I = 5
Do
I = 0
Led = 0
Waitms 1100
Do
Led = 0
Waitus 1
Led = 1
Waitus 9
I = I + 1
Loop Until I = 110000
Led = 1
Waitms 1100
Loop
End
End
Für den AtMega32 habe ich den Code bis auf die Einstellungen nicht verändert:
Code:
$regfile = "m32def.dat" $prog &HFF , &HC4 , &HD9 , &H00 ' generated. Take care that the chip supports all fuse bytes.
$crystal = 1000000
$framesize = 64
$hwstack = 64
$swstack = 64
Config Pind.1 = Output
Led Alias Portd.1
Const Cdebug = 1
Dim I As long
I = 0
Led = 0
Wait 1
Led = 1
Wait 1
Do
I = I + 1
Led = 1
Waitms 50
Led = 0
Waitms 60
Loop Until I = 5
Do
I = 0
Led = 0
Waitms 1100
Do
Led = 0
Waitus 1
Led = 1
Waitus 9
I = I + 1
Loop Until I = 110000
Led = 1
Waitms 1100
Loop
End
Komicherweise braucht der AtMega32 c.a. 5x länger wie der RnMega um die Variable I auf den Wert von 110000 hochzuzählen. Das Blinken am Anfang passiert absulut synchron. Erst beim Hochzählen der Variable merkt man das der AtMega 32 wesentlich länger braucht als der RnMega2560. Ich wüsste nicht das der AtMega32 nicht zu hoch zählen kann?
Kennt zufälligerweise jemand den Grund?
Und nochmal danke für eure Hilfe & Bemühungen.
Gruß Sebasti