www.mikrocontroller.net

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


Autor: Heiko Fuchs (fuchsle)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: James (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Herbert B. (braherb)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Heiko Fuchs (fuchsle)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Herbert B. (braherb)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Herbert B. (braherb)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: huibu (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Heiko Fuchs (fuchsle)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: tombaer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Heiko Fuchs (fuchsle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tom,

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

Gruß Heiko

Autor: Heiko Fuchs (fuchsle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre zumindest die PIN definition so korrekt?
//  LCD E  <--> Pin C6
#define PIN_ENABLE   PC6
//  LCD RS <--> Pin C7
#define PIN_RS     PC7
//  LCD DB4-DB7 <-->  PORTD Bit PD2-PD5
#define LCD_PORT      PORTC
#define LCD_DDR       DDRC
#define LCD_DB        PC2

Autor: Andi ... (xaos)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Heiko Fuchs (fuchsle)
Datum:

Bewertung
0 lesenswert
nicht 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 :-(

Autor: bix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dominik M. (lauso)
Datum:

Bewertung
0 lesenswert
nicht 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.
void displayinit (void)
{   
// LCD module initialization 
delay_ms(200);
lcd_init(16); 
_lcd_write_data(0x29);          //4bit Instalationstabelle 1 (Function Set)
delay_us(40); 
_lcd_ready();
_lcd_write_data(0x1C);         // BS=1:1/4 FX=0
delay_us(40);
_lcd_ready();
_lcd_write_data(0x51);          //Ion=0 Boster=0 C5=0 C4=1
delay_us(40);
_lcd_ready();
_lcd_write_data(0x6A);           //Fon=1 Rab=(010)
delay_us(40); 
_lcd_ready();
_lcd_write_data(0x78);    //Contrast=(1000)
delay_us(40); 
_lcd_ready();
_lcd_write_data(0x0C);    // Display an Cursor aus
delay_us(40);                                          
_lcd_ready();
_lcd_write_data(0x01);          // Clear Display
delay_us(40);       
_lcd_ready();
_lcd_write_data(0x06);     // Entry Mode
delay_us(40);    
lcd_clear(); 
_lcd_write_data(0x25);          //4bit Instalationstabelle 1 (Function Set)  Einzeilig DH
delay_us(40); 
} 
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

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Heiko Fuchs (fuchsle)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.