-
        

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

Thema: Problem mit I2CSlave.lib

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2005
    Beiträge
    15

    Problem mit I2CSlave.lib

    Anzeige

    Hallo alle Zusammen,

    Nachdem ich nun schon seit ein paar Tagen dieses Forum nach einer Lösung durchforste, diese aber nicht finde muß ich hier meine Frage
    loswerden:

    Mein Master ist ein Mega128, mit dem habe ich eigentlich kein Problem,
    dieser sendet brav seine I2C Kommandos wie ich mit dem Oszi sehen
    kann.
    Der Slave ist das Problem, ich hab die Slave Library von MCS gekauft,
    und auf einen Tiny13 ein Programm geschrieben, wenn ich das Programm
    auf dem Master starte funktioniert der erste Slave einmal, danach sind alle Slaves tot, der I2C-Bus aber nicht, der sendet brav weiter, wie oben schon erwähnt. Der Slave muß auch nur Daten empfangen, also keine zurück senden.
    Nun ein paar Code Schnipsel:

    Master:
    Code:
    $regfile = "M128def.dat"
    $crystal = 2000000
    $lib "i2c_twi.lbx"
    Config Scl = Portd.0
    Config Sda = Portd.1
    Config Twi = 4000
    
    I2cinit
    
    
    Ddra = &B0000000
    Porta = &B11111111
    Ddrf = &B11111111
    
    Dim Poweron As Bit
    Dim S As Byte
    
    Declare Sub An
    Declare Sub Prg1
    
    
    Do
    
    Debounce Pina.0 , 0 , An , Sub
    Debounce Pina.1 , 0 , Prg1 , Sub
    
    Loop
    
    An:
    
       Toggle Poweron
       If Poweron = 1 Then
       Portf.0 = 1
       Else
       Portf.0 = 0
       End If
       Return
    
    Prg1:
       If Poweron = 1 Then
       Portf.1 = 1
       S = 5
       Waitms 2
       I2cstart
       Waitms 20
       I2cwbyte &H0A     'Motor1
       Waitms 20
       I2cwbyte S
       Waitms 20
       I2cstop
       Waitms 12000
       I2cstart
       Waitms 20
       I2cwbyte &H0E   'Motor3
       Waitms 20
       I2cwbyte S
       Waitms 20
       I2cstop
       Waitms 12000
       Goto Prg1
       Else
       Portf.1 = 0
       Return
       End If
    
    End
    Slave1:
    Code:
    $regfile = "attiny13.dat"
    $crystal = 9600000
    
    Config Pinb.3 = Output
    Config Pinb.4 = Input
    Config I2cslave = &B00001010 , Int = Int0 , Timer = Timer0
    
    
    Dim Bfake As Byte
    Declare Sub Stop1
    
    
    Do
    
             If Bfake = 5 Then
             Portb.3 = 1
             Waitms 3000
             Goto Stop1
             Else
             Loop
             End If
    
    
    Stop1:
    
            If Pinb.4 = 1 Then
            Goto Stop1
            Else
            Waitms 50
            Portb.3 = 0
            Bfake = 0
            End If
            Return
    
    
    I2c_master_has_data:
             Waitms 10
             Bfake = _a1
             Return
    bitte Code-Tags verwenden (PicNick)

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Code:
    Prg1: 
       If Poweron = 1 Then 
    ....
            Goto Prg1 
       Else 
            Portf.1 = 0 
            Return 
       End If
    Wie kommt das (master)Programm jemals aus "prg1" wieder raus ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2005
    Beiträge
    15
    Hallo PicNick,

    Danke für den Hinweis mit den Codetags, hab ich übersehen.
    Nun zu meinem Problem.
    Der Master kommt aus PRG1 raus indem ich ihn ausschalt.
    Spaß beiseite, das Masterprogramm dient nur zum Test des I2C-Bus,
    und der funktioniert nicht auf der Slave Seite.

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ahja. "auto-iterativ" nennen das die Fachleute.

    Aber nochwas beim Slave is sub-optimal
    Goto Stop1
    Stop1:
    Return
    Das soll sicher "GOSUB Stop1" heissen, sonst rappelt's in der Kiste
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2005
    Beiträge
    15
    Hallo Robert,

    Hab alle goto's durch gosub's ersetzt,
    leider ist alles beim alten.
    Ich muß noch dazu sagen das ich die waitms ganz weggelassen hab,
    auf 2 reduziert hab usw. hat aber leider auch nichts verändert.

    Mfg
    Ottmar

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Würd mal sagen, die Slaves hängen sich irgendwie auf.
    Du solltest beim master nach dem adresse-schicken
    I2cwbyte &H0A 'Motor1
    abfragen, ob ERR = 1 , d.h ob der Slave geACKed hat oder nicht.
    (wenn nicht, brauchst du nicht weiterzusenden)

    Ich muß mich über die I2CSlave -Lib erstmal ein wenig schlau machen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2005
    Beiträge
    15
    Hab nun einfach folgende Codezeile nach jeder
    Adressierung eingesetzt:
    Code:
    Portf.2 = Err                        'Kontroll LED an PortF.2
    Der erste Slave verrichtet brav seine Arbeit,
    sobald an den Zweiten adressiert wird leuchtet die "ERR-LED".
    Also hat Robert recht, nur was jetzt?
    Die Adressen des zweiten Slaves hab ich schon mehrfach verändert,
    und ihn natürlich auch schon als ersten gesetzt, dann funktioniert er,
    liegt also nicht an der Hardware.
    Danke schonmal fürs weiterhelfen.

    MfG
    Ottmar

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2005
    Beiträge
    15
    Ich muß noch eine Entdeckung dazu schreiben:

    Wenn ich das Masterprogramm umschreibe, so daß nur noch ein
    Slave angesprochen wird und nur noch der angeschloßen ist, funktioniert alles.
    Kann es sein, das der zweite die Fehladressierung irgendwie
    falsch auslegt?

    MfG
    Ottmar

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    64
    Beiträge
    277
    Hallo Ottmar,

    Zitat Zitat von Otti66
    Ich muß noch eine Entdeckung dazu schreiben:
    Wenn ich das Masterprogramm umschreibe, so daß nur noch ein
    Slave angesprochen wird und nur noch der angeschloßen ist, funktioniert alles.
    Kann es sein, das der zweite die Fehladressierung irgendwie
    falsch auslegt?
    ich versuche mal zusammenzufassen was ich bisher verstanden habe:

    Du sprichst mit dem Mega 128 zwei Tiny13 als Slave an.

    Tiny13 - 1 hat Adresse &h0A
    Tiny13 - 2 hat Adresse &h0E

    Sobald Du beide Slaves ansprichst, hängt sich das Programm auf.

    In Deinem Slaveprogrammen kann ich keinen Fehler entdecken. Master tut es ja prinzipiell offensichtlich nun auch.

    Mir fällt unter den gegebenen Umständen nur noch ein, daß bei zwei angeschlossenen Slaves die Spannungen bzw. deren Flanken nicht mehr sauber sind. Also ein Hardwareproblem. Das hatte ich bisweilen auch schon. Wenn ich die bei mir standardmäßig auf 10kOhm ausgelegten Pullups auf 4,7kOhm verringere oder am Busende einfach noch mal 10k pulle (kommt auf das selbe heraus), ist der Spuk dann vorbei.

    Leider stochere ich im Nebel, gerade bei solchen Sachen müsste man die Hardware vor sich haben, um zielstrebig weiter zu helfen. Tiny13 habe ich im Augenblick nicht da .

    Grüße
    Henrik

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    14.10.2005
    Beiträge
    15
    Hallo Hendrik,

    Danke für deine Tips. Du hast das ganze in soweit richtig verstanden,
    außer das der erste Slave richtig funktioniert und der nächste dann nicht mehr.
    Als Pullups hab ich mittlerweile interne, zweimal 10k, einmal10k probiert,
    werde aber morgen auf 5k und 2,5k runter gehn.
    OK, ich gebs zu, die Hardware "was made quick and dirty" aber die Pegel sehen auf dem Speicher Oszi direkt am Pin super aus.
    Den Tiny13 hat mir Mark Albers erst vor kurzem in BascomAVR I2CSlave implementiert, da ja Int0 und Tmr0 die gleichen Pins sind wie bei den anderen Tiny's.
    Im Moment glaube (ich weiß, daß tut man in der Kirche) das, daß ganze
    nur mit einem Software Slave funktioniert, sobald einer fehladressiert ist hängt er sich auf.
    Muß da mal bei Marc Albers nachfragen.
    Trotzdem Danke für deine Hilfe.

    MfG
    Ottmar

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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