-         

+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: I2Csend Problem

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.01.2006
    Beiträge
    31

    I2Csend Problem

    Anzeige

    Hallo Jungs,

    ich komme da echt nicht weiter.
    Ich spreche den PCF8574 über I2C als Ausgang an.
    Der PCF ist doch mit Latch am Ausgang, der sollte sich doch das Gesendete merken.
    Warum tut er das nicht?

    Mit Do Loop ist es keine Lösung. Nachdem ich mehrere (n) PCF's anspreche, steht da das Signal nur den n'ten Teil der Zeit an.

    Hier erst mal den Code:

    Code:
     $regfile = "m16def.dat"
     $framesize = 32
     $swstack = 32
     $hwstack = 32
     $crystal = 7372800
     $baud = 9600
    
    
       Config Scl = Portc.0                                     ' Ports fuer I2C-Bus
       Config Sda = Portc.1
       I2cinit
    
    
    
    'Daten über I2C an die Anzeigen senden
    'Do
       I2csend &B1001110 , &B01111111
       'I2csend &B1001100 , &B01111111
       'I2csend &B1001010 , &B01111111
       'I2csend &B1001000 , &B01111111
    'Loop
    
    End
    Vielen Dank

    Rici

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    27
    Beiträge
    1.461
    HI!

    Mach mal
    $framesize = 32 '64
    $swstack = 32 '50
    $hwstack = 32 '50
    alles größer...

    Wenn deine Adressen stimmen, sollte es schon so gehen, ich glaube nur, dass der prozzi sich verhaspelt, wenn du zu kleine Frames und Stacks hast, insbesondere, weil du einen SW-I²C benutzt.

    Wenn das nicht hilft, Adresse überprüfen (schreiben, lesen) und sonst mal mit i2cwbyte probieren.

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Seltsam. Wie hast du denn die Outputs vom PCF beschaltet ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    27
    Beiträge
    1.461
    Hi


    Hast du Pullups an SDA und SCL?

    Wenn alle (BASCOM-) Stricke reißen, kannst du immernoch den Hardware-TWI des M16 benutzen.
    Ist allerdings etwas komplexer anzusteuern.

    VLG TS
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    47
    Beiträge
    2.731
    Mahlzeit,
    Wenn man unter Bascom beim Master die Hardware benutzen will reicht es diese Zeilen einzufügen:

    Code:
    $lib "i2c_twi.lbx"                             ' we do not use software emulated I2C but the TWI
    ' und
    Config Twi = 100000                            ' wanted clock frequency
    die anderen Configs kann man dann weglassen, denn die Pins sind da ja festgelegt.

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Versuch auch mal
    I2Cwbyte 'adresse'
    if err = 0 then I2Cwbyte daten

    Ob der PCF sich überhaupt angesprochen fühlt

    bzw. bei der HW-TWI: if TWSR = &H18 ( adresse acked)
    und nacher if TWSR = &H28 ( data acked)
    Insbesondes das Soft-"I2csend" von Bascom ist etwas schlampig mit den Ack's und nack's
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    07.01.2006
    Beiträge
    31
    Hallo,

    ich verstehe es wirklich nicht mehr.
    Ich versuche es jetzt mit HW-TWI

    Code:
     $regfile = "m16def.dat"
     $framesize = 64
     $swstack = 50
     $hwstack = 50
     $crystal = 7372800
     $baud = 9600
    
    
    'Config Scl = Portc.0                                        'Ports fuer IIC-Bus MEGA16 bei Software I2C
    'Config Sda = Portc.1                                        'Ports fuer IIC-Bus MEGA16 bei Software I2C
    
    
    $LIB "I2C_TWI.LBX"
    CONFIG TWI = 100000
    
    I2cinit
    I2cstart
    
    
    
    
    'Waitms 1000
    
    
    'Daten über I2C an die Anzeigen senden
    'Do
       I2csend &B1001110 , &B01111111
       'I2csend &B1001100 , &B01111111
       'I2csend &B1001010 , &B01111111
       'I2csend &B1001000 , &B01111111
    'Loop
    
    End
    Die PCF's werden angesprochen. Wenn ich alles über die DO-LOOP Schleife laufen lasse, so funktioniert es. Ich möchte aber die Ausgänge der der PCF setzen und danach mit dem Programm weitermachen. Die sind doch latched. Warum geht das nicht. Ohne die Schleife werden die Ausgänge kurz auf 1 gesetzt und danach sind sie wieder auf 0.
    Die Hardware ist folgendermaßen: nach dem PCF liegt ein ULN2003, danach ein einige LED's in Reihe, und letztendlich ein Vorwiderstand, alles auf +15V. Das sollte doch OK sein. Die Pullups an SDA und SCL sind eingebaut.
    Meine Bascom Version ist: 1.11.8.1

    Habt Ihr noch irgend eine Idee???

    Viele Grüße

    Richard[/code]

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    47
    Beiträge
    2.731
    Lass' mal das I2Cstart weg, das braucht man bei I2CSend nicht !
    I2CInit reicht, und dann nur noch mit I2Csend die Bytes senden.

    Mit "Print Err" kannst Du einen Fehlerstatus am Terminal ausgeben.
    Sollte 0 sein wenns geklappt hat.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    07.01.2006
    Beiträge
    31
    Hallo,

    scheinbar habe ich doch ein HW Problem.
    Habe nun einige Beispiele aus dem Internet durchgetestet. Es ist immer so: Der Ausgang wird gesetzt, in kurzer Zeit aber wieder zurückgesetzt. Selbst das Beispiel von der Roboterseite "I2C Relaisplatine RNREL 1.0" funktioniert nicht. Ich verwende den PCF8574P. Habt Ihr noch eine Idee wo ich suchen sollte? Die Relais (hier LED's blinken nur ganz kurz auf, also nicht wie im Programm angegeben 2 Sekunden).

    Code:
     $regfile = "m16def.dat"
     $framesize = 64
     $swstack = 50
     $hwstack = 50
     $crystal = 7372800
     $baud = 9600
    
    Declare Sub Rnb_relaisschalten(byval Relaisnr As Byte , Byval Status As Byte)
    
    'Const Relaisport_adr = &H76                                 'I2C Adr PCF 2
    
    Const Relaisport_adr = &B1001110
    Dim Relaisstatus As Byte
    Dim I As Byte
    
    Config Scl = Portc.0                                        'Ports fuer IIC-Bus
    Config Sda = Portc.1
    
    
    I2cinit
    Wiederhole:
    For I = 0 To 7
    Call Rnb_relaisschalten(i , 1)                              'Relais i so anziehen
    
    Wait 2                                                      'Warte 2 Sekundne
    Call Rnb_relaisschalten(i , 0)                              'Relais i soll abfallen
    Wait 2                                                      'Warte 2 Sekundne
    Next I
    Goto Wiederhole
    
    'Die Hilfsfunktion erleichtert das ein und Ausschalten bestimmter Relais
    'Variable: Relaisnr ( 0 bis 7) steht für ein bestimmtes Relais
    'Variable: status (1 oder 0) schaltet Relais ein oder aus
    'Bei Status 1 wird die entsprechende Relais anziehen, bei 0 abfallen
    
    
    Sub Rnb_relaisschalten(byval Relaisnr As Byte , Byval Status As Byte)
    Relaisstatus.relaisnr = Status
    
    I2cstart
    I2cwbyte Relaisport_adr                                     'Schreibbefehl an PCF schicken
    I2cwbyte Relaisstatus                                       'Datenbyte an PCF
    I2cstop
    End Sub
    End
    Viele Grüße

    Richard
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltplan_807.jpg  

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    47
    Beiträge
    2.731
    Also bei mir geht das,
    getestet mir einem RN-Control (M32, 16MHz)

    Ich hab allerdings nur 4 LEDs dran, aber die laufen schön der Reihe nach durch.
    http://www.roboternetz.de/wissen/ind...RN-Control.jpg

    Edit:
    was hast Du an Hardware sonst so zusammengebaut ?

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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