Forum: Mikrocontroller und Digitale Elektronik BeagleBone Black | TFT anschließen | NHD-4.3-480272EF-ATXL


von Ben B. (alias_alias)


Lesenswert?

Hallo,

ich versuche nun seit einigen Wochen das Display NHD-4.3-480272EF-ATXL 
an mein BeagleBone Black anzuschließen.

Das Problem, was ich jetzt habe, ist, dass das Display nicht startet, 
weil das Board zu wenig Strom liefert und ich noch einen Backlight 
chip brauche mit pwm, ich aber nicht weiß, welchen ich da nehmen 
kann und worauf ich achten muss. Ich weiß nur, dass er laut Datenblatt: 
Backlight Anode (40mA @ 19.2V ) liefern muss.

Ich habe hier zu auch schon einiges gesucht und bei Texas Instruments 
das hier gefunden: http://www.ti.com/solution/lighting_lcd_backlight. 
Wenn ich dort nun auf 4-6 Zoll gehe und Charge bumb auswähle erhalte ich 
diese Tabelle: 
http://www.ti.com/apps/docs/viewdevices.tsp?blockDiagramId=6181&blockId=12748&designOptionId=24198&appId=476 
. Ich werde aber ehrlich gesagt nicht aus diesen Datenblättern schlau.

Ich habe versucht das Display an 3.3V, an 5V und an 12V anzuschließen, 
jedoch ohne Erfolg, dass es startet.

Nun kann man sich die Frage stellen, warum ich glaube, dass es nicht am 
Code liegt. Ich habe nach einiger Zeit nun ein Overlay,was korrekt laut 
dmesg etabliert wird und auch einen Treiber lädt. Nachdem ich dann 
"zugegeben ziemlich lange" die xconfig bearbeitet habe, startet nun auch 
X, also der X server.
Ich habe mich dafür an diesem Beispiel vorangearbeitet 
http://elinux.org/24bit_LCD_for_BBB  .
Man sieht nun, dass wenn ich eine LED anschließe, Signale aus Data 
enable, clock, pwm, hsync und vync kommen.


Es würde mich sehr freuen, wenn mir einer sagen kann, welchen Backlight 
ich kaufen sollte.


Datenblatt Display:
http://www.newhavendisplay.com/nhd43480272efatxlctp-p-5572.html

Code:
1
/dts-v1/;
2
/plugin/;
3
4
/ {
5
  compatible = "ti,beaglebone", "ti,beaglebone-black";
6
7
  part-number = "BB-BONE-LCD4-01";
8
  version = "00A1";
9
10
  exclusive-use =
11
    /* the pin header uses */
12
    
13
    /*16 bit RGB*/
14
    "P8.45",  /* lcd: lcd_data0 */
15
    "P8.46",  /* lcd: lcd_data1 */
16
    "P8.43",  /* lcd: lcd_data2 */
17
    "P8.44",  /* lcd: lcd_data3 */
18
    "P8.41",  /* lcd: lcd_data4 */
19
    "P8.42",  /* lcd: lcd_data5 */
20
    "P8.39",  /* lcd: lcd_data6 */
21
    "P8.40",  /* lcd: lcd_data7 */
22
    "P8.37",  /* lcd: lcd_data8 */
23
    "P8.38",  /* lcd: lcd_data9 */
24
    "P8.36",  /* lcd: lcd_data10 */
25
    "P8.34",  /* lcd: lcd_data11 */
26
    "P8.35",  /* lcd: lcd_data12 */
27
    "P8.33",  /* lcd: lcd_data13 */
28
    "P8.31",  /* lcd: lcd_data14 */
29
    "P8.32",  /* lcd: lcd_data15 */
30
    
31
    /*24 bit RGB*/
32
    "P8.15", /* lcd: lcd_data16 */
33
    "P8.16", /* lcd: lcd_data17 */
34
    "P8.11", /* lcd: lcd_data18 */
35
    "P8.12", /* lcd: lcd_data19 */
36
    "P8.17", /* lcd: lcd_data20 */
37
    "P8.14", /* lcd: lcd_data21 */
38
    "P8.13", /* lcd: lcd_data22 */ 
39
    "P8.19", /* lcd: lcd_data23 */
40
    
41
    /*TFT Sync*/
42
    "P8.27",  /* lcd: lcd_vsync */
43
    "P8.29",  /* lcd: lcd_hsync */
44
    "P8.28",  /* lcd: lcd_pclk */
45
    "P8.30",  /* lcd: lcd_ac_bias_en */
46
    
47
    /* BackLight */
48
    "P9.14",  /* pwm: ehrpwm1a */
49
    
50
    /* MUELL */
51
    "P9.27",  /* lcd: gpio3_19 */
52
    "P9.12",  /* led: gpio1_28 */
53
    "P9.15",  /* keys: gpio1_16 */
54
    "P9.23",  /* keys: gpio1_17 */
55
    "P9.16",  /* keys: gpio1_19 */
56
    "P9.21",  /* keys: gpio0_3 */
57
    "gpio3_19",
58
    "gpio1_28",
59
    "gpio1_16",
60
    "gpio1_17",
61
    "gpio1_19",
62
    "gpio0_3",
63
    "lcd",
64
    "ehrpwm1a";
65
66
  fragment@0 {
67
    target = <&am33xx_pinmux>;
68
    __overlay__ {
69
70
      /* MUELL */
71
      bone_lcd4_cape_led_00A1_pins: pinmux_bone_lcd4_cape_led_00A1_pins {
72
        pinctrl-single,pins = <
73
          0x078 0x2f      /* gpmc_be1n.gpio1_28, INPUT | PULLDIS | MODE7 */
74
        >;
75
      };
76
77
      pwm_bl_pins: pinmux_pwm_bl_pins {
78
        pinctrl-single,pins = <
79
          0x48 0x06       /* gpmc_a2.ehrpwm1a, OMAP_MUX_MODE6 | AM33XX_PIN_OUTPUT */
80
        >;
81
      };
82
83
      bone_lcd4_cape_lcd_pins: pinmux_bone_lcd4_cape_lcd_pins {
84
        pinctrl-single,pins = <
85
          0xa0 0x08  /* lcd_data0.lcd_data0, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
86
          0xa4 0x08  /* lcd_data1.lcd_data1, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
87
          0xa8 0x08  /* lcd_data2.lcd_data2, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
88
          0xac 0x08  /* lcd_data3.lcd_data3, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
89
          0xb0 0x08  /* lcd_data4.lcd_data4, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
90
          0xb4 0x08  /* lcd_data5.lcd_data5, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
91
          0xb8 0x08  /* lcd_data6.lcd_data6, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
92
          0xbc 0x08  /* lcd_data7.lcd_data7, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
93
          0xc0 0x08  /* lcd_data8.lcd_data8, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
94
          0xc4 0x08  /* lcd_data9.lcd_data9, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
95
          0xc8 0x08  /* lcd_data10.lcd_data10, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
96
          0xcc 0x08  /* lcd_data11.lcd_data11, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
97
          0xd0 0x08  /* lcd_data12.lcd_data12, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
98
          0xd4 0x08  /* lcd_data13.lcd_data13, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
99
          0xd8 0x08  /* lcd_data14.lcd_data14, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
100
          0xdc 0x08  /* lcd_data15.lcd_data15, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
101
          
102
          
103
104
          0x3c 0x09 /* lcd_data16.lcd_data16, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
105
          0x38 0x09 /* lcd_data17.lcd_data17, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
106
          0x34 0x09 /* lcd_data18.lcd_data18, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
107
          0x30 0x09 /* lcd_data19.lcd_data19, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
108
          0x2c 0x09 /* lcd_data20.lcd_data20, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
109
          0x28 0x09 /* lcd_data21.lcd_data21, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
110
          0x24 0x09 /* lcd_data22.lcd_data22, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
111
          0x20 0x09 /* lcd_data23.lcd_data23, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
112
113
114
          
115
          0xe0 0x00  /* lcd_vsync.lcd_vsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
116
          0xe4 0x00  /* lcd_hsync.lcd_hsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
117
          0xe8 0x00  /* lcd_pclk.lcd_pclk, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
118
          0xec 0x00  /* lcd_ac_bias_en.lcd_ac_bias_en, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
119
          
120
          0x1a4 0x17  /* mcasp0_fsr.gpio3_19, OUTPUT | MODE7  LCD DISEN */
121
        >;
122
      };
123
124
      bone_lcd4_cape_keys_00A2_pins: pinmux_bone_lcd4_cape_keys_00A2_pins {
125
        pinctrl-single,pins = <
126
          0x040 0x2f  /* gpmc_a0.gpio1_16, INPUT | PULLDIS | MODE7 */
127
          0x044 0x2f  /* gpmc_a1.gpio1_17, INPUT | PULLDIS | MODE7 */
128
          0x04c 0x2f   /* gpmc_a3.gpio1_19, INPUT | PULLDIS | MODE7 */
129
          0x154 0x2f  /* P9_21 spi0_d0.gpio0_3 INPUT | PULLDIS | MODE7 */
130
        >;
131
      };
132
133
    };
134
  };
135
136
  fragment@1 {
137
    target = <&epwmss1>;
138
    __overlay__ {
139
      status = "okay";
140
    };
141
  };
142
143
  fragment@2 {
144
    target = <&ehrpwm1>;
145
    __overlay__ {
146
      status = "okay";
147
    };
148
  };
149
150
  fragment@3 {
151
    target = <&ocp>;
152
153
    __overlay__ {
154
155
      /* avoid stupid warning */
156
      #address-cells = <1>;
157
      #size-cells = <1>;
158
159
      backlight {
160
        compatible      = "pwm-backlight";
161
        pinctrl-names   = "default";
162
        pinctrl-0       = <&pwm_bl_pins>;
163
164
        pwms = <&ehrpwm1 0 500000 0>;
165
        pwm-names = "LCD4";
166
        brightness-levels = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100>;
167
        default-brightness-level = <101>; /* index to the array above */
168
        status = "okay";
169
      };
170
171
      tscadc {
172
        compatible = "ti,ti-tscadc";
173
        reg = <0x44e0d000 0x1000>;
174
175
        interrupt-parent = <&intc>;
176
        interrupts = <16>;
177
        ti,hwmods = "adc_tsc";
178
        status = "okay";
179
180
        /* TODO Was macht es ?*/
181
        tsc {
182
          ti,wires = <4>;
183
          ti,x-plate-resistance = <200>;
184
          ti,coordinate-readouts = <5>;
185
          ti,wire-config = <0x00 0x11 0x22 0x33>;
186
        };
187
188
        adc {
189
          /* EVT. von 0 ... 7 */
190
          ti,adc-channels = <4 5 6 7>;
191
        };
192
      };
193
194
      gpio-leds-cape-lcd4 {
195
        compatible = "gpio-leds";
196
        pinctrl-names = "default";
197
198
        pinctrl-0 = <&bone_lcd4_cape_led_00A1_pins>;
199
200
        lcd4-led0 {
201
          label = "lcd4:green:usr0";
202
          gpios = <&gpio2 28 0>;
203
          linux,default-trigger = "heartbeat";
204
          default-state = "off";
205
        };
206
207
      };
208
209
      gpio_keys {
210
        compatible = "gpio-keys";
211
        pinctrl-names = "default";
212
        pinctrl-0 = <&bone_lcd4_cape_keys_00A2_pins>;
213
214
        #address-cells = <1>;
215
        #size-cells = <0>;
216
217
        button@1 {
218
          debounce_interval = <50>;
219
          linux,code = <105>;
220
          label = "left";
221
          gpios = <&gpio2 16 0x1>;
222
          gpio-key,wakeup;
223
          autorepeat;
224
        };
225
        button@2 {
226
          debounce_interval = <50>;
227
          linux,code = <106>;
228
          label = "right";
229
          gpios = <&gpio2 17 0x1>;
230
          gpio-key,wakeup;
231
          autorepeat;
232
        };
233
        button@3 {
234
          debounce_interval = <50>;
235
          linux,code = <103>;
236
          label = "up";
237
          gpios = <&gpio2 19 0x1>;
238
          gpio-key,wakeup;
239
          autorepeat;
240
        };
241
        button@4 {
242
          debounce_interval = <50>;
243
          linux,code = <108>;
244
          label = "down";
245
          gpios = <&gpio4 16 0x1>;
246
          gpio-key,wakeup;
247
          autorepeat;
248
        };
249
        button@5 {
250
          debounce_interval = <50>;
251
          linux,code = <28>;
252
          label = "enter";
253
          gpios = <&gpio1 15 0x1>;
254
          gpio-key,wakeup;
255
        };
256
      };
257
258
      /* Settings for NH      */
259
      panel {
260
        compatible = "tilcdc,panel";
261
        pinctrl-names = "default";
262
        pinctrl-0 = <&bone_lcd4_cape_lcd_pins>;
263
        panel-info {
264
          ac-bias           = <255>;   
265
          ac-bias-intrpt    = <0>;  
266
          dma-burst-sz      = <16>;  
267
          bpp               = <24>;  
268
          fdd               = <0x80>;  
269
          tft-alt-mode      = <0>;    
270
          stn-565-mode      = <0>;  
271
          mono-8bit-mode    = <0>;  
272
          sync-edge         = <0>;   
273
          sync-ctrl         = <1>;  
274
          raster-order      = <0>;   
275
          fifo-th           = <0>;    
276
        };
277
        display-timings {
278
          native-mode = <&timing0>;
279
          timing0: 480x272 {
280
            hactive         = <480>;
281
            vactive         = <272>;
282
            
283
            hback-porch     = <2>;
284
            hfront-porch    = <2>;
285
            hsync-len       = <41>;
286
            
287
            vback-porch     = <2>;
288
            vfront-porch    = <2>;
289
            vsync-len       = <10>;
290
            
291
            /* Alte Werte
292
            hback-porch     = <44>;
293
            hfront-porch    = <9>;
294
            hsync-len       = <5>;
295
            
296
            vback-porch     = <13>;
297
            vfront-porch    = <4>;
298
            vsync-len       = <10>;
299
            */
300
            
301
            clock-frequency = <9000000>;
302
            hsync-active    = <0>;
303
            vsync-active    = <0>;
304
          };
305
        };
306
      };
307
      fb {
308
        compatible = "ti,am33xx-tilcdc";
309
        reg = <0x4830e000 0x1000>;
310
        interrupt-parent = <&intc>;
311
        interrupts = <36>;
312
        ti,hwmods = "lcdc";
313
      };
314
315
    };
316
  };
317
};


Danke für eure Zeit.

von Chris F. (chris_de)


Lesenswert?

Also laut dem Devicetree sieht es danach aus als ob die PWM vom 
Prozessor kommt.
Wie kommst du denn auf die Annahme das die PWM von einem PWM-Controller 
kommen muss?
Wenn du 40mA an 19,2V liefern musst brauchst du keinen PWM-Controller 
sondern eine Konstantstromquelle die bei 19,2V 40mA liefert. Mit der PWM 
des BBB wird dann die Beleuchtung gedimmt.
Für solche Dinge gibt es im Internet diverse fertige Platinen die genau 
solche Spannungen liefern.

von Ben B. (Gast)


Lesenswert?

Chris F. schrieb:
> Also laut dem Devicetree sieht es danach aus als ob die PWM vom
> Prozessor kommt.

Ja, dass stimmt. Das BBB hat einen PWM pin.

> Wie kommst du denn auf die Annahme das die PWM von einem PWM-Controller
> kommen muss?

Ich habe es so verstanden, dass ich diesen Pin mit an die 
Konstantstromquelle schließen muss und diese dadurch reguliert wird. 
Vielleicht liegt hier bei mir ein Verständnisfehler vor, aber ich habe 
das hier gefunden :
http://bear24rw.blogspot.de/2013/07/beaglebone-gamingcape.html

Hier ist auch der schematische Aufbau der Schaltung:
http://i.imgur.com/ehuqfwy.png

Daraus geht für mich hervor, dass ich den Pin mit in die 
Spannungsberechnung ziehen muss.

Ich will dieses Gerät in etwa nachbauen, aber mit meinem Display.

> Wenn du 40mA an 19,2V liefern musst brauchst du keinen PWM-Controller
> sondern eine Konstantstromquelle die bei 19,2V 40mA liefert. Mit der PWM
> des BBB wird dann die Beleuchtung gedimmt.
> Für solche Dinge gibt es im Internet diverse fertige Platinen die genau
> solche Spannungen liefern.

Ich denke deswegen, dass ich keine Konstantstromquelle brauche, sondern 
so einen Chip.  Ich weiß leider wirklich nur nicht welchen und hoffe 
deswegen hier auf Hilfe.

Danke auf jeden Fall für deine zügige Antwort.

Wenn mir noch jemand helfen kann, dafür aber noch irgendwelche 
Informationen braucht, so sagt nur welche, ich stelle die Infos dann 
hoch.

von Franz S. (franz_0815)


Lesenswert?

Hallo
Ohne alles durchzulesen ,es gibt doch ein Controllerboard für das 
Display.
Dort wird dann sehr wahrscheinlich die BL Spannung erzeugt.

Man könnte nach den Schaltplänen suchen.

Viel Glück,kenne das man viele unbekannte parameter ..
Ansonsten kleines Labornetzteil und die BL Spannung erzeugen.
Da muss man aber vorsichtig sein,kann das Display auch zerstören.
Oder auch nach BL Converter suchen.

http://www.newhavendisplay.com/specs/NHD-4.3-480272MF-34-Controller-Board.pdf

von Ben B. (Gast)


Lesenswert?

Franz Suahnein schrieb:
> Hallo
> Ohne alles durchzulesen ,es gibt doch ein Controllerboard für das
> Display.
> Dort wird dann sehr wahrscheinlich die BL Spannung erzeugt.

Ja, gibt es. Das würde aber den Sinn vom BBB wegnehmen, weswegen ich das 
Controllerboard nicht benutzen möchte.

> Man könnte nach den Schaltplänen suchen.

http://bear24rw.blogspot.de/2013/07/beaglebone-gam...

Hier ist auch der schematische Aufbau der Schaltung:
http://i.imgur.com/ehuqfwy.png

> Viel Glück,kenne das man viele unbekannte parameter ..
> Ansonsten kleines Labornetzteil und die BL Spannung erzeugen.
> Da muss man aber vorsichtig sein,kann das Display auch zerstören.
> Oder auch nach BL Converter suchen.
>
> http://www.newhavendisplay.com/specs/NHD-4.3-480272MF-34-Controller-Board.pdf

Danke.
Die Tabelle ist:
http://www.ti.com/apps/docs/viewdevices.tsp?blockDiagramId=6181&blockId=12748&designOptionId=24198&appId=476

Einer davon ist der richtige Baustein. Ich weiß leider nur nicht 
welcher.

von Franz S. (franz_0815)


Lesenswert?

http://www.ti.com/product/tps61080

Dieser ist doch im Schaltplan 27V 500mA

Der TPS61150 macht auch 27V ..
da bracucht man aber auch noch die richtige Spule usw.

Es gibt auch DCDC Wandler mit kleiner Leistung.

Da würde ich wie schon geschrieben zunächst ein Labornetzteil mit 
Strombegrenzung nehmen.
Und drauf achten ob die Spannung negativ oder positiv ist.

Wie wird die Kontrast Spannung eingestellt ?
Bei den einfachen Displays wird das ja oft mit einem Poti geregelt der 
dann die BL Spannung regelt.

Viel Glück.

von Ben B. (Gast)


Lesenswert?

Franz Suahnein schrieb:
> http://www.ti.com/product/tps61080
>
> Dieser ist doch im Schaltplan 27V 500mA

Ja. Und das ist das Problem ich brauch ja 40mA @ 19.2V. Das klingt jetzt 
naiv, aber ich weiß nicht, ob nicht auch einfach diesen nehmen kann. Ich 
kenne mich in der Elektronik nicht so gut aus.


> Es gibt auch DCDC Wandler mit kleiner Leistung.

Gibt es die auch für solche Größen ? Von 5V auf fast 20V ?

> Da würde ich wie schon geschrieben zunächst ein Labornetzteil mit
> Strombegrenzung nehmen.
> Und drauf achten ob die Spannung negativ oder positiv ist.

Ich werde das mal versuchen. Es ist aber keine endgültige Lösung. Ich 
brauche so einen Chip später für die Platine und ähnliches.

> Wie wird die Kontrast Spannung eingestellt ?
> Bei den einfachen Displays wird das ja oft mit einem Poti geregelt der
> dann die BL Spannung regelt.

Hab ich leider keine Ahnung von. Das Poti wird durch den PWM pin 
ersetzt. Soviel weiß ich mittlerweile. Wie und ob das geht weiß ich 
leider nicht.

> Viel Glück.

Danke

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.