Forum: Mikrocontroller und Digitale Elektronik Evolution Board + ATMEGA 8 + WinAVR + LCD 4Bit


von imidin (Gast)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

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.

von imidin (Gast)


Lesenswert?

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

von imidin (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

Und die natürlich vollkommen korrekte Beschaltung sieht wie aus?
Welche Jumper sind auf dem Board gesetzt?

von imidin (Gast)


Angehängte Dateien:

Lesenswert?

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.

von imidin (Gast)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von imidin (Gast)


Lesenswert?

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

von imidin (Gast)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

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?

von imidin (Gast)


Lesenswert?

Was kann ich denn tun, damit du du Fehler findest? Außer dir meine 
Hardware zu senden?

von imidin (Gast)


Lesenswert?

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?

von imidin (Gast)


Lesenswert?

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?

von charly98 (Gast)


Lesenswert?

so viel ich weiss ist auf dem pollin board ein 12 MHz quarz eingebaut.
du solltest mal kontrollieren, welche fuses gesetzt sind.

von imidin (Gast)


Angehängte Dateien:

Lesenswert?

Hier die Einstellungen für die Fuses.

von imidin (Gast)


Lesenswert?

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.

von imidin (Gast)


Lesenswert?

Hab jetzt 1 Mhz eingestellt und das auch nochmal im Avr Studio und jetzt 
läuft es.

von charly98 (Gast)


Lesenswert?

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

von imidin (Gast)


Lesenswert?

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?

von charly98 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.