www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD EA DOG-M und Bascom


Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat schomal jemand mal versucht die EA DOG-M LCD´s anzusteuern. So recht
will das nicht klappen. Normale LCD-Routinen scheinen da nicht zu
funktionieren

Autor: Dog-M (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ansteuerbeispiel würde mich auch interessieren. Es ist offenbar ein
neuer LCD Controller

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ein ST7036 - Datenblatt hier:
http://www.electronic-assembly.de/eng/pdf/zubehoer...

Allerdings (Zitat aus Datenblatt)

  "Instruction compatible to ST7066U and KS0066U and HD44780"

Daher sollten normale Ansteuerungsroutinen funktionieren, aber
vielleicht steht ja irgendwo im Datenblatt was hilfreiches.

Vielleicht ist auch dieser Hinweis hilfreich:

  "Bitte beachten Sie, dass aufgrund der COG-Technik die
  Strombelastbarkeit der Ausgänge begrenzt ist. Es kann
  dadurch bei größerer Buslast zu Signalverschleifungen
  und unsauberen Pegeln kommen.
  Im Zweifelsfall sind zusätzliche Pull-Down Widerstände (8051)
  erforderlich, oder es müssen zusätzliche Waits/NOP's
  eingefügt werden."


Interessant ist übrigens der ST7036I - der hat 'ne I²C-Schnittstelle.
Das ist doch mal 'ne wirkliche Neuerung.

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut Display Beschreibung soll es aber SPI sein. Alles etwas merkwürdig.
So recht funktionieren tuts immer noch nicht im 4 Bit-Modus.

Autor: Martin Kirschke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ihr habt recht: es funzt nicht. Ich bekomme zwar einen
Text (2 Zeilen / 16 Zeichen) dargestellt aber die ersten 10 Zeichen
gehen verloren und nach dem 16ten gibts einen Umbruch - also
klappt auch ein Workaround nicht so recht. Irgendwie muss die
Cursor-Baseadresse eingestellt werden, da durch auto-increment
der LCD-Controller alles selber in der Hand hat. Merkwürdig,
eigentlich sollte durch ein Clear Disay automatisch die erste
darstellbare Position gesetzt werden. (Habe mich an die
Initialisierungsvorgaben aus dem Datenblatt gehalten (Seite 41)).

Autor: Martin Kirschke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es funzt! Wenn nach der Beschreibung des LCD-Controller ST7036.pdf
Seite 42 initialisiert wird, dann sollten auch die Zeichen korrekt
sichtbar sein. Leider geht das Assembler-Beispiel auf Seite 42 über das
hinaus, was auf Seite 41 als Initialisierung aufgeführt wird.
Besonders wichtig ist das Timing für Clear Display (2 ms Delay) und
Return Home (2 ms Delay). Wenn da etwas schief geht gibts haessliche
Effekte.

Autor: Stefan Siedler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche das Display mit C zu betrieben, habt ihr eventuell einen
funktionierenden C-Code mit dem ich das mal ausprobieren könnte? Wenn
nicht würde ich auch gerne mal einen Blick auf den Assembler-Code
werfen, weil ich kurz davor bin das Teil aus dem Fenster zu schmeißen.

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe bereits einen eigenen Thraed eröffnet,

gibt es schon neuigkeiten, im bezug auf ansteuerung des DOGM in C ?

Gruß Toby

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

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Also bei mir tut sich überhaupt nichts. Versuche das Display
auch in C anzusteuern. Kein Blinken, gar nichts.

Hab die I/Os und Enable Leitungen per Oszi herausgemessen.
Das scheint OK zu sein.

Das Busy Flag muss doch nicht ausgelesen werden, oder?
Ich kann doch genauso gut auch eine Zeit abwarten?

Verwende das Display im 4-Bit Mode.
Laut Datenblatt werden bei der Initialisierung der ersten vier Befehle
nur 4Bits übertragen. Bei den weiteren Befehlen ein ganzes
Byte (dabei die oberen 4Bits als Daten und die unteren 4 Bits als
don't care). Hab ich da irgendwo einen Denkfehler?

Hab zusätzliche Zeiten und NOPs eingefügt; ZWECKLOS !

Hoffe Ihr habt mehr Glück!
Wäre super wenn es hier ein paar Vorschläge in C geben würde :)

Grüße

Rainer

Autor: Tobias Tetzlaff (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe das DOGM 163 am laufen.

Ich habe die Ulrich Radig lib umgeschrieben.

Könnt ja mal reischauen!
Aber bitte entschuldigt die Schreibweise im Main.
Ist halt nur der Anfang meines Projektes.

Ach, wie kann man eigentlich einen AD Wert umrechnen, und mit 2
Kommastellen ausgeben?

zB. Die Temperatur mit einer Kommastelle,
die Spannung mit 2 Kommastellen ?

Und dann habe ich da noch eine KTY13-5 drauf.
Wie kann ich damit die Temperatur berechnen?
Wie geht das mit einer nicht linearen Wiederstands Kurve,
und deren berechnung?

Das main.c sieht in etwa so aus :

#include <main.h>
#include <lcd.c>
#include <avr/signal.h>
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr\pgmspace.h>
#include <avr/iom128.h>

volatile char Software_Zaehler = 0;
volatile char AD_Kanal_Zaehler = 0;
volatile int FP_Chk = 0;
volatile int RC_Sply = 0;
volatile int ECU_Sply = 0;
volatile int AMB_Temp = 0;
volatile int EGT = 0;
volatile int Oil_Temp = 0;
volatile int Aux1_Emk = 0;
volatile int Anlg_Aux = 0;

volatile int FP_Chk_1 = 0;
volatile int RC_Sply_1 = 0;
volatile int ECU_Sply_1 = 0;
volatile int AMB_Temp_1 = 0;
volatile int EGT_1 = 0;
volatile int Oil_Temp_1 = 0;
volatile int Aux1_Emk_1 = 0;
volatile int Anlg_Aux_1 = 0;

/* Initialisierung */

void
ioinit (void)
{
/* Ein-/Ausgänge 1 Ausgang, 0 Eingang */

  //DDRA = 0xFF;    // Port Ausgang
  //PORTA = 0x00;    // Port alle Low
  //PORTA wird mit der lcd_init(LCD_DISP_ON); gesetzt

  DDRB = 0xFF;    // Port Ausgang
  PORTB = 0x0D;    // Port keine Pullup / High PB0-PB2-PB3

  DDRC = 0x00;    // Port Eingang
  PORTC = 0xFF;    // Port Pullups

  DDRD = 0x00;    // Port Eingang
  PORTD = 0xFF;    // Port Pullups

  DDRE = 0x00;    // Port Eingang
  PORTE = 0xFF;    // Port Pullup

  DDRF = 0x00;    // Port Eingang AD Wandler
  //PORTF = 0xFF;    // Port Pullup

  DDRG = 0x00;    // Port Eingang
  PORTG = 0x1F;    // Port Pullup


/* Timer1 MCU/1024 */
  TCCR1B = _BV (CS12) | _BV (CS00);

/* Timer1 Overflow */
  TIMSK = _BV (TOIE1);

}

void
adinit (void)
{
// ADEN enable, ADSC start, ADFR free running, ADSP2,1,0 MCU/128
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);

}

//Hauptprogramm
int main (void)
{
  //Initzialisierung
  ioinit();  //Ports und Timer setzen
  adinit();  //AD Wandler setzen

  //Initzialisierung des LCD - Displays
  LCD_Init();

  // 1. Zeile 5x16 Dots, 2. Zeile 5x8 Dots
  Write_LCD(0x2E,0);  //Function set DH=1,N=1,Tabelle 1,0
  Write_LCD(0x18,0);  //Tabelle 1,0, UD=1

  LCD_Clear ();
  LCD_Print(0,4,"Irgendwas");
  LCD_Print(1,3,"und nochwas");

  //Schleife
  for (int a=0;a<30000;a++)
  {
  for (int b=0;b<10000;b++);
  }

  LCD_Clear ();

  sei ();

  //Hauptprogramm läuft ständig in einer schleife und macht nichts
  for(;;);
}

SIGNAL(SIG_OVERFLOW1)
{

  if(AD_Kanal_Zaehler > 4)
  {
    AD_Kanal_Zaehler = 0;
  }

  AD_Kanal_Zaehler ++;

  switch (AD_Kanal_Zaehler) //welcher AD Kanal soll gelesen werden
  {
   //case 1 :
    //ADMUX = 0x40;  //AD Kanal 0  FP_Chk
    //FP_Chk = 0;

  //break;
   case 1 :

    ADMUX = 0x41;  //AD Kanal 1  RC_SPLY
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single
conversion"
    while(!(ADCSRA & (1<<ADIF)));   // auf Abschluss der Konvertierung
warten (ADIF-bit)
    RC_Sply = ADC;
    //ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
    RC_Sply_1 = RC_Sply;
    //RC_Sply /= 1.69;  // V errechnen

  break;
   case 2 :

    ADMUX = 0x42;  //AD Kanal 2  ECU_Sply
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single
conversion"
    while(!(ADCSRA & (1<<ADIF)));   // auf Abschluss der Konvertierung
warten (ADIF-bit)
    ECU_Sply = ADC;
    //ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
    ECU_Sply_1 = ECU_Sply;
    //ECU_Sply /= 1.69;  // V errechnen

  break;
   case 3 :

    ADMUX = 0x43;  //AD Kanal 3  AMB_Temp
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single
conversion"
    while(!(ADCSRA & (1<<ADIF)));   // auf Abschluss der Konvertierung
warten (ADIF-bit)
    AMB_Temp = ADC;
    //ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
    AMB_Temp_1 = AMB_Temp;
    //AMB_Temp /= 1.69;  // °C errechnen

  break;
  case 4 :

    ADMUX = 0x44;  //AD Kanal 4  EGT
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single
conversion"
    while(!(ADCSRA & (1<<ADIF)));   // auf Abschluss der Konvertierung
warten (ADIF-bit)
    EGT = ADC;
    //ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
    EGT_1 = EGT;

  break;
   case 5 :

    ADMUX = 0x45;  //AD Kanal 5  Oil_Temp
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single
conversion"
    while(!(ADCSRA & (1<<ADIF)));   // auf Abschluss der Konvertierung
warten (ADIF-bit)
    Oil_Temp = ADC;
    //ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
    Oil_Temp_1 = Oil_Temp;

  break;
   //case 7 :
    //ADMUX = 0x46;  //AD Kanal 6  Aux1_Emk
    //Aux1_Emk = 0;

  //break;
   //case 8 :
    //ADMUX = 0x47;  //AD Kanal 7  Anlg_Aux
    //Anlg_Aux = 0;

  //break;
  }

  // LCD Init 3 Zeilen 5x8 Dots
  Write_LCD(0x29,0);  //Function set DH=0,N=1,Tabelle 1,0

  LCD_Clear ();

  LCD_Print(0,0,"AD Wert:    %4i",ADC);
  LCD_Print(1,0,"AD Kanal:      %1i",AD_Kanal_Zaehler);
  //LCD_Print(2,0,"AD Wert: %5i",ADC);

  PORTB  |= (1 << PB0); // rote LED aus Bit setzen
  PORTB  |= (1 << PB2); // gelbe LED aus Bit setzen
  PORTB  |= (1 << PB3); // grüne LED aus Bit setzen

  switch (AD_Kanal_Zaehler) //welcher AD Kanal soll gelesen werden
  {
    //case 1 :
    //LCD_Print(2,0,"Fuel Pump Check");
      //PORTB  &= ~(1 << PB0); // rote LED an Bit löschen
      //PORTB  |= (1 << PB2); // gelbe LED aus Bit setzen
      //PORTB  |= (1 << PB3); // grüne LED aus Bit setzen
  //break;
  case 1 :
    //LCD_Print(2,0,"RC Spannung");

    RC_Sply_1 /= 0.646;  // V errechnen
    LCD_Print(2,0,"RC U:     %3i mV",RC_Sply_1);
      PORTB  |= (1 << PB0); // rote LED aus Bit setzen
      PORTB  |= (1 << PB2); // gelbe LED aus Bit setzen
      PORTB  &= ~(1 << PB3); // grüne LED an Bit löschen
  break;
  case 2 :
    //LCD_Print(2,0,"ECU Spannung");

    ECU_Sply_1 /= 0.361;  // V errechnen
    LCD_Print(2,0,"ECU U:   %4i mV",ECU_Sply_1);
      PORTB  |= (1 << PB0); // rote LED aus Bit setzen
      PORTB  |= (1 << PB2); // gelbe LED aus Bit setzen
      PORTB  &= ~(1 << PB3); // grüne LED an Bit löschen
  break;
  case 3 :
    //LCD_Print(2,0,"AMB Temperatur"AMB_Temp);

    AMB_Temp_1 /= 1.477;  // °C errechnen
    LCD_Print(2,0,"AMB Temp:  %2i%cC",AMB_Temp_1,0xDF);  //
Wert(int),°(c 0xDF),C, temp_2,0xDF,C
      PORTB  |= (1 << PB0); // rote LED aus Bit setzen
      PORTB  |= (1 << PB2); // gelbe LED aus Bit setzen
      PORTB  &= ~(1 << PB3); // grüne LED an Bit löschen
  break;
  case 4 :
    LCD_Print(2,0,"EGT");
      PORTB  |= (1 << PB0); // rote LED aus Bit setzen
      PORTB  |= (1 << PB2); // gelbe LED aus Bit setzen
      PORTB  &= ~(1 << PB3); // grüne LED an Bit löschen
  break;
  case 5 :
    LCD_Print(2,0,"Oil Temperatur");
      PORTB  |= (1 << PB0); // rote LED aus Bit setzen
      PORTB  |= (1 << PB2); // gelbe LED aus Bit setzen
      PORTB  &= ~(1 << PB3); // grüne LED an Bit löschen
  break;
  //case 7 :
    //LCD_Print(2,0,"AUX 1 EMK");
      //PORTB  &= ~(1 << PB0); // rote LED an Bit löschen
      //PORTB  |= (1 << PB2); // gelbe LED aus Bit setzen
      //PORTB  |= (1 << PB3); // grüne LED aus Bit setzen
  //break;
  //case 8 :
    //LCD_Print(2,0,"Analog AUX");
      //PORTB  &= ~(1 << PB0); // rote LED an Bit löschen
      //PORTB  |= (1 << PB2); // gelbe LED aus Bit setzen
      //PORTB  |= (1 << PB3); // grüne LED aus Bit setzen
  //break;
  }

  //int temp_1 = 0;
  //int temp_2 = 0;

  //temp_1 = ADC;
  //temp_1 /= 1.69;

  //temp_2 = ADC;
  //temp_2 /= 17;

  //batt_1 = ADC/0.0635;
  //batt_1 = ADC/0.633;    // mV

  //batt_11 = ADC / 63;    // V ganze Zahl
  //batt_12 = ADC % 63;      // V Komma Stellen

  //batt_2 = ADC/0.633;    // mV

  //batt_21 = ADC / 63;    // V ganze Zahl
  //batt_22 = (ADC % 63)/10;    // V Komma Stellen

  //temp_1 = ADC % 62;
  //batt_2 = (batt_1 % 6333) / 100;    // V Komma Stellen


  //temp_1 = ADC ;

  // 3 Zeilen 5x8 Dots
  //Write_LCD(0x29,0);  //Function set DH=0,N=1,Tabelle 1,0

  //LCD_Print(0,0,"AD Wert: %5i",ADC);
  //LCD_Print(1,0,"Temp Wert: %3i",temp_1);
  //LCD_Print(2,0,"Temperatur: %2i C",temp_2);

  //LCD_Print(2,0,"Temperatur: %2i%cC",temp_2,0xDF);  // Wert(int),°(c
0xDF),C, temp_2,0xDF,C

  for (int a=0;a<6000;a++)
    {
    for (int b=0;b<2000;b++);
    }

}


Gruß Toby

Autor: Robert Mayr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

habe hier einmal meine Init-Routine in BASCOM-AVR gepostet. So ganz
glücklich bin ich aber mit dem Diaplay auch nicht.
Ich habe auch die serielle Funktion erfolgreich erprobt. Nachteilig ist
(wenn man in BASCOM programmiert) daß die schönen LCD Befehle nicht
funktionieren. Deshalb bin ich wieder zum 4 Bit Modus zurückgegangen.
Es funktionieren CLS und UPPERLINE sowie LOCATE. Mehr habe ich noch
nicht ausprobiert.

Ab und zu verrutscht der Text um ein Zeichen nach rechts - weiß jemand
warum?

Viele Grüße

Robert Mayr

'--------------------------------------------------------------------

'***************** Initialisiere LC-Display (16*3) ******************

'--------------------------------------------------------------------

Initlcd:

En = 0 : Rs = 0

For A = 1 To 3

   Portd = &B00110000                                       '&3

   Gosub Enbl

   Waitms 2

Next A

For A = 1 To 2

   Portd = &B00100000                                       '&2

   Gosub Enbl

   Waitms 1

Next A

'--------------------------------------------------------------------

Portd = &B10010000                                          '&9

Gosub Enbl

Waitms 1

'--------------------------------------------------------------------

Portd = &B00010000                                          '&1

Gosub Enbl

Waitms 1

Portd = &B11010000                                          '&D

Gosub Enbl

Waitms 1

'--------------------------------------------------------------------

Portd = &B01010000                                          '&5

Gosub Enbl

Waitms 1

Portd = &B00000000                                          '&0

Gosub Enbl

Waitms 1

'--------------------------------------------------------------------

Portd = &B01100000                                          '&6

Gosub Enbl

Waitms 1

Portd = &B11000000                                          '&C

Gosub Enbl

Waitms 1

'--------------------------------------------------------------------

Portd = &B01110000                                          '&7

Gosub Enbl

Waitms 1

Portd = &B11000000                                          '&C

Gosub Enbl

Waitms 1

'--------------------------------------------------------------------

Portd = &B00000000                                          '&0

Gosub Enbl

Waitms 1

Portd = &B11110000                                          '&F

Gosub Enbl

Waitms 1

'--------------------------------------------------------------------

Portd = &B00000000                                          '&0

Gosub Enbl

Waitms 1

Portd = &B00010000                                          '&1

Gosub Enbl

Waitms 1

'--------------------------------------------------------------------

Portd = &B00000000                                          '&0

Gosub Enbl

Waitms 1

Portd = &B01100000                                          '&6

Gosub Enbl

Waitms 1

Cursor Off Noblink                                          'hide
cursor

Return

'----------------- Initialisierung fertig ---------------------------

Enbl:

En = 1                                                      'mach EN
1

En = 0                                                      'und
gleich wieder 0

Return

Autor: Holger Bruns (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein DOG-M 162 bekomme ich unter Bascom im 4bit modus und 5V einfach
nicht zum laufen. Das Display zeigt einfach nichts an. Alle möglichen
Inits durchprobiert - nichts. Im SPI Modus hatte ich manchmal ein paar
wirre zeichen, aber sonst nichts. Gibts evtl. schon was neues für
Bascom ?

@Robert Mayr:

Kannst Du mal den gesamten Code hier reinstellen ? Bzw. den Code wie Du
Dein DOG-M über SPI initialiert hast ? Ich dreh bald durch :-)

Danke Holger

Autor: Holger Bruns (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert doch perfekt :-)

$regfile = "m168def.dat"
'ATmega168
$crystal = 1000000                                          'Quarz: 1
MHz
Config Portc = Output
'DOG 162, 4bit, 5 Volt
'Portc.0 = D4
'Portc.1 = D5
'Portc.2 = D6
'Portc.3 = D7
'Portc.4 = E
'Portc.5 = RS

' ---------------------- LCD DOG162 Init  ---------------------
Dog:
 Portc = &B00000011 : Gosub Enbl : Waitms 2    ' dummy Funktion Set
 Portc = &B00000011 : Gosub Enbl : Waitms 2    ' dummy Funktion Set
 Portc = &B00000011 : Gosub Enbl : Waitms 2    ' dummy Funktion Set
 Portc = &B00000010 : Gosub Enbl : Waitms 1    ' dummy Funktion Set
 Portc = &B00000010 : Gosub Enbl : Waitms 1    ' Funktion Set 1
 Portc = &B00001001 : Gosub Enbl : Waitms 1    ' Funktion Set 2
 Portc = &B00000001 : Gosub Enbl : Waitms 1    ' Bias 1
 Portc = &B00001100 : Gosub Enbl : Waitms 1    ' Bias 2
 Portc = &H5 : Gosub Enbl : Waitms 1           'Power/Icon/Contrast 1
 Portc = &H2 : Gosub Enbl : Waitms 1           'Power/Icon/Contrast 2
 Portc = &H6 : Gosub Enbl : Waitms 1           ' Follower control 1
 Portc = &H9 : Gosub Enbl : Waitms 1           ' Follower control 2
 Portc = &H7 : Gosub Enbl : Waitms 1           ' Contrast Set 1
 Portc = &H4 : Gosub Enbl : Waitms 1           ' Contrast Set 2
 Portc = &B00000000 : Gosub Enbl : Waitms 1    ' Display On 1
 Portc = &B00001111 : Gosub Enbl : Waitms 1    ' Display On 2
 Portc = &B00000000 : Gosub Enbl : Waitms 1    ' Clear Display 1
 Portc = &B00000001 : Gosub Enbl : Waitms 2    ' Clear Display 2
 Portc = &B00000000 : Gosub Enbl : Waitms 1    ' Entry Mode Set 1
 Portc = &B00000110 : Gosub Enbl : Waitms 1    ' Entry Mode Set 2
 Portc = &B00000000
Return
Enbl:                                          ' Enable ein
 Set Portc.4
 Waitus 400                                    ' Enable aus
 Reset Portc.4
Return

Autor: Holger Bruns (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Etwas kürzer:

$regfile = "m168def.dat"          'ATmega168
$crystal = 1000000                'Quarz: 1 MHz
Config Portc = Output

'DOG 162, 4bit, 5 Volt
'Portc.0 = D4
'Portc.1 = D5
'Portc.2 = D6
'Portc.3 = D7
'Portc.4 = E
'Portc.5 = RS

Dog:
 Restore Da
 For Wertx = 1 To 20
  Read Balken
  Portc = Balken : Waitms 2
  Set Portc.4
  Waitus 400
  Reset Portc.4
 Next Wertx
Return

Da:
Data &H3 , &H3 , &H3 , &H2 , &H2 , &H9 , &H1 , &HC , &H5 , &H2
Data &H6 , &H9 , &H7 , &H4 , &H0 , &HF , &H0 , &H1 , &H0 , &H6

Autor: Robert Mayr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An Holger,

also nachfolgend der Code zur seriellen Ansteuerung. Sorry, daß es
etwas gedauert hat. War längere Zeit unterwegs.

Grüße

Robert

'--------------------------------------------------------------------

'  Autor: Robert Mayr

'--------------------------------------------------------------------

$regfile = "m8def.dat"

$crystal = 1000000

'--------------------------------------------------------------------

'******* Konfiguration PortB 0,1,2 zur LC-Ausgabe mit DOGM162 *******

'--------------------------------------------------------------------

Ddrb = &B00000111                                           'Pin PB0
und PB1 und PB2 ist Ausgang (E+RS+CSB)

Portb = &B00000111                                          'PullUp
von PB0 und PB1 und PB2 aktivieren



Dim W As Word , Kanal As Byte , J As Byte

Dim Zaehler As Integer , Targ As String * 6 , S As Single

Dim Text As String * 16

Dim Ausgabe(16) As Byte At Text Overlay

Dim H As Single , A As Single , V As Bit

Dim X(3) As Word , I As Byte

'--------------------------------------------------------------------

'********* vor allem anderen, gebe was auf das Display

Gosub Lcinit

Gosub Intro
'Startbildschirm

End                                                         'end
program

Schiebe:

Reset Portb.2                                               'CSB auf
0

Shiftout Si , Clk , J , 1 , 8 , 10                          'schiebe 8
bits mit der steigenden Flanke und 10us Delay raus

Set Portb.2                                                 'CSB auf
1

Return

'--------------------------------------------------------------------

'******* Hier wird die erste Meldung aufs Display gezaubert *********

'--------------------------------------------------------------------

Intro:

'Cls                                                         'clear
the LCD display

'Cursor Off

Text = " TEXT TEXT TEXT "                                   'display
this at the top line

Gosub Textaus

'Lowerline                                                   'select
the lower line

Text = " TEXT TEXT TEXT "                                   'display
this at the lower line

Gosub Textaus

Text = "ser. Ansteuerung"                                   'display
this at the lower line

Gosub Textaus

Wait 2

Return

'--------------------------------------------------------------------

'********************** Textausgabe auf Disolay *********************

'--------------------------------------------------------------------

Textaus:

Set Portb.1                                                 'RS auf 1

For I = 1 To 16

   J = Ausgabe(i)

   Gosub Schiebe

Next I

Return

'--------------------------------------------------------------------

'********************** Initialisiere LC-Display ********************

'--------------------------------------------------------------------

Lcinit:

Set Portb.0                                                 'EN=1

Clk = 1                                                     'CLK=1

Csb = 1                                                     'CSB auf
1

Rs = 0                                                      'RS auf 0

Csb = 0                                                     'CSB auf
0

'Initialisiere LCD

J = &H39 : Gosub Schiebe

J = &H1D : Gosub Schiebe

J = &H50 : Gosub Schiebe

J = &H6C : Gosub Schiebe

J = &H7C : Gosub Schiebe

J = &H0F : Gosub Schiebe

J = &H01 : Gosub Schiebe

J = &H06 : Gosub Schiebe

Set Portb.2                                                 'CSB auf
1

Return

Autor: Wolfram Hildebrandt (hwd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir läuft das Zweizeilen Display nun auch.
Nach mehreren Versuchen und Misserfolgen und vielen Neuprogrammierungen
ist dabei Code herausgekommen für:

DOGM162 (2 Zeilen)
- in C
- in AVR Assembler (8-Bit und 4-Bit)
- in PIC Assembler (8-Bit und 4-Bit)

Netterweise lag es gar nicht an der Software, aber gerade an der habe
ich lange gebastelt, was die vielen Konvertierungen zeigen.
Ein Steckkontakt einer billigen Buchsenleiste war wohl defekt. Naja,
solange es jetzt läuft.

Autor: Wolfram Hildebrandt (hwd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine AVR C Version für SPI ist jetzt ebenfalls vorhanden.
(Die erfordert übrigens einen echten Hardwarereset. Die 4 und 8 Bit
Modi jedoch nicht. Habe ich zuerst nicht bemerkt.)

Autor: Rupert Glaser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hall,
ich möchte das DOGM162 im SPI mode und bei 3v3 betreiben. Mit den
Unterlagen komm ich nicht zurecht. Wer kann mit C code senden der das
Teil richtig initialisiert...
Was sind denn bei dem Teil die Fußangeln ??
Dank für euere Hilfe !

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Wolfran,

könntest Du deinen Code zur Ansteuerung des DOGM mal posten?

Gruß Toby

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wisst ihr denn die pinbelegung der dinger?
im datenblatt sind gerade mal 2 pins angegeben, aber die richtung, in
der man zählen soll steht nicht da. alles in allem ein schlechtes
datenblatt, wenn man da nicht die pinbelegung rauslesen kann.
mein display zeigt auch rein gar nichts an, obwohl ich es so
angeschlossen habe, wie es das datenblatt unter "Beispiele mit 8 Bit,
5 V" zeigt (oder ich denke zumindest, dass ich das display richtig
angeschlossen habe).

kann mir da jemand mal die pinnummern sagen? das wäre echt toll.

muss ich befürchten, dass ich das display geschrottet hab, wenn ich Vcc
und GND an den falschen pins angelegt habe?
und: von www.electrosofts.com habe ich ein programm, mit dem man
lc-displays über den rechner ansteuern kann. es funzt mit allen, nur
das dog-m lässt sich zu nichts bewegen. wenn mir da einer helfen könnt
wär das genial.

grüsse

Autor: Wolfram Hildebrandt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Pinbelegung steht sehr wohl im Datenblatt.
Auf der letzten Seite des Herstellerdatenblatts bei den Abmessungen
sind die Nummern eingetragen.

Autor: Volker Kretz (dreamer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
achte bitte darauf, dass auch die übrigen Pin`s verschaltet sind.
Ich habe das 3 zeilige im SPI Modus in Betrieb.
Füge eventuell einige Wait`s in die Init ein.
Das Disp. braucht ca. 40-50 ms inittime.

Gruß Herbert

Autor: Tobias Plüss (hubertus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank für den tipp.

noch ne frage, etwas ist mir nicht ganz klar:
wenn ich das display im 4 Bit-modus betreibe, muss ich immer erst das
high nibble ausgeben, enable ein- und wieder ausschaten und dann das
low nibble ausgeben oder??
da bin ich mir nicht ganz sicher. ich habs leider noch nicht
ausprobieren können, weil ich das display nur im 8 Bit-modus am pc
anschliessen kann.

gruss

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat denn jemand mittlerweile nen Code für Assembler für dieses Display?

Wolfram könntest Du deinen Code eventuell mal posten?
Wäre sehr nett und hilfreich!

Vielen Dank schonmal dafür!
Gruß
Thomas

Autor: Wolfram Hildebrandt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich schon in einem anderen Thread gepostet.
Hier ist er aber noch einmal.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke hatte ich bisher noch nicht gefunden.
Werds aber mal suchen und mir anschauen.
Ich melde mich dann wieder :-)

MfG Michael

Autor: Norbert Schnitzler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hat jemand ein funktionierendes Script für Bascom und
SPI 5V mode. Der Oben gepostete Quellcode funktioniert bei mir nicht.

gruss

Autor: Wolfram Hildebrandt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein SPI Code sollte soweit aber laufen.
Bei SPI muss man einen echten Hardwarereset machen, d.h. nach jedem
Programmieren, einmal komplett die Spannung wegnehmen.
Wenn es auch ein 16char, zeiliges Display ist, würde ich prüfen, ob die
Hardware richtig angeschlossen ist.
Das Datenblatt erzählt hier und da Mist.
Das sind aber offensichtliche Dinge (die haben bei SPI den C/D-Pin
nicht beschaltet, dafür einen anderen, meine ich).

Autor: Norbert Schnitzler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja es ist ein 2*16

Bascom meckert z.B. bei fogenden Zeilen mit 114 Assignment Error.
Clk = 1
Csb = 1
Rs = 0
Csb = 0

könntest du deine Pinbelegung bekannt geben wie sie richtig ist, also
z.b. pin 26 auf portb.0?!
ich verzweifle an dem Teil.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin jetzt mittlerweile mal auf 8 bit umgestiegen um deinen Code zu
probieren aber das funktioniert leider auch nicht.

Keine Ahnung was ich falsch mache oder warum es eben nicht geht.
Weil ich hardwaremäßig alles schon zick mal kontrolliert habe und
einfach keinen Fehler finden kann...

Jemand noch ähnliche Probleme und im optimalfall noch ne Lösung dazu?
:-)
Wäre sehr dankbar dafür weil ich langsam echt am verzweifeln bin mit
diesem Display.

MfG
Michael

Autor: Wolfram Hildebrandt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist ein pdf für die 5V 8 Bit Ansteuerung für meinen AVR Assembler
8Bit 5V 16 Char Display Code.
Da kommt jetzt einfach an PORTD0 D0 vom Display usw.
PORTC0 = Display E
PORTC1 = Display RW
PORTC2 = Display RS

@ Michael:
Der 8 Bit Code ist der einfachste.
Bleib mal dabei, bis es läuft und wechsel nicht alle 5 Min. herum. Du
schreibst auch in zwei Beiträgen parallel, oder?
Wenn es mit mit der Pinbelegung von oben nicht funktioniert, reiss das
ganze Display ab, und mache einen neuen Schaltplan, den du hier
postest.
Dann noch mal alles von neuem aufbauen.

Wie sieht es mit dem AVR aus? Läuft der? Lass einen Pin mal einfach an
und ausschalten und messe, ob das funktioniert.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leck mich am A**** es läuft :-)

Aber frag nich was los war....
Hab jetzt alles auseindandergebaut und neu zusammen gebaut und es
funzt.
Muss wohl irgendwo in der Beschaltung ein Fehler gewesen sein obwohl
ich alles durchgepipst hatte.

Naja wie gesagt wahrscheinlich vor lauter Bäumen den Wald nicht mehr
gesehen!

Vielen vielen Dank!

Oh mann das waren wieder ein paar graue Haare mehr^^

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und da bin ich nochmal :-)

Also wie gesagt das Display läuft mittlerweile einwandfrei und ich hab
jetzt mal bisschen damit rumgespielt.
Funzt alles...bei 1Mhz !

Jetzt wollte ich das Display für eine andere Anwendung nutzen bei
welcher ich den µC auf 4Mhz laufen lasse.

In der Intialisierung für das Display habe ich dann das timing geändert
und nops eingefügt aber es läuft nicht mehr.

Klar das es ein timing Problem ist^^ aber hab jetzt auch schon wieder
rum probiert und rum probiert und ich weiss nicht welche Stelle da
genau Ärger macht.

Weisst du wo ich besonders auf timing achten muss?
Oder besser noch...hast du deinen Code auch für 4 Mhz ;-)

Danke schonmal!

MfG
Michael

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok läuft alles!
Vielen Dank nochmal!

MfG
Michael

Autor: Norbert Schnitzler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es in Anlehnung an das Datenblatt vom ST7036 nocheinmal in
Bascom probiert, aber es läuft einfach nicht. Im 4 & 8 Bit-Mode habe
ich  das Display direkt auf gang gekriegt, aber mit SPI will es nicht.
Hat einer von euch eine Ahnung was ich falsch mache?!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
bin gerade auch am Verzfeifeln.
Betreibe das Display im einfachsten Modus. 8Bit
Leider gibt es kein einiges Zeichen aus.
Bin um jede Hilfe dankbar!!!
Meine Initialisierung lautet wie folgt:

#define LCD_Display_OFF_Cursor_OFF_Blinking_OFF     0x08
#define LCD_Display_ON_Cursor_OFF_Blinking_OFF      0x0C
#define LCD_Inc_Add_NO_Scroll                       0x06
#define LCD_Cursor_OFF                              0x08
#define LCD_Display_ON                              0x04
#define LCD_Clear_Display                           0x01
#define LCD_8Bit_2Line                              0x38
#define OSC_Frequency            0x14
#define Contrast            0x78
#define PowerICON            0x5E
#define FOLLOVER_CONTROL          0x6A
#define CLEAR_LCD            0x01




DIG_Out_Prt (4, 0, 255);   //D0-D7 == 1

DIG_Out_Line (4, 1, 0, 0);  //Adressbytes RS

DIG_Out_Line (4, 1, 1, 0);  //Adressbytes RW

DIG_Out_Line (4, 1, 2, 0);  //Enable LCD

Delay (0.005);


LCD_Send_Cmd(LCD_8Bit_2Line); //(1)     // Funtion SET

Delay (0.005);

LCD_Send_Cmd(LCD_8Bit_2Line); //(2)   // Funtion SET

Delay (0.005);

LCD_Send_Cmd(OSC_Frequency);    // Internal OSC Frequency

Delay (0.005);

LCD_Send_Cmd(Contrast);      // Contrast Set

Delay (0.005);

LCD_Send_Cmd(PowerICON);     // Power/ICON/Contrast control

Delay (0.005);

LCD_Send_Cmd(FOLLOVER_CONTROL);   // Follower Control

Delay (0.005);

LCD_Send_Cmd(LCD_Display_ON_Cursor_OFF_Blinking_OFF); // Display O N/OFF

Delay (0.005);

LCD_Send_Cmd(CLEAR_LCD);     // Clear Display

Autor: Frank Zöllner (frankovic)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...aber versucht nicht, im SPI-Modus zu Lesen, das funktioniert nämlich 
nicht.

Autor: bascom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Config Lcd = 16 * 3 , Chipset = Dogm163v5

Autor: bascom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CONFIG LCD = LCDtype , CHIPSET=KS077 | Dogm163v5 | DOG163V3 | DOG162V5 | 
DOG162V3 [,CONTRAST=value]

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Bin am verzweifeln. Betreibe ein Dog 162 unter Bascom mit mega8.

Habe schon die ganzen Initialisierungsroutinen probiert, bekomme aber 
keine Anzeige aufs display. Habe zuerst versucht über i2c zu betreiben 
und bin  jetzt im 4 bit 5V Modus.

Ich sehe nicht mal bei der Initialisierung etwas. Da tut sich rein gar 
nix.

Kann mir von euch bitte jemand einen Bascom Code geben, mit dem ich 
initialisiere und anschließend einfach nur etwas aus display schreiben 
kann.

Bin mir nichtmal sicher, ob das Display nach den vielen Versuchen nicht 
schon kaputt ist.

Meine Ports:

Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , 
Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5

Danke schonmal im Vorraus.

Gruß Tommy

Autor: Tommy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich erledigt !

Habs endlich geschafft !!!

Lag wohl an der Kontrasteinstellung !

Gruß Tommy

Autor: Ralf H. (geins)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein funktionierendes BASCOM - Beispiel per SPI:
'--------------------------------------------------------------------
'  DOGM 162 LCD per SPI in BASCOM
'--------------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 1000000 '1Mhz
'$crystal = 8000000 'oder 8Mhz
'--------------------------------------------------------------------
Dim Lcd_ausgabe_text As String * 16
Dim Lcd_ausgabe_text_bitwise(16) As Byte At Lcd_ausgabe_text Overlay
Declare Sub Dogm_lowerline
Declare Sub Dogm_init
Declare Sub Dogm_write
Declare Sub Dogm_pushbyte(byval Pushbyte As Byte)
Byval Lcd_ascii As Byte , Byval Write_byte As Byte)
Declare Sub Dogm_clear

Ddrb = &B11111111 'Port B alles auf Ausgang
Portb = &B11111111 'Alle Pullups ran
Rs Alias Portb.1 'Verkabelung = Selbsterklärend...
Csb Alias Portb.2
Si Alias Portb.3
Clk Alias Portb.4

'--------------------------------------------------------------------
Dogm_init
Do
   Lcd_ausgabe_text = "Zeile 1 xxxxxxxx"
   Dogm_write
   Wait 1
   'Reset Rs = Steuerzeichen senden
   'Set RS = Text senden
   'Cursorposition: &H80 = Zeile 1, Position 1 / &HC0 = Zeile 2, Position 1
   Reset Rs : Dogm_pushbyte &HC0 + 5                        'Zeile 2, Position 5
   'Dogm_lowerline
   Lcd_ausgabe_text = "Zeile 2 xxxxxxxx"
   Dogm_write
   Wait 2
   Dogm_clear
   Wait 2
Loop
End                                                         'end program

'- Subs -------------------------------------------------------------------
Sub Dogm_clear
  Reset Rs                                                  'Command wird gesendet
  Dogm_pushbyte &H01                                        'Clear senden
  Waitms 2                                                  'Timeout abwarten
End Sub

Sub Dogm_lowerline
   Reset Rs                                                 'Command wird gesendet
   Dogm_pushbyte &HC0                                       ' Cursorposition setzen
End Sub

Sub Dogm_write
   Local Dogm_zaehler As Byte
   Set Rs                                                   'Text wird gesendet
   For Dogm_zaehler = 1 To 16
      Dogm_pushbyte Lcd_ausgabe_text_bitwise(dogm_zaehler)
   Next Dogm_zaehler
End Sub

Sub Dogm_pushbyte(byval Pushbyte As Byte)
   Reset Csb
   Shiftout Si , Clk , Pushbyte , 1 , 8 , 10
   Set Csb
End Sub

Sub Dogm_init
   Set Clk
   Set Csb
   Reset Rs
   Waitms 40
   Reset Csb
   Dogm_pushbyte &H38 : Waitus 30                           'function set
   Dogm_pushbyte &H39 : Waitus 30                           'function set
   Dogm_pushbyte &H1C : Waitus 30                           'BIAS
   Dogm_pushbyte &H53 : Waitus 30                           '3V-Booster aus, power control
   Dogm_pushbyte &H69 : Waitms 200                          'Follover-Control
   Dogm_pushbyte &H74 : Waitus 30                           'Contrast Set
   Dogm_pushbyte &H0C : Waitus 30                           'Display on,Cursor off
   'Dogm_pushbyte &H0F : Waitus 30                           'Display ein, Cursor ein, Cursor blinken
   Dogm_pushbyte &H01 : Waitms 2                            'Clear Display
   Dogm_pushbyte &H06 : Waitus 30                           'entry mode auto increment
   Set Csb
End Sub


Gruß, Ralf.

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.