-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Problem mit I2C (Adressierung???)

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    33
    Beiträge
    366

    Problem mit I2C (Adressierung???)

    Anzeige

    Hallo,
    hab gerade ein board mit 2 atmega8, 1 PCF8583 und einem ATMEL 24C256 Eprom fertiggestellt. die 4 komponenten sollen über den I2C bus miteinander kommunizieren, wobei einer der atmega8s der master ist.
    Wie schon gesagt, die hardware ist soweit fertig. Das große problem liegt in der software, ich hab keinen blassen schimmer, wie das mit der adressierung des PCF und dem eeprom funzt, und wie bring ich den einen atmega8 als slave und den anderen als master. hab von einem user dieses boards mal ein script bekommen für den PCF (siehe unten) aber irgendwie funktioniert das nicht. Vielleicht liegts ja an der adressierung. Wär echt nett wenn mir jemand helfen könnte meinen bus zum laufen zu breingen.


    gruß
    xeus
    $baud = 2400
    $regfile = "m8def.dat"
    $crystal = 1000000


    Config Sda = Portc.4
    Config Scl = Portc.5

    Dim I As Byte
    Config Lcdpin = Pin , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.6 , Rs = Portd.4 ' Natürlich so wie es wirklich angeschlossen ist (4-Bit-Modus)
    Dim A As Byte
    Config Lcd = 20 * 4


    Dim Ura As Byte , Minu As Byte , Sek As Byte , Dan As Byte
    Dim S As Byte , M As Byte , H As Byte , D As Byte , Weekdays As Byte
    Dim Wm As Byte , Yd As Byte
    Dim Wm1 As Byte

    Declare Sub Gettime()

    Do

    Call Gettime

    If Ura < 10 Then
    Locate 1 , 12
    Lcd "0"
    Locate 1 , 13
    Lcd Ura
    Else
    Locate 1 , 12
    Lcd Ura
    End If

    If Minu < 10 Then
    Locate 1 , 15
    Lcd "0"
    Locate 1 , 16
    Lcd Minu
    Else
    Locate 1 , 15
    Lcd Minu
    End If


    Loop

    Sub Gettime()

    I2cstart 'generate start
    I2cwbyte 160 'write addres of PCF8583
    I2cwbyte 2 'select second register
    I2cstart 'generate repeated start
    I2cwbyte 161 'write address for reading info
    I2crbyte S , Ack 'read seconds
    I2crbyte M , Ack 'read minutes
    I2crbyte H , Nack 'read hours
    ' I2crbyte Yd , Ack 'read year and days
    ' I2crbyte Wm , Nack 'read weekday and month
    I2cstop 'generate stop

    Ura = Makedec(h)
    Minu = Makedec(m)
    Sek = Makedec(s)

    End Sub

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Hab ich den I2Cinit übersehen ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    33
    Beiträge
    366
    oh ja der fehlt, werds gleich mal korigieren

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Die Sub Gettime ist völlig in Ordnung. Hast du an die pullup Wiederstände für SDA und SCL gedacht ?

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    33
    Beiträge
    366
    ja, kann gerade nur nicht testen, ob es funktioniert. Nachdem ich die fuses verändert hab, kann ich auf den mc nicht ehr zugreifen. enteder ich hab misstgebaut, oder der Programmer hat sich verabschiedet.

    sobald ich den fehler behoben hab versuch ich es nochmal.

    ps: hab 10 kohm pullups eingebaut.

    nochWas:
    Wie verhalt sich das eigentlich mit der hardWareseitigen adressierung des PCF und des eeproms? (A1 und A0)

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Jedes Gerät auf dem I2C Bus sollte einen eindeutige Adresse eingestellt haben. mfg

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    Hallo,
    der 24LC256 hat 3 Adresspins, sind alle auf GND ist die Adresse 160.
    Ist nur A0 auf +5V, ist die Adresse 162. Sind A0-A2 auf +5V, ist die Adresse 174. Somit lassen sich 8 IC's von diesem Typ auf dem selben I2C Bus betreiben.
    Der PCF8583 hat nur A0. Ist A0 auf GND, ist die Adresse ebenfalls 160.
    Bei A0 auf +5V, ist sie 162.
    Um beide auf einem Bus zu betreiben, musst du jedem eine eigene Adresse geben.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    33
    Beiträge
    366
    also die ansteuerung des pcf funzt. hab im datenblat nachgesehen und dort ist zu lesen, das er ein quarz braucht um richtig zu laufen, stimmt das?

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von albundy
    Registriert seit
    16.10.2004
    Beiträge
    282
    also die ansteuerung des pcf funzt. hab im datenblat nachgesehen und dort ist zu lesen, das er ein quarz braucht um richtig zu laufen, stimmt das?
    Nicht unbedingt, ein 50Hz Takt geht auch. Ich nehme an, man hat bei der Entwicklung daran gedacht, auch die Netzfrequenz als Takt nutzen zu können.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    33
    Beiträge
    366
    Also wenn ich das etz richtig deute, dann braauche ich sehr woll einen externen takt. aber ist der trimm kondensator wirklich notwendig?vorallem zum kalibriern müsste ich mich mit der stoppuhr daneben hinstellen.

    Ich hät noch eine klizekleine frage:
    ich hab auf dem bus neben dem clockbaustein noch von atmel den 24c256, hast du vielleicht irgend ein kleines Bascom prog, mit dem ich daten (kommen aus einem integer) in diesen baustein speichere. vielleicht noch was zum auslesen??

    wär echt nett,
    xeus

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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