-         

Ergebnis 1 bis 4 von 4

Thema: Controller Reset durch I2C-Übertragung

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

    Controller Reset durch I2C-Übertragung

    Anzeige

    Hi,

    ich bin gerade dabei, einen ATMega328p als I2C-Slave zu benutzen. Als Master fungiert ein ATXMega32A4. Als Levelshifter verwende ich zwei BSS138 (Mosfet) mit den passenden Wiederständen ( http://playground.arduino.cc/Main/I2...alLevelShifter ). Jedesmal wenn ich vom Master (ATXMega32A4) etwas sende, springt der ATMega328P an den Anfang, zumindest wird immer wieder "Start" geprintet... Aber ich habe keine Ahnung warum.

    Der Master:

    Code:
    $regfile = "xm32a4def.dat"
    $crystal = 32000000
    $framesize = 150                                            '100
    $swstack = 150                                              '100
    $hwstack = 150                                              '100
    
    
    $lib "xmega.lib"
    $external _xmegafix_clear
    $external _xmegafix_rol_r1014
    
    
    Config Osc = Disabled , 32mhzosc = Enabled
    Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
    
    
    
    '--UART Settings--
    Config Com2 = 115200 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
    Open "COM2:" For Binary As #1
    
    
    
    '--TWI Settings--
    Dim Twi_start As Byte
    Open "twie" For Binary As #2
    Config Twie = 400000
    I2cinit #2
    
    
    
    Const Height_write = &H70
    Const Height_read = &H71
    
    Dim Adc_val As Word
    Dim Adc_ovl(2) As Byte At Adc_val Overlay
    
    
    
    
    
    Do
    
    
       I2cstart #2
       I2cwbyte Height_write , #2
       I2cwbyte 137 , #2
       I2cstop #2
    
       Waitms 100
    
    
    Loop
    
    End
    Der Slave:

    Code:
    $regfile = "m328pdef.dat"
    $crystal = 8000000
    $framesize = 150
    $hwstack = 150
    $swstack = 150
    $baud = 19200
    
    
    
    $lib "i2c_twi-slave.lbx"
    Config Twislave = &H70 , Btr = 2 , Bitrate = 400000
    Config Sda = Portc.4
    Config Scl = Portc.5
    I2cinit
    
    
    Config Adc = Single , Prescaler = Auto , Reference = Aref
    Start Adc
    
    
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Pinc.0 = Input
    
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear_up , Compare B Pwm = Clear_up , Prescale = 1
    Pwm1a = 183
    Pwm1b = 183
    
    
    
    Portc.0 = 0
    
    
    
    Dim Adcval As Word
    Dim I2c_ovl(2) As Byte At Adcval Overlay
    
    
    
    Print "Start"
    
    
    Enable Interrupts
    
    
    
    
    Do
    
    
       Adcval = Getadc(0)
    
    
    Loop
    
    End
    
    
    Twi_read_addressed:
       Twi = 0                                                  'Twi = I2c_ovl(twi_btr)
    Return
    
    Twi_master_needs_more_byte:
       Twi = 0                                                  'Twi = I2c_ovl(twi_btr)
    Return
    
    
    Twi_slave_error:
    Return
    
    Twi_write_addressed:
    Return
    
    Twi_gotdata:
       Print "TWI = " ; Twi
    Return
    
    Twi_stop_rstart_received:
    Return
    
    Twi_master_need_nomore_byte:
    Return
    Wenn jemand davon Ahnung hat, bitte melden

    Vielen Dank & Gruß
    Chris

    EDIT:
    Mir ist gerade aufgefallen, dass ich wohl leider einen Fehler in der Hardware habe... Wenn die beiden µCs verbunden sind, werden die SCL & SDA Leitungen dauerhaft auf Low gezogen... Das ist jetzt wohl eher ein Thread für die Elektronik Abteilung, Sorry!
    Geändert von Che Guevara (13.01.2013 um 15:42 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545
    Hi,

    also es hat sich herausgestellt, dass es wohl doch ein Softwareproblem ist!
    Wenn ich im Slave die Zeilen auskommentiere:
    Code:
    $lib "i2c_twi-slave.lbx"
    Config Twislave = &H70 , Btr = 2 , Bitrate = 400000 
    Config Sda = Portc.4
    Config Scl = Portc.5
    I2cinit
    dann funktioniert der Levelshifter! Aber warum? Kennt sich jemand damit aus?

    Gruß
    Chris

    EDIT:
    Ok, also die Pegel gehen nur auf 0V, wenn was gesendet wird... Könnte es evtl. sein, dass die Größenordnung der Pullups falsch ist (3k3)?
    Geändert von Che Guevara (13.01.2013 um 20:42 Uhr)

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Hey,

    für 3,3V verwendet man glaube ich 1,8kOhm (zumindest beim Pi).
    Aber ich glaube nicht das dies der Fehler ist. Sicher das die FETs funktionieren?
    Geändert von Kampi (13.01.2013 um 23:54 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545
    Hi,

    also die Pullups ansich funktionieren, weil der MPU6000 schon lange erfolgreich läuft
    Die Mosfets sind nagelneu eingelötet, ohne zu heiß zu werden. Und wenn nichts auf dem Bus los ist, funktioniert der Konverter ja....

    Gruß
    Chris

Ähnliche Themen

  1. 89c51cc03, Flip, Controller läuft nicht nach RESET
    Von ktkeili im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 31.01.2009, 17:27
  2. ungewollter reset durch/bei zuschalten von pwm
    Von madcyborg im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 23.01.2008, 19:19
  3. AVR-Reset durch Software möglich?
    Von robotxy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 16.05.2006, 20:21
  4. Reset am Atmel Controller, brauche Hilfe!
    Von Stanlee im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 27.03.2006, 19:00
  5. daten übertragung von lpt zu µ-controller
    Von FJK im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 6
    Letzter Beitrag: 08.02.2005, 11:22

Berechtigungen

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