ATMega644 & EA-DOGL128 Kommunikation

#2642025
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
#2642346
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
#2642881
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.
#2643230
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.
#2644494
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren