Evolution Board + ATMEGA 8 + WinAVR + LCD 4Bit

Gast #2340042
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
#2340066
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.
Gast #2340082
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
Gast #2340101
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.
Angehängte Dateien:
Gast #2340235
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.
Angehängte Dateien:
Gast #2340236
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.
#2340251
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.
Gast #2340274
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
Gast #2340704
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
Gast #2340736
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.
Gast #2340807
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?
Gast #2340866
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?
Gast #2341611
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?
Gast #2342301
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren