-         

Ergebnis 1 bis 5 von 5

Thema: Problem mit i2c (c)

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9

    Problem mit i2c (c)

    Anzeige

    Hallo,
    Leider habe ich mal wieder ein Problem
    Es geht darum, dass ich für meinen Roboter die Lichtsensor Werte über einen LCD ausgeben lassen will.
    Dieses hängt an einem Atmega16, der eigentliche Controller(atmega32) hatte nicht mehr genügend pins frei.
    Zum wollte ich wie im RN-Wissen beschrieben den I2C benutzen und dann auf dem LCD statt übert UART ausgeben lassen.
    Der Atmega32 hat von mir einen 8Mhz Quarz bekommen, den Atmega16 habe ich über die Fusebits auf den Internen RC-Oscillator 8Mhz gestellt.
    Allerdings funktioniert das ganze nicht, das LCD zeigt immer nur den anfangs initialisierten Wert für i2cdata an.
    Ideen?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Hallo,
    elektrisch hast du alles richtig angeschlossen, oder? Also wichtig ist vor allem, dass beide Controller dieselbe Masse als Bezugspunkt haben.
    Welchen Widerstandswert haben denn deine Pull-up-Widerstände, welche Geschwindigkeit (SCL Frequenz) hast du für den Bus gewählt?
    Gut wär's wenn du noch wichtigsten Programmabschnitte zeigst, sonst fischt man zu lange im Trüben...
    Grüße, Bernhard

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    Ja, ich denke schon das ich alles richtig angeschlossen habe.
    Die beider controller haben die selbe Spannungsversorgung, also auch Masse.
    Als Pull-Up habe ich zwei 5,6 kOhm Widerstände gewählt.
    Als Code für den Slave mit dem LCD habe ich:
    Code:
    #define SLAVE_ADRESSE 0x50
    
    
    void lcd_puti( const int val )
    {
        lcd_clrscr();
        char buffer[8];
        lcd_puts( itoa(val, buffer, 10) );
    
    }
    
    
    int main(void)
    {
        init_twi_slave(SLAVE_ADRESSE);
        for(uint8_t i=0;i<i2c_buffer_size;i++)
        {
            i2cdata[i]=10+i;
        }
        lcd_init(LCD_DISP_ON);
        _delay_ms(500);
        lcd_puti(i2cdata[5]);
    }
    natürlich mit includes
    und als code für den master:
    Code:
          i2c_init();
        if(!(i2c_start(SLAVE_ADRESSE+I2C_WRITE))) 
        {
              i2c_write(0x00);
              i2c_write(30);
              i2c_stop();
        }
        else
        {
          PORTB |= (1<<PB0);
        }
    Hier praktisch direkt von RN-Wissen übernommen.
    Für Testzwcke habe ich den Code noch nicht wirklich verändert.
    Die LED an B0 geht immer an.

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Hallo,
    wenn ich das richtig nachvollzogen habe, dann wird hier:
    Code:
    i2c_init();
    if(!(i2c_start(SLAVE_ADRESSE+I2C_WRITE))) 
    {
     i2c_write(0x00);
     i2c_write(30);
     i2c_stop();
    nur das "nullte" Byte des Arrays auf 30 gesetzt.
    Du liest aber mit
    Code:
    lcd_puti(i2cdata[5]);
    das 5. Byte aus, welches ja nicht vom Master verändert wurde.
    Könnte das vielleicht die Ursache sein?
    Grüße,
    Bernhard

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    Nein, ich hatte das ganze auch schon mit 0 getestet.
    Der Wert stimmt auch dann nicht. Außerdem leuchtet ja die LED, was anzeigt, dass der Master gar nicht schreiben konnte.

Ähnliche Themen

  1. ATMega32 UART problem --> Problem gelöst
    Von ChristophB im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 12.03.2010, 19:45
  2. Problem mit Atmega644P Erkennung (Bascom-Versions-Problem)
    Von Rohbotiker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 11.08.2008, 19:52

Berechtigungen

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