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
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
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
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.
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.