Hallo!
eeem, ich habe ein Problem.
seiss aber nicht mal annähernd woran es liegen könnte.
der µC lässt sich programmieren, aber es tut sich am LCD nichts.
dazu habe eine schaltung rausgehohlt, die ich früher schon gebaut hat.
sie hat 200% funktioniert.
da ist nur der Atmega16, seine Stromversorgung und ein Anschluss für den
LCD drauf.. mehr nicht. kann eigentlich nichts kaputt gehen.
habe den µC da auf die Platine reingesteckt. es tut sich nichts..
...???...
dann habe ich schnell dieses Programm hier geschrieben:
$regfile = "m16def.dat"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 ,
Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
Cls
Do
Locate 1 , 1
Lcd "hello"
Wait 200
Loop
also nur das nötigste.
es funzt einfach nicht.
meine fuse-einstellung ist im Anhang.
wo kann denn das Problem liegen?
also LCD ist ganz bestimmt in Ordnung. habe sogar 2, die immer
funktioniert haben.
Am programm ist auch alles glatt. (denke ich mal).
Ich weiss das Thema nervt euch alle schon langsam, aber ich bin echt
ratlos.
Danke. MfG Alexander
> $crystal = 8000000
Das passt nicht zu dem Bild mit den Fuses. Laut Fuses hast du
$crystal = 1000000
Taktquelle ist der interne RC-Oszillator des Atmega16. Das falsche
Statement könnte dir das Timing zur Ansteuerung des LCD aus dem Tritt
bringen.
Ich würde das LCD erstmal weglassen und eine LED zum Blinken bringen
bzw. wenn keine LED zur Hand einen Port HIGH schalten und mit dem
Multimeter nachmessen. Damit ist sichergestellt, ob der Atmega16 läuft
oder nicht.
so, habe ich gemacht.
und zwar mit diesem Code hier:
$regfile = "m16def.dat"
$crystal = 10000000
Portb = 0
5v Alias Portb.0
Waitms 200
Do
Set 5v
Wait 10
Reset 5v
Waitms 10
Loop
End
fuse bits sind gleich geblieben.
allerdings macht es statt 10 sekunden irgendwie ca 25 sekunden.
wie kann das angehen?
welchen quarz haste den am atmega???
du sagst bascom das es mit 10mhz läuft und nicht wie deine fusebits mit
1MHz las mal ne null weg bei deinem "$crystal = 1000000"
sven
Hallo,
auch eine Fehlerquelle ist gerne der LCD-Kontroller, besonders die
KS-Serie der ist zwar sehr gut Kompatibel aber nicht 100%. Bei mir lief
es immer wenn nach der Konfig nochmals das LCD initialisiert wurde.
Kontrollier mal die Anschlüsse am LCD, wenn die absolut richtig sind,
füge in deinem LCD-Programm vor dem cls-Befehl noch ein "initlcd" ein.
Wenn elektrisch alles korrekt ist sollte das gehen es sei den du hast
noch ein Timingproblem durch eine inkorrekte Angabe des Taktes.
Roland
>Lass die Zeile weg. Spielt beim Atmega16 keine Rolle. Sorry.
habe ich gemacht. jetzt zählt er richtig! danke.
löst aber das Problem mit dem LCD nicht.
habe da im Code natürlich auch 1000000Mhz eingesetzt.
zwischen config lcd und cls habe ich noch "initlcd" hinzugefügt.. ohne
Erfolg. :(
>laut soft aber an port b
ja ist schon richtig...
ist eigentlich nach portB angeschlossen.
also wie gesagt.. das hat alles funktioniert. an der Hardware habe ich
nichts geändert.
ich habe mich mit dem Projekt beschäftigt.. dann habe ich es für ein
paar Tage liegen lassen, und heute morgen wollte der LCD nichts mehr
ausgeben.
>Ursache war der Proprammieradapter welcher noch an der Platine angesteckt >war.
ich habe keinen programmieranschluss auf der platine.
da ist nur ein anschluss für den LCD.
> µC kaputt?
Wie kommst du darauf? Dein Multimetertest hat doch gezeigt, dass
zumindest der µC läuft und dass Portb.0 nicht geschrottet ist. Wenn du
bzgl. der anderen Portpins unsicher bist, kannst du die ja genau so
testen.
Verdrahtung überprüfen. Noch und Nöcher. Beim Durchklingeln nötigenfalls
direkt zwischen Portpin und LCD-Kontroller messen. Beim Zählen immer
schön bei PIN 1 anfangen und nicht irgendwo anders.
Der 4-Bit-Init ist eine ziemlich blöde Angelegenheit. Die Timingzeiten
der Kontroller varieren doch sehr stark.
... mal etwas Zeit verstreichen lassen, bis der initlcd
kommt.
Alternativ: mal beides einschalten und dann nur den µC
einzeln resetten.
Hitergrund: Das LCD braucht nach dem Anlegen der Spannung
etwas Zeit bis seine eigene Reset-Sequenz durchlaufen
ist. Wenn der µC daher zu früh loslegt, dann ist das
LCD noch nicht fertig und der Anfang der Init Sequenz
geht in die Hose.
Du gibst zu schnell auf :-)
@Karl heinz Buchegger
danke schön! :)))
werde ich dann morgen früh ausprobieren, wenn ich wieder auf der Arbeit
bin.
da ich zu Hause sowieso keinen Parallelenport habe, lasse ich die Sachen
dort liegen. :)
soll ich einen Reset-Taster anbringen?
Einfach gegen 5V tasten, oder?
:) Alex
> was könnte ich denn noch machen?
Poste den konkreten Schaltplan und/oder ein aussagekräftiges Foto vom
Hardwareaufbau.
Insbesondere interessiert mich, wie du die Verstrippung an Portb.5 und
Portb.4 gemacht hast. Diese Pins von PortB sind nämlich auch Teil der
ISP Programmierschnittstelle.
Hast du beim Ausprobieren des LCD einen ISP Adapter (Welchen?)
angeschlossen oder ziehst du den jeweils ab?
>Hast du beim Ausprobieren des LCD einen ISP Adapter angeschlossen
wie ich schon geschrieben habe, es gibt auf dieser Platine keinen
Anschluss für ISP.
ich stecke dem µC zum proggen immer um ;)
foto werde ich morgen mal machen :)
Alex wrote:
> habe da im Code natürlich auch 1000000Mhz eingesetzt.
Eine Million Megahertz, also 1000 Gigahertz oder 1 Terahertz.
So einen AVR will ich auch haben!!!
Uuuuunnnnnbedingt!!!
> ist genau so wie hier angeschlossen.> http://www.roboternetz.de/wissen/images/thumb/e/ec...
Warum fragst Du eigentlich nicht dort nach, wo Du die Schaltung her
hast, die bei Dir nicht funktioniert?? Dort sind vielleicht die Leute,
die diese Schaltung entwickelt haben und sich damit auskennen. Wenn ich
Fragen zu einem OBI-Produkt habe, frage ich doch auch nicht bei
Eisenkarl.
MfG, Blau, bärischer
Kotz ist man denn nirgens vor diesem Trollpack gefeit, die alles und
jeden meinen mit ihrem geistigen Dünnschiss behelligen zu müssen?!
Geh sterben! Aber bitte leise....
Ich möchte nun langsam wissen, warum Blaubier sich immer in Bascom
Fachgespräche einmischt. Sei ruhig, wir wollen unseren Spagetticode
selber auslöffen. Viele Grüße in den Blaubärwald... :))
Hmm,
ich kann diese ganzen Spitzen in denen immer gegen Bascom geschossen
wird ehrlich gesagt nicht verstehen. Ich Programmiere in C und auch ab
und zu in Bascom, bin ich jetzt nicht l33t nur weil ich kein gnadenloser
C oder Assembleranhänger bin der alles andere abwertet und verteufelt?
Jeder kann mit der Programmiersprache die er will glücklich werden,
zumindest ist das mein Standpunkt.
@Blaubeer, wenn du sinnvolle informationen zu dieser diskussion
beizutragen hast, her damit, wenn nicht halte dich bitte raus (einen
härteren Ton verkneife ich mir jetzt)
@Alex was für ein Display verwendest du, genauer gesagt welchen
Controller hat das. Schaltplan deiner Schaltung wäre auch gut dann
wissen wir wovon wir reden. Ich kann dir dann evtl. auch schnell nen
Democode tippseln, und den vorher schnell auf dem Breadboard
ausprobieren bei mir damit du sicher bist das der rennt.
Roland
>bin ich jetzt nicht l33t nur weil ich kein gnadenloser>C oder Assembleranhänger bin der alles andere abwertet und verteufelt?
Die Abneigung gegen Bascom resultiert wahrscheinlich nicht so sehr aus
der Sprache selbst, sondern daraus, daß viele unbedarfte junge Menschen
meinen, sie könnten jetzt plötzlich programmieren, weil Bascom ihnen
alles abnimmt und sie sich nicht mehr um die Hardware kümmern müssen
(glauben sie).
Daraus entstehen dann viele mühsame Threads ;-)
Danke an alle für die Unterstützung!
@Roland
zum Display kann ich leider nicht viel sagen, weil das gerade auch der
Arbeit liegt, und ich zu Hause bin. ich weiss nur dass es 14 pins hat.
Zum Schaltplan: Ich hatte von sowas wie einen Bordcomputer zu bauen.
mit Bordspannungsanzeige, Temp. innen/ aussen, Drehzahlmesser,
Motortemperatur, Öldruck, usw.
Die temp. anzeige habe ich schon mit dem KTY-81 und einem OP realisiert.
die Spannung messe ich dann mit dem ADC.
Drehzahl funktioniert auch. mit dem f/U Wandler (weiss die genaue
Bezeichnung nicht aus den Korf) wandle ist die Frequenz von Unterbrecher
in die Spannung um, die auch nicht dem ADC erfasst wird. Zw,
Unterbrecher und f/U-Wandler habe ich noch einen Schmitt-Trigger
eingesetzt.
Bordspannung auch klar: Spannungsteiler und ab an den ADC :)) (ADC ist
meine Lieblingsfunktion, weil ich damit auch umgehen kann).
nachdem ich alles bis dahin fertig war, musste ich auf der Arbeit paar
Funkanlagen und noch paar Kleinigkeiten reparieren. Also kabe ich meine
Schaltung erst mal zur Seite gelegt. nach 4 Tagen, also heute Morgen,
wollte ich weitermachen. eingeschaltet...... funktioniert nicht mehr.
warum? weiss ich nicht. habe damit wirklich nichts gemacht, nochts
verändert.
Ich dachte erst wenn ich den µC neu programmiere, wird es alles wieder
laufen. aber ich hatte mein ISP nicht dabei.
musste ich als neuen schnell löten.
fertig! alles angeschlossen.... ponyprog.... hex-Datei.....
schreiben.... verifiring... writing sucesfull... testen.......... GEHT
NICHT!
dann dachte ich lcd sei kaputt. den Anderen genommen. Kabel war schon
früher angelötet.
Geht wieder nicht.. dann habe ich diesen Theard erstellt.
Inzwische ist mir aufgefallen, dass ich noch eine Schaltung habe, die
ich schon früher, als ich geübt habe, gebastelt hatte. die hat auch
funktioniert.
da ist nur der AtMega16, 7805, 100n ein 10k R und ein Anschluss für den
LCD drauf. "nun muss es aber gehen" - habe ich gadacht!
µC auf die platine... einschalte... Geht immer noch nicht...
dann habe ich mein Quellcode so weit bearbeitet, dass es nur "Hello"
ausgeben sollte.. hat auch nicht funktioniert.
Dann habe ich noch mal den Datenblatt angeguckt, zu den Fuses noch was
gelesen... paar fuses anders gesetzt. es hat sich nichts verändert.
die geschichte weiter muss ich nicht erzählen.. es steht oben schon
alles.
nun bin ich echt RATLOS.
Danke, dass ihr mir helft!
MfG Alexander
>nun bin ich echt RATLOS.
Du kannst eigentlich nur ganz von vorn anfangen:
Schreib ein kleines Programm das eine Led blinken läßt.
Wenn das geht, versuche das LCD zu initialisieren, am besten im 8-Bit
Modus. Und so weiter.
..und der Reset-Pin ist wie beschaltet?
Mann, muss man Dir wirklich die Würmer einzeln aus der Nase ziehen?
Warum postest Du nicht - wie schon mehrmals erbeten - einen Schaltplan
und/oder Fotos vom Aufbau??
Hat der 16 zufällig ne Jtag?
wenn ja muss diese dezidiert abgeschaltet werden solltest du die
betreffenden pins verwenden wollen () beim 32er betrifft es Port D oder
C Pins. da der 16er wohl etwas scmaler ist könnte ich mir vorstellen,
das es die unteren Ports betrifft.
>Hat der 16 zufällig ne Jtag?
Tja, das weiß man immer nicht genau. Ich hatte auch schonmal nen
Atmega8, der hatte sogar 16kB Flash, und 1,5kByte SRAMdafür leider aber
kein eeprom.
Hm, Zufälle gibts.
Grüße
>Warum postest Du nicht - wie schon mehrmals erbeten - einen Schaltplan>und/oder Fotos vom Aufbau??
wie ich schon mehrmal gesagt habe, liegt die Schaltung auf der Arbeit.
ich komme morgen früh dahin, und schon um 7.00 sind die fotos da :)
@winne :JTAG hat mega16 aum PortC.
>Natürlich. Das wär wieder der Klassiker: JTAG-Fuse gesetzt.
ist NICHT gesetz
Bei mir war es ja bis jetzt immer das eine Leitung nicht richtige
angeschlossen war. Grad bei nicht durchkontaktierten Platinen...
Das hab ich dann auch meist immer nach Stunden gefunden anstatt gleich
ALLE Leitungen durch zu klingeln...
@ Jorg B.
bei mir sind das auf einmal 2 Platinen, die davon perfekt funktionier
haben.. etwas verdächtig, wenn die 2 zum gleichen Zeitpunkt kaputtgehen.
@Ronny Spiegel
ENG hat glaube ich eronisch bemeint, oder?
da kommen noch viele Sachen dazu.. sollten zumindestens, desswegen habe
ich mir noch Platz gelassen.
Batterie ist ok, 8.5V. da sind sowieso 7805s drauf.
warum soll ich takt anlegen, wenn der int. Oszillator aktiv ist?
> ENG hat glaube ich eronisch bemeint, oder?
ja :)
> Batterie ist ok, 8.5V. da sind sowieso 7805s drauf.> warum soll ich takt anlegen, wenn der int. Oszillator aktiv ist?
Ich hab mir jetzt nicht alles durchgelesen, aber Du schreibst, dass der
uC nicht mehr losrennt (warum auch immer). Ein externer Takt (ich hab da
meisst nen Tiny genommen und den schnell geflasht, Quarzoszillator oder
ähnliches tuts natürlich auch) hat da bei mir schon oft Wunder bewirkt.
Ansonsten würde ich mal versuchen, den uC auszutauschen, nur um
sicherzustellen, dass der nicht defekt ist.
Was mir auch schon passiert ist:
Binary war falsch gelinkt (Makefile war nicht so doll, nur mal eben
zusammengeschustert). Das hatte zur Folge, dass das Programm immer
gestartet ist und dann, sobald ein Timer aktiviert wurde, wieder neu
gestartet wurde. Hat mich bestimmt auch ein paar Stunden gekostet, die
Ursache zu finden...
Gruss,
RSp
>Du schreibst, dass der uC nicht mehr losrennt
habe ich erst gedacht...
die LED kann man aber blinken lassen.
ganz komisch die ganze Sache.
ich habe leider keinen Anderen AtMega16 da.. nur ......8, dann muss ich
alles umlöten :(
Tip von mir: Das LCD-Flachbandkabel ist zu lang. Mehr als 20cm
unterminiert führt zu Fehlern, ab 40cm geht (oft) gar nichts mehr.
Ausnahme: extem langsame Busgeschwindigkeiten und Pausen zwischen Daten
aufschalten und Enable-Impuls.
Travel Rec. wrote:
> Ausnahme: extem langsame Busgeschwindigkeiten und Pausen zwischen Daten> aufschalten und Enable-Impuls.
Also CPU runtertakten ohne Werte in der Software zuverändern.
Schon den Programmcode mit einem Waitms 1000 anfangen lassen?
@ Travel Rec. (travelrec)
>Tip von mir: Das LCD-Flachbandkabel ist zu lang. Mehr als 20cm>unterminiert führt zu Fehlern, ab 40cm geht (oft) gar nichts mehr.
Naja, man kann sicher viel falsch machen, aber so pauschal würde ich das
sicher nicht gelten lassen.
>Ausnahme: extem langsame Busgeschwindigkeiten und Pausen zwischen Daten>aufschalten und Enable-Impuls.
Das ändert an Reflexionen gar nichts. Siehe Wellenwiderstand.
MFG
Falk
>Das ändert an Reflexionen gar nichts.
Richtig, aber daran, daß die Signale stabil sind, bevor Enable gepulst
wird. Mittels einer Pause zwischen Daten senden und Enable pulsen kann
man einiges bewirken. Geschieht das zu schnell nacheinander, sieht das
LCD nur Müll.
>Wir eröffnen die grosse Raterunde...jeder darf mal :)
Was soll man schon noch groß dazu sagen ?
Ohne BODEN aktiviert und BODLEVEL auf höchsten Wert
kommt mir jedenfalls kein ATMega in die Schaltung.
@ Travel Rec. (travelrec)
>>Das ändert an Reflexionen gar nichts.>Richtig, aber daran, daß die Signale stabil sind, bevor Enable gepulst>wird.
Ha, du glaubst doch nicht allen Ernstes, dass ein AVR so schnell ist,
dass er noch während die Reflexion lustig am klingeln ist, einen Enable
Puls generieren kann?
Selbst bei 20 MHz sind da mind. 50ns zwischen Daten anlegen und Enable
Puls. In der Zeit sind die Reflexionen, so es welche gibt, schon dreimal
abgeklungen.
> Mittels einer Pause zwischen Daten senden und Enable pulsen kann>man einiges bewirken.
Naja, an die Zeiten im Datenblatt sollte man sich schon halten. Und da
steht bei mir, dass RW ud RS 140 ns vor der steigenden Flanke von Enable
anliegen müssen. Das ist immerhin ein Takt bei 7 MHz. nd wenn die
"Experten" ihre AVRs immer mit 16 MHz takten müssen . . .
Selbes gilt für die Daten, die müssen 195ns vor der fallenden Flanke
anliegen.
> Geschieht das zu schnell nacheinander, sieht das>LCD nur Müll.
RTFM. Zu 99,999% hält sich das LCD an das Timing im Datenblatt.
MFG
Falk
>Ohne BODEN aktiviert und BODLEVEL auf höchsten Wert>kommt mir jedenfalls kein ATMega in die Schaltung.
Mir auch nicht. Abgesehen davon ist das wohl der längste Thread, indem
es darum geht, eine Schaltung mit einem Controller und einem LCD zum
Laufen zu bringen...
>Ha, du glaubst doch nicht allen Ernstes, dass ein AVR so schnell ist,>dass er noch während die Reflexion lustig am klingeln ist, einen Enable>Puls generieren kann?>Selbst bei 20 MHz sind da mind. 50ns zwischen Daten anlegen und Enable>Puls. In der Zeit sind die Reflexionen, so es welche gibt, schon dreimal>abgeklungen.
Du hast die Reflexionen in´s Spiel gebracht. Ach und meine Displays
laufen alle. Ab 8Mhz brauche ich zwischen Datenausgabe und Enable ein
'nop', ab 16Mhz 2 davon.
@ Travel Rec. (travelrec)
>Du hast die Reflexionen in´s Spiel gebracht. Ach und meine Displays
Nöö, das hast du implizit getan.
"Tip von mir: Das LCD-Flachbandkabel ist zu lang. Mehr als 20cm
unterminiert führt zu Fehlern, ab 40cm geht (oft) gar nichts mehr."
>laufen alle. Ab 8Mhz brauche ich zwischen Datenausgabe und Enable ein>'nop', ab 16Mhz 2 davon.
Ahha, also dann lügt das Datenblatt also doch nicht. Wie sagt ein
Kollege von mir immer:
"Kaum macht man es richtig, schon funktionierts.".
MFG
Falk
@ Travel Rec. (travelrec)
>Mir auch nicht. Abgesehen davon ist das wohl der längste Thread, indem>es darum geht, eine Schaltung mit einem Controller und einem LCD zum>Laufen zu bringen...
Scheint die nahtlose Fortsetzung von diesem Thread:
Beitrag "LCD am AVR Problem"
>>Du hast die Reflexionen in´s Spiel gebracht. Ach und meine Displays>Nöö, das hast du implizit getan.>"Tip von mir: Das LCD-Flachbandkabel ist zu lang. Mehr als 20cm>unterminiert führt zu Fehlern, ab 40cm geht (oft) gar nichts mehr."
Nee nee, mal langsam: Flachbandkabel neigt zu Übersprechen und das nimmt
bei hohen Geschwindigkeiten zu. Somit hat man kurz nach dem Umschalten
nicht nur mit Reflexionen, sondern eher mit Signalverzerrungen infolge
Übersprechen und Kapazitäten zwischen den einzelnen Leitern zu tun.
Deshalb mein (allgemeingehaltener) Hinweis zum Flachbandkabel. Aber
egal, daran liegt´s ja nun wohl nicht, daß das LCD nicht geht...
Alex wrote:
> Guten Morgen.> so, die fotos sind im Anhang.
Aha.
Alex wrote:
> da ist nur der Atmega16, seine Stromversorgung und ein Anschluss für den> LCD drauf.. mehr nicht.
Nö.
Vielleicht hängt es damit zusammen. (Gerade gesehen, Danke an die
Diskutanten dort für die ausführlichen Erklärungen und Tipps.)
Beitrag "Anstiegszeit von AVCC und VCC verschieden ATmega 128"
Mir dünkt auf der rechten Seite des Fotos ist eine eigene
Spannungsversorgung für AVcc...
Stammt die Erfahrung "gestern liefs noch" vielleicht aus der Zeit, als
die rechte Seite der Platine noch nicht bebastelt war?
Ansonsten halte ich mich ab jetzt hier raus, bis ein vernünftiger
Schaltplan kommt. Es hat so keinen Zweck.
Bei dem fetten Elko der da scheinbar auch hinter dem
Spannungsregler sitzt tipp ich immer noch auf BODEN.
Ich würde das Riesenteil da mal auslöten und max 10uF einsetzen.
Ich denke auch es wird jetzt Zeit hier Schluß zu machen.
Ein Satz noch: Wenn die Schaltung mal ging und jetzt nicht mehr geht,
muß irgendetwas verändert worden sein oder es hat sich von allein etwas
verändert (vom Material her). Dies herauszufinden, kann nur der Alex
selbst erledigen.