Hallo, ich steige gerade von Picaxe µC auf Atmel um. Ich möchte in C programmieren, da ich hier Grundkenntnisse besitze. Ich habe ein Evolution Board bei Pollin bestellt, welches in den Grundzügen auch funktionieren sollte. Testprogramme konnte ich aufspielen. Als Programmierumgebung nutze ich WinAVR und PonyProg zur Übertragung des hex-files. Ich möchte ein LCD Display ansteuern im 4 Bit Modus und habe dazu folgende Verschaltung gewählt. Wie im Link http://www.pocketmagic.net/?p=447 Dort kann man sich auch den Quellcode runterladen. Einzige Abweichung zur Verschaltung ist, dass ich den Port D gewählt hab und er Port C. In der Lcd.h habe ich #define LCD_PORT PORTD geändert. Danach erstelle ich mit mfile ein makefile. Hier bin ich mir schon nicht sicher bei der Vorgehensweise. Ich vergebe den Namen des mainfilenames ATMegatest.c, als programmer hab ich bis jetzt pony-stk200 gewählt. Das Board hab ich über ISP am COM 1 des PC hängen. Muss ich jetzt dort noch die C Sourcesfiles für die lcd.h (also lcd.c) einbinden? Ok dann makefile in den Ordner wo die mainfile ist abspeichern und dann wieder zurück zum Programmer Notepad und unter Tools - Make All compilieren. Dann hexfile mit ponyprog übertragen und es zeigt wie zuvor schon nur schwarze Kästchen. Ich bitte um Starthilfe soweit möglich. Hab diverse Interseiten schon durchforstet und die oben aufgeführte schon als Einsteigerfreundlichste empfunden. Grüße
imidin schrieb: > ich steige gerade von Picaxe µC auf Atmel um. Gut. > Ich möchte in C > programmieren, da ich hier Grundkenntnisse besitze. Auch gut. imidin schrieb: > Evolution Evaluation? imidin schrieb: > Ich möchte ein LCD Display ansteuern im 4 Bit Modus und habe dazu > folgende Verschaltung gewählt. Wie im Link > http://www.pocketmagic.net/?p=447 > > Dort kann man sich auch den Quellcode runterladen. Wo? Ein Link dazu würde die Suche sparen. Außerdem gibt es auch hier im AVR-C-Tutorial ein LCD-Beispiel. Nachdem das hier besser bekannt ist, wäre es sinnvoll wenn du es damit versuchst, dann findet man hier auch leichter Hilfe. > Einzige Abweichung > zur Verschaltung ist, dass ich den Port D gewählt hab und er Port C. Warum? Beim mega8 liegt auf Port D auch RxD und TxD. Damit es da keine Kollisionen gibt, muß man natürlich die Jumper für die serielle Schnittstelle abziehen. imidin schrieb: > als programmer hab ich bis jetzt pony-stk200 gewählt. Dann wundert es mich, daß es schon mal mit anderen Programmen funktioniert haben soll. War stk 200 nicht ein Parallelport-Programmierer? Beim avrdude hieße das serielle Gemauschel des Pollin-Boards siprog. Aber wenn du sicher bist, daß du so schon andere Programme flashen konntest, soll es mir auch recht sein. imidin schrieb: > n > der Lcd.h habe ich #define LCD_PORT PORTD geändert. Anstatt einen Quelltext suchen zu müssen, den du eh nch geändert hast, wäre es sinnvoller, deinen Quelltext zu zeigen. Oder wie gesagt, du könntest gleich den von hier nehmen, der hat schon oft funktioniert und ist gut bekannt. imidin schrieb: > Das Board hab ich über ISP am COM 1 des PC hängen. Das hat bei mir manchmal funktioniert, manchmal nicht. Hauptsächlich abhängig vom PC, aber auch von der Windrichtung und Mondstand. Ein vernünftiger ISP-Programmierer ist keine Verschwendung und kostet auch nicht die Welt; z.B. AVRISPmkII 40.00. imidin schrieb: > Muss ich jetzt dort noch > die C Sourcesfiles für die lcd.h (also lcd.c) einbinden? Die lcd.c ja, die lcd.h nicht. Aber auch da kann man über dein Makefile nur spekulieren. imidin schrieb: > Dann hexfile mit ponyprog übertragen und es zeigt wie zuvor schon nur > schwarze Kästchen. Welches LCD? Wieviele Zeilen? Wenn mehr als 1 Zeile: alle Zeilen mit schwarzen Kästchen, oder nur die 1. oder 1.+3.? imidin schrieb: > Hab diverse Interseiten schon durchforstet Das hiesige Tutorial wohl noch nicht... :-) Außerdem wäre eine ordentliche Beschreibung deiner Verkabelung sinnvoll, u.a. weil das Pollin-Board eine nicht gerade übersichtliche Nummerierung der Pins hat.
Hallo Klaus, wenn du unter folgenden Link schaust, findest du meine Verdrahtung und den Quellcode. http://www.pocketmagic.net/?p=447 Quellcodedownload: http://www.pocketmagic.net/wp-content/uploads/2009/02/atmega8-lcd.zip Verschaltung: http://www.pocketmagic.net/wp-content/uploads/2009/02/lcdlayout-full-150x150.gif Wie gesagt verschaltet hab ich das wie abgebildet, eben nur nicht an Port C sondern an D. Warum Port D? Hab mich von folgenden Link leiten lassen. http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD Ok das mit der seriellen Schnittstelle sehe ich ein, etwas ungünstig wohl. Display ist 2 * 16 zeichen. Eins von Pollin, mit Picaxe funktioniert es wunderbar. Wird es mit ATMEL auch ;) Irgendwann
So habe mir jetzt im Tutorial angepriesene Beispiel angeschaut und irgendwie bekomm ich das auch nicht hin. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung Habe die Dateien erstellt wie dort beschrieben. - lcd-routines.h - lcd-routines.c - LCD_Test.c Kompilieren bringt auch keine Fehler, aber nach erfolgreicher Übertragung mit Ponyprog immer noch nur Balken. Im Übrigen ist auch hier im Tutorial der Port D zum Einsatz gekommen. Bild zum Einstellungen in AVR Studio habe ich eingefügt. Auch die Optimierung habe ich eingeschaltet, wie im Tutorial beschrieben. Im Übrigen ist die Beschaltung auch wie dort aufgeführt. Ich bitte um Unterstützung.
Und die natürlich vollkommen korrekte Beschaltung sieht wie aus? Welche Jumper sind auf dem Board gesetzt?
So hier nochmal die Beschaltung des LCD. Eigentlich wie im Tutorial. Einzige Abweichung ist, dass die Datenbits DB0 - DB3 auf GND gelegt sind, damit sie ein definiertes Potential haben. Beim Picaxe war dies nötig für das Display, da sonst gar nichts angezeigt wurde. Die Jumper JP1 und JP2 sind für die RS232, da ich dort nichts angeschlossen habe, sollte da auch nichts passieren. JP3 - JP8 sind für die LED´s und Taster, liegen also parallel zur Wannenbuchse J4. Solange ich kein Taster betätige, sollte dort doch kein Problem auftauchen. Und JP9 - JP12 sind wohl für den EEPROM, der auch nicht bestückt ist. Ich habe es allerdings auch schon mit allen Jumpern entfernt probiert. Kein Erfolg.
Achso Entschuldigung, zur Erklärung des Schaltplanes. ATMEGA8 auf Wannenbuchse JP4 (Tippfehler) und dann von Wannenbuchse JP1 (ist Wannenbuchse JP4) auf das LCD Display. Als Verbindungskabel hab ich ein 40 pol Flachbandkabel aus dem PC genommen, die sollten ja 1:1 aufgebaut sein.
Auf den ersten Blick sehe ich da keinen Fehler. Die D0-D3 am LCD lasse ich immer offen. Ob es stört, sie auf GND zu legen weiß ich nicht. Viele probieren es so und scheitern, aber da man hier von den gescheiterten Versuchen hört, kann es sein, daß es klappt. - Hast du alle Verbindungen kontrolliert, ob sie a) Durchgang haben (am besten vom AVR-Pin zum LCD) und b) nicht mit Nachbarleitungen verbunden sind? - Wo setzt du welche Frequenz (F_CPU) und wie ist dein AVR wirklich getaktet? Man kann leicht ein kleines Testprogramm brennen in der Art:
1 | ...
|
2 | DDRD = 0xff; |
3 | while( "lockt das Weib" ) |
4 | {
|
5 | PORTD = 0xFF; |
6 | _delay_ms( 500 ); |
7 | PORTD = 0x00; |
8 | _delay_ms( 500 ); |
9 | }
|
10 | ...
|
und an einem Pin von PORTD eine LED mit Vorwiderstand anschließen; dann sollte die jede Sekunde einmal an- und ausgehen. Wenn der Takt richtig daneben liegt, merkt man das damit schnell.
imidin schrieb: > Als Verbindungskabel hab ich ein > 40 pol Flachbandkabel aus dem PC genommen, die sollten ja 1:1 aufgebaut > sein. Ja, die gehen. Wenn man sie richtig rum nimmt. Ausnahme: manche haben einen Pin blockiert im Stecker als Verpolungsschutz. Dann sollten sie nicht in die Buchse passen.
Klaus Wachtler schrieb: > Man kann leicht ein kleines Testprogramm brennen in der Art: ... "flashen" fehlt hier noch. Für diesen Schnelltest brauchst du gar kein eigenes Programm machen; man kann diese Schleife einfach vor die sonstige Hauptschleife in deinem Programm setzen und nach dem Test wieder löschen oder auskommentieren.
imidin schrieb: > Einzige Abweichung ist, dass die Datenbits DB0 - DB3 auf GND gelegt Und was passiert, wenn Daten vom Display gelesen werden? Da werden die Treiber auf DB[0..3] gar nicht mit einverstanden sein. Entscheidend ist, was das Datenblatt sagt.
Hi >Einzige Abweichung ist, dass die Datenbits DB0 - DB3 auf GND gelegt >sind, damit sie ein definiertes Potential haben. Lass den Blödsinn. Der Displaycontroller hat interne Pull-Up-Widerstände. MfG Spess
Michael schrieb: > Und was passiert, wenn Daten vom Display gelesen werden? Da werden die > Treiber auf DB[0..3] gar nicht mit einverstanden sein. Entscheidend ist, > was das Datenblatt sagt. Da ich RW auch dauerhaft auf GND gelegt hab und beabsichtige nur Daten an das Display zu senden, sollte das uninteressant sein. Mit einen Picaxe Controller hat es jedenfalls auf diese Art immer gut funktioniert :) Display ist ein LCD TC1602E-01 (Pollin). Klaus Wachtler schrieb: > - Hast du alle Verbindungen kontrolliert, ob sie > a) Durchgang haben (am besten vom AVR-Pin zum LCD) und > b) nicht mit Nachbarleitungen verbunden sind? Habe ich soeben extra nochmal gemacht. Direkt von Evalutionsboard bis direkt zum LCD. Ebenso auch die benachbarten Pins geprüft. Nichts gefunden, alles hatte durchgang wie nach Schaltplan gewollt. Klaus Wachtler schrieb: > - Wo setzt du welche Frequenz (F_CPU) und wie ist dein AVR > wirklich getaktet? Mit der Frage könnt ich etwas Hilfe benötigen :) Ich kann bei AVR Studio bei General Options eine Frequenz einstellen, wo ich auch den Controllertyp auswähle. Aber welche für den Atmega 8-16PU
1 | #include <avr/io.h> // (1) |
2 | |
3 | int main (void) { // (2) |
4 | |
5 | DDRD = 0xFF; // (3) |
6 | PORTD = 0x60; // (4) |
7 | |
8 | while(1) { // (5) |
9 | /* "leere" Schleife*/ // (6) |
10 | } // (7) |
11 | |
12 | /* wird nie erreicht */
|
13 | return 0; // (8) |
14 | }
|
Damit hab ich gerade die beiden LED´s angesteuert, also an der Übertragung zum µC sollte es nicht liegen.
Aber für das LCD würde ich den anderen Kram wie RxD und TxD und LEDs komplett abklemmen. Wie soll man denn Fehler finden, wenn keiner weiß, was du auf deinem Board wie gemacht hast?
Was kann ich denn tun, damit du du Fehler findest? Außer dir meine Hardware zu senden?
1 | // Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!
|
2 | |
3 | #ifndef F_CPU
|
4 | #define F_CPU 3686400
|
5 | #endif
|
Diese Option konnt ich bis jetzt noch nicht anpassen. Ich weiß leider nicht ob der Atmega8 auf dem Evalutionsboard mit internen oder externen Takt läuft und welche Frequenz eingestellt ist. Kann mir hier jemand weiterhelfen? Auf welche F_CPU muss ich das im lcd-routines.h anpassen?
Im PonyProg hab ich die Configuration und Securitybits ausgelesen und die sagen: CKSEL3 -> x CKSEL2 -> x CKSEL1 -> x CKSEL0 -> Steht der Haken jetzt für 0 oder 1? Im Datenblatt Atmeg8 steht für 0001 -> 1 Mhz 0010 -> 2 Mhz 0011 -> 4 Mhz 0100 -> 8 Mhz Kann ich davon ausgehen das mein Controller moment mit 1Mhz Takt läuft?
so viel ich weiss ist auf dem pollin board ein 12 MHz quarz eingebaut. du solltest mal kontrollieren, welche fuses gesetzt sind.
charly98 schrieb: > so viel ich weiss ist auf dem pollin board ein 12 MHz quarz eingebaut. > du solltest mal kontrollieren, welche fuses gesetzt sind. Ne ein 8 Mhz und zwei 16 Mhz Quarze.
Hab jetzt 1 Mhz eingestellt und das auch nochmal im Avr Studio und jetzt läuft es.
jeder quarz ist für den zugehörigen sockel vorgesehen. wenn du den avr in 1 MHz laufen lässt, läuft er mit eingebauten rc-kreis (d.h. der quarz würde gar nicht benötigt). schau dir mal an : http://www.mikrocontroller.net/articles/AVR_Fuses
charly98 schrieb: > jeder quarz ist für den zugehörigen sockel vorgesehen. wenn du den avr > in 1 MHz laufen lässt, läuft er mit eingebauten rc-kreis (d.h. der quarz > würde gar nicht benötigt). > schau dir mal an : > http://www.mikrocontroller.net/articles/AVR_Fuses Genau ich wollt ja auch nur erstmal den internen Clock benutzen. Da spielen die Quarze keine Rolle. Aus dem Datenblatt des Atmega8 hab ich folgendes entnommen. > For resonators, the maximum frequency is 8MHz with CKOPT unprogrammed and > 16MHz with CKOPT programmed. Ich möchte jetzt gerne mal auf die 16 Mhz umschalten und möchte diesmbezüglich die Fuses ändern. Für 8 Mhz würde ich CKSEL 3...1 auf 111 und und CKSEL0 auf 1 oder 0 (je nach start up time) ändern. CKOPT auf 1. Wie sieht das aber für 16 Mhz aus?
Die Einstellungen sind bei PonyProg etwas gewöhnungsbedürftig (Häkchen = 0) Ich verwende den mySmartUSB - Programmer. Kann ich nur empfehlen. Damit kann man direkt aus Bascom, AVR Studio, oder WINAVR programmieren und bei den beiden Ersteren auch die Fuses auslesen oder setzen. Ein Kontext über die Bedeutung der jeweiligen Einstellungen wird dann angezeigt.
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.