- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: AsuroLCD Library (BETA) released!!!! v0.2b

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    34
    Beiträge
    184

    AsuroLCD Library (BETA) released!!!! v0.2b

    Anzeige

    Praxistest und DIY Projekte
    Hallo Alle,

    Hier veröffentliche ich AsuroLCDLib v0.2b

    Anwendung: https://www.roboternetz.de/phpBB2/viewtopic.php?t=27620

    v0.1 Features:
    - Unterstützt PCF8574P (Beispiel: https://www.roboternetz.de/wissen/in...BCber_I.C2.B2C )
    - Flexiblere Pinbelegung (Veränderbar in lib)
    - HD447XX kompatibel
    - Print Interger
    - PrintSetLCD( cursor, line, string );
    - PrintAlignLCD( alignment, line, string );
    - ClearLCD();
    - SetIOLCD jetzt so: (ON/OFF, Pinbits);

    v0.2 released!!
    features:
    - Veränderbare Init
    - Kein Zeilensprünge mehr bei längeren String
    - SetCursorLCD jetzt mit line und cursor: SetCursorLCD(cursor, line);
    - Backlight Support
    - PrintWrapLCD
    - GetIOLCD

    v0.2b features:
    - ein bisschen optimiert (inline funktionen weg)
    - PrintLCD und PrintWrapLCD zusammengesetzt zu PrintLCD(string, wrap[ON/OFF]);

    Feedback please...

    @m.a.r.v.i.n: - kannst du mal das mit deinem mehrzeiligen LCD testen?
    @m.a.r.v.i.n: - Mit dem Init, kannst du es flexiblerer machen? ich kennt dein LCD nämlich nicht.

    Tester, Verbesserungen und Verbesserungvorschläge sind willkommen.

    Testprogramm:
    Code:
    #include "lib/i2cmaster.h"
    #include "lib/essential.c"
    #include "lib/lcd.c"
    
    #define DELAY 1500
    
    int main(void)
    {
    	Init();
    	i2c_init();
    	InitLCD();
    	
    	PrintLCD("LCD Testing...");
    	Msleep(DELAY);
    	
    	while(1)
    	{
    		ClearLCD();
    		PrintLCD("Normal");
    		Msleep(DELAY);
    		ClearLCD();
    		PrintSetLCD(3, 0, "Set Cursor");
    		Msleep(DELAY);
    		ClearLCD();
    		PrintSetLCD(0 , 1, "Set Line");
    		Msleep(DELAY);
    		ClearLCD();
    		PrintSetLCD(1 , 1, "Set Cursor Line");
    		Msleep(DELAY);
    		ClearLCD();
    		PrintSetLCD(0 , 0, "Test Int");
    		SetCursorLCD(9);
    		PrintIntLCD(10);
    		Msleep(DELAY);
    		ClearLCD();
    		PrintAlignLCD(LEFT , 0, "LEFT");
    		Msleep(DELAY);
    		ClearLCD();
    		PrintAlignLCD(CENTER , 0, "CENTER");
    		Msleep(DELAY);
    		ClearLCD();
    		PrintAlignLCD(RIGHT , 0, "RIGHT");
    		Msleep(DELAY);
    	}
    	
    	return 0;
    }
    Testprogramm v0.2
    Code:
    #include "lib/i2cmaster.h"
    #include "lib/essential.c"
    #include "lib/lcd.c"
    
    #define DELAY 1500
    
    int main(void)
    {
    	Init();
    	i2c_init();
    	InitLCD();
    	
    	PrintLCD("LCD Testing...");
    	Msleep(DELAY);
    	
    	while(1)
    	{
    		ClearLCD();
    		PrintLCD("Normal");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintSetLCD(3, 0, "Set Cursor");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintSetLCD(0 , 1, "Set Line");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintSetLCD(1 , 1, "Set Cursor Line");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintSetLCD(0 , 0, "Test Int");
    		SetCursorLCD(9, 0);
    		PrintIntLCD(10);
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintAlignLCD(LEFT , 0, "LEFT");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintAlignLCD(CENTER , 0, "CENTER");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintAlignLCD(RIGHT , 0, "RIGHT");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		SetCursorLCD(1,0);
    		PrintWrapLCD("WRAPWRAPWRAPWRAPWRAP WRAP");
    		Msleep(DELAY);
    	}
    	
    	return 0;
    }
    Initialisierung bei v0.2:
    Code:
    ////// LCD INIT COMMANDS
    // !SEE DATASHEET
    // EXAMPLE:
    // #define LCD_INIT {(LCD_4BIT | LCD_1LINE | LCD_5x7), COMMAND2, COMMAND3}
    
    #define LCD_INIT	{(LCD_4BIT | LCD_1LINE | LCD_5X7)}
    v0.2b test:
    Code:
    #include "lib/i2cmaster.h"
    #include "lib/essential.c"
    #include "lib/lcd.c"
    
    #define DELAY 1500
    
    int main(void)
    {
    	Init();
    	i2c_init();
    	InitLCD();
    	
    	PrintLCD("LCD Testing...", OFF);
    	Msleep(DELAY);
    	
    	while(1)
    	{
    		ClearLCD();
    		PrintLCD("Normal", OFF);
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintSetLCD(3, 0, "Set Cursor");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintSetLCD(0 , 1, "Set Line");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintSetLCD(1 , 1, "Set Cursor Line");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintSetLCD(0 , 0, "Test Int");
    		SetCursorLCD(9, 0);
    		PrintIntLCD(10);
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintAlignLCD(LEFT , 0, "LEFT");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintAlignLCD(CENTER , 0, "CENTER");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		PrintAlignLCD(RIGHT , 0, "RIGHT");
    		Msleep(DELAY);
    		
    		ClearLCD();
    		SetCursorLCD(1,0);
    		PrintLCD("WRAPWRAPWRAPWRAPWRAP WRAP", ON);
    		Msleep(DELAY);
    	}
    	
    	return 0;
    }
    [/code]
    Angehängte Dateien Angehängte Dateien
    Gruß Raid

    Der ^^ Mann

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    na das sieht aber sehr schick aus. was ich evtl noch ändern würde, ist dass die erste zeile "1" ist, das erste zeichen aber "0".
    ich würde das allererste zeichen oben links mit "0,0" bezeichen, damit wäre dann die erste zeile die zeile 0.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    34
    Beiträge
    184
    Stimmt, ich frage mich warum ich so gemacht hat .
    !Schon verbessert.
    Gruß Raid

    Der ^^ Mann

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    was passiert wenn man mehr zeichen in den string gibt als auf die restliche zeile des displays passen? ist überhaupt erfasst (DEFINE) wie viele zeichen das display breit ist? sollte es so gemacht werden, dass die übrigen zeichen dann in der nächsten zeile gedruckt werden?
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    34
    Beiträge
    184
    Hi Dalmator,

    die restlichen Zeichen wird einfach nicht gezeigt,
    Hmm, ich werde glaube ich noch PrintWrapLCD einfügen, das problem ist, dass ich kein LCD hab zum testen, (Ich habe nur 1-zeiliges LCD)
    Gruß Raid

    Der ^^ Mann

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    hmm... naja ich vermute da wird sich jemand finden.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hi,

    sieht gut aus. Der Test funktioniert auch mit der 2. Zeile korrekt. Ein längerer String wird beim 2 zeiligen Display bis zum 40. Zeichen einfach abgeschnitten. Ab dem 41. Zeichen taucht der restliche String in der 2. Zeile auf.

    Folgende Änderungen habe ich an der Lib für das DOGM162 gemacht.
    Code:
    #define LCD_LINES	2				// Total LCD Lines
    
    #define LRS			6
    #define LRW		       5
    #define LEN			4
    
    void InitLCD(void)
    {
    	SetIOLCD( PORTL & ~LCD_EN );				// Start LCD Control, EN=0
    	Msleep(1);						// Wait LCD Ready
    	
    	// Initialize LCD
    	CommandLCD( LCD_8BIT | (LCD_8BIT >> 4) );
    	CommandLCD( LCD_8BIT | (LCD_4BIT >> 4) );
    //==== spezielle Initialisierung fuer DOGM162,  5V===	
    	CommandLCD( 0x29 ); // LCD_4BIT | LCD_2LINE | LCD_5X7| LCD_IS1 );		// Function Set. 4bit Mode, 2 Line LCD, 5x7, Instruction Table 1
    	CommandLCD( 0x1C ); // LCD_BIAS_1QUARTER   // Bias Set 1/4
    	CommandLCD( 0x52 ); //LCD_BOOSTER_OFF | LCD_CONTRAST_C5 | LCD_CONTRAST_C4 );		// Booster off, Contrast C4, C5
    	CommandLCD( 0x69 ); //LCD_FOLLOWER_ON | LCD_GAIN_RAB0 );	// Set Voltage follower on and Gain ratio 1 
    	CommandLCD( 0x74  ); //LCD_CONTRAST_C3 | LCD_CONTRAST_C2 | LCD_CONTRAST_C1 );		// Contrast Set C3, C2, C1
    //==============================================
    	CommandLCD( LCD_DISPLAYON );				// Display on/off Control (Entry Display,Cursor off,Cursor not Blink)
    	CommandLCD( LCD_INCREASE );				// Entry Mode Set (I/D=1 Increment,S=0 Cursor Shift)
    	CommandLCD( LCD_CLEAR );				// Clear Display
    	Msleep(2);			        		// Wait Initial Complete
    }
    Ich habe die Ports des PCF8574 etwas anders belegt.
    Die Initialisierungswerte habe ich aus dem Datenblatt als Hex Werte übernommen, Die Defines für die einzelnen Bits stehen in Klammern dahinter. Die Defines kann ich noch nachliefern.

  8. #8
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    verrate uns mal wie du die pins belegt hast. dann könnte man evtl eine dog-lcd-lib draus machen.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    34
    Beiträge
    184
    @dalmator:

    Also, wie gesagt ist die Pinbelegung egal.

    Code:
    ////// PCF8574p PINS
    
    #define LD4			0				// Pin to Data Bus 4
    #define LD5			1				// Pin to Data Bus 5
    #define LD6			2				// Pin to Data Bus 6
    #define LD7			3				// Pin to Data Bus 7
    
    #define LRS			4				// Pin to RS Pin (Register Select)
    #define LRW			5				// Pin to Read/Write Pin
    #define LEN			7				// Pin to Enable Pin
    Gruß Raid

    Der ^^ Mann

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    34
    Beiträge
    184
    @m.a.r.v.i.n: Was ist bei dir Pin15 und PIN16? vllt. könnte man noch die Backlight per software steuern
    Gruß Raid

    Der ^^ Mann

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen