Hab mir jetzt auch mal zwei von den Pollin LCDs bestellt...
Hallo Besucher, der Thread wurde 32k mal aufgerufen und enthält 170 Antworten
letzter Beitrag von Vorph am
LCD am sd2iec [EXPERTENRUNDE]
- jackdaniels
- Erledigt
-
-
Supi, dann kannst du den Plan von mir gleich überarbeiten und verbessern!
znarF -
Supi, dann kannst du den Plan von mir gleich überarbeiten und verbessern!
Haha, nein.
Ich werde die Draco-Variante nehmen -
Ich werde die Draco-Variante nehmen
An der Draco-Variante bin ich auch gerade dran, habe aber als LCD das von Reichelt genommen => LCD 162C für 6,80 € (2x16), da ich dafür auch gleich das notwendige Datenblatt für den Anschluss gefunden habe - leider geht der passende Frontrahmen (LCD Front 2) mit 6,30 € nochmals ins Geld.
Da das Gehäuse durch das Display eh größer sein muss, möchte ich diesmal keine PeterSieg-Platine benutzen, sondern einen Lochrasteraufbau, muss also erstmal den Lochrasteraufbau hinbekommen und dann das LCD noch ranmachen, dass kann noch etwas dauern ....Hier das Display:
LCD 162c.jpg -
Stimmt, eigentlich liegt ja nur die config-example bei in der ein Eintrag vergessen wurde. Nimm einfach die angehängte Datei, umbenannt in "config".Edit: Nein, da fehlt doch kein Eintrag - nimm wahlweise die angehängt config oder config-example, sollte beides funktionieren.
Hat super funktioniert!
CodeJetzt muss ich das hex File nur mehr in den Atmega flashen, kann mir jemand bitte noch mitteilen welche Fuses ich im Ponyprog setzen muss?
lg,
znarFEdit: Ups, ich muss ja auch noch nen ISP Stecker am Atmega ranbasteln!!!
Kann ich die Zuordnung vom sd2iec 1.2 ISP nehmen? -
Kann ich die Zuordnung vom sd2iec 1.2 ISP nehmen?
Ja. ISP ist nur abhängig vom ATmega Typ. Und auch da ist es oft gleich, zb. haben alle DIL-40 Atmega die ISP Pins an derselben Stelle (Atmega32, Atmega644 ...).
-
Ja. ISP ist nur abhängig vom ATmega Typ. Und auch da ist es oft gleich, zb. haben alle DIL-40 Atmega die ISP Pins an derselben Stelle (Atmega32, Atmega644 ...).
Bei einigen (zB mega8515) muss man trotzdem etwas aufpassen, da liegen zwar die ISP-Anschlüssen auf den gleichen Pins, die Stromversorgung aber nicht.Mich würde jetzt mal interessieren, wie das mit dem Disk-Change und LCD gelöst wird. Wenn beide die gleichen Anschlüsse benützen.
Wo verwenden denn Disk-Change und LCD die gleichen Anschlüsse?Jetzt muss ich das hex File nur mehr in den Atmega flashen, kann mir jemand bitte noch mitteilen welche Fuses ich im Ponyprog setzen muss?
Die gleichen als ob du den für ein Lochraster-MMC2IEC verwenden würdest, je nach Wunsch mit oder ohne Quarz.Compilieren des Hauptprogrammes hat auch funktioniert? Das Display tut zwar im Prinzip auch ohne, aber nur "Waiting for data..." zu sehen ist auf Dauer etwas langweilig.
-
mal wieder paar allgemein psotings in den anderen Thread verschoben...
LCD am sd2iec [fragen und antworten]
es gibt nicht zum Spass zwei Thread zum gleichen Thema, wenn hier noch jedes Detail nebneher geklärt wird, wird es doch arg unübersichtlich...sl FXXS
-
Compilieren des Hauptprogrammes hat auch funktioniert? Das Display tut zwar im Prinzip auch ohne, aber nur "Waiting for data..." zu sehen ist auf Dauer etwas langweilig.
Ja, ich bilde mir ein 2 .bin Files gesehen zu haben, einmal nur die "sd2iec.bin" und einmal inkl. Versionsnummerangabe im Dateinamen.
Zitatmal wieder paar allgemein psotings in den anderen Thread verschoben...
Merci
znarF -
Wie ich sehe ist dort bereits für ein 2Zeiliges die Einstellung gemacht. Kann das sein?
znarF hat noch angedeutet, dass man definieren kann, was wo am Display angezeigt wird. Geht das?. Wenn ja wo?
Habe gerade versucht das Hauptprogramm zu kompilieren und bekomme dabei einige Fehler:
Code- D:\make>make
- gawk: gcctest.awk:7: fatal: match() cannot have 3 arguments
- MKDIR obj-m644p
- CONF2H config
- AS fastloader-ll.S
- CC buffers.c
- CC crc7.c
- CC d64ops.c
- CC diskchange.c
- CC diskio.c
- CC doscmd.c
- CC eeprom.c
- CC errormsg.c
- CC fastloader.c
- CC fatops.c
- CC ff.c
- CC fileops.c
- CC iec.c
- CC led.c
- CC m2iops.c
- CC main.c
- CC parser.c
- CC sdcard.c
- CC spi.c
- CC timer.c
- CC uart.c
- CC utils.c
- LINK obj-m644p/sd2iec.elf
- BIN obj-m644p/sd2iec.bin
- CRCGEN obj-m644p/sd2iec.bin
- process_begin: CreateProcess(NULL, crcgen-new obj-m644p/sd2iec.bin 0xf000 0x314
- 4549 0x0810, ...) failed.
- make (e=2): Das System kann die angegebene Datei nicht finden.
- make: [obj-m644p/sd2iec.bin] Error 2 (ignored)
- COPY sd2iec-sw2-firmware-0.8.1.bin
- HEX obj-m644p/sd2iec.hex
- SIZE obj-m644p/sd2iec.elf
- obj-m644p/sd2iec.elf :
- section size addr
- .data 16 8388864
- .text 55484 0
- .bss 3128 8388880
- .eeprom 13 8454144
- .stab 4008 0
- .stabstr 36 0
- Total 253616
können die ignoriert werden?
Habe die config-sw2 für das SD2IEC V1.2 von Shadowolf genommen -
crcgen-new
Dieses Tool fehlt. Wenn ich mich recht erinnere, ist das dazu da, die Prüfsumme zu berechnen, damit der Bootloader die Datei akzeptiert. Schau doch mal, ob das Tool im repository ist, kompilier es für Deinen Rechner und packe es in den Pfad. Vielleicht hilft das. -
Zitat
Dieses Tool fehlt. Wenn ich mich recht erinnere, ist das dazu da, die Prüfsumme zu berechnen, damit der Bootloader die Datei akzeptiert.
Das wars! Hab die crcgen-new.c und crcgen-new.exe auf http://sd2iec.de/ gefunden und ins root kopiert.Jetzt bekomme ich nur mehr den Fehler ganz oben:
gawk: gcctest.awk:7: fatal: match() cannot have 3 argumentsWo ist der Unterschied zwischen der sd2iec.bin und sd2iec-sw2-firmware-0.8.1.bin
Größenmäßig sind beide ident.Habe jetzt auch die Schaltung für meine Zwecke gezeichnet. (siehe Anhang)
Vielleicht kann jemand seinen Senf dazugeben ob das so funktionieren würde.
Sind vielleicht noch irgendwelche Bauteile notwendig für die Schaltung?Was mir noch aufgefallen ist das es 2 LCD E-Anschlüsse gibt. Ich gehe mal davon aus das hier ein zweites Display drann soll. Bzw. der Anschluss für das 4-Zeilige gedacht ist. Oder werden die gar zusammengeschlossen?
Ich möchte das ganze jedoch gerne mit einem 2-Zeiligen betreiben.
Geht das überhaupt?znarF, du hast da noch einen Kondensator in deiner Schaltung. Wozu dient der?
-
znarF, du hast da noch einen Kondensator in deiner Schaltung. Wozu dient der?
Aha, jetzt baust du doch die Display Steuerung von Unseen nach! Der Kondensator ist für die Kontraststeuerung gedacht, das ist nämlich so im Datenblatt vom Display vermerkt.
Welche Daten hast du jetzt in der lcd.h eingetragen?
Wie wirst du den Atmega programmieren?
Hast du auch eine sd2iec.0.X.bin Datei in den kompilierten Dateien?
znarF -
Zitat
Aha, jetzt baust du doch die Display Steuerung von Unseen nach!
Ja, du hast mich auf den Geschmack gebracht. Die Sache mit dem Encoder ist vielleicht doch nicht so eine unfeine Sache.ZitatWelche Daten hast du jetzt in der lcd.h eingetragen?
Daran habe ich eigentlich nichts verändert.
Ich habe vorerst mal überhaupt alles so belassen wie es von Unseen auf seiner Linkpage vorliegt.Das einzige was mir eben aufgefallen ist, dass in der config.h die Einstellungen für das Display gemacht werden.
Wie muß ich es ändern damit ich ein 2-zeiliges ansprechen kann?ZitatWie wirst du den Atmega programmieren?
Ich hab mir vor einiger Zeit einen programmieradapter gebastelt (siehe Anhang) Den kann ich mit dem mySmartUSB oder mittels ISP dann programmieren.
Einen ISP-Anschluss auf die Displayplatine zu basteln ist sicher auch keine schlechte Idee.ZitatHast du auch eine sd2iec.0.X.bin Datei in den kompilierten Dateien?
Ja, eine sd2iec.bin und eine sd2iec-sw2-firmware-0.8.1.bin
Weißt du wo der Unterschied ist? -
Die gleichen als ob du den für ein Lochraster-MMC2IEC verwenden würdest, je nach Wunsch mit oder ohne Quarz.
Könnte mir vielleicht jemand dazu genauere Angaben machen?
-
Jetzt bekomme ich nur mehr den Fehler ganz oben:
gawk: gcctest.awk:7: fatal: match() cannot have 3 arguments
Wie ich anderswo schonmal erwähnt hatte: Das liegt daran, dass bei WinAVR ein gawk mitgeliefert wird das aus dem letzten Jahrtausend stammt.Neuere Versionen davon hätten mit dem Script kein Problem, aber da es nur dazu dient etwas bessere Optimierungen bei gcc 4.3 einzuschalten die gcc 4.1/4.2 noch nicht kennt und im Versagensfall einfach die Optionen für 4.1 verwendet werden sollte das kein Problem sein.
ZitatWo ist der Unterschied zwischen der sd2iec.bin und sd2iec-sw2-firmware-0.8.1.bin
Größenmäßig sind beide ident.
Auch ihr Inhalt ist identisch.ZitatWas mir noch aufgefallen ist das es 2 LCD E-Anschlüsse gibt. Ich gehe mal davon aus das hier ein zweites Display drann soll. Bzw. der Anschluss für das 4-Zeilige gedacht ist. Oder werden die gar zusammengeschlossen?
Das 27x4-Display mit dem ich entwickelt habe hat zwei E-Anschlusse, einen für die obere und einen für die untere Hälfte. Andere Displays haben nur einen, dann wird in der config.h (wie im Kommentar vermerkt) LCD_E2 und LCD_ROWS_BOTTOM beide als 0 definiert.ZitatIch möchte das ganze jedoch gerne mit einem 2-Zeiligen betreiben.
Geht das überhaupt?
Sicher: LCD_E2 und LCD_ROWS_BOTTOM als 0 definieren und den Code in main.c so ändern, dass keine Zugriffe auf die beiden unteren Zeilen mehr erfolgen weil es sonst mit ziemlicher Sicherheit Abstürze gibt.ZitatKönnte mir vielleicht jemand dazu genauere Angaben machen?
Nein, ich rechne Fusebits immer nach Bedarf via http://www.engbedded.com/fusecalc/ aus. -
Sicher: LCD_E2 und LCD_ROWS_BOTTOM als 0 definieren und den Code in main.c so ändern, dass keine Zugriffe auf die beiden unteren Zeilen mehr erfolgen weil es sonst mit ziemlicher Sicherheit Abstürze gibt.
OK, ich gehe mal davon aus das dies dieser Teil sein müßte:
Code- * This function updates the partition number in the fourth
- * line of the display to show part.
- */
- static void set_part(uint8_t part) {
- char *ptr = &lcdline[3].contents[STATUS_PART];
- lcdline[3].contents[STATUS_PART] = ' ';
- lcdline[3].contents[STATUS_PART+1] = ' ';
- lcdline[3].contents[STATUS_PART+2] = ' ';
- if (part > 100)
- *ptr++ = '0'+part/100;
- if (part > 10)
- *ptr++ = '0'+(part%100)/10;
- *ptr = '0'+(part%10);
- lcdline[3].updated = 1;
- updatedisplay++;
- }
Wenn ich statt der 3 (lcdline[3]) eine 1 hinsetze müßte das passen, oder?
Bzw. alles was auf 3 hindeutet durch 1 ersetzen?ZitatNein, ich rechne Fusebits immer nach Bedarf via http://www.engbedded.com/fusecalc/ aus.
Ausrechnen gut und schön, wenn man weiß was man ausrechnen muß.
Wovon hängt es ab welche Fuses eingestellt werden?
Wozu muß ich überhaupt Fuses setzen?
Ich habe hier einen ATMega 644 den ich wie in meiner Schaltung oben betreiben will. -
OK, ich gehe mal davon aus das dies dieser Teil sein müßte:
Alle Zugriffe auf lcdline[2] und lcdline[3] sowie alle Aufrufe von set_line(2, ...ZitatWovon hängt es ab welche Fuses eingestellt werden?
Davon, welche durch die Fuses definierbaren Einstellungen wie gesetzt werden sollen. Das sind beispielsweise die Taktquelle, Grösse und Vorhandensein eines Bootloaders und das Abstellen von Programmierinterfaces (ISP/JTAG). -
Alle Zugriffe auf lcdline[2] und lcdline[3] sowie alle Aufrufe von set_line(2, ...
Ok
In Zeile 3 wird die Partitionsnummer (was ist das?) und Laufwerksadresse angezeigt
In Zeile 4 der Fehlerkanal
korrekt?
Oder wird 3 und 4 noch für etwas anderes genutzt?Wenn ich diese Dinge nicht benötige reicht es wenn ich diese Code-Blöcke einfach komplett lösche:
Code- static void set_part(uint8_t part) {
- char *ptr = &lcdline[3].contents[STATUS_PART];
- lcdline[3].contents[STATUS_PART] = ' ';
- lcdline[3].contents[STATUS_PART+1] = ' ';
- lcdline[3].contents[STATUS_PART+2] = ' ';
- if (part > 100)
- *ptr++ = '0'+part/100;
- if (part > 10)
- *ptr++ = '0'+(part%100)/10;
- *ptr = '0'+(part%10);
- lcdline[3].updated = 1;
- updatedisplay++;
- }
Muß für ein 16-Zeichenbreite auch noch etwas angepasst werden? Du hast in einem älteren Beitrag erwähnt das dann die Zeile gescrollt wird.
-
In Zeile 3 wird die Partitionsnummer (was ist das?) und Laufwerksadresse angezeigt
In Zeile 4 der Fehlerkanal
korrekt?
Umgekehrt.Die Partitionsnummer ist die Nummer der Partition die gerade angesprochen wird, hochgezählt über alle gleichzeitig angeschlossenen Speichermedien. Wenn nur ein einzelner SD-Slot vorhanden ist wird die fast immer 1 sein, da es nicht ganz einfach ist mit Windows mehr als eine Partition auf einer SD-Karte anzusprechen.
ZitatWenn ich diese Dinge nicht benötige reicht es wenn ich diese Code-Blöcke einfach komplett lösche:
Wenn du das so machst, dass das Ergebnis noch compiliert und nichts anspringt was eigentlich nicht gemeint ist...ZitatMuß für ein 16-Zeichenbreite auch noch etwas angepasst werden? Du hast in einem älteren Beitrag erwähnt das dann die Zeile gescrollt wird.
Das Layout der Statuszeile ist auf 27 Zeichen angepasst (und würde auch scrollen wenn das Display schmaler ist), alles andere verwendet IIRC so viel wie gerade benötigt wird und scrollt wenn das mehr Zeichen sind als ins Display passen.