Hallo, ich bin gerade dabei mir ein AVR Programm via Bascom für den Atmega16 zu stricken, das einen Output am LCD erzeugen soll. Mit AVRStudio klappt die Ausgabe von "Hallo" ohne Probleme am LCD (s.Codelisting im Anhang) aber ich versuche seit 2 Tagen ohne Erfolg via Bascom mein LCD zur Anzeige zu bewegen. Man sieht aber nur schwarze Blöcke in der ersten Reihe vom LCD - egal was man macht. Die Konfiguration: 16x2 LCD, 4-Bit Ansteuerung, alles auf Port C. PC0-PC3 = Data, PC4: RS, PC6: Enable Hier ist mein Code: $regfile = "M16def.DAT" $crystal = 4000000 Config Lcd = 16 * 2 Config Lcdbus = 4 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.6 , Rs = Portc.4 Cls Lcd "Hallo" End Ich habe auch schon die Fusebits für JTag auf Disabled gestellt, mit Xtal Clockspeed experimentiert und alles mögliche probiert. Auch versuchsweise alles in den Optionen eingestellt anstelle es im Code zu definieren. Da es mit AVRStudio klappt, müsste es sich um irgendeinen Fehler handeln. Was kann ich da falsch gemacht haben? Vielen Dank für Eure Tipps! Gruss, Peter
Hallo, wenn nur die erste Zeile schwarzen ist wird das LCD nicht initialisiert. nimm mal das : Config Lcdbus = 4 ersatzlos raus, das gehört beim Pin mode da nicht rein. ansonsten messe mal ob du überhaupt einen Datenfluss auf den Leitungen zum Lcd hast . Gruß HH
Hallo, HansHans hat recht. Du musst das LCD noch initialisieren! Vor deinem "CLS" muss noch ein "Initlcd" rein. Dann müsste es klappen! Gruß, Christian
Hallo Christian und HansHans, leider funktioniert es immer noch nicht... Was könnte man noch probieren? Ich habe es gerade mit AVRStudio wieder getestet - alles klappt. Mit Bascom komme ich einfach nicht zum Ziel. Gruss, Peter
@Peter nimm doch einmal das LCD-Demo Programm aus der Hilfe, setze deine Pin-Belegung Prozessor- Quarz-daten rein und teste mal. das sollte immer gehen. MfG
Obwohl ich kein Freund von BASCOM bin habe ich das gerade nachvollzogen und es funtzt. Einfach unter Options -> Compiler -> LCD den Pin-Mode und die Port-Pins für die 6 Signale einstellen. Die 3 Config-Zeilen braucht man dann nicht angeben aber das InitLCD ist wichtig. Habe mir den Code im Debugger von AVR-Studio angesehen. Ist zwar nicht gerade optimal aufgebaut aber es läuft. MfG Andi
Hallo Andi und stromi, es ist wirklich zum verzweifeln... Geht noch immer nicht. Hier ist der Screenshot meines Option Menüs und hier der verwendete Code: $regfile = "M16def.DAT" $crystal = 1000000 Initlcd Cls Lcd "Hallo" End Es kommen immer nur schwarze Balken auf dem Display und ich kann mir nicht die Ursache erklären. Gruss, Peter
@Peter warum nimmst du nicht das beispiel, da werden die Pin's richtig angegeben. In deinem Screenshot ist Bus UND Pin-Modus aufgeführt. In deinem Source erklärst du nicht was du nun willst. Gib die config- zeile für LCDPIN an : Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.6 , Rs = Portc.4 MfG
@Peter Ich vergas: du solltest dem Compiler auch noch von deinem LCD-Display erzählen: zB.: Config Lcd = 16 * 2 MfG
Das sollte laufen: In der Config LCDPIN-Zeile den Umbruch rausnehmen !! $regfile = "M16def.DAT" $crystal = 1000000 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.6 , Rs = Portc.4 Config Lcd = 16 * 2 Initlcd Cls Lcd "Hallo" End
Hallo stromi, leider immer das selbe Resultat :( Ich komme einfach nicht dahinter. Wenn es mit meinem Assemblercode läuft, muss es ja im Prinzip in dieser Konfiguration auch laufen, oder? Gruss, Peter
Hast Du in Options > Compiler > Chip Deinen µC richtig eingestellt? Wie flasht Du den µC? Mit BASCOM oder einem anderen Programmer wie z. B. Pony-Prog? Wenn mit anderem, benutzt Du den dann für Codes vom AVR-Studio und BASCOM? MfG Andi
Ich halte zwar nix vom Simulator , aber in dem Fall .... Zeigt das Lcd im Simulator Fenster was an ? hänge mal dein Programm als xxx.bas in den Anhang vielleicht ist da ein Fehler in Detail
Hallo HansHans, Andi und stromi, nett, dass ihr mir (trotz später Stunde) helfen wollt. Der Code ist im Anhang. Ich habe einen eigengen ISP Adapter, flashe mit Bascom. Habe auch schon Ponyprog2000 versucht - gleiches Ergebnis. Der Programmer funktioniert auf jeden Fall, da ich mir heute zum Spass eine LED Laufanzeige mit Bascom programmiert habe (LEDs auf Port A) Funktioniert ohne Probleme alles perfekt auf Anhieb. Das Problem tritt nur mit dem LCD auf. Ich bin mit meinem Latein schon ziemlich am Ende. Habe auch die Datenleitungen durchgemessen. Seltsam (und unlogisch) ist nur, dass der Assemblercode von AVRStudio funktioniert (gleiche Konfiguration). Der Simulator von Bascom zeigt mir ein hübsches "Hallo" am virtuellen Display. Funktioniert nur leider nicht auf dem echten Display... Gruss, Peter
@stromi: Habe mit den AVR´s bisher nur in ASM was gemacht und jetzt einfach mehr aus Neugier meine Basic-Erfahrung mit BASCOM ausgebuddelt. Komm mir vor wie damals zu den ZX81-Zeiten :-) Habe aber ein kleines Problem mit folgendem Code: Dim N as Byte Cls For N = 0 To 12 Locate 1 , 2 Lcd N; Wait 1 Next N Dieses kleine Prog zeigt mir an Position 1,2 im LCD die Zahlen 0 bis 12 an im Abstand von einer Sekunde. Komisch ist dabei, das wenn die 10 angezeigt werden soll der AVR, M8535, einen Reset macht und von vorne (0) beginnt. Setze ich die For-Schleife nur bis 8 dann kommt der AVR zum Ende und es bleibt bei der 8. Was muß man zur Ausgabe von Variablen auf das LCD beachten damit das richtig funtzt? Ne andere LCD-Lib oder ist der Bin to ASCII-Konverter fehlerhaft? MfG Andi
Shit, jetzt funtzt es! Man nuß eine Variable zur LCD-Ausgabe vorher mit Str(n) in einen String umwandeln. Dim N as Byte Dim A as String * 1 For N = 0 To 12 Locate 1 , 2 A = Str(n) Lcd A; Wait 1 Next N BASCOM ist wohl doch etwas anders als Basic-Interpreter/Kompiler für PC etc. MfG Andi
@Andi so viel Ahnung habe ich nun auch nicht, ausser daß du du die Formatanweisung bei Ziffern über 9 (oder unter 10) benutzen könntest, wüsste ich nicht warum der ab geht. habe ich so auch schon gemacht...
@Peter Das Programm ist OK, das läuft im meinem Mega16 mit LCD 16x2 nach anpassen auf meine Hardware mit $crystal = 4000000 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
@hanshans ich schätze r/w nicht auf Masse.... ist mir auch schon passiert.
Wenn r/w am µC angeschlossen ist, z. B. an PortD.6, läßt sich das wie folgt lösen: sbi ddrd,6 'r/w-Pin als Ausgang setzen cbi portd,6 'und auf GND ziehen InitLCD 'Erst danach das LCD-Initiallisieren Hatte früher in ASM das LCD mit Busy-Abfrage betrieben und bin jetzt wegen ISR-Ausgabe davon weg gekommen. Mußte das jetzt also auch so machen. MfG Andi
@andi jo. aber in diesem Fall wird R/W nicht gebraucht, also an Masse. Hast du noch so'n ZX81 ? Das war'n noch Zeiten....... Ja Ja..
@stromi: Kann man in BASCOM die Ausgabe auf das LCD eigentlich timen z. B. auf 16 mal je Sekunde damit der µC weniger mit der LCD-Ausgabe beschäftigt ist? Ich denke da an Buffer-Betrieb etc. MfG Andi
@stromi: GND ist doch Masse, cbi portd,6 = Port-Pin D6 auf Masse schalten = Write-Mode. MfG Andi
Ich habe noch einen ZX81 im Schrank stehen .... lang lange her Nacht .... HH
@Andi ich würde eine Sekunde immer mit Timerinterupt machen, die LCD-Ausgabe ohne CLS machen. Nur beim Programmstart und bei Menue-Wechssel. Alles mit Locate-Befehlen. Da flackert die LCD-Anzeige nicht rum. Dafür muss man natürlich immer wissen was da vorkommen kann, nicht das da alte Textteile im Display stehen weil der neue Text kleiner ist. Den dann mit Leerzeichen auffüllen. Aber jeder wie er es mag. Die Fehler suchen ist immer noch am aufwendigsten. Dann fällt es wie Schuppen aus den Haaren... wie konntst du das verdaddeln... MfG
@Peter Fuller Nochmal langsam zum mitschreiben. Du hast bei Bascom im Grunde Zwei Möglichkeiten das LCD zu konfigurieren. Entweder in den Compilereinstellungen oder im Quellcode. Was davon nun Sinvoller ist will ich hier nicht diskutieren. Das muß jeder selber entscheiden. Auf jedenfall ist nur eine Methode zulässig da du sonst gefahr läufst gegensätzliche Anweisungen zu geben. Nun fasse ich mal zusammen was du geäußert haat. Du hast mit Bascom und einigen LED's ein Lauflicht zum laufen gebracht also schließe ich daraus das der Controller und Bascom schonmal zusammenarbeiten. Desweiteren hast du in den Compilereinstellungen und den Fusebits rumexperimentiert also schließe ich daraus das du weißt was du tust. Bleibt also nur ein einfacher Fehler in der Logik. Ich nutze mein LCD (Und noch andere Sachen wie Tastaturen usw.) seit geraumer Zeit fast nur noch über I2C um Ports zu sparen also weiß ich nicht mehr genau wie ich es anfangs gemacht habe aber ich meine ich hätte den Port C mit "Config Portc = Output" definiert bevor ich die einzelene Pins für das LCD angegeben habe um das Problem an Port C mit dem Jtag zu umgehen. Also mal eben diese Zeile zwischen "$Crystal...." und "Config Lcdpin....." setzen und schauen obs das ist. Kostet nur einige Sekunden Arbeit. Inzwischen versuch ich mal ein altews Listing rauszukramen wo ich das LCD noch direkt angesteuert habe Ratber
ES FUNKTIONIERT!!!!!!!!!!!!!!!!!!!!!!!!!! Danke Ratber! Config Portc = Output war die Lösung Danke auch an alle vom Herzen für die Tipps! Ich gehe jetzt schlafen. Grüsse, Peter
Aha,hat sich die Buddel Tai Ginseng letztens doch noch rentiert. gg
Habe mit den gleichen Problemen gekämpft. Vielen Dank auch von mir. Ich denke die BASCOM LCD-DEMOS sollten mal für Port C überarbeitet werden.
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.