-         

Ergebnis 1 bis 5 von 5

Thema: LCD und I2C

  1. #1

    LCD und I2C

    Anzeige

    Hallo
    Versuche das Display von Pollin mit dem I2C Adapter in Betrieb zu nehmen. Habe bisher den folgenden Code:

    Code:
    #define F_CPU 16000000UL
    #include "i2cmaster.h"
    #include <util/delay.h>
    #include "lcd.h"
    
    #include "i2clcd.h"
    
    #define LCD_I2C_ADDRESS    0x40		// Adresse I2C
    
    #define ENABLE_MASK      0b01000000
    #define DISABLE_MASK    0b10111111
    #define COMMAND_MASK    0b00000000
    #define DATA_MASK      0b00100000
    
    #define INIT_4BIT_MODE    0b00000010
    
    void write_to_pcf8574(char data)
    {
    	i2c_write(data);
    	_delay_us(40);
    	i2c_write(data | ENABLE_MASK);
    	_delay_us(40);
    	i2c_write(data & DISABLE_MASK);
    	_delay_us(40);
    }
    
    void write_byte(char data, char mask)
    {
    	//write the high nibble first...
    	char nibble = mask | ((data & 0xF0) >> 4);
    	write_to_pcf8574(nibble);
    	
    	//...then the low nibble
    	nibble = mask | (data & 0x0F);
    	write_to_pcf8574(nibble);
    }
    
    void write_command(char data)
    {
    	write_byte(data, COMMAND_MASK);
    }
    
    void write_data(char data)
    {
    	write_byte(data, DATA_MASK);
    }
    
    void write_string(char string)
    {
    	while (string)
    	{
    		write_data(string);
    		string++;
    	}
    }
    
    void init_display()
    {
    	//turn on 4 bit mode
    	write_to_pcf8574(INIT_4BIT_MODE);
    	write_command(0x28);
    	_delay_ms(50);
    	write_command(0x0c);
    	_delay_ms(50);
    	write_command(0x06);
    	_delay_ms(50);
    	write_command(0x01);
    	_delay_ms(50);
    	write_command(0x0f);
    	_delay_ms(50);
    }
    
    int main()
    {
    	lcd_init();
    	i2c_init();
    	i2c_start_wait(LCD_I2C_ADDRESS + I2C_WRITE);
    	write_string("Hello World");
    	i2c_stop();
    	return 0;
    }
    Arbeite mit einem ATmega 32, 16 MHz, AVR Studio 6, PCF8574 Adresse 0x40. Die Datein habe ich eingebunden
    Bekomme die folgenden Fehlermeldungen. Leider konnte ich diese nicht zuordnen:

    Warning 2 declared here
    Warning 4 expected 'char' but argument is of type 'char *'
    Warning 3 passing argument 1 of 'write_string' makes integer from pointer without a cast [enabled by default]
    Error 1 too few arguments to function 'lcd_init'
    Geändert von radbruch (23.03.2014 um 19:14 Uhr) Grund: Code-Tag eingefügt...

  2. #2
    Hallo
    hat keiner eine Idee was ich falsch mache?
    Hat vielleicht jemand ein Stück Code was geht? So als Hinweis.
    Paul

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Hi,

    mit Warning 2 kann ich so nichts anfangen - da müsste man schon die Zeile kennen, auf die sich die Warning bezieht.

    Warning 3 und 4 beziehen sich beide auf die Funktion write_string(), die so nicht funktionieren kann.
    Richtigerweise müsste die so aussehen:

    Code:
    void write_string(char* string)
    {
          while (*string)     
         {
              write_data(*string);
              string++;
         }
    }
    Du solltest Dich vielleicht mal ein bißchen mit dem Thema Pointer auseinandersetzen.
    Ist am Amnfang nicht so einfach da durchzublicken - aber wenn man's verstanden hat, ist's ungeheuer nützlich!

    Zu Fehler 1:
    Du rufst die Funktion lcd_init() ohne Argumente auf.
    Die Funktion erwartet aber mindestens 1 Argument.
    Wieviele genau und welche kann ich nicht sagen, da ich die Definition der Funktion nicht kenne.

    Gruß,
    askazo
    - Das Leben ist zu kurz, um in C zu programmieren -

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    SA
    Alter
    64
    Beiträge
    211
    Hallo Paulchen 999 ,

    Programmiere zwar nur noch in Bascom AVR und habe damit schon viele Beispiele im Forum abgestellt. I2C bis zum „abwinken“.
    Das aller wichtigste ist immer die Abfrage meldet sich der Busteilnehmer. Habe in meinen Code eine sehr zuverlässige Abfrage integriert.

    Wenn ja bist du dich sicher die Hardware ist OK.
    Es könnte sein dein IC ist nicht ein A sondern ein AP Typ. Somit 0x40 durch 0x70 ersetzen. Vorausgesetzt du hast alle Adr-Bin auf GND gelegt.
    Gruß
    fredred

  5. #5
    Hallo fredred
    bin mir zwar sicher das ich es gemacht habe, werde es aber gleich kontrollieren. Die Adressen liegen alle auf GND.
    Paul

Ähnliche Themen

  1. Problem I2C mit Netduino und LCD Display (CP2401)
    Von Rudolf_P im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 0
    Letzter Beitrag: 23.03.2014, 10:51
  2. LCD an PCF8574 über I2C - 2*16 läuft / 4*20 LCD nicht?
    Von stfan1409 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 15.04.2012, 16:06
  3. I2C LCD und Keboard
    Von DEAF BOY im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 29.12.2010, 14:14
  4. 4 (2*3 und 2*2) 7er LCD Segmente per I2c betreiben ?
    Von lastyle im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 5
    Letzter Beitrag: 30.01.2010, 14:40
  5. I2C LCD und Strings
    Von UweMD im Forum Robby CCRP5
    Antworten: 9
    Letzter Beitrag: 02.10.2004, 21:49

Berechtigungen

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