- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: [erledigt] 4x20 LCD an RN-Control1.4 mit C

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.08.2005
    Alter
    37
    Beiträge
    82

    [erledigt] 4x20 LCD an RN-Control1.4 mit C

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,


    ich habe ein LCD gemäß 4-Bit mit Busy an Port C angeschlossen.
    Das ganze mit WinAVR übertragen:

    Code:
    > "make.exe" program
    
    Compiling C: rn-control.c
    avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./rn-control.lst -I. -std=gnu99 -MMD -MP -MF .dep/rn-control.o.d rn-control.c -o rn-control.o 
    
    Compiling C: lcd.c
    avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./lcd.lst -I. -std=gnu99 -MMD -MP -MF .dep/lcd.o.d lcd.c -o lcd.o 
    
    Linking: rn-control.elf
    avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=rn-control.o -I. -std=gnu99 -MMD -MP -MF .dep/rn-control.elf.d rn-control.o lcd.o --output rn-control.elf -Wl,-Map=rn-control.map,--cref     -lm
    
    Creating load file for Flash: rn-control.hex
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock rn-control.elf rn-control.hex
    
    Creating load file for EEPROM: rn-control.eep
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
    	--change-section-lma .eeprom=0 --no-change-warnings -O ihex rn-control.elf rn-control.eep || exit 0
    avrdude -p atmega32 -P com4 -c stk500v2    -U flash:w:rn-control.hex 
    avrdude: stk500_2_ReceiveMessage(): timeout
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.04s
    
    avrdude: Device signature = 0x1e9502
    avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
    avrdude: erasing chip
    avrdude: reading input file "rn-control.hex"
    avrdude: input file rn-control.hex auto detected as Intel Hex
    avrdude: writing flash (722 bytes):
    
    Writing | ################################################## | 100% 0.89s
    
    avrdude: 722 bytes of flash written
    avrdude: verifying flash memory against rn-control.hex:
    avrdude: load data flash data from input file rn-control.hex:
    avrdude: input file rn-control.hex auto detected as Intel Hex
    avrdude: input file rn-control.hex contains 722 bytes
    avrdude: reading on-chip flash data:
    
    Reading | ################################################## | 100% 0.48s
    
    avrdude: verifying ...
    avrdude: 722 bytes of flash verified
    
    avrdude done.  Thank you.
    
    
    > Process Exit Code: 0
    > Time Taken: 00:22
    Ich habe aber das weit verbreitete Problem mit den 2 schwarzen bzw. 2 weißen Balken.
    Text bekomme ich nicht auf das Display, egal in welcher Zeile
    Code:
    #include <stdlib.h>
    #include <avr/io.h>
    #include "lcd.h"
    #include "rn-control.h"
    
    int main(void)
    {
    	for(;;){
    		/* Initialisiere Display, Cursor aus */
    		lcd_init(LCD_DISP_ON);
    		/* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */
    		lcd_clrscr();
    		/* String auf Display anzeigen */
    		lcd_puts("Hello world.\n");
    		lcd_puts("testme\n");
    	}
    	return 0;
    }
    Ein Datenblatt von dem Display habe ich allerdings nicht
    auf dem Display steht nur was von "JHD 204A".

    Wie bekomme ich Text auf das Display?

    gruß
    pod32

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Entweder ist die Initialisierung falsch. Was bedeutet lcd_init(LCD_DISP_ON)? Sollte das nicht nur lcd_init() heißen?
    Oder das Display ist keines mit HD44780 oder kompatibel

    MfG Hannes

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683

    Re: 4x20 LCD an RN-Control1.4 mit C

    Zitat Zitat von pod32
    ... Wie bekomme ich Text auf das Display ...
    Hmmm, bei mir steht z.B. dies:

    Code:
    #define LCD_DISP_ON              0x0C   /* display on, cursor off                 */
    ... und Hannes hat ja schon festgestellt, dass das bei Dir nicht da ist. Ausserdem vermisse ich beim schnellen drüberschauen bei Dir die einzubindenden Libraries. Andersrum: wo ist bei Dir die Routine lcd_init, die Du im main aufrufst? NUR Abschreiben des codes funktioniert ja leider nicht immer. Hast Du das in der Anleitung gelesen?
    Zitat Zitat von [b
    LCD-Modul am AvR[/b] im RN-Wissen]Verwendet wird die lcdlibrary von Peter Fleury.
    Ciao sagt der JoeamBerg

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.08.2005
    Alter
    37
    Beiträge
    82
    die lcd.h ist 'selbstverständlich' eingebunden.
    Zu allem Überfluss habe ich auch noch die rn-control.h aus dem Demoprogramm drin, falls ich mal von dort eine Funktion brauche (wird ja weg optimiert).

    Die Routine lcd_init steht dann in der lcd.h bzw. lcd.c und das
    Code:
    #define LCD_DISP_ON              0x0C   /* display on, cursor off
    auch.

    Der Linker bindet die lcd.o auch ein...
    Code:
    Linking: rn-control.elf
    avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=rn-control.o -I. -std=gnu99 -MMD -MP -MF .dep/rn-control.elf.d rn-control.o lcd.o --output rn-control.elf -Wl,-Map=rn-control.map,--cref     -lm
    @Hannes:
    Das Display ist zumindest zum HD44780 kompatibel, soviel weiß ich.

    edit: habe ein Datenblatt gefunden:
    http://www.8051projects.net/e107_fil...jm204aspec.pdf


    edit2:
    auf Seite 16, im Flussdiagramm steht, dass man 30ms (bei einer Oszillatorfrequenz von 270kHz) warten muss, bevor man mit dem Initialisieren beginnen kann.
    In der lcd.c, in
    Code:
    void lcd_init(uint8_t dispAttr)
    , in Zeile 556,
    steht im 4-Bit IO Mode eine Verzögerung von 16ms.
    Die Frage ist nun, ob es sich um ein Timing-Problem handelt oder nicht...

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.08.2005
    Alter
    37
    Beiträge
    82
    ich habe nun mal auf Verdacht das Display gegen ein neues, baugleiches getauscht -> keine Änderung.

    Ich habe auch die von Bascom generierte Intel-HEX (aus dem Wiki-Eintrag) übertragen. Selbes Ergebnis, nur 2 Balken.

    Bild 1Bild 2

    Dabei leuchtet die LED2,4,6 und 7

    Könnte es auch an HF-Einflüssen liegen?
    Die Platine unterhalb des Displays ist ein Veroboard (die mit durchgezogenen Leiterbahnen).
    Könnte es sein, dass ich mir damit Störungen einfange?

    Warum bekomm ich nur nichts auf die Anzeige... :\

    P.S. ein Oszi habe ich zur Verfügung...

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683
    Puhhhh - schrecklich ! Brrrrrrrrrrr ! Kannst Du bitte die Bilder kleiner machen? Siehe hier - Punkt 11. Mir fällt bei solchen Breitwandbildern immer der Bildschirm mit Übergewicht vom Tisch.

    Du hast das LCD am Port C des m32. Dummerweise hatte ich nicht gleich geschaltet: hast Du die JTAG Fuses korrekt gesetzt? Siehe hier - lesen bei JTAGEN. Das ist ein dämlicher Fallstrick - in dem war ich auch mal gefangen *nochmehrbrrrrrrrrrrrrrr*. Dabei werden beim m32 PC2 bis PC5 vom JTAG "besetzt". Kann es sein, dass Dein Display an einem oder mehreren dieser Pinne hängt?

    Viel Erfolg
    Ciao sagt der JoeamBerg

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    28.08.2005
    Alter
    37
    Beiträge
    82
    JTAG habe ich disabled, es werden von PORTC der Pin 1 bis 7 genutzt.
    Ich habe alles so angeschlossen, wie im Wiki beschrieben:
    http://www.rn-wissen.de/index.php/LC...8I.2FO_Mode.29

    Screenshot der ausgelesenen FUSES mit AVR-Studio:
    Bild hier  

    echt seltsam das Ganze

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683
    Danke für die geänderte Bilderpräsentation.

    Zitat Zitat von pod32
    JTAG habe ich disabled, es werden von PORTC der Pin 1 bis 7 genutzt. ...
    Ich lese mal in der Beschreibung der RNControl:
    Zitat Zitat von Beschreibung der RNControl
    ... Durch entfernen des Motortreiber IC´s aus der Fassung, steht PC6 und PC7 zur freien Verfügung ...
    Diese Ports hängen an zwei "IN"s des L293D. Ich habe aber keine Ahnung, was das ausmacht (bin auch im Moment zu faul, das zu testen - da müsste ich mein LCD umlöten . . . .).

    Ich gehe mal jetzt davon aus (sorry, steht vielleicht auch hier irgendwo im Thread) dass der Port korrekt initialisiert ist. Das sollte ja durch die Library gut erfolgen. Wenn nicht irgendwann "hinterher" etwas anderes geschrieben steht.
    Ciao sagt der JoeamBerg

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    28.08.2005
    Alter
    37
    Beiträge
    82
    Danke für das Vorlesen aus der Beschreibung *nochnochmehrbrrrr*
    Ich habe das L293D entfernt und zur Sicherheit nochmal neu geflashed.
    Immer noch nur 2 Balken.

    hier meine main:
    Code:
    #include <stdlib.h> 
    #include <avr/io.h>
    #include "lcd.h"
    #include "rn-control.h"
    
    
    /*### Hauptschleife ###*/
    int main(void)
    {
    	for(;;){
    		/* Initialisiere Display, Cursor aus */
    		waitms(30);
    		lcd_init(LCD_DISP_ON);
    		/* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */
    		waitms(20);
    		lcd_clrscr();
    		/* String auf Display anzeigen */
    		waitms(30);
    		lcd_puts("Hello world.\n");
    		lcd_puts("testme\n");
    		lcd_puts("testme\n");
    		lcd_puts("testme\n");
    	}
    	return 0;
    }
    Den I2C nutze ich (wie zu sehen ist) auch nicht.

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683
    Hmmm, ich muss wohl doch mein RNControl auspacken und das LCD umlöten. Wie wärs, wenn Du nach den einzelnen lcd_puts(irgendwas) immer wieder ein waitms (1000) einfügst? Ausserdem würde ich (so als totaler C(äh)-Nobody die for-Schleife erst nach dem lcd_init anfangen lassen.

    Meine Rat(losigkeits)schläge sind wie immer ohne jede Garantie.
    Ciao sagt der JoeamBerg

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests