Forum: Mikrocontroller und Digitale Elektronik ATMega644 & EA-DOGL128 Kommunikation


von Tobias W. (wintertime)


Lesenswert?

Hallo an alle!

Habe einen ATMega644 an 5V und ein EA-DOGL128 an 3,3V.
Wie bekomme ich es hin damit die zwei kommunizieren können und der MC 
Daten ans Display senden kann?

In einer eigenen Funktion.

Externer Quarz mit 20MHz
CS an PD4
A0 an PD5
SI an PD6
SCL an PD7
Reset an PC0

Verwendet wird AVR Studio 5.1
und ein AVR Dragonboard


Angedacht war, damit man eine char-Variable erstellt, da 8 Bit und davon 
die Bits hernimmt als Grundlage.

Datenlatt Display (Seite 5 ist dabei interesant)
http://www.lcd-module.de/pdf/grafik/dogl128-6.pdf

Datenblatt ATMega
http://www.atmel.com/Images/doc2593.pdf

Bin dankbar für jede Hilfe

von Frank K. (fchk)


Lesenswert?

Tobias W. schrieb:
> Hallo an alle!
>
> Habe einen ATMega644 an 5V und ein EA-DOGL128 an 3,3V.
> Wie bekomme ich es hin damit die zwei kommunizieren können und der MC
> Daten ans Display senden kann?
>
> In einer eigenen Funktion.
>
> Externer Quarz mit 20MHz
> CS an PD4
> A0 an PD5
> SI an PD6
> SCL an PD7
> Reset an PC0

Du musst einen Pegelwandler zwischen AVR und Display schalten - die 
Eingänge des Displays sind nicht 5V-tolerant. Die billigste Lösung ist 
ein 74LVC541, der mit 3.3V versorgt wird. Die 74LVC-Serie hat 
5V-tolerante Eingänge.
SI und SCL würde ich an MOSI und SCK vom SPI des AVR anschließen. Das 
macht die ganze Sache effizienter. Pull-Ups an CS und Reset, und zwar 
vor dem Pegelwandler auf der 5V-Seite, damit das Display beim Flashen 
nicht stört.

Den Rest überlasse ich dem Leser als Hausaufgabe. :-) Selber lernen 
macht schlau.

fchk

von spess53 (Gast)


Lesenswert?

Hi

> Die billigste Lösung ist
>ein 74LVC541, der mit 3.3V versorgt wird. Die 74LVC-Serie hat
>5V-tolerante Eingänge.

Ein 74HC4050 dürfte leichter erhältlich sein. Und den gibt es auch in 
DIP.

MfG Spess

von Tobias W. (wintertime)


Lesenswert?

Frank K. schrieb:
> Du musst einen Pegelwandler zwischen AVR und Display schalten - die
> Eingänge des Displays sind nicht 5V-tolerant.

Habe einen Festspannungsregler direkt von der 12V Spannungsversorgung 
der das ganze auf 3,3V regelt. Die Schaltung steht bereits, mir geht es 
eigentlich um die kommunikation zwischen mC und Display 
Programmtechnisch.

So damit ich meinen eigenen Takt irgentwie vorgebe und darauf mein SCL 
anlegen kann.

Was die absteigende und ansteigende Flanke angeht wüsste ich jetzt auch 
nicht ganz wie ich das anstellen sollte.

von Frank K. (fchk)


Lesenswert?

Tobias W. schrieb:

> So damit ich meinen eigenen Takt irgentwie vorgebe und darauf mein SCL
> anlegen kann.
>
> Was die absteigende und ansteigende Flanke angeht wüsste ich jetzt auch
> nicht ganz wie ich das anstellen sollte.

Bits auf 0 oder 1 setzen kannst Du nicht?
1
#ifndef BIT
2
#define BIT(x) (1<<(x))
3
#endif
4
#ifndef BITN
5
#define BITN(x) (~(1<<(x)))
6
#endif
7
8
//Port D
9
#define BIT_CS 4
10
#define BIT_A0 5
11
#define BIT_SI 6
12
#define BIT_SCL 7
13
// Port C
14
#define BIT_RST 0
15
16
#define LCD_CS_LO() PORTD&=BITN(BIT_CS)
17
#define LCD_CS_HI() PORTD|=BIT(BIT_CS)
18
#define LCD_A0_LO() PORTD&=BITN(BIT_A0)
19
#define LCD_A0_HI() PORTD|=BIT(BIT_A0)
20
21
void lcd_sendbyte(unsigned char byte)
22
{
23
  unsigned char i;
24
  for (i=0;i<8;i++)
25
  {
26
    if (byte&0x80) PORTD|=BIT(BIT_SI);
27
    else PORTD&=BITN(BIT_SI);
28
    PORTD|=BIT(BIT_SCL);
29
    // hier ggf Delay
30
    PORTD&=BITN(BIT_SCL);
31
    byte<<=1;
32
  }
33
}
34
35
void lcd_port_init(void)
36
{
37
  DDRD|=(BIT(BIT_CS)|BIT(BIT_A0)|BIT(BIT_SI)|BIT(BIT_SCL));
38
  PORTD&=BITN(BIT_SCL);
39
  PORTD|=BIT(BIT_CS);
40
  DDRC|=BIT(BIT_RST);
41
  PORTC|=BIT(BIT_RST);
42
  // hier ggf Delay
43
  PORTC&=BITN(BIT_RST);
44
  // hier ggf Delay
45
  PORTC|=BIT(BIT_RST);
46
  // hier ggf Delay
47
}
48
49
void lcd_ctrl_init(void)
50
{
51
  LCD_CS_LO();
52
  LCD_A0_LO();
53
  lcd_sendbyte(0x40);
54
//..hier die weiteren Initialisierungsbytes senden
55
  LCD_CS_HI();
56
}

Ohne Gewähr, hab ich eben mal schnell zwischen Tür&Angel hingetippt.

von Tobias W. (wintertime)


Lesenswert?

Frank K. schrieb:
> Bits auf 0 oder 1 setzen kannst Du nicht?

Doch schon, hatte jedoch noch nichts mit C und MC programmierung zu tun.

so im Grunde hatte ich die gleiche Idee (nur mit ca 20 Fehlern) Bedanke 
mich recht herzlich!

Hätte da aber noch ein Anliegen.
Wenn ich mich über AVR Studio 5.1 mit dem Dragon verbinden will bekomme 
ich follgende Fehlermeldung:

Severity:        ERROR
ComponentId:    20100
StatusCode:    1
ModuleName:    TCF (TCF command: Device:startSession failed.)

Failed to enter programming mode. ispEnterProgMode: Error status 
received: Got 0xc0, expected 0x00


Da ne Ahnung was Sache ist?
Muss ich den ISP Port noch irgentwie initalisieren?

Win7 32 bit
AVR-Studio 5.1.208
AVRDragon über ISP

von spess53 (Gast)


Lesenswert?

Hi

>Doch schon, hatte jedoch noch nichts mit C und MC programmierung zu tun.

Dann ist aber ein Grafikdisplay als Einsteigerprojekt recht ungeeignet.

MfG Spess

von Tobias W. (wintertime)


Lesenswert?

spess53 schrieb:
> Dann ist aber ein Grafikdisplay als Einsteigerprojekt recht ungeeignet.
>
> MfG Spess

Ist eine Projektarbeit, und diese hat sich dann immer mehr 
aufgeblustert.

Hatte nicht wirklich die Möglichkeit es mir auszusuchen

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.