Forum: Mikrocontroller und Digitale Elektronik EA DOG-M 163 an ATMega32 in 4bit Modus


von Heiko F. (fuchsle)


Lesenswert?

Da ich bereits mehrere Tage mit der Suche beschäftigt bin, bin ich der 
Kapitulation langsam nahe.

Ich möchte ein DOG-M163 an einem ATMega32 im 4bit Modus betreiben. Habe 
bereits einige Beispiele versucht anzupassen, jedoch ohne Erfolg.

Die Pinbelegung:
D7  -> PC5
D6  -> PC4
D5  -> PC3
D4  -> PC2

E   -> PC6
RS  -> PC7

Programmiert wird mit dem AVR Studio 4.18 und einem STK500 in GCC.

Ist nicht mein erstes Projekt, aber gewinne das Gefühl als wäre es so.
Mit Bascom habe ich bereis einige Sachen am Laufen gehabt, nun möchte 
ich in C Programmieren.

Wäre sehr erfreut wenn mir jemand mit einem fuktionierenden Beispiel 
unter die Arme greifen könnte.

von James (Gast)


Lesenswert?

Ist die Initialisierung des Display-Controllers OK?
Wenn es nicht der "Standard-Controller" ist, kann es hieran
liegen. Im Datenblatt des Kontrollers ist die Initialisierung
i.d.R. recht gut beschrieben, im Datenblatt zum Display
oft recht dürftig.

Ich hatte da acuh schon mal ein Problem mit dem EA DIP204-4;
statt des HD44780 ist ein KS0073 verbaut, zwar "fast" 100% kompatibel,
aber eben nur fast....
Das Datenblatt zum Controller KS0073 half dann wenigsten weiter.

Nur so als Tip.

von Peter D. (peda)


Lesenswert?


von Herbert B. (braherb)


Angehängte Dateien:

Lesenswert?

Hallo

Ich betreibe es im 4-Bit ,3-Zeilen ,5-Volt Modus

Ich hoffe ich kann dir damit helfen.
Ich habe 2 Wochen gebraucht bis es ging es lag an der Initializierung
sie stimmt nicht mit dem Datenblatt überein.

Gruss
HB

von Peter D. (peda)


Lesenswert?

Herbert Brandl schrieb:
> Ich habe 2 Wochen gebraucht bis es ging es lag an der Initializierung
> sie stimmt nicht mit dem Datenblatt überein.

Vielleicht bist aber Du der Geisterfahrer und nicht die 10.000, die Dir 
entgegenkommen.
In Deinen Init fehlt das 2-malige Setzen des 8Bit-Mode mit 
entsprechenden Delays. So kanns nur zufällig gehen.


Peter

von Heiko F. (fuchsle)


Lesenswert?

Herbert Brandl schrieb:
> Hallo
>
> Ich betreibe es im 4-Bit ,3-Zeilen ,5-Volt Modus
>
> Ich hoffe ich kann dir damit helfen.
> Ich habe 2 Wochen gebraucht bis es ging es lag an der Initializierung
> sie stimmt nicht mit dem Datenblatt überein.
>
> Gruss
> HB

Ich danke vielmals für das Beispiel, aber ich komm nicht ganz klar 
damit.

../dogm.c:18: error: 'zeit' undeclared (first use in this function)

habe beide Dateien eingebunden. Bindest du noch etwas anderes ein?

von Herbert B. (braherb)


Lesenswert?

das ganze ist auch bei mir noch in der Versuchsphase deklariere die 
Variable "zeit" einfach als volatile unsigned int... in deinem 
Hauptprogramm
dann sehen wir weiter ob noch mehr fehler auftauchen..

von Herbert B. (braherb)


Lesenswert?

Die zeit wird dann noch in einem Timerinterrupt (1ms) hochgezählt...

#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
   TCNT0 = 0x06; //reload counter value
   zeit++;
}

Timerinit sieht so aus ....für atmega128 16Mhz

//TIMER0 initialize - prescale:32
// WGM: Normal
// desired value: 1mSec
// actual value:  1,000mSec (0,0%)
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 ASSR  = 0x00; //set async mode
 TCNT0 = 0x06; //set count
 OCR0  = 0xFA;
 TCCR0 = 0x03; //start timer
}

Die interrupt Handler musst du für GCC anpassen ich programmier mit 
ICCAVR

von huibu (Gast)


Angehängte Dateien:

Lesenswert?

Anbei ein funktionierendes, sehr simples Beispiel fuer den 4 bit Modus 
mit 5V und dreizeiligem Display.

Wenn der Code nicht out of the box funktioniert, ist es ein Hardware 
Problem.

von Heiko F. (fuchsle)


Lesenswert?

huibu schrieb:
> Anbei ein funktionierendes, sehr simples Beispiel fuer den 4 bit Modus
> mit 5V und dreizeiligem Display.
>
> Wenn der Code nicht out of the box funktioniert, ist es ein Hardware
> Problem.

Hallo huibu,

ich danke dir für das Beispiel, jedoch kann es meiner Meinung nach nicht 
funktionieren, da ich andere PINS /PORT benutze.
Natürlich kann ich die definierten PINS einfach anderst definieren. Wie 
auch den genutzten PORT, jedoch ist in meiner Hardware der Port nicht 
von 0 bis 3 sondern von 2 bis 5 genutzt.
Wenn ich es soweit richtig verstanden habe nutzt dein Programm aber im 
angegebenen PORT die Bits 0 bis 3, wie kann ich dies ändern?

von tombaer (Gast)


Lesenswert?

Hi Heiko!

Du hast Dein Display am Port C des Atmega32 angeschlossen.

Dort sitzt aber auch das JTAG-Interface.

Ich wage es kaum zu fragen: hast Du oder hast Du nicht - das 
JTAG-Interface ausgeschaltet?

Wenn nicht, so lassen sich Deine Probleme gut erklären.

Gruß Tom

von Heiko F. (fuchsle)


Lesenswert?

Hallo Tom,

ich denke mich darf man das schon noch fragen, aber ich habe das 
JTAG-Interface ausgeschaltet.

Gruß Heiko

von Heiko F. (fuchsle)


Lesenswert?

Wäre zumindest die PIN definition so korrekt?
1
//  LCD E  <--> Pin C6
2
#define PIN_ENABLE   PC6
3
//  LCD RS <--> Pin C7
4
#define PIN_RS     PC7
5
//  LCD DB4-DB7 <-->  PORTD Bit PD2-PD5
6
#define LCD_PORT      PORTC
7
#define LCD_DDR       DDRC
8
#define LCD_DB        PC2

von TestX .. (xaos)


Lesenswert?

wieso quählst du dich mitm 4bit modus, nimm doch einfach SPI ?
kann dir bei bedarf die fertigen routinen für nen 3zeiliges dog-m 
display mit hardware spi geben (ist für nen at90can128..ggf. musst du 
die spi register anpassen)

von Heiko F. (fuchsle)


Lesenswert?

Ich habe eine gegebene Hardware welche ich mit eigener Software 
betreiben möchte. Daher weiß ich nur, dass es geht, aber nicht wie. Und 
ich verliere langsam echt die Gedult, denn alles was ich versuche 
scheitert irgendwie. Ich glaube ich versuche mich in einem neuen Hobby, 
beispielsweise Bananen schälen, sollte einfacher sein :-(

von bix (Gast)


Lesenswert?

Heiko Fuchs schrieb:
> Die Pinbelegung:
> D7  -> PC5
> D6  -> PC4
> D5  -> PC3
> D4  -> PC2

Heiko Fuchs schrieb:
> #define LCD_DB        PC2

Du hast die Datenleitungen etwas ungünstig an die Portleitungen 
angeschlossen. Besser wären die Portbits 0..3 oder 4..7.

So musst Du die Daten vor der Ausgabe zum LCD jeweils um zwei Positionen 
nach rechts bzw. links schieben.

Was willst Du mit dem #define erreichen?

Zeig doch mal deinen Init-Code.

von Peter D. (peda)


Lesenswert?

Du kannst ja einfach Code für beliebige Pins nehmen:

http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip

Oder nimm SPI, geht auch über beliebige Pins.


Peter

von Dominik M. (lauso)


Lesenswert?

Hallo Heiko,
ich habe selbst die Textdisplays von EA betrieben. Mir fällt auf das Du 
den R/W nicht angeschlossen hast. Laut Datenblatt ist dies aber 
erforderlich. Ansonsten überprüf mal Deine Bias Einstellungen. Ich hatte 
da damals auch meine Probleme mit.
1
void displayinit (void)
2
{   
3
// LCD module initialization 
4
delay_ms(200);
5
lcd_init(16); 
6
_lcd_write_data(0x29);          //4bit Instalationstabelle 1 (Function Set)
7
delay_us(40); 
8
_lcd_ready();
9
_lcd_write_data(0x1C);         // BS=1:1/4 FX=0
10
delay_us(40);
11
_lcd_ready();
12
_lcd_write_data(0x51);          //Ion=0 Boster=0 C5=0 C4=1
13
delay_us(40);
14
_lcd_ready();
15
_lcd_write_data(0x6A);           //Fon=1 Rab=(010)
16
delay_us(40); 
17
_lcd_ready();
18
_lcd_write_data(0x78);    //Contrast=(1000)
19
delay_us(40); 
20
_lcd_ready();
21
_lcd_write_data(0x0C);    // Display an Cursor aus
22
delay_us(40);                                          
23
_lcd_ready();
24
_lcd_write_data(0x01);          // Clear Display
25
delay_us(40);       
26
_lcd_ready();
27
_lcd_write_data(0x06);     // Entry Mode
28
delay_us(40);    
29
lcd_clear(); 
30
_lcd_write_data(0x25);          //4bit Instalationstabelle 1 (Function Set)  Einzeilig DH
31
delay_us(40); 
32
}
Ansonsten habe ich hier nochmal meine Initialisierung.
Meiner Meinung nach sind das die Besten Displays die ich kenne weil Sie 
so schön klein sind. Zudem die Möglichkeit den Kontrast zu verändern.
Heute habe ich Graphische Displays von denen die sind noch eine Spur 
genialer.

Gruß

Lauso

von Dietmar (Gast)


Lesenswert?

> Meiner Meinung nach sind das die Besten Displays

- Die Kontrastregelung der 16x3 ist Mist. Der Kontrast sollte, was extra 
unterstrichen wird, temperaturkompensiert sein. Aber zwischen 60-70 Grad 
kann man fast nichts mehr erkennen, wenn man den Kontrast bei 
Umgebungstemperatur eingestellt hat. Die sollten als 40-50 Grad-Displays 
verkauft werden, das wäre ehrlicher.

- Die Schutzfolie wird immer noch auf den tausendstel Millimeter 100% 
deckungsgleich mit der Silberfolie (transreflektive Version) 
geschnitten. So ein Schwachsinn. Es passiert mir immer wieder, dass ich 
die Silberfolie anknabbere, obwohl ich nur die Schutzfolie abziehen 
will.

- Ab und zu schlechte Fertigungsqualität, z.B. Luftblase im Glas im 
nicht sichtbaren Anschlussbereich.

- Weil Backlight und Display getrennt sind, gibt es dazwischen einen 
minimalen Spalt, der dankbar die Fluxdämpfe und Isopropanol aufzusaugen 
scheint (Kapillarwirkung? Oder ist es die papierähnliche Schicht auf dem 
Backlight zur Streuung?). Wenn man, wie gefordert, das Backlight von 
oben verlötet und noch mal mit Isopronol zur Reinigung dran geht, oder 
wenn man in der Nähe lötet, dann kann sich dort Isop./Flux reinsaugen 
und das Display kriegt eine Abschattung, die nicht mehr verschwindet. 
Auf diese Weise habe ich drei Displays massakriert - bis mir aufgegangen 
ist, dass Reichelt keine Displays mit Abschattung liefert, sondern dass 
ein Montageproblem vorliegt.

- Und natürlich viel zu teuer. Wieso das Backlight mit 4 orangen LEDs 
satte 6,60 EUR billiger ist, als dasselbe Backlight mit 4 weissen LEDS 
wird nur der Buchhalter erklären können. Für den Aufpreis für 4 weisse 
LED kann man bei IKEA eine GRÖNÖ-Tischlampe kaufen und mit dem Display 
an die Kunden ausliefern und noch Geld sparen :)

von Heiko F. (fuchsle)


Lesenswert?

Hallo zusammen,

ein Kollege hat sich heute die Zeit genommen seine Routine auf meine 
Bedürfnisse anzupassen. Dadurch war es nun möglich das Display zum Leben 
zu erwecken.
Aber auch zusammen mussten wir die Hardware anpassen, die Belegung des 
Flachbandkabels welche µC und Disp verbinden, um die Anordnung der Pins 
in eine vernünftige oder ansteuerbare Reihenfolge zu bekommen.
So sieht also die neue Belegung aus:

PC2 --> RS
PC3 --> E
PC4 --> D7
PC5 --> D6
PC6 --> D5
PC7 --> D4

Sicher wäre es auch möglich mit PC2 bis PC5 die Daten heraus zu 
schreiben, aber hierbei war der Aufwand das Kabel zu ändern wesentlich 
geringer, als die entsprechende Änderung in der selbst (von ihm) 
geschriebenen Rutine.

Also einen Dank an Alle die mir auf die Sprünge geholfen haben.

@Dietmar
Vielen Dank für die Infos, werde nun in meinem Projekt den Kontrast 
einstellbar machen, da ich evtl. Auch Temperaturen über 50°C zu erwarten 
habe.

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.