Hallo Habe auf meiner Platine eine LCD Anzeige Leider habe ich die vier Datenleitungen verkehrt angeschlossen(4bit modus) Ich habe die Bibliothek "lcd-routines" die auf auf dieser Seite im lcd tutorial verwendet werden Gibt es irgend eine einfache Lösung die Software so zu ändern, dass ich dieses Problem beheben kann? Lg
Gast
#5426669
Ja
Dieter F. schrieb: > Ja Könntest du mir dabei helfen?
Gast
#5426680
Schreib' dir doch zwei Funktionen, die das entsprechend korrigieren und hänge die an Stellen, wo gelesen oder geschrieben wird in den Code der Library ein. Geht ziemlich simpel mit z.b. einer Lookup-Tabelle.
Gast
#5426681
Armin P. schrieb: > Dieter F. schrieb: >> Ja > > Könntest du mir dabei helfen? Kann er bestimmt.
Gast
#5426685
Armin P. schrieb: > Könntest du mir dabei helfen? Gerne - wenn ich nähere Informationen hätte :-) Armin P. schrieb: > Leider habe ich die vier Datenleitungen verkehrt angeschlossen ??? Schaltplan - richtig / falsch Armin P. schrieb: > die auf auf dieser Seite im lcd > tutorial Vermutlich hier, auf "microcontroller.net" aber ein Link wäre hilfreich .. Armin P. schrieb: > die Software Kennt hier niemand ... LG Dieter
Gast
#5426688
Armin P. schrieb: > Dieter F. schrieb: >> Ja > > Könntest du mir dabei helfen? Einfach die 4 Bits geeignet umsortieren, bevor Du sie auf den Port schreibst. Das geht mit Schiebe- und Maskierbefehlen (AND, OR, NOT, etc)
Gast
#5426692
priot schrieb: > geeignet Ja, da liegt der Schmackes - wenn es das wirklich ist.
In der LCD Lib von Peter Fleury kannst du die Datenleitungen einzeln bestimmen. Sie sollten nur auf dem gleichen Port sein: http://homepage.hispeed.ch/peterfleury/avr-software.html
Gast
#5426697
Matthias S. schrieb: > In der LCD Lib von Peter Fleury kannst du die Datenleitungen einzeln > bestimmen. So lange er nichts offen legt kann auch niemand helfen - oder?
Gast
#5426699
Dieter F. schrieb: > priot schrieb: >> geeignet > > Ja, da liegt der Schmackes - wenn es das wirklich ist. Da wird er selber sicher drauf kommen, wenn er falschen und richtigen Anschluss vergleicht..., glaube ich... Es sind ja angeblich nur die Datenleitungen falsch angeschlossen (vertauscht, irgendwie...)
Gast
#5426700
Armin P. schrieb: > Leider habe ich die vier Datenleitungen verkehrt angeschlossen(4bit > modus) Das kommt jetzt ein bisschen drauf an, wie verkehrt du sie angeschlossen hast. Eventuell reicht es schon, wenn du in der Funktion lcd_out() den Aufruf von mirror() auskommentierst oder an dein Pinverdrehung anpasst.
>> Könntest du mir dabei helfen? > > Gerne - wenn ich nähere Informationen hätte :-) Software https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung Schaltplan und Software im Anhang
Wolfgang schrieb: > Armin P. schrieb: >> Leider habe ich die vier Datenleitungen verkehrt angeschlossen(4bit >> modus) > > Das kommt jetzt ein bisschen drauf an, wie verkehrt du sie > angeschlossen hast. Eventuell reicht es schon, wenn du in der Funktion > lcd_out() den Aufruf von mirror() auskommentierst oder an dein > Pinverdrehung anpasst. Ich haben sie anstatt in aufsteigender Reihenfolge in absteigender angeschlossen
Gast
#5426718
Armin P. schrieb: > Ich haben sie anstatt in aufsteigender Reihenfolge in absteigender > angeschlossen Dann musst du also in der Software von den 4 Bit nur das 1te mit dem 4ten und das 2te mit dem 3ten vertauschen. Guck dir einfach mal an, was in mirror() bei den Bit-Operationen passiert. Das sind überschaubare 3 Zeilen Code.
Wolfgang schrieb: > Armin P. schrieb: >> Ich haben sie anstatt in aufsteigender Reihenfolge in absteigender >> angeschlossen > > Dann musst du also in der Software von den 4 Bit nur das 1te mit dem > 4ten und das 2te mit dem 3ten vertauschen. Guck dir einfach mal an, was > in mirror() bei den Bit-Operationen passiert. Das sind überschaubare 3 > Zeilen Code. Muss ich die highbits oder lowbits vertauschen?
Gast
#5426733
Armin P. schrieb: > Muss ich die highbits oder lowbits vertauschen? Ein Programmierer der halbwegs bei Verstand ist benutzt für 4 Bits die untere Hälfte des Bytes - aber so wie du fragst kann man das bei dir nicht voraussetzen. Aber wir wissen darüber noch weniger als du, soweit das möglich ist. Georg
Gast
#5426734
Armin P. schrieb: > Muss ich die highbits oder lowbits vertauschen? Die, die du verdreht angeschlossen hast ;-)
Gast
#5426737
georg schrieb: > Ein Programmierer der halbwegs bei Verstand ist benutzt für 4 Bits die > untere Hälfte des Bytes Zumindest bei vielen LCD sind sie als DB4 bis DB7 bezeichnet. Aber man achte auf den roten Hinweis - es kann auch anders sein. https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung#Anschluss_an_den_Controller
Gast
#5427304
am einfachsten wäre es die 4 Datenleitungen zu unterbrechen und mit ganz dünnen Draht richtig zuzuordnen.
Gast
#5427321
Manni schrieb: > am einfachsten wäre es die 4 Datenleitungen zu unterbrechen und mit ganz > dünnen Draht richtig zuzuordnen. Quatsch! Mit Software ist das eine Kleinigkeit.
Gast
#5427327
Harald schrieb: > Quatsch! Mit Software ist das eine Kleinigkeit. Wenn mann hier aber nach Hilfe sucht die Alternative.
Harald schrieb: > Quatsch! Mit Software ist das eine Kleinigkeit. für die einen die nicht wissen wie sie den Lötkolben halten sollen :) andere tun sich mit dem Lötkolben leichter
Armin P. schrieb: > Gibt es irgend eine einfache Lösung die Software so zu ändern, dass ich > dieses Problem beheben kann? Man kann beliebige IO-Pins fürs LCD verwenden: https://www.avrfreaks.net/forum/tutc-lcd-tutorial-1001
Auch die o.a. Lib von Fleury kommt mit so einer Belegung ohne Klimmzüge klar.
Gast
#5427389
Sonst ist vielleicht Arduino das richtige Framework. Der Constructor erlaubt ebenfalls eine freie Definition der Pin-Zuordnung. https://www.arduino.cc/en/Reference/LiquidCrystalConstructor
Beitrag #5427409 wurde von einem Moderator gelöscht.
Gast
#5427413
Versuch mal:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Nicht das ganze Byte spiegeln, nur die beiden Nibbles in sich (wg. Nibble Ausgabe).
Heinz R. schrieb: > Versuch mal: > >
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
> > Nicht das ganze Byte spiegeln, nur die beiden Nibbles in sich (wg. > Nibble Ausgabe). Danke müsste jetzt eigentlich funktionieren, macht es aber nicht... rufe ich die Funktion mirror an der richtigen Stelle auf?
Gast
#5427491
Scheint ein echt schwieriges Thema zu sein. Mit Cuttermesser, Lötkolben, Lötzinn und Fädeldraht wäre das ne sache von 15min, aber Armin P. schrieb: >> Nicht das ganze Byte spiegeln, nur die beiden Nibbles in sich (wg. >> Nibble Ausgabe). > > Danke müsste jetzt eigentlich funktionieren, macht es aber nicht... > rufe ich die Funktion mirror an der richtigen Stelle auf? Stelle ist doch wie Original im Code. Code zunächst auch. Ich würde nur die Nibbles tauschen und diese nicht in sich verdrehen... Also unsigned char mirror( unsigned char n ) { return(((n >> 4) & 0x0f) | ((n << 4) & 0xf0)); }
Gast
#5427519
Mit C kennen ich mich nicht aus. Was macht diese Zeile (lcd-routine.c):
1 | |
Gast
#5427547
Harald schrieb: > Mit C kennen ich mich nicht aus. Was macht diese Zeile (lcd-routine.c): Dann nimm irgendeine andere Programmiersprache du du verstehst oder lerne C. Was genau verstehst du an der Zeile nicht. C-Tutorien und Referenzen über bitweise Operatoren gibt es nun wirklich genug, z.B. https://en.wikipedia.org/wiki/Bitwise_operations_in_C
Gast
#5427560
Wolfgang schrieb: > Harald schrieb: >> Mit C kennen ich mich nicht aus. Was macht diese Zeile (lcd-routine.c): > > Dann nimm irgendeine andere Programmiersprache du du verstehst oder > lerne C. > > Was genau verstehst du an der Zeile nicht. > C-Tutorien und Referenzen über bitweise Operatoren gibt es nun wirklich > genug, z.B. https://en.wikipedia.org/wiki/Bitwise_operations_in_C Es ist ja nicht nur das Was, sondern auch das Warum. Wofür steht das "LCD_DB" im Ausdruck? Ein kurze Erklärung würde mir weiterhelfen.
Da wäre PB 0 also 0 das erste Pin wo die Datenleitungen angeschlossen werden
Harald schrieb: > Wofür steht das "LCD_DB" im Ausdruck?
1 | |
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung#Datei_lcd-routines.h
Gast
#5427629
Harald schrieb: > Wofür steht das "LCD_DB" im Ausdruck? LCD_DB ist in der Datei lcd-routines.h deiner Library, den du nicht verlinkt hast, ziemlich am Anfang definiert als "PD0". Die Ersetzung macht der Preprozessor bevor der Sourcecode in den Compiler geht. > #define LCD_DB PD0
Harald schrieb: > Quatsch! Mit Software ist das eine Kleinigkeit. Aber nicht für den TO. In der Zeit, die er hier erfolglos im Thread verplempert, hätte er die paar Drähtchen schon 10 mal umlöten können,
Gast
#5428416
Armin P. schrieb: > Da wäre PB 0 also 0 das erste Pin wo die Datenleitungen angeschlossen > werden Ja und Nein Das Ding heißt "PB0". Mit Leerzeichen dazwischen wird dir der Compiler das bestenfalls um die Ohren hauen oder - viel schlimmer - falls ein PB bei dir irgendwo definiert ist, heimlich irgendwelchen Mist machen, den du gar nicht beabsichtigst. Computer machen immer das, was man ihnen sagt - nicht das, was man man meint.
Dirk J. schrieb: > Aber nicht für den TO. In der Zeit, die er hier erfolglos im Thread > verplempert, hätte er die paar Drähtchen schon 10 mal umlöten können, Hi, also, ich mache erst eine Zeichnung. Denn die Verwirrung wird sonst immer größer. Wichtig: vorab klären, wie das tatsächliche Pinout des LCDs aussieht. Dann, der HD44780 Standard verlangt im 4-Bit-Modus immer zunächst das Highnibble. Dann im zweiten Durchgang das Lownibble. (Andersherum kommen andere Zeichen aus dem Zeichensatz heraus. z.B. ein griechischer Buchstabe "Sigma") Daran soll man nichts ändern. Dann die Portbelegung der tatsächlich verwendeten MCU. Zum Beispiel: Der ATtiny2313 hat auf Port D nur 7 Bit. (Einige Libs. verschieben durch "ror" einfach in der Routine.) Die Ausgaberoutinen (nach erfolgreich verlaufener Initialisierung vorausgesetzt) bei 4-Bit: Kopie des Ausgaberegisterinhalts (für Operation unten) Ausmaskieren des Highnibble Ausgeben, wenn Port die oberen 4-Bit verwendet. Oder: Jetzt schon swappen. Und ausgeben. Im Zweiten Durchgang Ausgabe ohne Swappen. Oder: genau andersherum, wenn Ausgabeport dan der MCU die "unteren" 4 Bit verwendet. Sind die Bits in sich verdreht. ror oder rol vor die Ausgabe. Bis sie stimmen. Wo liegt das Problem? ciao gustav P.S.: Über R1 bis R4 braucht man nicht diskutieren. Können entfallen. In der Mehrzahl der Fälle diese Anschlüsse einfach offenlassen. (Ausnahmen siehe Datenblatt für korrekte Beschaltung.) Der rote Schrumpfschlauch wurde anschließend über die "Kreuzungen" geschoben und erhitzt.
Hi, noch Links: Beitrag "Re: HD44780+PIC18F25k22 Rise Time Probleme?" ciao gustav
Gast
#5428668
Mach es erstmal simpel:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
Gast
#5428774
Streiche bitte meinen letzen Beitrag - nehme:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
Hatte übersehen, dass nur das obere Nibble interessant ist. Es braucht auch keine eigene Funktion - die paar "IF"s tuns auch so.
Hi, in asm sieht's vielleicht so aus: ciao gustav
Armin P. schrieb: > Gibt es irgend eine einfache Lösung die Software so zu ändern, dass ich > dieses Problem beheben kann? Es gibt nichts einfacher. Du definierst beliebige Pins für beliebige Funktionen, und im Programm benutzt zu diese Def. Wenn du mal anders brauchst, änderst du nur diese Defs. Beispiel: lcd.h
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 | |
lcd.c
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 | |
Und so weiter...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.


