Nun muss ich doch schon wieder eine Frage stellen, nachdem ich mir
wieder mal die Zähne ausgebissen habe:
Ich habe mit einem Atmega8L eine Schaltung aufgebaut, welche auf den
Anruf eines Handys reagiert. Funktioniert auch alles wunderbar,
allerdings zeigt mein LCD den auszugebenden Text nicht korrekt an. Statt
"test" steht da "tVst", statt "init" steht da "afat" (reproduzierbar).
Der Fehler scheint also eine Methode zu haben.
Ich hatte dieses Problem letztens schon bei einem Atmega644P, da
funktionierte das LCD an PortA richtig, an PortC kamen aber nur diese
verzerrten Worte. Mittlerweile habe ich herausgefunden, dass es an der
JTAG-Fuse liegen könnte, hab es aber noch nicht ausprobiert.
Meine Frage ist nun, ob es etwas ähnliches für den Atmega8 zu beachten
gibt, eine JTAG-Fuse hat er ja nicht?
Am LCD liegt es nicht, es läuft an anderen Schaltungen und andere LCDs
zeigen an dieser Schaltung dasselbe Verhalten.
Hier ein Codeschnipsel:
>Ich habe mit einem Atmega8L eine Schaltung aufgebaut
Schaltplan zeigen.
>Meine Frage ist nun, ob es etwas ähnliches für den Atmega8 zu beachten>gibt, eine JTAG-Fuse hat er ja nicht?
Ist AVCC angeschlossen?
Sind Abblockkondensatoren an jedem Vcc/GND Paar?
Was für eine Taktquelle benutzt der Atmega?
Bit 4, also gemäß deiner Konfig DB7= Portb.5 ist immer 0. PortB.5 ist
SCK, also Bestandteil der ISP. Hier muss der Fehler liegen. Entweder ist
dein Programmer immer angesteckt, oder etwas anderes in deiner Schaltung
zieht den Port auf GND.
Interessant ist auch, warum aus einem 'e' ein 'V' wird.
Das sieht danach aus, als ob Bit 0 und Bit 1 vertauscht wären. Der
Befund lässt sich aber an anderer Stelle nicht reproduzieren.
Kannst du mir mal verraten, was LOCATE (Cursor Positionieren) damit zu
tun hat, dass falsche Buchstaben auf dem LCD auftauchen?
Wird dem LCD ein bestimmter ASCII Code übergeben und es stellt einen
ganz anderen ASCII Code dar, dann liegt das Problem in der Verkabelung.
Das geht von 'Pin nicht im IC Sockel', Sockel schlecht gelötet, Stecker
schlecht gelötet, Kabel gebrochen, bis zur Lötstelle am LCD. Da ist ja
der TO mit seiner Vermutung das alternate Pin Funktions etwas damit zu
tun haben könnten noch näher drann. Die könnten wenigstens dafür sorgen,
dass der Pin nicht 1 werden kann. Und wenns nur der ISP Programmer ist,
der den Pin drückt.
Karl Heinz Buchegger schrieb:> Kannst du mir mal verraten, was LOCATE (Cursor Positionieren) damit zu> tun hat, dass falsche Buchstaben auf dem LCD auftauchen?
Hast recht , dachte aber vollständigkeitshalber.
Wenn aber die Verkabelung falsch wäre, dann ( habe ich mal die Erfahrung
gemacht) würde er sowas sehen :
############
> würde er sowas sehen : ############
Nicht unbedingt. Denn es könnte sein, dass der Initialisierungsbefehl
auch bit 4 = Low hat.
Ist AVCC angeschlossen? Wenn das nicht der Fall ist, ist jedes weitere
herumraten sinnlos.
Karl Heinz Buchegger schrieb:> was fällt auf?> Bit 4 ist 0, wenn es eigentlich 1 sein sollte (Buchstabe n: 1110 ->> 0110, Bucstabe i: 1001->0001
So einfach ist die Logik nicht, denn wenn man Deinen Bitvergleich
ansieht, dann sieht man, dass es auch an anderer Stelle nicht stimmt:
> e> 01100101> V> 01010110
Der TE zeigt den Wert für $crystal nicht, es kann einfach sein, dass das
Timing nicht stimmt, weil der µC mit höherem Takt als angegeben läuft.
Mr. Buchegger (wieder einmal) und Janeistklar hatten vollkommen recht,
vielen Dank dafür.
Der Rest meines folgenden Textes gilt den Menschen, welche sich ihr Ego
durch ihre den Anderen überlegenen Kenntnisse über den µC aufbauen:
Mein Neid gilt denen, die das mehrere hundert Seiten starke Handbuch
auswendig gelernt haben.
Ich habe nach den ersten beiden Antworten nach "alternative functions"
gesucht, erfolglos. Danach begann ich, jeden ISP-Pin auf einen anderen
µC-Port zu legen. Entgegen Murphy war's gleich der erste, SCK.
Nun stellt euch doch mal folgendes vor:
Ich baue die Schaltung auf, schließe das LCD an, es erscheint aber statt
"test" nur "tVst". Zunächst denke ich an einen Softwarefehler und prüfe
wieder und wieder die in Bascom gemachten Einstellungen. Ja, in der
Hinsicht ist es auch wurscht, ob ich B ascom für B löde oder C für
C oole nehme, denn in anderen "Projekten" lief es mit Bascom auch,
scheint also kein grundsätzlicher Bascomfehler zu sein.
Anschließend stecke ich ein anderes LCD an, welches zufälliger- und
glücklicherweise noch da ist und in einer anderen Schaltung
funktioniert. Es zeigt denselben Fehler. Auch die Anhebung der Spannung
auf 5V bringt keinen Unterschied (außer natürlich einen
Kontrastunterschied), scheint also kein LCD-Fehler zu sein.
Ich stecke den Atmega8L in die eben genannte andere Schaltung und
programmiere ihn um, läuft alles scheint also kein Atmega-Fehler zu
sein.
Es stellt sich erste Ratlosigkeit ein, in mir keimt der Gedanke auf,
dass der Fehler doch nicht bei mir zu suchen ist. Ich befrage google mit
Stichworten, wie "LCD, Atmega, PINS, fehlerhafte Ausgabe" usw.. Dort
finde ich nur Einträge zur oben genannten JTAG-Fuse, welche beim Atmega8
aber keine Entsprechung hat. Es scheint also kein JTAG-Fehler zu sein.
Natürlich könnte es eine andere Fuse sein, aber keine klingt nach
"(de)aktiviere mich, denn ich könnte deine LCD-Ausgabe versauen"
Mittlerweile ist viel Zeit vergangen und ich bin sicher, jeder, außer
die ersten beiden Antwortenden, können ahnen, wieviel Zeit bei so einer
Fehlersuche drauf geht. Die Ratlosigkeit steigt so weit, dass ich mich
ans Mikrocontrollerforum wende, in der Hoffnung, dass es sich trotz
erfolgloser google-Suche um ein bekanntes Problem handelt. Ich hab nicht
bis kurz vor zwei in der Nase gebohrt, dann 5 Minuten den Fehler gesucht
und dachte dann: "Sollen's doch die Deppen lösen, die kein Leben haben
und mir kurz nach zwei antworten!"
Eventuell hätte ich das erwähnen sollen.
Bei der Fragestellung versuche ich, Newbie-Fehler so weit wie möglich zu
vermeiden. Einen Schaltplan habe ich nicht angehängt, ok, aber der
Codeschnipsel zeigte, an welchen Pins das LCD hängt.
Die ersten beiden Antworten lauten dann:
> Steht doch ALLES im Datenblatt unter Alternative Functions....
Wie soll ich denn darauf kommen, dass ich das unter "alternative
functions" finde? Wenn ich "alternative" und "alternative functions" als
Suchbegriff im pdf eingebe, komme ich auf keine für mich verwertbaren
Ergebnisse.
> Sebastian H. schrieb:>> Steht doch ALLES im Datenblatt unter Alternative Functions....> Ja so ist es! Langsam kann ich MaWin verstehen....."
Um den Erstellern dieser zwei Zitate keine Genugtuung zu verschaffen,
werde ich hier nicht weiter darauf eingehen.
Vielmehr möchte ich nochmal Mr. Buchegger und Janeistklar danken, die
sich die Zeit genommen haben, die Ergebnisse der "Schaltung" zu
simulieren und auszuwerten. Ich muss zugeben, ich weiß noch nicht mal,
wie sie es gemacht haben.
Trotz dessen wünsche ich der werten Netzgemeinde zwei friedliche Monate
bis Weihnachten ;-)
Martin Zippel schrieb:> simulieren und auszuwerten. Ich muss zugeben, ich weiß noch nicht mal,> wie sie es gemacht haben.
Ganz einfach:
Wenn du am LCD eine Ausgabe hast, dann muss schon mal eine ganze Menge
stimmen.
Kriegst du falsche texte, dann sieht man sich die ASCII Codes der
Buchstaben an. Durch Vergleich der ASCII-Codes auf Bitebene der Zeichen,
wie sie sein sollten und wie sie dann tatsächlich aufscheinen, sieht man
sich einfach an, welche Bits richtig sind und welche falsch. Dann sucht
man nach Zusammenhängen wie zb vertauschte Bits, Bits die immer 0 sind,
Bits die immer 1 sind, etc. Also einfach Mustervergleichen. Bei einem
Buchstabenpaar ist das noch nicht sehr aussagekräftig, hat man aber
mehrere Buchstabenpaare, dann kristallisiert sich schnell eine Hypothese
heraus.
Martin Zippel schrieb:> >>> insert monstrous text here <<<
Was Du bei all dem Gemecker und Selbstdarstellung vergessen hast: der
nächste Anfänger, der das liest, wird genausowenig kapieren, was los
war. Denn statt den Fehler eindeutig zu nennen, klagst Du nur Dein
eigenes vermeintliches Leid.
Die meisten Programmer belasten den uC in der Schaltung nicht, solange
sie selbst mit Strom versorgt werden. Nimmt man ihnen diese jedoch, ohne
sie vom ISP zu nehmen, so gibt's ungewohnte Effekte.
Das oder Ähnliches wäre wertvolle Information für Nachfolgende mit
vergleichbarem Problem gewesen, statt dessen gab's dieses Geweine.
Letzteres ist sowieso zweckfrei, denn das ist uns allen schon passiert,
dass wir an einem Problem rumgekaut haben. Wenn Du mit den gegebenen
Hinweisen nicht klar kamst, selbst schuld, musst Dich halt mehr
anstrengen, es gibt keine Garantie in 'nem Forum für genau die richtige
Hilfe. Wenn Du Garantien willst, kauf Dir irgendwo Support.
Sei froh, dass es Leute wie Karl-Heinz gibt und flenn nicht wegen der
Anderen rum, zumal Du's ja auch nicht besser machst, s.o.
Ich war gestern schwach und habe mich auf eine dieser nichtsnutzigen
Diskussionen im Internet eingelassen. Viel schlimmer noch, ich habe sie
begonnen :-D Ich werde unser aller Gemüt schonen und nicht weiter darauf
eingehen.
> Was Du bei all dem Gemecker und Selbstdarstellung vergessen hast: der nächste> Anfänger, der das liest, wird genausowenig kapieren, was los war.> Denn statt den Fehler eindeutig zu nennen, klagst Du nur Dein eigenes> vermeintliches Leid.
Janeistklar sagte, es liegt am SCK und ich habe das bestätigt.
Ich habe nicht nur mein Leid geklagt, ich hab auch erwähnt, wie das
Problem "gelöst" wurde. Also nochmal klar für alle Leser, die es sich
bisher nicht zusammenreimen konnten:
> Die meisten Programmer belasten den uC in der Schaltung nicht, solange> sie selbst mit Strom versorgt werden. Nimmt man ihnen diese jedoch, ohne> sie vom ISP zu nehmen, so gibt's ungewohnte Effekte.
Ich bin beeindruckt, dass ihr aus einem verwurschtelten Wort mit vier
Buchstaben die Ursache bis auf den Pin zurückverfolgen konntet!
Gehabt euch wohl und
> Letzteres ist sowieso zweckfrei, denn das ist uns allen schon passiert,> dass wir an einem Problem rumgekaut haben.
Denkt daran bei eurer nächsten Antwort.