-
        

+ Antworten
Ergebnis 1 bis 3 von 3

Thema: I2C Netzwerk

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    23
    Beiträge
    1.532

    I2C Netzwerk

    Anzeige

    Hallo,

    nach einiger Überlegungszeit möchte ich nun mit meiner FA anfangen. Dafür benötige ich ein I2C Netzwerk, da es versch. Module geben wird. Mein Hauptcontroller (M328P) ist bereits fertig aufgebaut auf einer kleinen Platine, als Slave dient derzeit noch ein RN-Control (M32). Diese möchte ich nun miteinander kommunizieren lassen, aber irgendwie habe ich einen Fehler in meinen Programmen:
    Master:
    Code:
    $regfile = "m328pdef.dat"
    $crystal = 16000000
    $framesize = 80
    $hwstack = 80
    $swstack = 80
    
    
    
    $lib "i2c_twi.lbx"
    Config Scl = Portc.5
    Config Sda = Portc.4
    Config Twi = 400000
    I2cinit
    
    
    
    Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
    Pwm0a = 0
    Pwm0b = 0
    
    Config Portd.5 = Output
    Config Portd.6 = Output
    
    
    Const Slave_write = &H70
    Const Slave_read = &H71
    Const Gen_call = &H00
    
    Dim B1 As Byte , B2 As Byte
    Dim Ar(3) As Byte
    Ar(1) = Asc( "h")
    Ar(2) = Asc( "a")
    
    
    
    Enable Interrupts
    
    
    
    Do
    
    
    I2csend Slave_write , Ar(1) , 2
    Waitms 500
    I2cstart
    I2cwbyte Slave_read
    I2crbyte B1 , Ack
    I2crbyte B2 , Nack
    I2cstop
    Pwm0a = B1
    Pwm0b = B2
    Waitms 500
    
    
    Loop
    
    End
    Slave:
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $framesize = 80
    $hwstack = 80
    $swstack = 80
    
    
    
    $lib "i2c_twi-slave.lbx"
    Config Twislave = &H70 , Btr = 2 , Bitrate = 400000 , Save = Save , Gencall = 1
    Config Sda = Portc.1
    Config Scl = Portc.0
    I2cinit
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
    Config Lcdbus = 4
    Initlcd
    Cls
    Cursor Off Noblink
    
    
    
    Config Portc.6 = Output
    Portc.6 = 0
    
    
    
    Dim Flag As Bit
    Dim I As Byte
    
    
    Locate 1 , 1
    Lcd "TEST"
    
    
    
    Enable Interrupts
    
    
    Do
    
    
    !nop
    
    
    Loop
    
    
    
    Twi_slave_error:
    
    Return
    
    
    Twi_write_addressed:
    Toggle Portc.6
    Return
    
    
    Twi_read_addressed:
    Toggle Portc.6
    Return
    
    
    Twi_stop_rstart_received:
    
    Return
    
    
    'this label is called when the master sends data and the slave has received the byte
    'the variable TWI holds the received value
    Twi_gotdata:
    
    Return
    
    
    'this label is called when the master receives data and needs a byte
    'the variable twi_btr is a byte variable that holds the index of the needed byte
    'so when sending multiple bytes from an array, twi_btr can be used for the index
    Twi_master_needs_more_byte:
    I = Rnd(255)
    Twi = I
    Locate 2 , 1
    Lcd Twi ; "  "
    Return
    
    
    'when the mast has all bytes received this label will be called
    Twi_master_need_nomore_byte:
    
    Return
    
    
    End
    Die Verkabelung sollte stimmen, da ich mit dem gleichen Setup schon mal eine Kommunikation hinbekommen habe, nur leider habe ich jetzt einen neuen PC und habe die Programme nicht mehr... Das Problem ist, eigentlich sollte bei JEDEM Zugriff des Masters auf den Slave die LED an Pc.6 getoggelt werden, aber nichteinmal das funktioniert.. Erkennt jemand einen Fehler?

    Vielen Dank & Gruß
    Chris

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    45
    Beiträge
    765
    Vor dem ersten Senden fehlt ein Start. Evtl ein Stopp noch vor dem nächsten Start. 500 ms sind eine recht lange Zeit. Aus welchen Gründen auch immer läuft bei mir Software I2C bei einem Pojekt besser als Hardware...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    23
    Beiträge
    1.532
    Ich denke nicht, dass vor i2csend ein Start nötig ist?! Ich habe es schon mal so gemacht und auch in der Hilfe wird kein Start- bzw. Stopbefehl verwendet in Verbindung mit i2csend.
    Die 500ms sind nur, damit man besser sehen kann, obs funktioniert.

    Gruß
    Chris

    EDIT:
    Tut mir leid, das jetzt sagen zu müssen, aber mein Code funktioniert! Ich hatte nur das Modul auf ein Steckbrett gesteckt und habe nicht überprüft, ob Kontakt besteht.... Das war der Fehler! Die SDA Leitungen waren nicht miteinander verbunden. Sry!
    Geändert von Che Guevara (08.09.2011 um 11:06 Uhr)

+ Antworten

Ähnliche Themen

  1. Netzwerk
    Von RobbyFan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 11.06.2010, 15:40
  2. Neurales Netzwerk
    Von einballimwas im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 19
    Letzter Beitrag: 05.03.2008, 19:17
  3. netzwerk
    Von dasfeld im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 16
    Letzter Beitrag: 08.12.2007, 15:37
  4. R2R Netzwerk
    Von Michael 123 im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 01.02.2006, 03:13
  5. rs 485 netzwerk max 490
    Von wolfi-25 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 01.09.2005, 21:48

Berechtigungen

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