Hallo zusammen, ich bin relativ neu in der Szene (hab mir vor kurzem ein STK500 gekauft). Mein Problem ist das ich ein 4x40 LCD ansteuern möchte. Beide Enable PINs sind angeschlossen und funktionieren auch "fast". Benutz dazu die Library von P.Fleurys. Da die aber keine zwei Controller ansteuern kann, hab ich ein bisschen im Code herumgepfuscht... das will aber nicht so richtig (und ist auch ziemlich Quick&Dirty ;-) ) kann zwar beide Controller ansteuern... bekomme aber hin und wieder nach einem Reset/Power off/on komischen Datenmüll auf dem 2. Controller ;-) Gibt es vielleicht schon vorgefertigte LCD librarys die 4x40 LCDs beherschen? oder vielleicht eine angepasst lcdlibrary version? Benutz Avr-Studio sowie den avr-gcc Compiler Danke. Grüße, Frank
>Da die aber keine zwei Controller ansteuern kann, hab ich ein bisschen >im Code herumgepfuscht... das will aber nicht so richtig (und ist auch >ziemlich Quick&Dirty ;-) Na dann würde ich doch mal alles sauber aufsetzen, und dann klappt es auch...
Hallo Frank. Ich muss Dennis recht geben. Nimms erstmal auseinander und schreib es neu. Hat den vorteil das mehr oder weniger genau weißt was du machst. Tipp. Falls du das nicht eh schon gemacht hast dann kontrolliere nochmal alle Steuerbefehle.Da gibt es gerne mal Unterschiede.Also muss das richtige Datenblatt her. Wegen dem Verhalten beim Reset, es könnte an der Initialisierung liegen Viel Erfolg.
Hi, also im Code selbst "switch" ich einfach zwischen den beiden Controllern. Da ja alles Parallel angeschlossen ist ( außer die beiden Enable Pins E1 und E2 ) sollte das doch eigentlich möglich sein? Habe jeweils die funktionen die die Enable pins high/low setzen angepasst:
1 | void setController(uint8_t controller) { |
2 | |
3 | use_controller = controller; |
4 | |
5 | }
|
6 | |
7 | |
8 | void lcd_e_high() { |
9 | |
10 | if (use_controller == 1) { |
11 | LCD_E1_PORT |= _BV(LCD_E1_PIN); |
12 | } else if (use_controller == 2) { |
13 | LCD_E2_PORT |= _BV(LCD_E2_PIN); |
14 | }
|
15 | |
16 | }
|
17 | |
18 | |
19 | void lcd_e_low() { |
20 | |
21 | if (use_controller == 1) { |
22 | LCD_E1_PORT &= ~_BV(LCD_E1_PIN); |
23 | } else if (use_controller == 2) { |
24 | LCD_E2_PORT &= ~_BV(LCD_E2_PIN); |
25 | }
|
26 | |
27 | }
|
Und logischerweise Initialisiere ich dann beide Controller, und schreib auf beiden das gleiche:
1 | setController(1); |
2 | lcd_init(LCD_DISP_ON); |
3 | lcd_clrscr(); |
4 | |
5 | |
6 | |
7 | setController(2); |
8 | lcd_init(LCD_DISP_ON); |
9 | lcd_clrscr(); |
10 | |
11 | setController(1); |
12 | lcd_gotoxy(0,1); |
13 | lcd_puts("blabla"); |
14 | |
15 | |
16 | setController(2); |
17 | lcd_gotoxy(0,1); |
18 | lcd_puts("blabla"); |
Manchmal kommt Datenmüll ( eher wenn ich dem Strom ganz weg nimm und wieder gib ) manchmal nicht. Hat wohl irgendwas mit den Timings zu tun. Ein Delay zwischen dem Controller wechseln bringt irgendwie auch nix :-( Bin mit meinem unprofessionellen C Kentnissen eigentlich am Ende. Einer vielleicht noch ne Idee wo ich ansetzen könnt? Grüsse, Frank
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.