PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit LCD-Display



Sebasti
09.03.2011, 17:18
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/attachment/51908/Pollin_16x4_LCD_Datenblatt.pdf

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/AtmegaProjekt/pdf/WD-C2704M-1HNN.pdf

Angeschlossen habe ich alles im 4 bit-Modus.

Hier mein Bascom-Programm:




$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/NzY3OTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_WINTEK_WD_C2704M_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.

rolber
09.03.2011, 17:41
Hallo!!

Wenn ich es richtig gesehen habe, hast Du Portd.5 zweimal benutzt.
Für eine LED und für Enable am Display.
Musst Du ändern.

Roland

Sebasti
09.03.2011, 18:39
Hallo Roland,

habe die Led deaktiviert.
Nun ist die LED immer an was bei der beschaltung bedeutet das die Enable-Leitung nie auf die High-Pegel wechselt.

Daraus schliesse ich das irgendwas nicht stimmt. Allerdings hat das Programm so vor 2 Jahren auch funktioniert weshalb ich sehr verwundert bin.

Hier die Absulote Orginacode von vor 2 Jahren:




$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.4 , E = Portd.7 , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3
Waitms 100
Config Lcdbus = 4
Waitms 100
Config Lcd = 16 * 4
Waitms 100
Dim A As Integer





Initlcd
Cursor Off
A = 0
Do

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

Loop

End
Bis auf ein paar geändert pins ist alles gleich.

Gruß Sebasti

rolber
09.03.2011, 22:31
Wie änderst Du denn die Portleitungen für das Display auf deinem Board?
Ich sehe nur eine Flachbandleitung vom LCD zum Board.
Hast du da noch Steckbrücken geändert?
Was Du im Programm änderst, musst Du auch auf deinem Board entsprechend verdrahten!!
Ich habe die Vermutung, das Schaltung und Programm nicht zusammen passen.

Roland

5Volt-Junkie
10.03.2011, 10:08
Config Lcdpin = Pin , Rs = Portd.7 , E = Portd.5 , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0,


wieso springst du von PORTD.5 direkt zu PORTD.7? Ist PD.6 mit etwas anderem belegt? :confused:

Sebasti
10.03.2011, 16:24
@rolber: die Portleitungen kann ich nicht ändern. Ich habe die Leitungen wie hier beschrieben auf den Stecker geführt: http://rn-wissen.de/index.php/RN-Definitionen#LCD_Stecker
Stckbrücken sind keine Vorhanden.
Ich kann legtendlich den Kompletten Port durch umstecken ändern.
Deine Vermutung mit den Falschen Anschlüssen werde ich mal mit dem Durchgangsprüfer untersuchen.

Ich kann legendlich den Kompletten Port durch umstecken ändern.

@Sheff: In den RN-Definitionen ist die Leitung auf welche der Port 6 führt mit R/W belegt. R/W verwendet man im 4bit-Modus aber nicht weshalb der Port nicht in Benutzung ist.

Hubert.G
10.03.2011, 16:30
Hast du R/W auf GND gelegt?

Sebasti
10.03.2011, 16:58
Ja, ich habe R/W auf GND gelegt.

Gento
10.03.2011, 17:21
Versuch mal :


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
in do loop gehört kein dim
und waitms macht nur sinn hinterm initlcd

Gento

rolber
10.03.2011, 19:46
HallO!

Habe den Beitrag mal durchgelesen.
Es geht ein 10 pol. Stecker vom LCD auf dein Board.
Diese 10 Pole sind mit 10 Pins auf deinem Board verbunden.
Spannungsversorgung, also + - lassen wir mal weg.
Bleiben 8 übrig.
DB4 - DB7 sind schon mal 4.
bleiben 4 übrig.
RS und E sind wieder 2
Bleiben 2 übrig.
Die Pins 5 u 7 auf deinem Stecker nutzt du nicht.
Nun noch die Pins richtig im Programm verknüpfen -- Nur diese Zeile ist wichtig ---
Config Lcdpin = Pin , Rs = Portd.7 , E = Portd.5 , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0

Der Rest ist nur Makulatur!!!
Ich glaube jetzt schaffst Du es.
Ansonsten gib mir die Beschaltung der 10 pol. Buchse und ich schreib Dir die Zeile.

Roland

Sebasti
10.03.2011, 22:00
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 (https://www.roboternetz.de/community/member.php?38537-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:




$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

Hubert.G
11.03.2011, 11:24
Bist du dir sicher das der Kontroller läuft?
Lass doch zusätzlich auch mal einen Led blinken.

rolber
11.03.2011, 13:42
Hallo !

Also dein Code ist richtig!

Versuch mal folgendes Minimalprogramm:
Damit habe ich seiner Zeit immer die Funktion meiner LCD´s getestet.
War zwar am Mega32, aber müsste auch bei Dir funktionieren.



$regfile = "m2560def.dat"
$hwstack = 82
$framesize = 68
$swstack = 8

$crystal = 16000000

Config Lcdpin = Pin , Rs = Portd.7 , E = Portd.5 , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0
config LCD = 16*4


Do
Cls
Lcd "Hallo!!"
Wait 5
Loop
End
Falls das nicht funktioniert liegts wohl an der Hardware.

Roland

Gento
11.03.2011, 14:16
Ohne Initlcd wird das ganz sicher NICHT laufen.

Gento

for_ro
11.03.2011, 14:52
Ohne Initlcd wird das ganz sicher NICHT laufen.

Gento
Hallo Gento,
dies steht seit einigen Versionen in der Hilfe InitLCD:

Remarks
The LCD display is initialized automatic at start up when LCD statements are used by your code.

rolber
11.03.2011, 17:10
Hallo!

@Gento
Wenn ich hier Code poste und sage, er funktioniert, dann glaube mir einfach.
Ich versuche Sebasti zu helfen.
Durch deine Behauptung bringst Du nur Unsicherheiten auf.
Wenn Du ein LCD Display besitzt, teste einfach mein Prog. und Du wirst sehen, es klappt.

Roland

Gento
11.03.2011, 18:31
Die Frage ist welche Version von Bascom er hat.
Wenn die neuen Versionen InitLCD nicht brauchen sollten , kaput macht das nichts, es zu benutzen.

lg Gento

rolber
11.03.2011, 20:24
Hallo!!

@Gento
Eigentlich wollte ich auf deine Beiträge gar nicht mehr antworten.
Hast Du ein LCD?
Ich glaube nicht !
Hast Du jemals etwas in Bascom programmiert?
Kann ich mir nicht vorstellen!
Das ist die typische " Ich lass mal einen intelligenten Spruch los Menatlität ", die ich nicht brauche.
Kannst Du dir vorstellen, daß Du mit so voreiligen Aüsserungen evtl. unerfahrene Anwender stark verunsicherst?
Wenn Ich einen Fehler mache, dann stehe ich dazu und mache keine fadenscheinigen Ausreden.
MfG

Roland

Sebasti
11.03.2011, 21:00
Hallo zusammen,

@Hubert.G: ja das Board funktioniert (in der Form das die LED blinkt). Das habe ich vor den Versuchen und eben nochmal getestet.

@rolber: Leider funktioniert dein kleines Programm auch nicht
Aber mir ist grade eingefallen das ich ja auch noch ein Atmega 32-Board runfliegen habe.
Das Board habe ich eben auch mit hilfe eines Blinkprogrammes getestet.
Mit der Led kann ich dem Portd.1 und somit Db6 zuschauen und auf der Leitung tut sich was. Nur beide Displays funktionieren nicht (nacheinander getestet).

@gento: auch mit Initlcd funktioniert es leider nicht. Ich habe die Bascom-Version 1.11.9.3

@gento & rolber: Ich fände es sehr schade wenn dieses Thema in einer Diskussion zwichen auch beiden endet. Ich persönlich bin der Meinung das gento sich freundlicher Audrücken kann. Ich habe beide Vorschläge ausprobiert und wenn es hoffentlich mal funktioniert wird man sehen recht hatte.
Aber trotzdem danke für eure Bemühungen!

Allmälich bin ich echt am Verzweifeln! Vor 2 Jahren hat das alles mal Problemlos funktioniert. Bis auf mit dem Ozi die Signale zu überprüfen fällt mir nichtsmehr ein.

Aber vielleicht euch!

Gruß Sebasti

5Volt-Junkie
11.03.2011, 22:22
Ganz vorsichtige Frage: Wird etwas warm wenn du es betreibst?
Noch vorischtigere Frage: Ist dein Flachbandkabel richtig konfektioniert?

Sebasti
11.03.2011, 22:28
Hallo Sheff,
bis auf den Spannungswandler LM7805 wird nichts warm.
Ich gehe auch davon das dass ich das Kabel richtig Konfektioniert habe da ich die Leitungen schon von Display bis zum RnMega2560 mit dem Durchgangsprüfer getestet habe.

Gruß Sebasti

5Volt-Junkie
11.03.2011, 22:32
Hmmm... ist echt verrückt...
Überprüf mal dein Kontrastpoti und Kondensator kurz auslöten (bald gehen mir die Vorschläge aus :( )

Sebasti
11.03.2011, 22:39
Das bringt leider auch nichts.

Macht es Sinn wenn ich die Signalverläufe der einzellnen Ausgänge aufzeichne und hier poste?

Gruß Sebasti

5Volt-Junkie
11.03.2011, 22:49
Macht es Sinn wenn ich die Signalverläufe der einzellnen Ausgänge aufzeichne und hier poste?

könntest gucken, ob die Signale beim LCD auch so ankommen, wie µC sie ausgibt...

peterfido
12.03.2011, 10:46
Läuft es denn an einem anderen Port? Passen die Fuses? Nicht dass der Watchdog immer an ist. Mal einen langsameren Takt probiert? Kannst Du an diesem Port LEDs einzeln ansteuern? (z.B. Lauflicht)

Michael
12.03.2011, 14:39
Hallo Sebasti,

auf der Pollin-Seite (dein Link im ersten Beitrag) steht es recht deutlich, daß das Display 2 Controller hat.
Das wird auch nochmal in deinem verlinkten Datenblatt deutlich, E1 und E2 sind auf Pin6 und 7 des Displays.
Bei der Initialisierung müssen natürlich beide Displayhälften gestartet werden.


$regfile = "m32def.dat" 'Atmega32 CPU
$crystal = 16000000 'Quarz 16Mhz
$hwstack = 64
$swstack = 64
$framesize = 40

Ddrb = &B11111111

Config Lcd = 40 * 4
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.6 , E2 = Portc.5 , Rs = Portc.7

Dim ___lcdno As Byte
Dim Y As Byte
___lcdno = 0
Initlcd
Cls
___lcdno = 1
Initlcd
Cls

Do
___lcdno = 0
Locate 1 , 1
Lcd "1.Zeile " ; Y
Waitms 1000
Y = Y + 1
Locate 2 , 1
Lcd "2.Zeile " ; Y
Waitms 1000

___lcdno = 1
Locate 1 , 5
Lcd "3.Zeile " ; Y
Waitms 1000
Y = Y - 1
Locate 2 , 5
Lcd "4.Zeile " ; Y
Waitms 1000
Y = Y + 1

Locate 2 , 25
If Y < 100 Then
Lcd " ";
End If
If Y < 10 Then
Lcd " ";
End If

Lcd Y

Loop


End

Gruß, Michael

Sebasti
13.03.2011, 15:09
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

5Volt-Junkie
13.03.2011, 15:20
Hatte einmal ein Problem mit einem AT90PWM. Der Reset-Pin hing auch einfch so in der Luft wie in deiner Schaltung und so hat das nicht funktioniert. Der Pin braucht entweder 0 oder 1, aber laut Schaltplan hängt er einfach in der Luft. Ich würde Reset über ein Widerstand (z.B. 10k) auf Vcc ziehen.

Michael
13.03.2011, 16:21
Hallo Sebasti,


die Funktion Ddrb = &B11111111 verstehe ich nicht ganz.das ist keine Funktion, das ist einfach die Anweisung, das Datenrichtungsregister mit dem angegebenen Binärwert zu laden.
Gehört zugegebenermaßen nicht zum Thema. Das Programm, das ich gepostet habe, war nur ein Auszug.

Deine Programme zielten bisher auf den Atmega2560, jetzt bist du auf Atmega32 umgeschwenkt?
Dein PDF zeigt auch einen Mega32, aber kein Display?

Auf deiner angehängten Grafik sieht man schön, wie JTAG eingeschaltet ist, solltest du Pins von PortC nutzen wollen, mußt du das abschalten.

@Sheff:
Das Problem mit dem Reset ist keins. Im AVR ist bereits ein interner Pullup eingebaut. Den Rest erledigt die SUT.
Ich benutze nie einen Pullup an Reset, was sollte das auch bringen?

Gruß, Michael

5Volt-Junkie
13.03.2011, 16:38
Ich benutze nie einen Pullup an Reset, was sollte das auch bringen?

Wie gesagt, bei dem AT90PWM hatte ich Probleme, weil der Reset-Pin in der Luft war.

Bei den logischen Gattern hatte ich am Anfang auch Probleme, da ich dachte "0 = keine Spannung" . Sollte aber entweder 1 = 5V oder 0 = 0V = GND sein.

Sebasti
15.03.2011, 17:01
Hallo Zusammen,

@Sheff: Ich meine auf dem Schaltplan eindeutig erkennen zu können das RESET über 10 10k-Ohm Widerstand auf +5V gezogen ist.

@Michael: Ich habe beide Controller vor mir liegen. Große Änderungen probiere ich auf beiden Controllern aus, kleine nur an dem jeweils angeschlossenem. Damit möchte ich den Defekt eines Controllers ausschließen.
Das mit dem JTAG ist in meinen Augen kein Problem da ich den Port D verwende.
Das Display ist auf dem Schaltplan nicht zu sehen da das der Schaltplan ist wie ich ihn der Platinenmachfirma gegeben habe. Komicherweise funktioniert der RESET-Taster nicht. Das Problem werde ich auch noch untersuchen. Das Display ist über diesen (http://rn-wissen.de/index.php/RN-Definitionen#LCD_Stecker) Stecker angeschlossen und hängt im Moment an Port d.


Ich hatte die Idee das ich das Display vielleicht falsch herum angeschlossen habe. Leider hat das Umdrehen auch nichts gebracht.

Gruß Sebasti

5Volt-Junkie
15.03.2011, 18:14
öööhm

RnMegaNeu.pdf

ATmega 32.pdf

worum gehts jetzt? :)


Ich hatte die Idee das ich das Display vielleicht falsch herum angeschlossen habe.


Ich gehe auch davon das dass ich das Kabel richtig Konfektioniert habe da ich die Leitungen schon von Display bis zum RnMega2560 mit dem Durchgangsprüfer getestet habe.

Irgendwie widerspricht sich das ganze :D

Sebasti
15.03.2011, 18:21
Hallo Sheff,
um deine Verwirrung zu beseitigen:
Ich besitze beide Controllerbards und Teste die meisten Programme auf beiden.

Ich hatte die Idee das ich das Display vielleicht falsch herum angeschlossen habe. Damit meinte ich das es sein könnte das ich von Anfang an bei den Displaypins die 1 mit der 16 verwechselt habe. Und das habe ich getestet.

Gruß Sebasti

5Volt-Junkie
15.03.2011, 18:41
ok, wird jetzt etwas klarer :)

hast du schon mal versucht am PORTD, verschiedene Bitmuster auszugeben?
Ich spiele mit dem schrecklichen Gedanken, dass es sich um ein ESD-Schaden handeln könnte...

Sebasti
15.03.2011, 20:42
beide Controller sollen einen ESD-Schaden haben obwohl das Blinkprogramm Funktioniert?

Habe es grade aber getestet: Ergebnis: Der Port auf welchem die Enable-Leitung liegt funktioniert NICHT!

Leiter bringt ein Wechsel auf den PortB der RnMega2560, welcher geteset wurde auch nichts! Beim Beobachten mit den LEDs habe ich aber festgestellt das PortB.3 (Db4) PortB.7 (Rs) ständig High sind. Ist das Normal?

Gruß Sebasti

Michael
15.03.2011, 22:34
Hallo Sebasti,

dein ständiges Hin- und Hergespringe zwischen den Ports bringt nichts. Du kannst Probleme nicht mit der Stecknadel-im-Heu-Methode lösen.
Seit einer Woche hängst du an einem simplen Display.
Wenn du nicht langsam systematisch vorgehst, wird das nichts.

Wenn du an PortC ein Problem hast, dann schalt doch einfach JTAG aus?
Bisher hast du auch kein Programm gepostet, daß man mal einen Fehler finden könnte.
Vermutlich sind es nur ein paar Kleinigkeiten, vergessene Stackwerte, Print oder was auch immer.
Wie soll man dir da helfen?:confused:

Gruß, Michael

Sebasti
16.03.2011, 16:07
Hallo Michael,

auch ich finde sehr schlecht das ich es nach einer Woche & Hilfe immernoch nicht schaffe ein einfaches Display zum Laufen zu bringen. Ich springe zwischen den Ports hin und her damit ich einen Funktionierenden finde! Ich kann mich später darum kümmern warum ein bestimmter Port nicht Funktioniert. Am Anfang habe ich alles Systematisch durchprobiert bis ich zu dem Punkt kam hier zu schreiben. Seitdem ändere ich meinen Aufbau immer so wie Vorschläge kommen. Wie könnte ich es denn besser machen?

JTAG war nie ein Problem dar ich noch nicht am Port C dran war. Es ist nur nebenbei aufgefallen und ich habe JTAG inzwischen auch Deaktiviert.

Am Anfang hatte ich einige Programme gepostet und mir wurde noch nicht gesagt das ich irgendwo einen Fehler habe. Nur Ratschläge wie man es mal anders Probieren kann und für mich geschriebene Programme wurden gepostet. Diese habe ich dann einfach kopiert und übertragen. Ich wüsste nicht wo man da was falsch machen kann?

Aber da du drum gebeten hast findet du hier jetzt die aktuellen Programme.
RnMega 2560:


$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
Led = 0

Config Lcdpin = Pin , Rs = Portb.7 , E = Portb.5 , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0
Config Lcd = 16 * 4
Initlcd
Stop Watchdog

Do
Cls
Lcd "Hallo!!"
Waitms 500
Loop
End AtMega32:

$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
Ddrb = &B11111111

Config Lcdpin = Pin , Rs = Portd.7 , E = Portd.5 , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0
Config Lcd = 16 * 4
Initlcd
stop WATCHDOG

Do
Cls
Lcd "Hallo!!"
Wait 5
Loop
EndGruß Sebasti

Ps: ich bin auch nicht jeden Tag am Basteln. Pro Tag komme ich im Moment durchnittlich auf 25-30 Minuten, für mehr reicht die Zeit im Moment auch nicht.

5Volt-Junkie
16.03.2011, 18:38
Ach armer Sebasti :)


beide Controller sollen einen ESD-Schaden haben obwohl das Blinkprogramm Funktioniert?
Ja, mit ESD muss man nicht unbedingt ganzen µC zerschossen haben.


Der Port auf welchem die Enable-Leitung liegt funktioniert NICHT!Wie jetzt? Weder HIGH noch LOW?


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?


$crystal = 10000001MHz Quarz?

Edit: Laut Schaltplan hast du ein 16MHz Quarz drin...

Sebasti
16.03.2011, 19:40
Hallo Sheff,

gut, das nächste mal sollte ich noch ausführlicher schreiben.




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.



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 :(



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.



$crystal = 10000001MHz 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):



$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

EndFür den AtMega32 habe ich den Code bis auf die Einstellungen nicht verändert:


$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

EndKomicherweise 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

for_ro
16.03.2011, 22:15
Na gut, die laufen auf verschiedenen Frequenzen. Das hat also nichts mit den Typen zu tun.
Dies hier
Do
Led = 0
Waitus 1
Led = 1
Waitus 9
I = I + 1
Loop Until I = 110000

dauert bei 1 MHz
80 Takte * 110000 Durchläufen / 1.000.000 = 8,8 sec

bei 16MHz
229 * 110000 /16.000.000 = 1,57 sec

Waitus 1 alleine benötigt 2µs bei 1 MHz Takt, also schon doppelt so lange.
Wenn du wirklich nur einen Takt warten willst, setze ein NOP ein.

Sebasti
17.03.2011, 16:33
Ahh, daher rührt das also.
Soweit bin jetzt auch noch nicht das ich da selber drauf gekommen währe.

Habe grade beschlossen einen weiteron Controller (Atmega8) auszupacken und die Displayplatine neu zu löten damit ich einfach das Beispielprogramm aus der Wiki kopieren kann. Dann werden wir sehen ob es klappt.

Gruß Sebasti

5Volt-Junkie
17.03.2011, 22:30
Vorher an die Heizung oder PC-Gehäuse oder irgendwas, was geerdet ist, anpacken ;)

Sebasti
03.04.2011, 11:45
So, habe es endlich geschafft mich darum zu kümmern.
Schuldigung für die Verzögerung, aber die Ausbildung gehlt leider vor.

Das Ergebnis ist leider negativ.
Der Aufbau:
-Spannungsversorgung mit Hilfe eines LM2574-N5 (Step-Down Schaltregler, 5V, 0,5A)
-Eingangspannung: 10V
-Atmega 8
- Alle Ports sind über 10 polige Wannenbuchsen hinausgeführt. Die Leitungen an welche auch der ISP-Programmer hängt sind über einen 10k-Widerstand herausgeführt

Der LCD ist an PortD angeschlossen.
Den AtMega8 habe ich mithilfe einer LED und des Blinkprogrammes überprüft.
Das Ergebnis war das alle Port funktionieren und richtig an den Wannenstecker angeschlossen sind. Das Bascom-Programm habe ich mir aus der Wiki kopiert.
Trotzdem zeigt der LCD nichts an!

Ich werde mich wahrscheinlich erst wieder in 2 Wochen drum kümmern können. Dann werde ich aber viel Zeit haben und bei anderen kleineigkeiten gucken ob ich ähnliche Probleme habe :(.

Gruß Sebasti