Forum: Mikrocontroller und Digitale Elektronik EA DOG M 163W


von Simon (Gast)


Lesenswert?

Hallo

wieder einmal eine Frage zum dogm 163 W.

WinAVR, C, Atmega32,  11,0592 MHz, DOG-M163 W

CSB -> 0V
PORTC 0-3 = DB0-3

CO_0 ist denke ich mal RS (PIN 39 am display) ?

PA1 an  R/W (Pin37 LCD)
PA2 an Reset (Pin40 LCD)
PA3 an E (PIN36 LCD)


Ich bin nun etliche Forenbeitraege durch,
aber wie ueblich bei DOG-M displays nichts will funktionieren.


Am besten sah dieses Beispiel aus:
http://www.mikrocontroller.net/attachment/40732/test.c


Ich hab alles unnoetige raus genommen:

// COmmand an 1. Stelle von PORTA
#define CO_0 PORTA = PORTA & 0b11111110;
#define CO_1 PORTA = PORTA | 0b00000001;

// R/W an 2. Stelle von PORTA
#define RW_0 PORTA = PORTA & 0b11111101;
#define RW_1 PORTA = PORTA | 0b00000010;

// RES an 3. Stelle von PORTA
#define RES_0 PORTA = PORTA & 0b11111011;
#define RES_1 PORTA = PORTA | 0b00000100;

// E nable an 4. Stelle von PORTA
#define E_0 PORTA = PORTA & 0b11110111;
#define E_1 PORTA = PORTA | 0b00001000;


#include "avr/io.h"
#include "avr/delay.h"
#include "avr/interrupt.h"


// BEFEHLE
void setCommand( uint8_t data ){
  _delay_ms(10);

  DDRC = 0xff; // ausgang
  PORTC = data;

  RW_0;
  CO_0;

  E_1;
  _delay_us(50);
  E_0;
}

// DATEN
void setData( uint8_t data ){
  _delay_ms(10);

  DDRC = 0xff; // ausgang
  PORTC = data;

  RW_0;
  CO_1;

  E_1;
  _delay_us(50);
  E_0;
}

void Initialize(){

  // Innenwiderstände
  PORTA = 0x00;
  PORTC = 0x00;

  // DataDirection Register
  DDRA = 0xff;    // Ausgang
  DDRC = 0xff;

  // eig. egal, da FUSE JTAGEN mit PonyProg deaktiviert
  MCUCSR |= (1<<JTD); // Bit setzen an 8. Stelle, damit JTAG deaktiviert 
wird -> PORTC frei
  MCUCSR |= (1<<JTD); // zwei mal

}


int main(){

  _delay_ms(100);

  Initialize();

  CO_0;
  RW_0;
  E_0;
  RES_0;
   _delay_ms(100);
  RES_1;
  _delay_ms(100);


  // Grundinitialisierung
  setCommand(0x39);

  setCommand(0x1D);               // BS: 1/4, 2 Zeilen

  setCommand(0x50);               // 52 Boster aus, Kontrast C5,C4
  setCommand(0x6C);               // 69 Spannungsfolger und Verstärkung
  setCommand(0x77);               // Kontrast C3,C2,C1
  setCommand(0x38);
  setCommand(0x0F);               // Display ein, Cursor ein, Cursor 
blinken
  setCommand(0x06);               // Autoincrement

  setCommand(0x01); // display löschen

  _delay_ms(250);
  setCommand(0x80);        // Kursorposition setzen
  setData('H');
  setData('A');

  while (1){

  }
}

von Simon (Gast)


Lesenswert?

So funzt.

Fehler waren:

a) Ich hatte nur DB 0-3 angeschlossen und nicht alle 8 bits
b) Mein wurst finger hat das display verdeckt und ohne hintergrund 
beleuchtung hab ichs nicht gesehen :-)


Also fakt ist, der code funzt, so wie er da steht.

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.